0
커널에서 공유 메모리 배열을 선언 할 때 동일한 크기의 배열이 모든 스레드에 의해 선언된다는 것을 알고 있습니다.CUDA 공유 메모리 주소 지정
__shared__ int s[5];
과 같은 코드는 각 스레드에 20 바이트 배열을 생성합니다. 공유 메모리를 다루는 방법은 모든 스레드에서 보편적이라는 점을 이해합니다. 그래서 만약 내가 아래 첨자 10을 주소하면
s[10] = 1900;
모든 스레드에서 정확히 같은 메모리 위치입니다. 서로 다른 스레드가 하위 공유 10에 다른 공유 메모리 주소에 액세스하는 경우는 없습니다. 맞습니까? 물론 컴파일러는 첨자가 범위를 벗어났다는 경고를 던집니다.
이름에서 알 수 있듯이 공유 메모리 배열은 각 스레드에서 생성되지 않고 공유 메모리에 있습니다. 다시 말해 공유 배열's'는 하나 뿐이므로 다른 스레드가 공유 메모리에서 같은 주소에 액세스 할 때 뱅크 충돌이 발생할 수 있습니다. – chaohuang
공유 메모리는 블록의 스레드가 공유하며 커널의 모든 스레드는 공유하지 않습니다. 프로그램 가능 캐시로 간주 될 수 있습니다. – konjac