2012-05-23 6 views
1

최근에 간단한 CUDA 행렬 - 벡터 곱셈을 사용하고 싶었습니다. 나는 cublas 라이브러리에서 적절한 기능을 발견했다 : cublas < < >> gbmv. 여기에 the official documentationCUDA ccuas <t> gbmv 이해

그러나 실제로는 매우 열악하므로 klku 매개 변수의 의미를 이해하지 못했습니다. 또한, 나는 무엇을 stride (그것은 또한 제공되어야합니다) 모르겠다. 이 매개 변수 (페이지 37)에 대한 간략한 설명이 있지만 다른 것을 알 필요가있는 것 같습니다.

인터넷 검색은이 질문에 대한 많은 유용한 정보를 제공하지 않으며 대부분 다른 버전의 설명서를 참조합니다.

그래서 GPU/CUDA/CUBLAS 지도자에 대한 몇 가지 질문이 있습니다

  1. 을 어떻게 CUBLAS를 사용하는 방법에 대한 자세한 이해 문서 또는 가이드를 찾을 수 있습니까?
  2. 이 기능을 사용하는 방법을 알고 있다면 어떻게 사용합니까?
  3. 아마도 cublas 라이브러리는 다소 특별하고 모든 사람이 더 많이 사용되는 더 잘 알려진 문서를 사용하고 있을까요?

고마워요.

+2

CUBLAS 기능은 엄청난 양의 문서가있는 표준 포트란 BLAS, 모델로하고 있습니다. 그래서 SBGMV 검색을 시도하고 당신은 당신이 찾고있는 것을 찾을 수 있습니다 (정말 줄무늬 당신의 행렬이다?) – talonmies

답변

4

따라서 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/DC 단일/배정도 컴플렉스/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에 필요한 모든 것입니다.