我有一個程序在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(){}
SO不是一個代碼移植論壇,這裏沒有真正的問題 – 2013-02-14 18:02:11
爲了理解並行性,首先嚐試修改您的代碼以使用pthreads運行。 – 2013-02-14 18:38:00