一个单线程程序是否可以被多个CPU同时执行?如果可以,程序的正确性如何保证?
1个回答
展开全部
不可以的,多核cpu必须配合多线程程序才能完全发挥效能。单线程的程序时常导致双核cpu占用50%,四核cpu占用25%的情况出现。
更多追问追答
追问
现在有的CPU可以通过对程序指令进行重排序来提高执行速度,然后由特殊硬件来保证程序执行的正确性,这样能提高处理器性能。 Intel CPU貌似是顺序一致的。
如果不同CPU分别取同一个程序不同指令来执行,并且也提供一个硬件来维持正确性,则多个CPU执行同一个单线程程序也是可能的啊!
追答
但是指令是存在前后顺序和逻辑关系的,比如一个运算要计算2*3+1,那如果需要拆解成一个cpu执行乘法一个cpu执行加法,那如何进行?如果没有执行完乘法是没有办法执行加法的。程序代码也一样,单线程就代表了指令只能以一个队列的形式进行依次处理,没办法并发。
现在倒是有CPU可以在单线程的时候自动超频,也就是趁着别的几个核心没有工作,把自己当前繁忙的核心的频率提高。也算是对单线程程序的一种补救和兼容。
至于你说的重排序,那应该算是一种硬件代码优化,也就是预读一部分队列内的指令,然后依据一定的算法,一般是一个人为规定好的调换公式,将有限的几条指令进行重新排序,来优化。但是这种重新排序还是单线程的,只是类似把2*3+3*4的三步运算依据运算定律简化为3*(2+4)这两步运行的一个过程。实质上还是单线程,还是要先计算一步,再计算另一步。
现有硬件技术还没办法把一个单线程程序,自动改造为多线程来进行多核运算。就像要计算1到100的和,如果程序写成单线程,那计算机只能从1一点一点加到100。而如果写成多线程,计算机就可以把1到100分段,然后每个线程先计算自己那段的和,最后所有线程运行结束后,再把结果汇总。这两种算法是截然不同的,计算机还没有这么智能,现阶段只能靠我们人类去优化和编写多线程代码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询