전역 메모리를 사용해야하는 CUDA (v5.5) 응용 프로그램이 있습니다. 이상적으로는 상수 메모리를 사용하는 것을 선호하지만 상수 메모리가 부족해 오버 플로우가 전역 메모리에 저장되어야합니다. 또한 (GPU의 일부 축소 작업 이후에) 간혹 작성해야하는 변수가 있으며이를 전역 메모리에 저장하려고합니다.CUDA에서 전역 메모리 대 동적 전역 메모리 할당
읽기 위해서는 간단한 방법으로 전역 메모리에 액세스합니다. 내 커널은 for 루프 내부에서 호출되며, 커널 호출마다 모든 스레드가 오프셋이없는 동일한 전역 메모리 주소에 액세스합니다. 작성을 위해, 각 커널 호출 후에 GPU에서 감소가 수행되고 루프의 다음 반복 전에 전역 메모리에 결과를 기록해야합니다. 그러나 응용 프로그램에서 전역 메모리에 쓰는 것보다 훨씬 많은 읽기가 있습니다.
제 질문은 동적으로 할당 된 전역 메모리를 사용하는 것보다 전역 (변수) 범위에 선언 된 전역 메모리를 사용하는 것에 이점이 있는지 여부입니다. 필요한 전역 메모리 양은 응용 프로그램에 따라 달라 지므로 동적 할당이 그 이유 때문에 바람직합니다. 그러나 전역 메모리 사용량의 상한선을 알고 성능에 더 관심이 있습니다. 따라서 오버플로하지 않을 것임이 확실한 대규모 고정 할당을 사용하여 메모리를 정적으로 선언 할 수도 있습니다. 성능을 염두에두고, 한 가지 형태의 전역 메모리 할당을 다른 것보다 선호하는 이유가 있습니까? 그것들은 GPU의 동일한 물리적 인 장소에 존재하고 동일한 방식으로 캐싱 되었습니까? 아니면 두 형식에 대해 다른 읽기 비용이 필요합니까?
감사합니다. 내가 가지고있는 질문에 더하여, 나는 심지어 묻지도 않았다. –