openmp 전용 변수는 어디에 할당됩니까? 각 스레드 스택에서 동적으로 또는 일부 공유 배열 또는 뭔가를 통해?OpenMP 개인 변수 위치?
답변
OpenMP 사양에서는 변수가 스택이나 힙에 할당되는지 여부를 지정하지 않습니다 (공유 배열에있는 경우 힙에 있거나 각 스레드에 하나의 개체가 할당 된 경우)). 일반적으로 개인 변수는 스택에 할당된다고 가정합니다 (그렇게하지 않는 이유도없고 일반적으로 더 효율적입니다). the manual에 따르면 libgomp (gcc에서 사용되는 구현)에서 사용되는 동작은 적어도 다른 구현에 대한 단서는 없습니다. (비록 내가 같은 것을하지 않아야하는 작은 이유가 있지만).
OpenMP는 개인 변수 할당에 대해 아무것도 지정하지 않습니다.
두 가지 옵션이 있습니다 : 힙과 스택.
각 스레드가 명령 수를 줄이는 것을 생각하면 마스터 스레드가 아래와 같은 개인 변수를 할당하는 것이 합리적입니다.
번호 :
1: set_threads(n)
2: #pragma omp parallel private(var)
3: {
4: var = ...
5:}
머신 코드 :
호선 : var_ptr 새로운 변수 = [N]
라인 4 : var_ptr [get_thread_id()] = ...
그러나 위의 코드는 서로 다른 스레드에서 사적인 변수들 사이에 많은 거짓 공유를 유도합니다. 그래서 나는 컴파일러가 각 쓰레드의 스택에 그것을 할당하는 것이 합리적이라고 생각한다.
참고 자료가 있으십니까? 명세는이를 명시하는 것처럼 보이지 않으며 단순히 스택에 할당하는 것보다 비효율적 인 것처럼 보인다. 또한 [this] (http://gcc.gnu.org/onlinedocs/libgomp.pdf)에 따르면 적어도 libgomp는 그렇게하지 않습니다. 'private' 데이터의 할당을 피하기 위해 어떤 지시어가 있는지 외에, 적어도 어떤 것도없는 것 같습니다. – Grizzly
Shared! = private이고 여러분이 보여준 의사 코드는이 코드가 대부분의 (캐시 일관된) CPU 아키텍처에서 주요 성능 저하 요인 인 잘못된 공유를 유발하기 때문에 확실히 완전히 잘못되었습니다. –
@above .. 오 그래, 젠장 .. 너의 요점이있어. 문제는 내가 실행 된 명령어의 수를 최소화한다는 개발자의 관점에서 생각하고 있었다는 것입니다. 힙에 전용 변수를 할당하면 전용 변수를 수용하기 위해 모든 스레드가 스택 포인터를 감소시키는 것에 비해 마스터 스레드 만 malloc을 수행합니다. 그러나 이것은 장기적으로 사적 변인들간에 잘못된 공유를 유도 할 것이다. 그것을 지적 주셔서 감사합니다. 추신 : 편집 된 게시물을 참조하십시오. –
- 1. OpenMP 사용자 정의 감소 변수
- 2. OpenMP 개인 배열 - 세그먼트 오류 : 11
- 3. OpenMP for C++ 클래스 변수
- 4. OpenMP 공유 대 첫 번째 개인 성과 성능 향상
- 5. Fortran OpenMP 배열을 할당 할 위치
- 6. OpenMP SECTIONS 지시문을 사용할 때 개인 변수가 가비지 값으로 인쇄됩니다.
- 7. 개체 지향 개인 변수
- 8. C++ 개인 변수 혼동
- 9. PDO 및 개인 클래스 변수
- 10. 개인 변수 값에 대한 테스트
- 11. 개인 변수 선언을위한 짧은 방법
- 12. C++ : OpenMP의 개인 정적 변수
- 13. 상속 및 개인 인스턴스 변수
- 14. openmp 포인터 질문
- 15. OpenMP 및 C99 데이터
- 16. C++ 위치 매개 변수
- 17. 만들기 배경 위치 변수
- 18. 커널 변수 위치
- 19. 헤더 위치 변수
- 20. 북마크 위치 변수
- 21. OpenMP 질문
- 22. OpenMP - 섹션
- 23. 그래프 API 및 위치 개인 정보 보호
- 24. Fortran에서 OpenMP 지시문에 대한 문자 변수 인수에 관한 질문
- 25. firstprivate 변수 작성시 허용되는 OpenMP 호출 및 지시문?
- 26. ICC, GCC 및 OpenMP
- 27. C++ OpenMP 코드에서의 메모리 누수
- 28. oops 개인 변수 값이 오류를 반환하지 않습니다.
- 29. 열거 형 내에있는 개인 정적 최종 변수
- 30. C++에서 클래스의 개인 정적 변수 선언
의미가 있습니다. 그것이 내가 생각했을 것입니다. 감사. –