모든 사람은이 거대한 병렬화 된 슈퍼 컴퓨터를 데스크탑에 그래픽 카드 GPU 형태로 가지고 있습니다.
- GPU 커뮤니티와 “hello world”는 무엇입니까?
- 주요 GPU 공급 업체를위한 GPU 프로그래밍을 시작하려면 어떻게해야합니까?
-아담
답변
GPU 프로그래밍을 수행하는 가장 쉬운 플랫폼 인 NVidia, IMO CUDA를 확인하십시오. 읽을 멋진 자료가 많이 있습니다.
http://www.nvidia.com/object/cuda_home.html
Hello world는 GPU를 사용하여 모든 종류의 계산을 수행하는 것입니다.
희망이 도움이됩니다.
답변
- 프로그래밍 가능한 정점 및 픽셀 셰이더를 통해 GPU에서 직접 코드를 실행하여 그려 질 버퍼를 조작 할 수 있습니다. 이 언어들 (즉, OpenGL의 GL Shader Lang 및 High Level Shader Lang 및 DirectX의 등가물)은 C 스타일 구문이며 사용이 매우 쉽습니다. XNA 게임 스튜디오와 Direct X에 대한 HLSL의 몇 가지 예를 여기 에서 찾을 수 있습니다. 적절한 GLSL 참조는 없지만 많은 것이 있습니다. 이 쉐이더 언어는 그래픽 카드에서 직접 정점 또는 픽셀 단위로 그려지는 것을 조작하여 그림자, 조명 및 꽃과 같은 것들을 구현하기가 매우 힘이 큽니다.
- 두 번째로 고려해야 할 것은 openCL 을 사용
하여 새로운 범용 GPU 라인을 코딩하는 것입니다. 이 사용법을 잘 모르겠지만 OpenCL은 그래픽 카드와 일반 CPU 모두에서 프로세서에 액세스 할 수있는 시작을 제공한다는 것을 이해합니다. 이것은 아직 주류 기술이 아니며 Apple이 주도한 것으로 보입니다. - CUDA 는 뜨거운 주제 인 것 같습니다. CUDA는 nVidia가 GPU 성능에 액세스하는 방식입니다. 여기 소개가 있습니다
답변
다른 사람들이 당신의 두 번째 질문에 대답했다고 생각합니다. CUDA의 첫 번째 “Hello World”에 관해서는 표준이 있다고 생각하지 않지만 개인적으로 병렬 가산기 (즉, N 정수를 합산하는 프로그램)를 권장합니다.
NVIDIA SDK에서 “축소”예제를 살펴보면 표면적으로 간단한 작업을 확장하여 통합 읽기, 메모리 뱅크 충돌 및 루프 언 롤링과 같은 수많은 CUDA 고려 사항을 보여줄 수 있습니다.
자세한 내용은이 프레젠테이션을 참조하십시오.
http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf
답변
ATI Stream Computing SDK를 살펴보십시오 . 스탠포드에서 개발 된 BrookGPU를 기반으로 합니다.
앞으로 모든 GPU 작업은 OpenCL을 사용하여 표준화 될 것 입니다. 그래픽 카드 공급 업체 중립적 인 애플 후원 이니셔티브입니다.
답변
OpenCL 은 무엇보다도 GPU에 적합한 코드를 프로그래밍 할 수있는 크로스 플랫폼 라이브러리를 만들기위한 노력입니다. 어떤 GPU에서 실행 될지 몰라도 코드를 작성할 수 있으므로 특정 유형의 GPU를 대상으로하지 않고도 GPU 성능을보다 쉽게 사용할 수 있습니다. 네이티브 GPU 코드만큼 성능이 떨어지거나 GPU 제조업체가 허용하는 네이티브 성능이라고 생각하지만 일부 응용 프로그램에서는 그만한 가치가 있습니다.
여전히 초기 단계이지만 (이 답변의 1.1)이 산업에서 약간의 인기를 얻었습니다. 예를 들어 OS X 10.5 이상에서 기본적으로 지원됩니다.
답변
CUDA는 시작하기에 훌륭한 프레임 워크입니다. C로 GPGPU 커널을 작성할 수 있습니다. 컴파일러는 코드에서 GPU 마이크로 코드를 생성하고 CPU에서 실행되는 모든 것을 일반 컴파일러로 보냅니다. NVIDIA에만 해당되며 8 시리즈 카드 이상에서만 작동합니다. CUDA 영역 을 확인하여 해당 영역 으로 수행 할 수있는 작업을 확인할 수 있습니다. CUDA SDK 에는 훌륭한 데모가 있습니다 . SDK와 함께 제공되는 설명서는 실제로 코드를 작성하기위한 좋은 출발점입니다. 매트릭스 곱셈 커널을 작성하는 과정을 안내합니다. 시작하기 좋은 곳입니다.
답변
CUDA 또는 OpenCL에 들어 가지 않고 GPU 프로그래밍에 들어가는 또 다른 쉬운 방법은 OpenACC 를 통해 수행하는 것 입니다.
OpenACC는 OpenMP와 같이 작동하며 컴파일러 지시문 (예 🙂 #pragma acc kernels
을 사용하여 GPU로 작업을 보냅니다. 예를 들어, 큰 루프가있는 경우 (더 큰 루프 만 실제로 도움이 됨) :
int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
b[i] = b[i] * a;
}
편집 : 불행히도 PGI 컴파일러만이 NVIDIA GPU 카드에서 현재 OpenACC를 실제로 지원합니다.