c*******v 发帖数: 2599 | 1 我自己寫有一個計算時間函數。
用
#include
struct timespec ts;
clock_gettime(1, &ts);
然後tv_nsec,tv_sec單位變化一下。
timeX = end-start
之前樓主程序裡的時間為time
然後發現樓主的時間計算有問題?timeX和time 其他行都match的很好。
但是np=8這行不對?有時候np=4這行不對。
有人碰到過omp_get_wtime()類似的問題嗎?
timeX = 178961,sum = 6992.953984, time = 0.178959 sec, np = 1
timeX = 99089,sum = 6992.953984, time = 0.099089 sec, np = 2
timeX = 56492,sum = 6992.953984, time = 0.056492 sec, np = 4
timeX = 238040,sum = 6992.953984, time = 358382.025434 sec, np = 8
timeX = 713904,sum = 6992.953984, time = 0.713904 sec, np = 16
timeX = 2012944,sum = 6992.953984, time = 2.012945 sec, np = 32
gcc command是之前jmrf提供的。
gcc p4.c -march=native -ffast-math -fassociative-math -ftree-vectorize -msse
-msse2 -mavx2 -fopenmp -o p4 -Ofast -lm | c*******v 发帖数: 2599 | 2 另外樓主的機器是不是有點問題?或者gcc有問題?
我一個4年前的dell game laptop。np=1只用了0.1秒。
樓主高端機器0.4秒 for np=1.
下面是我cpu信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz
Stepping: 9
CPU MHz: 800.091
CPU max MHz: 3500.0000
CPU min MHz: 800.0000
BogoMIPS: 4992.00
Virtualisation: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 6144K
NUMA node0 CPU(s): 0-3
【在 c*******v 的大作中提到】 : 我自己寫有一個計算時間函數。 : 用 : #include : struct timespec ts; : clock_gettime(1, &ts); : 然後tv_nsec,tv_sec單位變化一下。 : timeX = end-start : 之前樓主程序裡的時間為time : 然後發現樓主的時間計算有問題?timeX和time 其他行都match的很好。 : 但是np=8這行不對?有時候np=4這行不對。
| j**f 发帖数: 28 | 3 Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GH
i5是四个核是可以调度的,4,8线程的时候抢得正带劲.更多以后大家都躺平反而好一点
儿.
for loop计算量不够,都是内耗.你把omp for 加上 schedule(dynamic)效果更明显.
当然,想稳定结果可以把turbo, hyperthreading关了再测.不过没更多意义.
【在 c*******v 的大作中提到】 : 我自己寫有一個計算時間函數。 : 用 : #include : struct timespec ts; : clock_gettime(1, &ts); : 然後tv_nsec,tv_sec單位變化一下。 : timeX = end-start : 之前樓主程序裡的時間為time : 然後發現樓主的時間計算有問題?timeX和time 其他行都match的很好。 : 但是np=8這行不對?有時候np=4這行不對。
| B********s 发帖数: 675 | 4 你和楼主配置完全不同
楼主用的icc,估计只是用了默认的O2选项
你用的gcc,把能用的优化都用了
CPU和NUMA都不一样,楼主dual CPU with hyperthreading,你是单个i5没有
hyperthreading
完全没法比较
【在 c*******v 的大作中提到】 : 我自己寫有一個計算時間函數。 : 用 : #include : struct timespec ts; : clock_gettime(1, &ts); : 然後tv_nsec,tv_sec單位變化一下。 : timeX = end-start : 之前樓主程序裡的時間為time : 然後發現樓主的時間計算有問題?timeX和time 其他行都match的很好。 : 但是np=8這行不對?有時候np=4這行不對。
| c*******v 发帖数: 2599 | 5 openmp有bug或者有別的問題。
我機器重啟動之後,其計算時間就恢復了。omp_get_wtime()就正常了。
之前為修這問題,改了heap size什麼亂七八糟環境變量都沒什麼用。
【在 c*******v 的大作中提到】 : 我自己寫有一個計算時間函數。 : 用 : #include : struct timespec ts; : clock_gettime(1, &ts); : 然後tv_nsec,tv_sec單位變化一下。 : timeX = end-start : 之前樓主程序裡的時間為time : 然後發現樓主的時間計算有問題?timeX和time 其他行都match的很好。 : 但是np=8這行不對?有時候np=4這行不對。
|
|