私は Matlab 用の CUDA プログラムを持っていますが、mex バージョンは Visual Studio バージョンよりもはるかに遅くなりますが、in/out 引数の簡単な mexFunction を除いてコードは同じです。mex バージョンは 3 秒かかり、純粋な C は 0.5 秒かかります。
Quadro K2000M カード、CUDA 機能 3.0、CUDA ドライバー 5.5、ランタイム 5.0、Visual Studio 2010 でのプログラミングを使用しています。 \"sm_30,compute_30\" (下位バージョン フラグの削除)。
詳細に、
Pure C コード (Visual Sutdio 2010 プロジェクト用に Nsight 3.1 で作成、コード生成を 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-containing-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);
}
純粋な C では 0.5 秒かかるのに、mex バージョンでは 3 秒かかるのはなぜですか? ヒントをいただければ幸いです。