연속 스레드 프로세서가있는 4 개의 스레드가있는 4 개의 팀을 만들어야합니다.GCC 및 OMP를 사용하는 C의 특정 스레드 순서
내가 기대하고있어 결과는, 예를 들면 :
이Team 0 Thread 0 Processor: 0
Team 0 Thread 1 Processor: 1
Team 0 Thread 2 Processor: 2
Team 0 Thread 3 Processor: 3
Team 1 Thread 0 Processor: 4
Team 1 Thread 1 Processor: 5
Team 1 Thread 2 Processor: 6
Team 1 Thread 3 Processor: 7
Team 2 Thread 0 Processor: 8
Team 2 Thread 1 Processor: 9
Team 2 Thread 2 Processor: 10
Team 2 Thread 3 Processor: 11
Team 3 Thread 0 Processor: 12
Team 3 Thread 1 Processor: 13
Team 3 Thread 2 Processor: 14
Team 3 Thread 3 Processor: 15
나는 GOMP_CPU_AFFINITY 변수를 사용하여 GCC에서 프로세서 선호도를 처리 할 수 있습니다.
내가 사용하고 있습니다 :
#pragma omp parallel num_threads(4)
을 두 번 위해 2 개 포크 수준을 얻을 수 있습니다.
0 4 8 12 1 2 3 5 6 7 9 10 11 13 14 15
은 그래서 첫 번째 포크는 "아버지 포크", 가져옵니다 : 나는 데 문제가
Team 0 Thread 0 Processor: 0
Team 1 Thread 0 Processor: 4
Team 2 Thread 0 Processor: 8
Team 3 Thread 0 Processor: 12
내가 GOMP_CPU_AFFINITY에서이 순서를 보내고 있습니다 순간
두 번째 그룹의 포크는 아무런 순서없이 만들 수 있습니다. 예를 들어, 나는이 상황을 가질 수 있습니다. (#pragma omp 원자를 사용하여 언제든지 더 많은 프로세서를 요구할 수 있습니다.)
Team 0 Thread 0 Processor: 0
Team 0 Thread 1 Processor: 5
Team 0 Thread 2 Processor: 6
Team 0 Thread 3 Processor: 7
Team 1 Thread 0 Processor: 4
Team 1 Thread 1 Processor: 13
Team 1 Thread 2 Processor: 14
Team 1 Thread 3 Processor: 15
Team 2 Thread 0 Processor: 8
Team 2 Thread 1 Processor: 1
Team 2 Thread 2 Processor: 2
Team 2 Thread 3 Processor: 3
Team 3 Thread 0 Processor: 12
Team 3 Thread 1 Processor: 9
Team 3 Thread 2 Processor: 10
Team 3 Thread 3 Processor: 11
질문 : 두 번째 탄원서를 순서대로 작성하는 방법이 있습니까? 내가 잠금 또는 무언가 일부 sinchronization 방법을해야 할 것이라고 생각
... 사전에
감사합니다!
- 하비에르
왜, 왜, 왜, 왜? 스레드는 비동기 적으로 작동해야합니다. 이 질문은 '부동 소수점 비교가 작동하지 않음'보다 더 자주 발생합니다. –
@Martin : 그는 무엇이든 동기화하는 것에 대해 이야기하는 것이 아니라 스레드 ID를 프로세서 ID (NUMA 시스템에서 중요 할 수 있음)에 할당하는 것에 대해 이야기하고 있습니다. –
@MartinJames : 특정 프로세서 코어에 스레드를 할당하는 데 문제가 있습니까? 잘못된 공유 영향을 최소화하기 위해 데이터를 공유하는 스레드가 동일한 프로세서에서 작동하는지 확인하는 것은 이후 ccNUMA 시스템의 성능에 매우 중요 할 수 있습니다. – Grizzly