使用逻辑线程的多线程编程
Multi-thread programming with logical threads
解释的多头编程理论是基于内核的数量,但现在的处理器逻辑内核多于物理内核。问题是,如果在具有 4 个物理内核和 8 个逻辑内核的处理器上实施良好的并行算法 运行,则加速将是 4 或 8 倍(最好的情况是不计算并行性和额外人员的成本) .
例如,您可以在下面看到图像过滤的结果,具有 4 个核心和 8 个线程 CPU。看起来上限是 4 倍加速,但在使用 8 线程的情况下,它似乎是其余加速中最好的
逻辑内核仅在您的代码受延迟限制 时才有用。当存在停顿(例如高速缓存未命中)或指令被大量顺序化(例如依赖除法的循环)时就是这种情况。在这种情况下,处理器可以真正在同一个物理内核(使用两个逻辑内核)上并行执行 2 个线程。一个相对较好的例子是朴素矩阵转置。逻辑内核对许多优化代码没有太大帮助,因为优化代码不会经常停顿,并且通常会暴露很多指令级并行性(例如,由于循环展开)。
当您测量加速时,通常与使用逻辑核心无关,除非您知道工作负载可以从中受益(那些固有的延迟限制)或者当处理器被设计为应该使用它们时(例如在 Xeon Phi 或 POWER 处理器上)。我希望逻辑内核对优化的图像过滤工作负载没有用。
请注意,逻辑核心往往会使基准测试结果更难理解。
解释的多头编程理论是基于内核的数量,但现在的处理器逻辑内核多于物理内核。问题是,如果在具有 4 个物理内核和 8 个逻辑内核的处理器上实施良好的并行算法 运行,则加速将是 4 或 8 倍(最好的情况是不计算并行性和额外人员的成本) .
例如,您可以在下面看到图像过滤的结果,具有 4 个核心和 8 个线程 CPU。看起来上限是 4 倍加速,但在使用 8 线程的情况下,它似乎是其余加速中最好的
逻辑内核仅在您的代码受延迟限制 时才有用。当存在停顿(例如高速缓存未命中)或指令被大量顺序化(例如依赖除法的循环)时就是这种情况。在这种情况下,处理器可以真正在同一个物理内核(使用两个逻辑内核)上并行执行 2 个线程。一个相对较好的例子是朴素矩阵转置。逻辑内核对许多优化代码没有太大帮助,因为优化代码不会经常停顿,并且通常会暴露很多指令级并行性(例如,由于循环展开)。
当您测量加速时,通常与使用逻辑核心无关,除非您知道工作负载可以从中受益(那些固有的延迟限制)或者当处理器被设计为应该使用它们时(例如在 Xeon Phi 或 POWER 处理器上)。我希望逻辑内核对优化的图像过滤工作负载没有用。
请注意,逻辑核心往往会使基准测试结果更难理解。