15 Şubat 2021 Pazartesi

OpenMP Critical Section

Giriş 
Mutex ile aynı anlama gelir. Söz dizimi şöyle
#pragma omp critical(name)
Açıklaması şöyle,
The critical section names are global to the entire program (regardless of module boundaries). So if you have a critical section by the same name in multiple modules, not two of them can be executed at the same time. If the name is omitted, a default name is assumed.
Örnek
Eğer paralel kod içinde mutex kullanmak istersek şöyle yaparız.
#pragma omp critical
{
    //code only be written from a thread
}
Örnek
Şöyle yaparız
#include <iostream>

int main(int argc, char** argv)
{
  int someVar = 0;

  #pragma omp parallel for
  for (int i = 0; i < 1000; i++)
  {
    #pragma omp critical
    ++someVar;
  }

  std::cout << someVar << std::endl;

  return 0;
}
Eğer OpenMP yerine normal C++ kullanmak istersek şöyle yaparız.
#include <iostream>
#include <mutex>

int main(int argc, char** argv)
{
  int someVar = 0;
  std::mutex someVar_mutex;

  #pragma omp parallel for
  for (int i = 0; i < 1000; i++)
  {
    std::lock_guard<std::mutex> lock(someVar_mutex);
    ++someVar;
  }

  std::cout << someVar << std::endl;

  return 0;
}

Hiç yorum yok:

Yorum Gönder