我有一个用于 Matlab 的 CUDA 程序,但 mex 版本比 Visual Studio 版本慢得多,尽管除了输入/输出参数的简短 mexFunction 之外,代码是相同的。mex 版本需要 3 秒,而纯 C 版本需要 0.5 秒。
我正在使用 Quadro K2000M 卡,CUDA 功能 3.0,CUDA 驱动程序 5.5,运行时 5.0,使用 Visual Studio 2010 编程。我按照 MATLAB 的 mexGPUExample.cu 步骤,仅将设置更改为 -gencode=arch=compute_30,code= \"sm_30,compute_30\"(删除低版本标志)。
详细来说,
纯 C 代码(在 Nsight 3.1 中为 Visual Sutdio 2010 项目创建,将代码生成更改为 compute_30,sm_30)
int main(int argc, char *argv[]){
clock_t begin, end;
double elapsed_time;
// some codes that prepare parameters from argc and argv
begin = clock();
a_function_that_calls_a_cuda_kernel(parameters);
end = clock();
elapsed_time = (double)(end - begin) / CLOCKS_PER_SEC;
printf("elapsed time: %f seconds\n", elapsed_time);
return 0;
}
Matlab mex 代码(遵循 MATLAB 的 mexGPUExample.cu,详细信息在http://www.mathworks.se/help/distcomp/create-and-run-mex-files- contains-cuda-code.html ,稍微修改了设置到 -gencode=arch=compute_30,code=\"sm_30,compute_30\")
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
clock_t begin, end;
double elapsed_time;
// some codes that prepare parameters from prhs
begin = clock();
a_function_that_calls_a_cuda_kernel(parameters);
end = clock();
elapsed_time = (double)(end - begin) / CLOCKS_PER_SEC;
mexPrintf("elapsed time: %f seconds\n", elapsed_time);
}
mex 版本需要 3 秒,而纯 C 版本需要 0.5 秒,为什么?非常感谢任何提示。