在n个内核的机器中确定要启动的线程数量的最佳方法是什么? (C ) - 代码日志

在n个内核的机器中确定要启动的线程数量的最佳方法是什么? (C )

我有一个向量< int>拥有10,000,000(1000万)个元素,我的工作站有四个内核。有一个称为ThrFunc的函数,以一个整数运算。假设向量< int>中的每个整数的ThrFunc的运行时间大致相同。

我应如何确定最佳的线程数?答案简单如元素数量除以核心数量吗?还是有更微妙的计算?

编辑提供额外的信息

>不需要阻塞;每个函数调用只需要只读
访问

线程的最佳数量可能是机器中的内核数量,或两倍的内核数量。

更抽象的是,您希望获得最高的吞吐量。获得最高吞吐量需要线程之间最少的竞争点(因为原始问题是平行可并行化的)。争用点的数量可能是共享内核的线程数量或两倍,因为核心可以运行一个或两个逻辑线程(两个具有超线程)。

如果您的工作负载使用少于四个可用的资源(Bulldozer?硬盘访问上的ALU),那么您应该创建的线程数将受到限制。

找出正确答案的最佳方法是,在所有硬件问题上,测试和查找。

http://stackoverflow.com/questions/8888834/what-is-the-best-way-to-determine-the-number-of-threads-to-fire-off-in-a-machine

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在n个内核的机器中确定要启动的线程数量的最佳方法是什么? (C )