ядра cuda, использующие pthreads Missing Configuration Error - PullRequest
0 голосов
/ 04 февраля 2012

Что означает отсутствие пропущенной ошибки конфигурации в cuda?Приведенный ниже код является функцией потока. Когда я запускаю этот код, полученная ошибка равна 1, что означает отсутствие ошибки конфигурации.в чем ошибка в этом коде?

  void* run(void *args)
  {
   cudaError_t error;
   Matrix *matrix=(Matrix*)args;
    int scalar=2;
   dim3 dimGrid(1,1,1);
   dim3 dimBlock(1024,1,1);
   cudaEvent_t  start,stop;
   cudaSetDevice(0);
   cudaEventCreate(&start);
   cudaEventCreate(&stop);
   cudaEventRecord(start,0);
   for(int i=0 ;i< matrix->number ;i++ )
   {
   syntheticKernel<<<dimGrid,dimBlock>>>();
   cudaThreadSynchronize();
   }
   cudaEventRecord(stop,0);
   cudaEventSynchronize(stop);
   cudaEventElapsedTime(&matrix->time,start,stop);
   error=cudaGetLastError();
   assert(error!=0);
   printf("%d\n",error);
  }

Ответы [ 2 ]

3 голосов
/ 06 февраля 2012

Можете ли вы добавить более подробную информацию о вашей программе, пожалуйста?Каждая из подпрограмм API CUDA возвращает код состояния, вы должны проверять состояние каждого вызова API, чтобы перехватить и декодировать первую сообщенную ошибку.

Следует проверить, что вы не вызывали подпрограммы CUDA API до вы разветвляетесь.Создание контекста CUDA (который является автоматическим для большинства, но не для всех подпрограмм CUDA API) до того, как вы разветвляете потоки, вызовет проблемы.Проверьте это, и если это не проблема, добавьте больше деталей к своему вопросу и проверьте возвращаемое значение всех вызовов API.

0 голосов
/ 10 февраля 2012

Почему вы запускаете один блок в сетке? Эта конфигурация кажется подозрительной:

dim3 dimGrid(1,1,1);
dim3 dimBlock(1024,1,1);

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

...