2013-02-14 198 views
-1

我有一個程序在c + +,我想這個代碼cuda,通常我正在尋找一種方法來做到這一點 我的假設是: 1-全局變量 2-global array我如何使這個代碼cuda(cpu代碼到cuda代碼)

問題1: 我需要在全局中定義像主機數組一樣的設備數組嗎?

問題#2: 只能使用設備數組嗎?

問題3: 我想要一個優化代碼,我並行使用循環更好嗎?

Func_2()是困難的部分轉換爲CUDA我,請有人告訴我的簡化代碼

簡化的代碼是:

#define R 16 
#define C 32 
#define run_t 60 
#define max 3000 

double array1 [R][C]; 
double array2 [R]; 
double array3 [R]; 
double array4 [C]; 

double r; 
double min; 


int main() 
{ 
    int iter,run,j; 
    double mean; 
    srand(time(NULL)); 

    for (run=0;run<run_t;run++)// 60 Loop 
    { 

    Func_1(); 
    Func_2(); 
    for (iter=0;iter< max ;iter++)//3000 Loop 
     { 
     Func_3(); 
     Func_4(); 
     Func_5(); 
     Func_6(); 
     func_7(); 
     } 
    } 
} 

double Func_00(array4[C]) 
{ 
    double top=0; 
    for(int j=0;j<C;j++) 
     top=array4[j]*array4[j] 
    return top; 
} 
void Func_0(int index) 
{ 
    for(int j=0;j<C;j++) 
    { 
     r= rand()+1/2+index;//for example 
    } 
    array2[index]= Func_00(array4[]); 
} 

void Fun_1() 
{ 
    int i; 
    for(i=0;i<R;i++) 
    { 
     Func_0(i); 
    } 
    for(i=0;i<C;i++) 
    { 
     array4 = array1[0][i]; 
    } 
} 

void Fun_2() 
{ 
    int i,j; 
    for(i=0;i<R;i++) 
    { 
     if(array2[R]<min) 
     { 
      min=array2[i]; 
      for(j=0;j<C;j++) 
       array4[j]=array1[i][j]; 
     } 
    } 
} 

void Func_3(){} 
void Func_4(){} 
void Func_5(){} 
void Func_6(){} 
void Func_7(){} 
+2

SO不是一個代碼移植論壇,這裏沒有真正的問題 – 2013-02-14 18:02:11

+0

爲了理解並行性,首先嚐試修改您的代碼以使用pthreads運行。 – 2013-02-14 18:38:00

回答

1

一個偉大的地方開始學習CUDA是Nvidia's CUDA education website

將某些東西移植到CUDA取決於您的確切需求,並且將複雜而簡潔地回答。

+0

謝謝你的回答。我知道​​我的問題是一般的,我是新的cuda,我知道如何讓循環「for」並行以及如何使用array 1d ...我需要更多關於cuda的研究,而且我需要更多的例子,我認爲這是練習CPU代碼轉換爲GPU代碼的好方法,但現在我沒有任何編程cuda的經驗。我想知道我的問題,找到筆記和學習。 – 2013-02-14 22:08:23