我在使用CUDA编写程序时遇到问题。我正在做的程序是一个加密,它通过向量执行矩阵的乘法,并根据我引入的向量给出结果。问题是我在C ++和CUDA中都花时间在C ++中给我一个比CUDA更好的结果。我做的是做一个循环,因为我需要几个加密密钥,代码如下:
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();
我的结果:
密钥数量为1,000,000。 矩阵7 x 7和矢量7。
不知道是否可以,或者我错过了一些让它更快的东西。
感谢您的帮助。
答案 0 :(得分:3)
您的代码可能出现的问题:
cudaMemcpy()
和cout<<
可能的解决方案:
您可能希望阅读CUDA C编程指南&amp;在编写自己的内核之前的C最佳实践指南