首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 服务器 > 云计算 >

确认一下,单核处理器下,多线程的程序能提高计算速度吗?解决办法

2012-05-05 
确认一下,单核处理器下,多线程的程序能提高计算速度吗?我用一个1024*1024的矩阵计算程序测试了一下,多线程

确认一下,单核处理器下,多线程的程序能提高计算速度吗?
我用一个1024*1024的矩阵计算程序测试了一下,多线程的程序反而耗时更多(单核cpu)。而且我发现我的单线程程序运行时候,CPU占用几乎100%。所以很怀疑单核CPU下,多线程能否提高计算速度。

Java code
for(int i=0;i<1024;i++)for(int j=0;j<1024;j++)for(int t=0;t<1024;t++)c[i][j]+=a[i][t]*b[t][j];


[解决办法]
多线程实际上是把程序运行时切成很多时间片来执行,所以总的来说,运行时间是一样的
[解决办法]
还要稍稍低一点,因为多线程还有管理代价啊,我一般喜欢根据当前机机的内核数量 A,开启指定的线程,根据需要,有时开 A 条,有时开 A - 1 条(为用户保留一个核)
[解决办法]
是不是和示波器上的双踪差不多呢?
[解决办法]
你这个程序多线程肯定不能提高速度。
相反,因为线程调度,还会降低速度。

[解决办法]
对不同的求解问题,不同的算法,不同的实现方式,不同的人实现后的效率都会不同。但对于你的这种简单的问题肯定是单线程更快,毕竟少了线程间调度。而对复杂问题就需要考虑指令传输速度(核内,cpu与内存,内存与硬盘,核间,机器间等),并行效率(参考加速比),程序效率等诸多问题了。
[解决办法]
每个任务要比开线程消耗的代价大的多,就值得。
还有,并行和异步是开线程的特点,要考虑谁的结果会影响谁。


开发时候单核,部署的时候未必单核,所以程序该怎么写就怎么写。
[解决办法]
单核跑多线程没什么意义,缓存不能命中的话,只会让效率更低。像LZ这种矩阵乘法的计算,通过分治的话,确实可以把计算分解,然后在多个CPU上跑。

热点排行