单线程是否可以使用多核或多CPU?

按道理是不行的,不过....

 

现在有的CPU可以通过对程序指令进行重排序来提高执行速度,然后由特殊硬件来保证程序执行的正确性。

 

比如:

不同CPU分别取同一个程序不同指令来执行,

并且也提供一个硬件来维持正确性,

同一个单线程程序就可以执行在多个CPU上。



但是指令是存在前后顺序和逻辑关系的,

比如一个运算要计算2*3+1,

如果没有执行完乘法是没有办法执行加法的。

这种是没办法执行在多个CPU上的。

 

现在倒是有CPU可以在单线程的时候自动超频,也就是趁着别的几个核心没有工作,

把自己当前繁忙的核心的频率提高。也算是对单线程程序的一种补救和兼容。

 

至于说重排序,那应该算是一种硬件代码优化,

也就是预读一部分队列内的指令,然后依据一定的算法,

一般是一个人为规定好的调换公式,将有限的几条指令进行重新排序,来优化。

 

但是这种重新排序还是单线程的,只是类似把2*3+3*4的三步运算依据运算定律简化为3*(2+4)这两步运行的一个过程。

实质上还是单线程,还是要先计算一步,再计算另一步。

 

现有硬件技术还没办法把一个单线程程序,自动改造为多线程来进行多核运算。

就像要计算1到100的和,如果程序写成单线程,那计算机只能从1一点一点加到100。

而如果写成多线程,计算机就可以把1到100分段,然后每个线程先计算自己那段的和,最后所有线程运行结束后,再把结果汇总。

这两种算法是截然不同的,计算机还没有这么智能,现阶段只能靠我们人类去优化和编写多线程代码。

posted on 2018-06-24 15:14  HB1  阅读(4373)  评论(0)    收藏  举报

导航