首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMP关键性能优于原子性能

OpenMP关键性能优于原子性能
EN

Stack Overflow用户
提问于 2018-04-12 10:44:10
回答 1查看 867关注 0票数 1

我尝试使用来自https://github.com/joeladams/patternlets/blob/master/patternlets/openMP/14.mutualExclusion-critical2/critical2.c的代码来证明Critical更耗时,但我一直得到的结果是critical的执行时间比原子更快。有人知道这是怎么发生的吗?

代码语言:javascript
复制
// simulate many deposits using atomic
startTime = omp_get_wtime();
#pragma omp parallel for 
for (i = 0; i < REPS; i++) {
    #pragma omp atomic
    balance += 1.0;
}
stopTime = omp_get_wtime();
atomicTime = stopTime - startTime;
print("atomic", REPS, balance, atomicTime, atomicTime/REPS);


// simulate the same number of deposits using critical
balance = 0.0;
startTime = omp_get_wtime();
#pragma omp parallel for 
for (i = 0; i < REPS; i++) {
     #pragma omp critical
     {
         balance += 1.0;
     }
}
stopTime = omp_get_wtime();
criticalTime = stopTime - startTime;
print("critical", REPS, balance, criticalTime, criticalTime/REPS);

我的结果是:

代码语言:javascript
复制
After 1000000 $1 deposits using 'atomic':
        - balance = 1000000.00,
        - total time = 0.421999931335,
        - average time per deposit = 0.000000422000

After 1000000 $1 deposits using 'critical':
        - balance = 0.00,
        - total time = 0.265000104904,
        - average time per deposit = 0.000000265000

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-08-27 23:32:48

我猜增加浮点数和增加整数是不同的。这取决于CPU架构。当我用整数进行测试时,它是可以的。

看我的结果:原子比critical快了一倍多,但与不使用原子和critical相比,它仍然慢得多,甚至结果也不正确。

所以,如果可能的话,尽量避免锁、关键、原子。

测试结果:

不含原子,临界: 6666667,0.000113381

原子: 10000000,0.399095

严重: 10000000,0.999381

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49787162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档