первый вызов cudaMalloc длится 7 секунд.

GeForce GTS 450. Первый вызов cudaMalloc длится 7 секунд. Затем все ОК. В чем прикол?

cudaStatus = cudaSetDevice(0);
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
int n = prop.multiProcessorCount;

byte *indicator;
cudaStatus = cudaMalloc(&indicator, n);
// тупка 7 сек. дальше программа работает как и должна.

подметил, что эта особенность вылазит только при первом запуске программы. если второй запуск без перекомпилинья, то все работает быстро.

видел на иностранных форумах подобное поведение. талько там 43 миллисекунды, а у меня целых 7 сек.

похоже это время создания контекста.
например, если вызвать cudaFree(0) в самом начале программы, то будет та же тупка. на маллоке же такой задержка не будет.

вопрос. как ускорить создание контекста???

Forums: 

Попробуй что-то вроде

Попробуй что-то вроде этого:

  1. bool InitCUDA(void)
  2. {
  3.         int count = 0;
  4.         int i = 0;
  5.  
  6.         cudaGetDeviceCount(&count);
  7.         if(count == 0) {
  8.                 fprintf(stderr, "There is no device.\n");
  9.                 return false;
  10.         }
  11.  
  12.         for(i = 0; i < count; i++) {
  13.                 cudaDeviceProp prop;
  14.                 if(cudaGetDeviceProperties(&prop, i) == cudaSuccess) {
  15.                         if(prop.major >= 1) {
  16.                                 break;
  17.                         }
  18.                 }
  19.         }
  20.         if(i == count) {
  21.                 fprintf(stderr, "There is no device supporting CUDA.\n");
  22.                 return false;
  23.         }
  24.         cudaSetDevice(i);
  25.  
  26.         printf("CUDA initialized.\n");
  27.         return true;
  28. }
  29. // main
  30. if(!InitCUDA()) {
  31.                 return 0;
  32.         }

тот же тупеж

Такой же код использую, по сути та же инициализация и тот же тупеж. Кто-нибудь решил проблему?

"7 секунд на 1-м запуске" -

"7 секунд на 1-м запуске" - это не антивирус ли чудит? Проверяя, что программа хорошая?