(성능 측면에서) CUDA의 매트릭스 연산을 구성하는 가장 좋은 방법은 무엇입니까? 예를 들어 C * C^(-1) * B^T + C
, C
및 B
을 행렬로 계산하려고합니다.CUDA의 매트릭스 연산
곱셈, 전치 등에 대한 별도의 함수를 작성하거나 전체 식에 대해 하나의 함수를 작성해야합니까?
가장 빠른 방법은?
(성능 측면에서) CUDA의 매트릭스 연산을 구성하는 가장 좋은 방법은 무엇입니까? 예를 들어 C * C^(-1) * B^T + C
, C
및 B
을 행렬로 계산하려고합니다.CUDA의 매트릭스 연산
곱셈, 전치 등에 대한 별도의 함수를 작성하거나 전체 식에 대해 하나의 함수를 작성해야합니까?
가장 빠른 방법은?
답변은 매트릭스의 크기에 크게 의존한다고 생각합니다.
공유 메모리에 행렬을 넣을 수 있다면, 아마 하나의 블록을 사용하여 계산할 것입니다.이 모든 계산은 하나의 커널 안에 있습니다. 아마도이 계산이 그 부분 일뿐입니다. 바라기를, 만약 여러분이 더 많은 행렬을 가지고 있고 위의 방정식을 여러 번 계산해야한다면, 모든 GPU 컴퓨팅 성능을 활용하여 병렬로 처리 할 수 있기를 바랍니다.
그러나 행렬이 훨씬 큰 경우 더 많은 블록을 계산해야합니다 (CUDA 매뉴얼에서 행렬 곱셈 예제 확인). 방정식의 다음 부분을 계속하기 전에 모든 블록에 의해 곱셈이 완료되었다는 보장이 필요합니다. 그렇다면 각 작업에 대해 커널 호출이 필요합니다.
CUBLAS 라이브러리를 사용하는 것이 좋습니다. 일반적으로 작성자가 직접 작성할 수있는 모든 것보다 더 많은 데이터와 신뢰할 수 있습니다. 또한 API는 수치 선형 대수학을위한 표준 라이브러리 인 BLAS 라이브러리와 비슷합니다.
힌트 : 곱셈의 경우 "동적 프로그래밍"이라고하는 알고리즘이 있습니다. MIT 알고리즘 소개에서 이러한 알고리즘의 예는 많은 행렬을 곱하기 위해 가장 빠른 순서를 선택하는 방법입니다. –