2012-02-10 3 views
1

GPU의 병렬 처리 기능을 사용하는 방법을 알고 싶습니다. 그러나 나는 그래픽을 열망하지 않는다. 나는 Cg 튜토리얼을 시도했지만, 그래픽 용어로 무겁다. 게다가, 나는 그러한 프로그램을 어떤 입출력에 어떻게 연결할 수 있는지를 파악할 수없는 것처럼 보인다.간단한 GPU 프로그래밍 (Cg?)

다음과 같은 매우 간단한 프로그램을 생각해 봅시다. 병렬 처리 (HDD 속도를 느리게 무시하십시오)에서 명백하게 이익을 얻을 수 있습니다 : 2 개의 파일에서 2 개의 큰 정수 배열을 읽고, 마지막 두 요소를 추가하여 새로운 배열을 만들고 저장소에 저장하십시오 다른 파일에 있습니다. 나는 그것을 테스트,하지만 난 C++에서 코딩 얼마나 먹으 렴하지 않았다 :

#include <iostream> 
#include <fstream> 
using namespace std; 


int main(void) 
{ 
    const int N=10000000; 
    int a[N],b[N],c[N]; 
    ifstream a_source ("file_a",ios::binary); 
    ifstream b_source ("file_a",ios::binary); 
    ofstream c_target ("file_a",ios::binary); 

    a_source.read((char*)a,N*sizeof(int)); 
    b_source.read((char*)b,N*sizeof(int)); 

    for(int i=0;i<N;i++) 
     c[i]=a[i]+b[i]; 

    c_target.write((char*)c,N*sizeof(int)); 
    return 0; 
} 

당신이 정교시겠습니까 나는 이것에 대한 CG로 사용할 수있는 방법?

+2

Cg에서 죽었습니까? 내가 아는 한 순수하게 쉐이더 언어이므로 범용 GPU 프로그래밍에 반드시 적합한 것은 아닙니다. 대신 CUDA 또는 OpenCL을 살펴보십시오. (주의 할 점 : 당신의 특별한 예제는 물론 사소한 셰이더이지만 그래픽 용으로 개발 된 API 대신 범용 API를 사용하는 것이 더 합리적이라고 생각합니다.) –

+0

Cg는 그래픽의 경우 C이고 GPU의 경우 C가 아닙니다. GPGPU를 사용하여 GPGPU를 수행하려면 그래픽 처리가 어떻게 작동하는지 GPGPU를 매핑 할 수있는 방법을 알아야합니다. – KillianDS

답변

2

Cg은 셰이더 정말, 당신은 당신이 조각 쉐이더와 CG로 사용에 죽은 세트입니다 this 기본적인 예 (2D 그리드를 기반으로 계산)를 보라 그러나 경우, 오프 CUDA를 사용하여 더 나은 것.

+0

+1 문제는 Cg/GLSL이 쉐이딩 언어입니다. 즉, 사용자가 PC의 RAM에서 GPU로 데이터를 전송할 수 있도록 OpenGL을 배우게해야합니다. 영업 사원은이 모든 복잡성을 숨기는 CUDA를 실제로 조사해야합니다. 그러나 내가 기억하는 한, CUDA는 NVIDIA의 GPUS에서만 사용할 수 있습니다. – karlphillip

+0

CUDA는 nVidia GPU에서만 사용할 수 있습니다. GPU 간 플랫폼 버전은 * OpenCL *입니다 (OpenGL 제조사). – cmannett85

+0

CUDA를 선택한 이유는 CUDA와 같은 nVidia 제품 이었기 때문에 훌륭한 도구 및 자습서가 있습니다. :) – Necrolis

0

은 당신이 당신의 코드에 둘 필요가 TEH 추가 efford에 비해 두 배 precission를 사용할 때 속도 향상은 최소한의 것을 인식 할 필요가 C++ AMP 일반적으로 http://blogs.msdn.com/b/vcblog/archive/2011/06/15/introducing-amp.aspx

에서 봐보십시오. 컴파일러 스위치로 켜는 6 코어 SSE 솔루션 (성능 분석을 위해 Intel의 VTune을 사용하는 mauybe)과 비교할 때

관련 문제