Mai*_*nID 23 c++ locking openmp critical-section
我有两个C++代码在两个不同的内核上运行.它们都写入同一个文件.
如何使用OpenMP并确保没有崩溃?
小智 44
你想要OMP_SET_LOCK/ OMP_UNSET_LOCKfunctions:https://computing.llnl.gov/tutorials/openMP/#OMP_SET_LOCK.基本上:
omp_lock_t writelock;
omp_init_lock(&writelock);
#pragma omp parallel for
for ( i = 0; i < x; i++ )
{
// some stuff
omp_set_lock(&writelock);
// one thread at a time stuff
omp_unset_lock(&writelock);
// some stuff
}
omp_destroy_lock(&writelock);
Run Code Online (Sandbox Code Playgroud)
尽管特定的API调用是不同的,但大多数锁定例程(如pthreads信号量和sysv信号量)都适用于这种逻辑.
Chr*_* A. 25
为了后来的利益,使用critical是另一种选择.您甚至可以创建命名的关键部分.
例如:
#include <omp.h>
void myParallelFunction()
{
#pragma omp parallel for
for(int i=0;i<1000;++i)
{
// some expensive work
#pragma omp critical LogUpdate
{
// critical section where you update file
}
// other work
#pragma omp critical LogUpdate
{
// critical section where you update file
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:Victor Eijkhout发表的评论中有一个很棒的主题.总结和释义:简而言之,critical锁定代码段.在更复杂的示例中,这可能是过度的,您只想锁定特定的数据项.在两种方法之间做出选择之前,了解这一点很重要.
ada*_*max 17
#pragma omp critical
{
// write to file here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45577 次 |
| 最近记录: |