OpenMP API가 코어에 스레드를 할당하는 기초에 대해 공부하고 싶었습니다. 그렇게하는 동안 고려해야 할 요인은 무엇입니까? 이 할당을 프로그래머의 필요에 따라 수정할 수 있습니까?OpenMP는 스레드 할당을 어떻게합니까?
답변
오픈 스레드와 하드웨어 스레드/코어 사이의 친화력을 찾고 있다고 생각합니다. 대답은 예, btw입니다.
인텔 컴파일러를 사용하는 경우이 사이트에서 KMP_AAFFINITY 환경 변수를 확인할 수 있습니다. https://software.intel.com/en-us/node/522691
GNU 컴파일러를 사용하는 경우 공식 OpenMP 환경 변수에 관심이있을 수 있습니다. https://gcc.gnu.org/onlinedocs/libgomp/OMP_005fPLACES.html https://gcc.gnu.org/onlinedocs/libgomp/OMP_005fPROC_005fBIND.html
gnu 문서에서 선호도 지원이 완벽하게 지원되는 대상 (Windows 제외)에 예약되어 있다고 생각하지 않는다고 생각합니다. Intel 및 gnu OpenMP는 기본적으로 논리적 프로세서 당 스레드가 1 개 (일반적으로 너무 많음)합니다 (HyperThreading을 비활성화하지 않는 한) – tim18
예, 스레드 수는 확실히 프로그래머의 판단에 따라 수정 될 수 있습니다. 기본적으로 OpenMp set number of threads for parallel loop depending on variable
, OpenMP의 그것이 실행되는 (분산 시스템의 경우) 기계/노드에서 코어의 수만큼 스레드를 할당 :
을 참조하십시오.
아마도 너무 광범위한 질문입니다. – pedrorijo91