Nsight+VS2008 и необходим совет по коду

Проблема 1.
Не удается отдебажить ядро через Nsight (v2.2) в 2008 студии. Карточка 470. СС 2.0. По идее достаточно одной видеокарты, но брейки остаются незамеченными. Может необходимы дополнительные настройки?

Проблема 2.
Есть ядро, которое должно перемешивать значения в массиве.

  1.         int sG,sB;
  2.         if (subsample_size < 16)
  3.         {
  4.                 sG = 1;
  5.                 sB = subsample_size;
  6.         }
  7.         else
  8.         {
  9.                 sG = subsample_size/16 + 1;
  10.                 sB = 16;
  11.         }
  12. //----
  13. shuffle<<<sG,sB>>>(dev_data,dev_GEN_ID_arr,dev_GEN_ID_arr2,subsample_size, count_str-1,steps, stp);
  14. //-----
  15. __global__ void shuffle( int *data, int *GEN_ID_arr,int *GEN_ID_arr2, int subsample_size , int count_str , int steps,int stp)
  16. {
  17.         int tid = threadIdx.x + blockIdx.x * blockDim.x;
  18.  
  19.         while ( tid < subsample_size)//
  20.         {
  21.                 int pos1 = data[tid+subsample_size*stp];// Генерируем 1 случайное число
  22.                 int pos2 = data[(tid+subsample_size*stp)+steps*subsample_size]; // Генерируем 2 случайное число
  23.                
  24.  
  25.                 ///int tmp = GEN_ID_arr[pos2];
  26.                 GEN_ID_arr2[pos1] = GEN_ID_arr[pos2];
  27.                 // синхронизация !
  28.                 __syncthreads();
  29.                 GEN_ID_arr2[pos2] = GEN_ID_arr[pos1];
  30.                 // синхронизация !
  31.                 //__syncthreads();
  32.                 ///GEN_ID_arr2[pos1] = tmp;
  33.                 //GEN_ID_arr[0] = 1099;
  34.                 //__syncthreads();
  35.                
  36.                 tid +=blockDim.x * gridDim.x;
  37.         }
  38.         __syncthreads();
  39.  
  40.         int tid2 = threadIdx.x + blockIdx.x * blockDim.x;
  41.         while ( tid2 < count_str)//
  42.         {
  43.                 GEN_ID_arr[tid2] = GEN_ID_arr2[tid2];
  44.                 tid2 +=blockDim.x * gridDim.x;
  45.         }
  46. }

Ядро запускается, работает, значения в массиве перемешиваются, НО по дальнейшая стат обработка показывает полную чушь.

От запуска к запуску результаты стат обработки меняются в диапазоне от 0 до 1, а должны отличаться максимум на 0,01.
Аналог этого же кода на ЦП работает правильно.

Возможно, упускаю что-то связанное с приватностью доступа к данным, но...

Заранее благодарен за любую помощь.

Forums: 

C 2 проблемой разобрался.

C 2 проблемой разобрался. Решить эту задачу параллельно со случайным доступом нельзя.