由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 計算時間出錯?
进入Programming版参与讨论
1 (共1页)
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這行不對。

1 (共1页)
进入Programming版参与讨论