此示例code在四核处理器上将串行方法与线程方法进行了比较。该代码仅使用GetPixel()从4张图像中读取所有像素。 我发现加速度大概在65%左右,为什么它不等于75%,因为我有4个内核,并且它们都被充分利用了?在四核上使用线程加速代码65%?
PS:
可以检查代码,因为我没有做任何I/O,并没有其他进程在机器上工作(正常的Windows进程)
此示例code在四核处理器上将串行方法与线程方法进行了比较。该代码仅使用GetPixel()从4张图像中读取所有像素。 我发现加速度大概在65%左右,为什么它不等于75%,因为我有4个内核,并且它们都被充分利用了?在四核上使用线程加速代码65%?
PS:
可以检查代码,因为我没有做任何I/O,并没有其他进程在机器上工作(正常的Windows进程)
它可以是任何数量的东西。一个想到的夫妇
我确定没有其他进程正在使用处理器 – 2010-05-12 12:50:12
线程管理导致预期性能下降的可能性仍然很大。 – kemiller2002 2010-05-12 12:58:35
很可能它必须与某些数据结构或文件上的其他线程竞争,以免得到100%的并行执行。
例如,如果您要在四核上以4路并行方式运行网页下载网页类型的操作,并且服务器一次只允许同一个IP地址同时下载1次,你根本不会得到任何加速。
另外,还有一些与旋转线程和维护它们有关的开销,所以当你开始并行执行时,你不会得到完整核心的使用,尽管在这种情况下它很可能不是一个大的因素。
因为还有其他因素需要考虑。像内存和I/O带宽/争用,线程上下文切换开销等。
总体而言,我的并行编程经验,如果你得到的少65%流逝的时间,这是非常好。
线程有开销,并不是所有东西都能并行运行。
大量的RAM被触及,CPU将开始通过总线进行战斗。 – 2010-05-12 17:56:48