공유 메모리는 뱅크로 나누어지고 동일한 스레드 내의 단일 데이터 요소에 대한 다중 스레드에 의한 액세스는 충돌 (또는 브로드 캐스트). N
쌍의 수와 한 쌍의 제 16 개 플로트가CUDA에서 공유 메모리 뱅크 충돌 : 메모리가 뱅크에 정렬되는 방식
__shared__ float A[34*N]
한 매트릭스이며, 다음 순간
는 I 개념적 두 행렬의 여러 쌍을 나타내는 상당히 큰 배열을 할당 18 개의 수레가 두 번째입니다.사실, 첫 번째 행렬에 대한 액세스는 충돌이 없지만 두 번째 행에 대한 액세스에는 충돌이 있습니다. 이러한 갈등은 피할 수없는 일이지만, 제 생각에는 두 번째 행렬이 18이므로 미래의 모든 행렬이 은행과 정렬되지 않아 필요한 것보다 더 많은 갈등이 발생할 것입니다.
그렇다면 어떻게해야합니까?
공유 메모리를 할당 할 때마다 새 뱅크에서 시작합니까? 그래서 내가 할 수있는 잠재적으로 할 수
__shared__ Apair1[34]
__shared__ Apair2[34]
...
어떤 아이디어?
감사 행렬의 당신의 쌍 연속적으로 저장되고, 당신이 스레드 인덱스로 선형 적 요소를 액세스하는 경우, 당신은 메모리 뱅크 충돌을 공유하지 않을 경우
요소에 액세스하는 방법을 자세히 설명해 주시겠습니까? – Tom