저는 GPU 프로그래밍에 익숙하지 않지만, 계산 집약적 인 작업을 수행 할 때 가능한 성능 향상을 위해 GPU를 사용해야합니다.ArrayFire 대 원시 CUDA 프로그래밍?
내 프로그램을 ArrayFire Free 버전으로 다시 써 보았습니다. 실제로 멀티 스레딩이 활성화 된 상태에서 CPU 루틴보다 빠르지 만 기대했던 수준 (즉, <100 %의 속도 향상)이 아니며 반환 된 결과가 올바르지 않습니다 (< CPU 루틴에 비해 1 % 오류 CPU 루틴의 결과는 정확합니다).
필자의 임무는 대용량 매트릭스 (300MB-500MB 크기)에서 주로 if-thens/switch-case 등을 사용하여 element-wise float-32 수학 연산입니다. 성능 병목 현상은 CPU와 GPU 사이의 대역폭 일 가능성이 높습니다 메모리가 많아서 데이터를 읽을 수 있습니다. 테스트 한 GPU는 3GB의 비디오 메모리가있는 GeForce 580GTX입니다.
내 작업에 ArrayFire를 사용하는 대신 원시 CUDA 코드 (CUBLAS 등 및 평균 최적화)를 쓰면 여전히 상당한 최적화 여지가 있습니까? NVIDIA 최적화 가이드를 읽었습니다. 빠른 데이터 액세스와 은행 갈등을 줄이기 위해 메모리 액세스 트릭이있는 것으로 보인다. ArrayFire는 이러한 일반적인 트릭을 자동으로 사용합니까, 사용하지 않습니까?
둘 다 IEEE 사양을 준수하지 않습니까? 나는 모두 '단일 정밀도'를 사용하여 동일한 결과를 가져와야한다고 가정합니다. 다시 말하지만, 계산 순서가 동일하다고 가정하십시오. – Royi