02 Ago 2019

cuda 프로그래밍 예제

멀티 블록 협동 조합 (MBCG)은 상호 스레드 블록 동기화를 표현하기 위해 협동 그룹과 CUDA 프로그래밍 모델을 확장합니다. MBCG는 파스칼 및 상위 아키텍처가 있는 GPU에서 사용할 수 있습니다. CUDA 프로그래밍에서는 CPU와 GPU가 모두 컴퓨팅에 사용됩니다. 일반적으로 CPU와 GPU 시스템을 각각 호스트 및 장치라고 합니다. CPU와 GPU는 자체 메모리 공간을 갖춘 분리된 플랫폼입니다. 일반적으로 CPU에서 직렬 워크로드를 실행하고 병렬 계산을 GPU로 오프로드합니다. OpenMP는 다중 처리 프로그래밍을 위한 API입니다. OpenMP는 Linux 배포판의 패키지 관리자 시스템을 사용하여 설치할 수 있습니다. 그것은 일반적으로 GCC와 함께 사전 설치 되어 온다. 그것은 또한 OpenMP 웹 사이트에서 찾을 수 있습니다. CUDA는 CUDA 지원 GPU를 위한 플랫폼 및 프로그래밍 모델입니다.

이 플랫폼은 범용 컴퓨팅을 위해 GPU를 노출합니다. CUDA는 GPU프로그래밍 및 관리를 위한 C/C++ 언어 확장 및 API를 제공합니다. DirectX 12는 드라이버 오버헤드를 줄일 수 있는 고급 저수준 프로그래밍 API의 모음으로, Windows 10 OS부터 시작하여 Microsoft 플랫폼에서 멀티미디어 응용 프로그램을 개발할 수 있도록 설계되었습니다. 마이크로소프트 플랫폼의 경우, 엔비디아의 CUDA 드라이버는 DirectX를 지원합니다. Windows용 CUDA 샘플은 이러한 샘플을 빌드하기 위해 WINDOWS 10 SDK 이상, VS 2015 또는 VS 2017을 사용하여 CUDA-DirectX12 상호 운용성을 보여 줍니다. NVGRAPH는 GPU 가속 그래프 분석 라이브러리입니다. . . . C와 CUDA 구현의 주요 차이점은 __global__ 지정자 및 <<> 구문입니다. __global__ 지정기는 장치(GPU)에서 실행되는 함수를 나타냅니다.

이러한 함수는 호스트 코드(예: 예제의 main() 함수를 통해 호출될 수 있으며 "커널"이라고도 합니다. CUDA에서는 __global__ 선언 지정기에서 saxpy와 같은 커널을 정의합니다. 장치 코드 내에 정의된 변수는 장치에 상주하는 것으로 가정하기 때문에 장치 변수로 지정할 필요가 없습니다. 이 경우 n, a 및 i 변수는 레지스터의 각 스레드에 의해 저장되고 포인터 x 및 y는 장치 메모리 주소 공간에 대한 포인터여야 합니다. 호스트 코드에서 d_x 및 d_y를 커널에 전달했기 때문에 이는 사실입니다. 그러나 처음 두 인수인 n과 a는 호스트 코드에서 장치로 명시적으로 전송되지 않았습니다. 함수 인수는 C/C++에서 기본적으로 값으로 전달되므로 CUDA 런타임은 이러한 값을 장치로 자동으로 전송할 수 있습니다. CUDA 런타임 API의 이 기능은 GPU에서 커널을 매우 자연스럽고 쉽게 실행할 수 있게 해주며, 이는 C 함수를 호출하는 것과 거의 동일합니다. 참고 :이 게시물은 게시물에 기반 "CUDA 포트란에 쉬운 소개" 그레고리 로이츠에 의해.

다음 표는 C와 CUDA의 헬로 월드 프로그램을 나란히 비교합니다. FreeImage는 오픈 소스 이미징 라이브러리입니다. FreeImage는 일반적으로 배포판의 패키지 관리자 시스템을 사용 하 여 리눅스에 설치할 수 있습니다. 무료 이미지는 또한 FreeImage 웹 사이트에서 다운로드 할 수 있습니다. FreeImage는 CUDA 샘플과 함께 재배포됩니다. NVJPEG 라이브러리는 딥 러닝 및 하이퍼스케일 멀티미디어 애플리케이션에서 일반적으로 사용되는 이미지 형식에 대한 고성능, GPU 가속 JPEG 디코딩 기능을 제공합니다. EGLSync는 완료를 테스트하거나 기다릴 수 있는 이벤트를 나타내는 동기화 기본 개체인 동기화 개체를 제공하는 EGL 확장 집합입니다. NVRTC(CUDA 런타임 컴파일)는 CUDA C++에 대한 런타임 컴파일 라이브러리입니다. 화면은 QNX 운영 체제에서 찾을 수있는 창 시스템입니다. 화면은 일반적으로 루트 파일 시스템의 일부로 발견됩니다. 포인터 x와 y는 일반적인 방식으로 malloc으로 할당된 호스트 배열을 가리키며, d_x 및 d_y 배열은 CUDA 런타임 API에서 cudaMalloc 함수로 할당된 장치 배열을 가리킵니다.