簡體   English   中英

如何在 OpenMP 中使用鎖?

[英]How to use lock in OpenMP?

我有兩段 C++ 代碼在 2 個不同的內核上運行。 它們都寫入同一個文件。

如何使用 OpenMP 並確保沒有崩潰?

您需要OMP_SET_LOCK / OMP_UNSET_LOCK功能: https : OMP_UNSET_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);

盡管特定的 API 調用不同,但大多數鎖定例程(例如 pthreads 信號量和 sysv 信號量)都適用於這種邏輯。

為了后來者的利益,使用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      
        }
    }
} 

編輯:Victor Eijkhout 發起的評論中有一個很好的線索。 總結和釋義:簡而言之, critical鎖定一個代碼段。 在更復雜的示例中,您要做的只是鎖定特定數據項,這可能有點過頭了。 在這兩種方法之間做出選擇之前,了解這一點很重要。

#pragma omp critical
{
    // write to file here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM