따라서 BLAS (기본 선형 대수 서브 프로그램)은 이름에서 알 수 있듯이 일반적으로 기본 선형 대수 루틴에 대한 API입니다. 여기에는 벡터 벡터 연산 (레벨 1 blas 루틴), 행렬 벡터 연산 (레벨 2) 및 행렬 행렬 연산 (레벨 3)이 포함됩니다. "reference" BLAS을 사용하면 모든 것을 올바르게 구현할 수 있지만 대부분의 경우 아키텍처에 최적화 된 구현을 사용하게됩니다. cuBLAS는 CUDA를 구현 한 것입니다.
BLAS API는 매우 널리 채택 된 기본 작업을 설명하는 API만큼 성공적이었습니다. 그러나 (a) 그 날의 건축상의 한계 (1979 년이었고 API는 널리 컴파일 될 수 있도록 8 자 이하의 이름을 사용하여 API를 정의했기 때문에)의 이름은 믿을 수 없을 정도 였고 (b) 아주 일반적이어서 심지어 간단한 함수 호출이라도 많은 불필요한 인수가 필요합니다.
숫자가 대수적 인 선형 대수를 수행하는 경우 API의 일반적인 요지를 이미 알고 있으므로 구현 설명서에서 중요한 세부 정보를 생략하는 경우가 종종 있습니다. 으로.
레벨 2 및 3 루틴은 일반적 T
행렬/벡터의 수치 타입 형태 TMMOO..
의 함수 이름이 (단일/이중 정밀 레알 S
/D
를 C
단일/배정도 컴플렉스/Z
) , MM
은 매트릭스 유형입니다 (예 : 일반 매트릭스 매트릭스의 경우 GB
, 대칭 매트릭스의 경우 SY
등). OO
이 작업입니다.
이 모든 것은 지금 우스운 것처럼 보이지만 비교적 잘 작동합니다. SGEMV가 단 정밀도 일반 매트릭스 곱셈 벡터 곱하기 (이것은 아마도 여러분이 원하는 것입니다. , SGBMV가 아님), DGEMM은 배정도 행렬 - 행렬 곱셈 등입니다. 그러나 일부 연습이 필요합니다.
그래서 당신은 CUBLAS sgemv의 지시에 보면, 또는 documentation of the original, 당신은 인수 목록을 단계별로 할 수 있습니다. 먼저, 기본적인 동작이 기능은 칼럼 - 주요 형식, x 및 y 에 기억 된 m × n의 매트릭스이다 y = a op(A)x + b y
는 벡터이며, 및 스칼라 인 벡터 행렬 곱셈을 수행
이다.
연산 (A)가 될 수있는 위치하는 T 또는 H . 그래서 일반적인 경우처럼 y = Ax
을 원한다면 a = 1
, b = 0
. 및 transa == CUBLAS_OP_N
.
incx
x
는 다른 소자 사이의 보폭이고;
x
이 벡터를 포함하는 단순한 1 차원 배열 일 경우, 보폭은 1이됩니다.
그리고 SGEMV에 필요한 모든 것입니다.
CUBLAS 기능은 엄청난 양의 문서가있는 표준 포트란 BLAS, 모델로하고 있습니다. 그래서 SBGMV 검색을 시도하고 당신은 당신이 찾고있는 것을 찾을 수 있습니다 (정말 줄무늬 당신의 행렬이다?) – talonmies