답변:
나는 다른 구현에 이르기까지 귀하의 질문의 후반부에 대답 할 수는 없지만 도전에 대한 통찰력을 제공 할 수 있습니다. 참고로 개인적으로 벤치 마크를 위해 2GB의 메모리와 함께 nVidia GTX 560 Ti에서 ViennaCL을 사용했습니다.
미드 레인지 i5의 시리얼 코드에서 약 40 배의 밀도 높은 매트릭스 곱셈 속도가 향상되었습니다. 벡터 스칼라 곱셈과 같은 연산에서 나는 1000 배의 속도 향상을 보았습니다. 그러나 방에있는 800 파운드 고릴라는 메모리 대역폭입니다. 대부분의 상용 GPU의 경우 약 6GB / s의 처리량으로 제한하는 PCIe와 같은 것을 사용하게됩니다. 필자의 경우 계산 속도가 40 배 빨랐지만 3 개의 매트릭스 사본 (2 GPU 및 1 백)은 CPU에서 계산하는 것만 큼 많은 시간이 걸렸습니다.
GPU 선형 대수에 대한 일반적인 라이브러리의 문제점은 GPU에서 객체를 실제로 재사용 할 수 없다는 것입니다. 왜냐하면 객체로 무엇을할지 알지 못하기 때문입니다. 따라서 계산 커널을 호출 할 때마다 GPU로 복사 한 다음 결과를 다시 복사해야 할 수 있습니다. 이것은 이익의 많은 부분을 먹을 것입니다.
행렬과 같은 객체를 재사용 할 수있는 경우 가능한 많은 메모리 관리를 피하기 위해 더 높은 수준의 알고리즘을 작성할 수 있지만이를 효율적으로 수행하기 위해 라이브러리를 누르기가 어려울 수 있습니다.
나는 이것이 도움이되기를 희망하며 여기에 훨씬 더 많은 경험을 가진 다른 사람들이 있다고 확신하지만 GPU 컴퓨팅에 대한 짧은 기간 동안 얻은 경험과 인상입니다.
CUDA와 BLAS에만 중점을 두겠습니다.
호스트 BLAS 구현을 통한 속도 향상은 너무 많은 요소에 의존하기 때문에 처리량을 평가하기에 좋은 지표는 아닙니다.
NVIDIA가 발표 한 벤치 마크 를보고 Tesla M2090에 1331 Gigaflops (단일 정밀도) 및 665 Gigaflops (이중 사전) 피크 성능이 있다는 점을 고려하면 SGEMM 및 DGEMM의 처리량은 거의 이론적 인 것의 60 %는 꽤 좋습니다.
지속적인 부동 소수점 처리량과 관련하여 데이터 및 결과 전송 시간을 고려하지 않고 플롭을 계산해야하므로 속도 비교를 어렵게 만듭니다. 또한 최상의 성능은 큰 행렬에 적합하기 때문에 행렬 크기를 고려해야합니다.
결론 : 실제 응용 프로그램의 속도 향상은 GPU 초기화, 데이터 전송 시간 등을 고려해야하기 때문에 선형 대수 루틴의 최고 측정 성능과 크게 다를 수 있습니다.
정확한 메트릭과 문제가 정의되어 있지 않으면 질문이 의미가 없기 때문에 가장 빠른 라이브러리에 대한 귀하의 질문에 대답하지 않습니다. 이 모든 것이, 나는 cuBLAS 와 MAGMA 가 아주 좋은 출발점 이라고 생각합니다 .