2014-04-09 2 views

답변

1

는 GNU의의 OpenMP 런타임 라이브러리 libgomp에 특정하지만, 다른의 OpenMP 런타임은 더 많거나 적게 같은 수행

TLS는 (스레드 로컬 저장소) 방법에 대해 설명합니다 PDF로 문서 링크가 작동합니다. 모든 링크는 GCC 4.8.2 소스 코드의 관련 부분으로 연결됩니다.

omp_get_thread_num()의 실제 구현이 매우 간단

int 
omp_get_thread_num (void) 
{ 
    return gomp_thread()->ts.team_id; 
} 

각 스레드 struct gomp_thread 인스턴스로 스레드 로컬 포인터를 갖는다. 또한 각 스레드는 스레드 팀의 일부이며 팀 내부의 상태는 유형의 ts 구성원으로 표시됩니다. 후자에는 team_id이라는 unsigned int 구성원이 포함되어 있으며 팀 구성원의 스레드 ID를 제공합니다.

스레드가 자신의 인스턴스 인 struct gomp_thread을 찾는 방법은 플랫폼에 TLS (스레드 로컬 저장소)가 있는지 여부에 따라 다릅니다. 후자의 경우, TLS는 POSIX 스레드 라이브러리에 의해 에뮬레이션됩니다. 모두 구현은 다음과 같습니다 TLS와

(here에서 가져온) :

extern __thread struct gomp_thread gomp_tls_data; 
static inline struct gomp_thread *gomp_thread (void) 
{ 
    return &gomp_tls_data; 
} 

__thread 키워드는 글로벌 변수 gomp_tls_data 스레드 로컬, 각 스레드는 자체 사본을 얻을 수 있다는 것을 의미한다. TLS없이

:이 케이스에서는 pthread_getspecific()

extern pthread_key_t gomp_tls_key; 
static inline struct gomp_thread *gomp_thread (void) 
{ 
    return pthread_getspecific (gomp_tls_key); 
} 

은 (here 위치) 구조 인스턴스의 스레드 로컬 복사본을 획득하는데 사용된다.

pthread_getspecific()도 값을 저장하는 데 TLS를 사용하고 두 가지 구현이 제공되는 이유가 궁금 할 수도 있지만 PLS에 직접 액세스하는 것이 Pthreads API 함수를 호출하는 것보다 빠를 수 있습니다. 그런 점에서 OS X는 특별한 경우입니다. Mach-O 실행 형식은 GNU 호환 TLS 구현을 제공하지 않으며 일부 사람들은 Pthreads API가 실제로 에뮬레이트 된 GNU TLS보다 빠르다고보고했습니다.

+0

이 분명한 답변을 주셔서 감사합니다. 하지만 아직도 이해할 수없는 것이 있습니다 : omp_get_thread_num은 gomp_thread와 같은 정적 인라인 함수가 아니어야합니까? 그렇지 않다면이 함수는 외부 적으로 링크 될 것이므로 omp_get_thread_num이 컴파일 될 때 gomp_thread는 gomp_thread의 우리 스레드 전용 버전이 아닙니다. (스레드 특정에 따라 gomp_tls_data가 로컬 복사본을 참조하는 확장 된 인라인 함수를 의미합니다). – user3514491

+0

공유 객체는 RTLD에 의해 TLS에 병합 된 전역 데이터 요소를 보유 할 수 있습니다. 세부 사항은 복잡하지만 요약하면 동적 링크 라이브러리 (예 : libgomp.그래서')는 자신의 심볼의 스레드 로컬 버전을 가질 수 있으므로'omp_get_thread_num()'과 같은 일반 (인라인되지 않은) 함수는 호출 스레드의 컨텍스트에서 해당 스레드 로컬 전역 심볼에 액세스 할 수 있습니다. –

+0

고마워, 지금은 정적 링크가 아니라 런타임시 동적 연결 (예 : Windows DLL)이므로 기호가 각 호출에서 변경 될 수 있습니다. – user3514491

0

AFAIK, 지정되지 않았으므로 일반적인 대답을 드릴 수 없습니다. GCC는 구조를 사용하여 스레드를 관리합니다.이 스레드에는 __thread attribute이 있습니다. 나는 다른 컴파일러의 구현이 비슷하다고 생각한다. 다음 무엇 http://www.akkadia.org/drepper/tls.pdf

관련 문제