POPPUR爱换

标题: 怎样c ,fortran 编程才能提高cpu指令级并行程度? [打印本页]

作者: larrabee    时间: 2008-8-31 03:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 107162564    时间: 2008-8-31 07:37
太高深了,我只看看,我不说话
作者: Admstor    时间: 2008-8-31 12:03
这问题你不应该来GZ问...
作者: gaiban    时间: 2008-8-31 15:50
提高cpu指令级并行?
太高深了
充分利用CPU的多核芯多线程?
太深奥了
作者: netmask254    时间: 2008-8-31 15:57
尽量使用矢量或矩阵?{titter:]

因为Intel的CPU都有超级乱序功能(配合编译器的优化),所以你根本不必操心这个问题。换句话说,想了也是白想,除非你是直接用汇编语言而非这类高级语言。
作者: tedsun    时间: 2008-8-31 16:10
自己写编译器。。。。
作者: larrabee    时间: 2008-8-31 16:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: magicasper    时间: 2008-8-31 17:23
java可以写出多线程的东西来,但我不知道实际运行中是真的多线程还是仅仅是模拟多线程的方法
作者: tedsun    时间: 2008-8-31 23:41
原帖由 larrabee 于 2008-8-31 16:53 发表


我楼顶发贴时就在想有菜鸟说只有汇编才能影响cpu指令级并行,不幸而言中。

我很菜,你比我更菜。。。。看完那本“软件优化手册 --IA32平台高性能手册“ ,再来教导我吧。


所谓的软件优化,无非是针对某种或者某一类编译器来写代码,让编译器能够编译出高性能的机器码来而已。
最简单的例子就是
i++;   =>  得到的机器指令是 inc
i+1;   =>  得到的机器指令是 add
两者效率相差极大,虽然干的事情一模一样。

但是机器不是人,某些时候它就是死活出不来好的代码,所以才有嵌入汇编码这种事情发生。

所以,说到底,想要有好的机器码,你就要去研究编译器,无论是别人写的还是自己写的。
作者: tedsun    时间: 2008-8-31 23:45
原帖由 larrabee 于 2008-8-31 16:53 发表


我楼顶发贴时就在想有菜鸟说只有汇编才能影响cpu指令级并行,不幸而言中。

我很菜,你比我更菜。。。。看完那本“软件优化手册 --IA32平台高性能手册“ ,再来教导我吧。


你说错了,
只有汇编才能保证cpu 指令级的效率。

高级语言里,这样写或者那样写,实现的是同一个算法,但是完全可能带来极大的效率差异,这只能说明编译器比较
愚蠢,在你某种写法的时候不能识别出这个算法的并行性,从而效率低下。
作者: larrabee    时间: 2008-9-1 01:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: Prescott    时间: 2008-9-1 01:37
哎,这些要是能用几句话说清楚,那就好办了。
作者: Ricepig    时间: 2008-9-1 02:03
原帖由 netmask254 于 2008-8-31 15:57 发表
尽量使用矢量或矩阵?{titter:]

因为Intel的CPU都有超级乱序功能(配合编译器的优化),所以你根本不必操心这个问题。换句话说,想了也是白想,除非你是直接用汇编语言而非这类高级语言。

用汇编也控制不了超标量和乱序。
作者: larrabee    时间: 2008-9-1 02:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: Ricepig    时间: 2008-9-1 02:07
估计楼主是在找能被乱序和超标量流水线优化执行的最佳实践或指导方针吧
总的来说就是相关性不大,容易被预测(至少在不长的代码中)的程序,避免条件跳转(包括循环)。
当然这是理论上的,娃哈哈
作者: larrabee    时间: 2008-9-1 02:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: Ricepig    时间: 2008-9-1 03:10
原帖由 larrabee 于 2008-9-1 02:12 发表
是不是就是这样:
1)选择一个对simd支持更好的编译器,代码首先考虑对simd优化;
2)然后考虑 尽量减少simd指令之间的数据关联,
simd指令及其乱序执行效率 ,有点类似于openmp与mpi混合编程模型?

1)你可以使用Intel的SIMD数据类型以显式的SIMD化,这样比编译器的识别优化靠谱
2)这是对的,还要尽可能避免跳转
另外,乱序执行只是CPU内部的动态优化手段,实际上是个黑盒,我们只可能根据猜测去确定它如何执行,和openmp与mpi并不相似。




欢迎光临 POPPUR爱换 (https://we.poppur.com/) Powered by Discuz! X3.4