cublas 예제

GPU의 아키텍처 제품군을 사용하면 여러 커널을 동시에 실행할 수 있습니다. 따라서 독립 커널의 실행을 일괄 처리하기 위해 각각을 별도의 스트림에서 실행할 수 있습니다. 특히 위의 예제에서는 cudaStreamCreate(함수)를 사용하여 1024 CUDA™ 스트림을 만든 다음 각 큐블라스gemm()에 대한 각 호출을 각 행렬 행렬 곱셈에 대해 다른 스트림으로 큐블라스셋Stream() 호출을 할 수 있습니다. 이렇게 하면 가능하면 다른 계산이 동시에 실행됩니다. 사용자가 많은 스트림을 만들 수 있지만 실제로는 동시에 32개 이상의 동시 커널을 실행하는 것은 불가능합니다. 이 예제에서 혼동의 실망 스러운 소스는 B 레이블/640 행을 가진 것으로 생성, 하지만 처음 320 행만 실제로 행렬 곱셈 작업에 사용 됩니다. 나중에 더 많은 것을 볼 수 있습니다. 그러나 이 감독에도 불구하고 결과와 성능 측정은 여전히 정확합니다. 기본 매개 변수를 사용하여 이 예제에서는 [행 x 열]으로 표시된 행렬 크기로 계산합니다. 이 예제를 보다 감각적으로 만들려면 uiHB의 기본값은 실제로 B에서 사용되는 모든 것이기 때문에 320이어야 합니다.

이를 확인하는 증거 중 하나는 실제 `gemm` 호출을 보면 uiHB 매개 변수가 사용되지 않는 것을 알 수 있습니다. 대신 행렬의 해당 차원은 320인 uiAW와 같음으로 유추됩니다. 더 많은 증거를 원하십니까? uiHB를 320으로 변경(matrix_size.uiHB = 2 * 블록_크기 * iSizeMultiple;) 코드가 계속 실행되고 결과 유효성 검사가 계속 전달됩니다. 예를 들어 Linux에서 동적 라이브러리에 대해 cuBLAS를 사용하여 작은 응용 프로그램을 컴파일하려면 다음 명령을 사용할 수 있습니다. 몇 가지 중요한 참고 사항 : 그렇다면 행 메이저 및 열 주요 순서에 대한이 사업은 무엇입니까? 행렬이 실제로 메모리에 배치되는 방법과 관련이 있습니다. 행 주 순서는 행의 모든 값이 메모리에 연속되어 있음을 의미합니다. 위키백과에서 훔친 이 좋은 예제를 확인하십시오: NVIDIA의 예에서 가정은 사용자로서 C = A * B를 계산하려는 것입니다. 행렬은 C++에 있으므로 행 주요 순서로 표시되며 결과 행렬 C도 마찬가지로 행 주요 순서로 표시되도록 합니다.

행렬을 역순으로 통과하면 CUDA는 C`와 동일한 B`* A`를 계산합니다. 그러나 결과를 C ++로 가져 가면 암시적 전치가 다시 있으므로 실제로 얻는 것은 C입니다. 이 예제에는 CPU에서 행렬 곱셈을 계산하는 순진한 이중 루프 C/C++ 구현도 포함됩니다. 두 행렬 곱셈의 결과는 CUDA 구현이 올바른 답을 제공하는지 확인하기 위해 비교됩니다. 이 예제에는 두 가지 혼동의 원천이 있습니다. 하나는 당신이 고려해야 할 CUDA와 작업의 합법적으로 중요한 세부 사항이며, 그 배울 가치가있다. 다른 하나는 그냥 바보 와 좌절, 그리고 잘하면 엔비디아 예제의 미래 버전에서 그것을 해결 합니다., 비록 그것은 엄격 하 게 코드를 중단 하지 않습니다. 지원되지 않는 값 또는 매개 변수가 함수(예: 음수 벡터 크기)에 전달되었습니다. 이 게시물은 CuBLAS와 초고속 매트릭스 곱셈에 대한 엔비디아의 제공 샘플 프로젝트 `matrixMulCUBLAS`에 대한 몇 가지 개요와 설명을 제공합니다. 예제는 약간 혼란 스러울 수 있으며 몇 가지 설명을 보증한다고 생각합니다. 이 예제에서는 임의값으로 채워진 두 개의 행렬 A와 B를 생성합니다. 행렬은 단일 정밀 부동 점입니다.

이 예제에서는 C = A * B를 계산할 것이며 CUDA가 이 작업을 수행할 수 있는 시간(기가플롭으로 측정)을 배분합니다.

Ο ΚΑΙΡΟΣ
facebook
facebook
ΑΡΙΘΜΟΣ ΕΠΕΣΚΕΠΤΩΝ
  • 0Total visitors:
  • Visitors today:
  • Visitors yesterday:
  • Visitors last week:
  • Visitors per month:
  • 0.00Visitors per day:
  • 0Visitors currently online: