UE – 多线程并行 For 循环

ParallelFor 是 UE 内置的支持多线程并行处理任务的 For 循环,在渲染系统中应用得相当普遍。

  • 调用方式 函数签名
void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread = false);
void ParallelFor(int32 Num, TFunctionRef<void(int32)> Body, EParallelForFlags Flags = EParallelForFlags::None);
void ParallelForTemplate(int32 Num, const FunctionType& Body, EParallelForFlags Flags = EParallelForFlags::None);
void ParallelForWithPreWork(int32 Num, TFunctionRef<void(int32)> Body, TFunctionRef<void()> CurrentThreadWorkToDoBeforeHelping, bool bForceSingleThread, bool bPumpRenderingThread = false);
void ParallelForWithPreWork(int32 Num, TFunctionRef<void(int32)> Body, TFunctionRef<void()> CurrentThreadWorkToDoBeforeHelping, EParallelForFlags Flags = EParallelForFlags::None);
  • 并行方式
enum class EParallelForFlags
{
    // 默认
    None,

    // 单线程模式 主要用于调试
    ForceSingleThread = 1,

    // 在线程中提供更好的任务分配 将花费更多的同步成本
    // 这应该用于耗时多变的计算任务
    Unbalanced = 2,

    // 渲染线程 如果是在渲染线程调用 需要保证 ProcessThread 处于空闲状态
    PumpRenderingThread = 4,

    // 任务应该在后台优先级的线程上运行
    BackgroundPriority = 8,
};
  • 使用方式
ParallelFor(/* 循环次数 */,
    [&](int32 Index)
    {
        // Code
    },
    /* 并行方式 */
);

发表评论