2011-09-23 2 views
1

나는 Windows 7에서 CUDA C로 몇 가지 프로그램을 작성했다. 나는 블록 크기로 실험했다. 대부분의 경우 256 또는 512 블록 크기가 다른 것보다 더 나은 성능을 제공한다는 것을 알게되었습니다. 어떤 신체가 그 뒤에 정확한 기술적 이유를 말해 줄 수 있습니까? 또는 알 수있는 자원을 지적하십시오. 32의 다른 블록 크기 배수 (워프)는 성능이 떨어집니다. 미리 감사드립니다.왜 CUDA 블록 크기가 256 또는 512 일 때 다른 블록에 비해 성능이 좋아 지나요?

+0

[Cuda occupancy calculator] (http://developer.download.nvidia.com/compute/cuda/CUDA_Occupancy_calculator.xls)를 사용하여 커널에 가장 적합한 블록 크기를 확인하십시오. 당신이 쓰는 커널 일 수도 있습니다. 내 경험에 비추어 볼 때, 블록 크기 256은 실제로 우연의 일치가 되기에는 너무나 종종 최적의 선택이지만, 설명을 찾지 못했습니다. – aland

답변

1

실제 측정이 없으면 주어진 칩에 대한 최적의 블록 크기를 확신 할 수 없습니다. 예를 들어, 2D 텍스처링을하는 경우 16x4 블록이 실제로 제대로 작동합니다. 귀하의 경우에는 512가 칩의 메모리 파티션 수의 배수가 될 가능성이 있습니다. (6 개의 메모리 파티션이있는 GeForce 8800 GTX에서, 384는 대역폭이 제한된 커널의 블록 크기가 매우 컸습니다.)

점유율은 성능에 영향을 미치는 여러 고려 사항 중 하나 일뿐입니다. 중간 결과를 저장하기 위해 레지스터를 사용할 수있는 작업 부하, 더 많은 레지스터를 사용하고 더 적은 스레드가 가장 잘 작동하는 작업량 .

죄송합니다. 좀 더 명확한 답변을 드릴 수는 없지만 복잡한 문제입니다.

+0

감사! "메모리 파티션"블록 크기와 메모리 파티션을 어떤 식 으로든 상관시킬 수 있다는 매우 중요한 단서를 제공했습니다. 고마워. – user961614

관련 문제