алгоритм деления, который вызывает функцию ядрами процессора и запускает функцию на ядре графического процессора - PullRequest
0 голосов
/ 01 января 2012

Я просто бездельничаю, пытаясь немного узнать о параллельных вычислениях.Если есть что-то похожее на это,

long A[12];
long B[5,000,000];
long C[12];
long long total=0;
long long tmp; 

GPUKernel(){

    for (n=0; n < 5,000,000; ++n) {
        B[n]=0;
    }

        for (n=0; n < 5,000,000; ++n) {
             for (n2=0; n2 < 12; ++n2) {
                 B[n]+=C[A[n2]];   
             }
             tmp+=B[n];      
        }  

     if (tmp > total) {
         total=tmp;
         tmp=0;
     } 
 }



int main(){

    srand( (unsigned)time( NULL ) );   

    for (n=0; n < 12; ++n) {
        C[n]=rand() % 1000000;
    }

    for (n=0 ; n < 8916100448256 ; ++n) {    
        ++A[0];
        for (p=0; n<11; ++p) {
            if (A[p]==12) {
                A[p]=0;         
                ++A[p+1];
            } 
        }
    GPUKernel();
    }

 return 0;   
}

Моя идея в том, что я получу количество потоков, которые может использовать процессор.Например, если их 4, я сделаю отдельные копии всех данных о том, сколько раз я делаю столько потоков ЦП.Так что каждое ядро ​​GPU будет иметь свои собственные данные.Имеет ли это смысл?Будет ли это хорошим способом выполнения этой задачи?

//cpu core 1
for (n=0; n < 8916100448256/4 ; ++n) {
    ...
GPUKernel1();
}

//cpu core 2
for (n=(8916100448256/4; n < (8916100448256/4)*2 ; ++n) {
   ...  
GPUKernel2();
}

//cpu core 3
for (n=(8916100448256/4)*2; n < (8916100448256/4)*3 ; ++n) {
   ...       
GPUKernel3();
}

//cpu core 4
for (n=(8916100448256/4)*3; n < 8916100448256) ; ++n) {
   ...      
GPUKernel4();
}

1 Ответ

1 голос
/ 03 января 2012

Поправьте меня, если я ошибаюсь, но это похоже на алгоритмы вопросов.OpenCL нигде на картинке нет.Кстати, когда вы пишете код ядра в OpenCL / CUDA, данные, выделенные каждому потоку, будут определены по идентификатору потока этого потока, вы можете разделить их по блокам и т. Д. Пожалуйста, обратитесь к руководству по программированию (NVIDIA / AMD).

...