-1

私は C++ でプログラムを作成しており、このコードを cuda に変換したいと考えています。一般に、これを行う方法を探しています。私の仮定は次のとおりです。1-グローバル変数 2-グローバル配列

質問 #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(){}
4

1 に答える 1

1

CUDA について学び始めるのに最適な場所は、Nvidia の CUDA 教育 Web サイトです。

何かをCUDAに移植することは、正確なニーズに依存し、簡潔に答えるには複雑すぎます。

于 2013-02-14T18:05:13.130 に答える