저는 CUDA 최적화에 대해 배우고 있습니다. 이 링크의 프레젠테이션을 발견했습니다 : Optimizing CUDA by Paulius Micikevicius. 이 프레젠테이션에서 , 그들은 약 MAXIMIZE 글로벌 메모리 대역폭 , 그들은 글로벌 메모리 유착이 대역폭을 향상시킬 것이라고 이야기한다. 내 질문에, 어떻게 전역 메모리 대역폭을 계산합니까.
내 CUDA 커널이 메모리 대역폭 사용에 얼마나 좋은지 알고 싶습니다. 테슬라 K40c에서 ECC를 실행합니다. bandwidthTest 유틸리티에서 얻은 결과가 도달 가능한 최고치에 대한 좋은 근사값입니까? 그렇지 않으면 피크 대역폭을 찾기 위해 비슷한 테스트를 어떻게 작성합니까? 나는 장치 메모리 대역폭을 의미합니다.
가정하자 나는 다음과 같이 메모리 액세스를 스트라이드 수행 커널이 있습니다 __global__ void strideExample (float *outputData, float *inputData, int stride=2)
{
int index = (blockIdx.x * blockDim.x + threadIdx.x) * stride;
편집 : 내 첫 번째 코드 샘플이 잘못되었습니다. 고정되어 있습니다. 대용량 벡터와 행렬 간의 대수 연산을위한 C++ 라이브러리를 구현합니다. x86-x64 CPU에서 OpenMP 병렬 벡터 추가, 내 제품 등이 단일 스레드보다 빠르다고 느꼈습니다. 병렬 작업은 단일 스레드보다 -1 % ~ 6 % 빠릅니다. 이것은 메모리 대역폭 제한 때문에 발생합니다 (필
애플리케이션을 실행하지 않고 HPC 애플리케이션 (NAS 벤치 마크)의 mflops (프로세서 당 초당 연산 수)를 계산하고 싶습니다. Stream Benchmark를 사용하여 시스템의 각 코어 (슈퍼 컴퓨터)의 메모리 대역폭을 측정했습니다. 코어의 메모리 대역폭 정보를 가지고 애플리케이션의 프로세서 당 mflops를 얻는 방법을 알고 싶습니다. 내 노드는