cuda 병렬 프로그래밍 예제

나는 더 CUDA 프로그래밍 자료와 함께이 게시물을 후속 할 계획이지만, 지금 당신을 바쁘게 하기 위해, 당신이 계속 할 수있는 이전 소개 게시물의 전체 시리즈가있다 (나는 업데이트 / 필요에 따라 미래에 교체 계획): CUDA C ++는 w 중 하나입니다 당신은 CUDA와 대규모 병렬 응용 프로그램을 만들 수 있습니다. 이를 통해 강력한 C++ 프로그래밍 언어를 사용하여 GPU에서 실행되는 수천 개의 병렬 스레드에 의해 가속화된 고성능 알고리즘을 개발할 수 있습니다. 딥 러닝(Deep Learning)으로 알려진 인공 지능의 지속적인 혁명을 뒷받침하는 라이브러리와 프레임워크를 포함하여 많은 개발자가 이러한 방식으로 계산 및 대역폭이 부족한 응용 프로그램을 가속화했습니다. 다음은 Tesla M2050 CUDA C 컴파일러 nvcc의 예시 프로파일링 결과이며 NVIDIA CUDA 툴킷의 일부입니다. SAXPY 예제를 컴파일하려면 .cu 확장명이 있는 파일에 코드를 저장합니다.saxpy.cu. 그런 다음 nvcc로 컴파일 할 수 있습니다. 다음은 C(./vector_add.c)에서 구현된 벡터 추가의 예입니다. 이 예제에서는 배열 a와 b에 저장된 두 벡터의 추가를 계산하고 결과를 배열에 배치합니다. CUDA 프로그램을 컴파일하는 것은 C 프로그램과 유사합니다. NVIDIA는 CUDA 툴킷에서 nvcc라는 CUDA 컴파일러를 제공하여 일반적으로 .cu 확장자가 있는 파일에 저장된 CUDA 코드를 컴파일합니다. 예를 들어 CUDA 프로그래밍에서는 CPU와 GPU가 모두 컴퓨팅에 사용됩니다. 일반적으로 CPU와 GPU 시스템을 각각 호스트 및 장치라고 합니다.

CPU와 GPU는 자체 메모리 공간을 갖춘 분리된 플랫폼입니다. 일반적으로 CPU에서 직렬 워크로드를 실행하고 병렬 계산을 GPU로 오프로드합니다. CUDA 안녕하세요 세계 예제는 아무것도하지 않으며, 프로그램이 컴파일된 경우에도 아무것도 화면에 표시되지 않습니다. 작업을 실행하기 위해 벡터 추가를 살펴봅니다. 위의 트리플 브래킷은 하나의 스레드 블록과 하나의 스레드를 사용합니다. 현재 엔비디아 GPU는 많은 블록과 스레드를 처리할 수 있습니다. 예를 들어 파스칼 GPU 아키텍처를 기반으로 하는 Tesla P100 GPU에는 각각 최대 2048개의 활성 스레드를 지원할 수 있는 56개의 스트리밍 멀티프로세서(SM)가 있습니다. 프로그램을 가속화하기 위해 CUDA 라이브러리 루틴을 찾을 수 없는 경우 낮은 수준의 CUDA 프로그래밍에서 사용해 보십시오. 2000년대 후반에 처음 시도했을 때보다 훨씬 쉬워졌습니다. 다른 이유 중에서도 구문이 더 쉬울 수 있으며 더 나은 개발 도구를 사용할 수 있습니다.

내 유일한 단점은 MacOS에서 최신 CUDA 컴파일러와 최신 C ++ 컴파일러 (Xcode의 컴파일러)가 거의 동기화되지 않았다는 것입니다. 하나는 애플에서 이전 명령줄 도구를 다운로드 하 고 컴파일 하 고 링크 하는 CUDA 코드를 얻기 위해 xcode-select를 사용 하 여 그들을 전환 해야. 마틴 헬러는 InfoWorld의 기고 편집자이자 리뷰어입니다. 이전에는 웹 및 Windows 프로그래밍 컨설턴트였으며 1986년부터 2010년까지 데이터베이스, 소프트웨어 및 웹 사이트를 개발했습니다. 최근에는 알파 소프트웨어에서 기술 및 교육 부사장을 역임했으며 Tubifi의 회장 겸 CEO를 역임했습니다. 딥 러닝은 컴퓨팅 속도에 대한 엄청난 필요성을 가지고 있습니다. 예를 들어, 2016년 구글 번역 모델을 훈련하기 위해 구글 브레인과 구글 번역 팀은 GPU를 사용하여 수백 번의 텐서플로우(TensorFlow) 실행을 수행했습니다. 그들은 목적을 위해 엔비디아에서 2,000 서버 급 GPU를 구입했다.

GPU가 없었다면, 이러한 훈련 은 수렴하는 데 일주일이 아닌 몇 달이 걸렸을 것입니다. 이러한 TensorFlow 번역 모델의 프로덕션 배포를 위해 Google은 새로운 사용자 지정 처리 칩인 TPU(텐서 처리 장치)를 사용했습니다. 지금까지 실행 구성의 첫 번째 매개 변수가 스레드 블록 수를 지정한다고 추측했을 수 있습니다. 병렬 스레드 블록은 함께 그리드라고 하는 것을 구성합니다. 처리할 N 요소와 블록당 256개의 스레드가 있기 때문에 최소 N 스레드를 얻으려면 블록 수를 계산하기만 하면 됩니다.