2017-03-27 7 views
1

그래서 this ANL Training video을보고했다 그들은AVX-512CD (충돌 감지)가 원자 변수 액세스와 다른 점은 무엇입니까?

void Histogram (const float* age, int* const hist, const int n, const float group_width, const int m) { 
    const float oogw = 1.0f/group_width; 
    // Populating the histogram. 
    for(int i = 0; i < n; i++) { 
     // Calculating the index of the bin age[i] goes to. 
     const int j = (int) (age[i] * oogwflh); 
     // Incrementing the appropriate bin in the histogram. 
     hist[j]++; 
    } 
} 

그리고 루프가 verctorized 도착하는 방법을 보여줍니다. this 지시. https://youtu.be/5IHqKKxuLM0?list=PLGj2a3KTwhRa__pANkWixmIZWBLQkEhZD&t=641

어떻게 원자와 다른 점이 있으며 나중에 컴파일 수준에서 (예 : POD 구조체와 같이 다른 항목에 대해) 충돌 감지 지원을 기대할 수 있습니까?

답변

1

AVX512 충돌 감지 명령어는 단일 분산 명령어가 동일한 저장소 위치에 두 번 이상 기록 할 때 발생하는 충돌을 감지합니다. 이것은 동일한 명령어에서 다른 벡터 레인 간의 충돌입니다.

원자 연산은 둘 이상의 논리 CPU가 동일한 주소에 "동시에로드/저장"을 실행하는 경우 발생하는 경쟁 조건으로부터 보호합니다.

코드가 단일 스레드로 실행되는 경우에도 코드가 벡터화되는 경우 충돌 검색 지침이 필요하지만 코드가 병렬 처리되고 많은 스레드로 실행될 때까지는 원 자형 연산이 필요하지 않습니다.