CUDA でプログラムを書くのに問題があります。私が実行しているプログラムは、行列とベクトルの乗算を実行し、導入されたベクトルに応じて結果を返す暗号化です。問題は、私は C++ と CUDA の両方で時間をかけており、CUDA よりも C++ の方が良い結果が得られることです。暗号化にはいくつかのキーが必要なため、ループを作成しました。コードは次のとおりです。
t1 = clock();
do {
HANDLE_ERROR ( cudaMemcpy(MAT_dev, MAT, nBytes, cudaMemcpyHostToDevice) );
HANDLE_ERROR ( cudaMemcpy(VEC_dev, VEC, nBytes, cudaMemcpyHostToDevice) );
mult<<< 1, b >>>(MAT_dev, VEC_dev, SOL_dev, b);
HANDLE_ERROR ( cudaMemcpy(SOL, SOL_dev, nBytes, cudaMemcpyDeviceToHost) );
for (i = 0; i < b; i++) {
cout << SOL[i] << " ";
}
cout << endl;
for (i = 0; i < b; i++) {
VEC[i] = SOL[i];
}
cont = cont + 1;
} while (cont < w);
t2 = clock();
私の結果:
C++ : 11.474 分
CUDA : 40.464 分
キーの数は1,000,000でした。Matrix 7 x 7 と Vector 7。
大丈夫なのか、それとも高速化するために何かが足りないのかわかりません。
ご協力いただきありがとうございます。