Простое программирование на GPU (с помощью Cg?) - PullRequest
1 голос
/ 10 февраля 2012

Я очень хочу узнать, как использовать возможности параллельной обработки графических процессоров.Тем не менее, я не хочу делать графику!Я попробовал учебник Cg, но он кажется тяжелым с графическими терминами.Кроме того, я не могу понять, как я могу подключить такую ​​программу к некоторому входу и выходу.

Давайте рассмотрим следующую очень простую программу, которая, очевидно, может выиграть от параллелизма (игнорируя медленную скорость жесткого диска):Чтение двух больших целочисленных массивов из 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 ]

2 голосов
/ 10 февраля 2012

Cg действительно для шейдеров, вам будет лучше использовать CUDA , однако, если вы не готовы использовать Cg с фрагментными шейдерами, посмотрите на это базовый пример (вычисления на основе двумерной сетки).

0 голосов
/ 10 февраля 2012

Попробуйте взглянуть на C ++ AMP http://blogs.msdn.com/b/vcblog/archive/2011/06/15/introducing-amp.aspx

В общем, вы должны знать, что ускорения минимальны, когда вы используете двойную точность по сравнению с дополнительными усилиями, которые вы должны вставить в свой код. Это при сравнении с 6-ядерным решением SSE, которое можно включить с помощью переключателя компилятора (и, возможно, с помощью VTune от Intel для анализа производительности)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...