나는 matlab에의 CUDA 프로그램을 가지고 있지만, 코드가 IN/OUT 인수에 대한 간단한 mexFunction 제외하고는 동일 불구하고 MEX 버전은 비주얼 스튜디오 버전보다 훨씬 느립니다. mex 버전은 3 초가 걸리고 순수 C는 0.5 초가 걸립니다.같은 코드입니다, mex는 훨씬 느리고 순수한 C입니다, 왜?
Visual Studio 2010을 사용하여 프로그래밍 한 Quadro K2000M 카드, CUDA 기능 3.0, CUDA 드라이버 5.5, 런타임 5.0을 사용하고 있습니다. mexGPUExample.cu에 대한 단계를 MATLAB에서 수행하고 -gencode = arch = compute_30, code = \ "sm_30, compute_30 \"(하위 버전 플래그 삭제). 세부
,
순수 C 코드
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 코드합니다 (mexGPUExample에 따라 (비주얼 Sutdio 2010 프로젝트 Nsight 3.1에서 만든이, compute_30하는 코드 생성, sm_30 변경) .CU는 MATLAB에 의해, http://www.mathworks.se/help/distcomp/create-and-run-mex-files-containing-cuda-code.html의 세부 사항, 약간 -gencode하는 설정을 수정 = 아치 = compute_30, 코드 = \ "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 초가 걸리는 이유는 무엇입니까? 어떤 힌트에도 매우 감사드립니다.
나는 당신이 Stack Overflow를 처음 접했을 것으로 생각한다. 일반적으로 이와 같은 질문에 일부 코드가 포함될 것으로 예상됩니다. 코드가 실제로 동일하다면 GPU에서 천천히 실행됩니다. 많은 스레드를 실행하여 GPU를 활용해야합니다. –
matlab 코드에서 행에 두 번 mex 함수를 호출하면 매번 3 초가 걸릴 수 있습니까? –