GPU 시스템에서 BLAS / LAPACK 또는 기타 선형 대수 루틴의 가장 빠른 구현은 무엇입니까?


11

예를 들어, nVidia에는 ​​CUBLAS가있어 속도가 7-14 배 향상됩니다. 기본적으로 이것은 nVidia의 GPU 카드의 이론적 인 처리량에 거의 근접하지 않습니다. GPU에서 선형 대수의 속도를 높이는 데 어떤 어려움이 있으며, 이미 사용 가능한 빠른 선형 대수 라우팅이 있습니까?

답변:


9

나는 다른 구현에 이르기까지 귀하의 질문의 후반부에 대답 할 수는 없지만 도전에 대한 통찰력을 제공 할 수 있습니다. 참고로 개인적으로 벤치 마크를 위해 2GB의 메모리와 함께 nVidia GTX 560 Ti에서 ViennaCL을 사용했습니다.

미드 레인지 i5의 시리얼 코드에서 약 40 배의 밀도 높은 매트릭스 곱셈 속도가 향상되었습니다. 벡터 스칼라 곱셈과 같은 연산에서 나는 1000 배의 속도 향상을 보았습니다. 그러나 방에있는 800 파운드 고릴라는 메모리 대역폭입니다. 대부분의 상용 GPU의 경우 약 6GB / s의 처리량으로 제한하는 PCIe와 같은 것을 사용하게됩니다. 필자의 경우 계산 속도가 40 배 빨랐지만 3 개의 매트릭스 사본 (2 GPU 및 1 백)은 CPU에서 계산하는 것만 큼 많은 시간이 걸렸습니다.

GPU 선형 대수에 대한 일반적인 라이브러리의 문제점은 GPU에서 객체를 실제로 재사용 할 수 없다는 것입니다. 왜냐하면 객체로 무엇을할지 알지 못하기 때문입니다. 따라서 계산 커널을 호출 할 때마다 GPU로 복사 한 다음 결과를 다시 복사해야 할 수 있습니다. 이것은 이익의 많은 부분을 먹을 것입니다.

행렬과 같은 객체를 재사용 할 수있는 경우 가능한 많은 메모리 관리를 피하기 위해 더 높은 수준의 알고리즘을 작성할 수 있지만이를 효율적으로 수행하기 위해 라이브러리를 누르기가 어려울 수 있습니다.

나는 이것이 도움이되기를 희망하며 여기에 훨씬 더 많은 경험을 가진 다른 사람들이 있다고 확신하지만 GPU 컴퓨팅에 대한 짧은 기간 동안 얻은 경험과 인상입니다.


3
그렇기 때문에 열심히 CPU에 복사하지 않고 GPU에 오랫동안 존재하는 객체를 원합니다. 예를 들어 PETSc 행렬 및 벡터에는 CPU 및 / 또는 GPU가 최신인지 여부를 나타내는 플래그가 포함되어 있습니다. GPU에서 작업하면 CPU 버전이 더티로 표시되고 그 반대로도 표시됩니다. 더러워진 장소에서 메모리를 요청하면 복사가 투명하게 이루어 지지만 큰 데이터 구조에 닿는 모든 알고리즘 구성 요소가 동일한 장소에서 실행될 수있는 경우는 거의 없습니다.
Jed Brown

5

CUDA와 BLAS에만 중점을 두겠습니다.

호스트 BLAS 구현을 통한 속도 향상은 너무 많은 요소에 의존하기 때문에 처리량을 평가하기에 좋은 지표는 아닙니다.

NVIDIA가 발표 한 벤치 마크 를보고 Tesla M2090에 1331 Gigaflops (단일 정밀도) 및 665 Gigaflops (이중 사전) 피크 성능이 있다는 점을 고려하면 SGEMM 및 DGEMM의 처리량은 거의 이론적 인 것의 60 %는 꽤 좋습니다.

2미디엄케이미디엄×케이케이×

지속적인 부동 소수점 처리량과 관련하여 데이터 및 결과 전송 시간을 고려하지 않고 플롭을 계산해야하므로 속도 비교를 어렵게 만듭니다. 또한 최상의 성능은 큰 행렬에 적합하기 때문에 행렬 크기를 고려해야합니다.

결론 : 실제 응용 프로그램의 속도 향상은 GPU 초기화, 데이터 전송 시간 등을 고려해야하기 때문에 선형 대수 루틴의 최고 측정 성능과 크게 다를 수 있습니다.

정확한 메트릭과 문제가 정의되어 있지 않으면 질문이 의미가 없기 때문에 가장 빠른 라이브러리에 대한 귀하의 질문에 대답하지 않습니다. 이 모든 것이, 나는 cuBLASMAGMA 가 아주 좋은 출발점 이라고 생각합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.