- 主题:万CM,程序计算速度提不上去,求教如何分析瓶颈在哪
自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
指定tbb只用单线程,开8个进程同时跑,也是35%左右。
我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
我怀疑是源码里memcpy/memmove用得过多,但就现在这计算速度估算了一下,内存吞吐2500MB/s,离内存瓶颈还远着吧?有什么工具能分析瓶颈在哪吗?
--
FROM 119.103.117.*
难道是amd cpu?
【 在 Akyrum (人類に栄光あれ) 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: ...................
--
FROM 119.132.58.*
传说中的 export MKL_DEBUG_CPU_TYPE=5 用了没?
【 在 Akyrum (人類に栄光あれ) 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: ...................
--
FROM 202.114.111.*
对的,r7 2700。
刚在e5 2680v2试了试,cpu占用率30~35%,也跑不开。
【 在 somebody 的大作中提到: 】
: 难道是amd cpu?
--
FROM 117.128.4.*
用了。
刚把这个去掉跑了跑,cpu占用60%+,现代cpu超过50可认为满载了吧。但是计算速度也降低了一半多
【 在 Quanm 的大作中提到: 】
: 传说中的 export MKL_DEBUG_CPU_TYPE=5 用了没? :
--
FROM 117.128.4.*
有句话不知当问不当问。。。
好像直接问代码有没有问题是对码农的大不敬。。。
【 在 Akyrum (人類に栄光あれ) 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: ...................
--
FROM 103.47.51.26
超线程关掉试试
【 在 Akyrum 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: 我怀疑是源码里memcpy/memmove用得过多,但就现在这计算速度估算了一下,内存吞吐2500MB/s,离内存瓶颈还远着吧?有什么工具能分析瓶颈在哪吗?
来自 MI 6
--
FROM 171.10.80.*
可能哪个步骤有互斥锁
【 在 Akyrum 的大作中提到: 】
: 对的,r7 2700。
: 刚在e5 2680v2试了试,cpu占用率30~35%,也跑不开。
--
FROM 183.40.204.*
我曾经调试过一个LDA的多核心版本,性能惨不忍睹,就是因为在每个cycle上都要使用内存拷贝将局部状态同步到全局状态,在做这件事的时候CPU只能傻傻地等,导致CPU利用率根本上不去。。。
为了提高性能,需要降低每个cycle所需要的通信数据,不过那就需要重新设计算法了,而且未必能设计出来。
【 在 Akyrum 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: ...................
--
修改:siegfried415 FROM 60.16.237.*
FROM 60.16.237.*
简单分析的话,可以找些工具插桩看看各函数的执行情况。
深度分析的话,先排除各类等待,并寻找瓶颈的大致位置,然后深入分析TLB和cache miss的情况。CPU占用上去后再考虑循环展开等编译优化
【 在 Akyrum 的大作中提到: 】
: 自己写的蒙特卡洛仿真程序,用了tbb和mkl,在8c16t的台式机cpu占用率只有35%左右(debug版本能开到95%+)。
: 指定tbb只用单线程,开8个进程同时跑,也是35%左右。
: 我确定代码里没用等待或锁,并且IO都放到了ramdisk里,运算速度上不去的原因会是什么呢?
: ...................
--
FROM 222.68.18.*