CUDA 프로그래밍10 SAXPY(Single-precision A-X Plus Y) CUDA 프로그래밍 예제로 가장 흔히 사용하는 SAXPY(Single-precision A-X Plus Y)는 스칼라 곱과 백터 합이 결합된 함수로서 GPU 병렬연산의 기본적인 내용을 설명하기에 적합하다. 이번 포스트에서는 C++를 이용한 단순한 SAXPY 코드와 CUBLAS 라이브러리를 이용한 SAXPY 실행방법을 살펴본다. 단순하게 쓰레드의 인덱스를 결정하기 위해서, 그리드와 블록 모두 1차원 형태로 가정하였다. restrict 포인터는 메모리 접근을 최적화하기 위해 사용하였다. cublas 라이브러를 이용하는 경우, cublasSaxpy( )를 이용해서 동일한 연산을 시행할 수 있다. 위와 비교해봤을 때, 직접 SAXPY에 대한 커널 작성이 필요없음을 알 수 있다. 참고로 cublasAlloc( ).. 2020. 3. 3. MPS란? GPU를 HPC 연산 등에 활용하게 되면서, 높은 성능 향상을 체감하는 동시에 한정된 자원을 좀 더 효율적으로 사용하는 연구도 진행되고 있다. 이러한 resource under-utilization 연구는 elastic kernel, persistent thread, kernel fusion 과 같이 소프트웨어적인 해결책이 먼저 연구되었지만, 이제는 NVIDIA의 지원 아래 하드웨어적 특성을 고려한 해결방안 들이 제시되고 활용되고 있다. 스트림(stream), 하이퍼 큐(Hyper-Q)를 거쳐서 제시된 MPS의 개념 대하여 간단하게 살펴보려고 한다. MPS( Multi-Process Service)는 이름에서도 알 수 있듯이 다수의 프로세스가 동시에 단일 GPU에서 실행되도록 해주는 런타임 서비스이다. .. 2020. 1. 29. Unified memory를 사용할 때, 공유변수의 동작 예제 http://www.mathcs.emory.edu/~cheung/Courses/355/Syllabus/94-CUDA/unified-memory.html 2020. 1. 8. PTX 어셈블리를 활용하여 실행 중인 SM 확인하기 CUDA 프로그래밍 환경에서는 PTX assembly를 CUDA 코드에 인라인 시킬 수 있는 방법을 제공한다. 특히 PTX가 포함하고 있는 특수 레지스터 정보를 활용하면, CUDA 애플리케이션이 실행될 때 스레드 블록이 할당된 SM(streaming multiprocessor) 정보를 알 수 있다. 런타임에 스케줄러에 의해 이뤄지는 할당 정보를 파악함으로써, GPU 리소스 점유량에 따른 스케줄링 방식을 간접적으로 판단할 수 있다. https://docs.nvidia.com/cuda/inline-ptx-assembly/index.html Inline PTX Assembly :: CUDA Toolkit Documentation The compiler front end does not parse the asm.. 2019. 10. 28. 이전 1 2 3 다음