현재 OpenMp를 사용하는 전직 동료가 작성한 코드를 작성하고 있습니다. 그러나 OpenMp에 대한 경험은 없으며 코드를 읽음으로써 기본 지식을 이해하는 동안 Im은 현재 내 수정을 위해 스레드 로컬 멤버를 선언하는 방법을 알아 냈습니다.OpenMp : Threadlocal member
는매우 단순화 된 버전의 현재 코드는 다음과 같습니다
이struct Worker
{
void work() { //... }
};
-------------------------------------------------------------------
Worker worker;
#pragma omp parallel for
for (int i = 0; i < n; ++i)
{
worker.work();
}
내가 acheive 할 것은 이와 비슷한 방식으로 Worker
클래스를 수정하는 것입니다 :
struct Worker
{
void work() { // m_var is accessed here }
int m_var; // should be threadlocal
};
그러나 I OpenMP를 사용하여이를 달성하는 방법을 알지 못합니다. Worker
안에있는 다른 모든 멤버는 동기화되거나 스레드 로컬되지 않아야합니다.
추신 : 호기심 많은 사람들을 위해 Worker
은 실제로 복잡한 내용을 다운로드하는 클래스이고 for 루프에서는 단일 다운로드가 수행됩니다. m_var
은 세션을 보유한 객체가 될 것입니다.