主题:【求助】:请教信息技术方面的大牛有关多线程的问题 -- newtime
共:💬51 🌺45
复 本质是一样的
当年学的也比较肤浅,这两年的职业发展也没沿着这个专业走下去。
解释一下,其实循环展开的主要目的,也是为了找到更多无依赖关系的指令,填充到访存质量等需多周期完成指令的gap,另外就是分支预测,我还是认为优化的核心问题是出在访存上。
缓存预取指令要用好,先要有合理的数据结构和算法。
你说的没错,访存的确是最费时间的指令,我记得连开方这种指令都足够快了,但是CPU永远比内存快太多。所以这个就是优化的重点。
优化的目标是增加并行度,instruction reordering,乱序执行,SSE这些东西,都是用软硬件的方法增加ILP。不过现在因为mobile computing热起来了,大家要让CPU凉下去,所以能耗成为优化里面的新因素,bit per watt要高,好多硬件的trick就不能用了,我记得intel atom里面就是放弃了大多数的乱序执行来节约能量,只在特定指令序列才进行乱序执行。
当年我做的一个simulation里面,如果用局部的乱序执行,可以以10%不到的性能损失,换回30%左右的能耗降低。
基本上取决于系统的实现方式。一般来说,多线程都在一个地址空间,可以少用系统支持,限制少,比较方便,但容易出bug。
为了省资源,所以要共享数据。要共享数据就要设定规则来同步数据的读写,一同步就效率低了。
其实还是进程简单点。