the launch timed out and was terminated + "драйвер перестал отвечать..."

Здравствуйте. Пытаюсь запустить пример из книжки CUDA by Example, из главы 4,2,2 с фракталом Джулиа.

  1. #include "book.h"
  2. #include "cpu_bitmap.h"
  3.  
  4. #define DIM 1000
  5.  
  6. struct cuComplex {
  7.     float   r;
  8.     float   i;
  9.     __device__ cuComplex( float a, float b ) : r(a), i(b)  {}
  10.     __device__ float magnitude2( void ) {
  11.         return r * r + i * i;
  12.     }
  13.     __device__ cuComplex operator*(const cuComplex& a) {
  14.         return cuComplex(r*a.r - i*a.i, i*a.r + r*a.i);
  15.     }
  16.     __device__ cuComplex operator+(const cuComplex& a) {
  17.         return cuComplex(r+a.r, i+a.i);
  18.     }
  19. };
  20.  
  21. __device__ int julia( int x, int y ) {
  22.     const float scale = 1.5;
  23.     float jx = scale * (float)(DIM/2 - x)/(DIM/2);
  24.     float jy = scale * (float)(DIM/2 - y)/(DIM/2);
  25.  
  26.     cuComplex c(-0.8, 0.156);
  27.     cuComplex a(jx, jy);
  28.  
  29.     int i = 0;
  30.     for (i=0; i<200; i++) {
  31.         a = a * a + c;
  32.         if (a.magnitude2() > 1000)
  33.             return 0;
  34.     }
  35.  
  36.     return 1;
  37. }
  38.  
  39. __global__ void kernel( unsigned char *ptr ) {
  40.     // map from blockIdx to pixel position
  41.     int x = blockIdx.x;
  42.     int y = blockIdx.y;
  43.     int offset = x + y * gridDim.x;
  44.  
  45.     // now calculate the value at that position
  46.     int juliaValue = julia( x, y );
  47.     ptr[offset*4 + 0] = 255 * juliaValue;
  48.     ptr[offset*4 + 1] = 0;
  49.     ptr[offset*4 + 2] = 0;
  50.     ptr[offset*4 + 3] = 255;
  51. }
  52.  
  53. // globals needed by the update routine
  54. struct DataBlock {
  55.     unsigned char   *dev_bitmap;
  56. };
  57.  
  58. int main( void ) {
  59.     DataBlock   data;
  60.     CPUBitmap bitmap( DIM, DIM, &data );
  61.     unsigned char    *dev_bitmap;
  62.  
  63.     HANDLE_ERROR( cudaMalloc( (void**)&dev_bitmap, bitmap.image_size() ) );
  64.     data.dev_bitmap = dev_bitmap;
  65.  
  66.     dim3    grid(DIM,DIM);
  67.     kernel<<<grid,1>>>( dev_bitmap );
  68.  
  69.     HANDLE_ERROR( cudaMemcpy( bitmap.get_ptr(), dev_bitmap,
  70.                               bitmap.image_size(),
  71.                               cudaMemcpyDeviceToHost ) );
  72.                              
  73.     HANDLE_ERROR( cudaFree( dev_bitmap ) );
  74.                              
  75.     bitmap.display_and_exit();
  76. }

У меня почему то приложение падает падает при попытке cudaMemcpy( bitmap.get_ptr(), dev_bitmap, bitmap.image_size(), cudaMemcpyDeviceToHost ). т.е. макрос HandleError пишет именно номер этой строки и ошибку - "the launch timed out and was terminated". также драйвер перестает отвечать и система пишет уведомление, что мол, восстановила его. При значение DIM - 400, программа отработала, но драйвер все равно упал. при 500 - падает с ошибкой, при 300 нормально работает. Видиокарта 9600GSO, win 7 Pro, дравйвера самые новые. Подскажите пожалуйста, в чём может быть проблема. Спасибо.

Forums: 

Про "драйвер перестал

Про "драйвер перестал отвечать" - смотрите сюда: http://www.gpgpu.ru/node/828#comment-2939

А беда ваша вот в чем
- у вас в блоке - 1 thread
- блоков всего (для сетки 500x500) - 250 тысяч
- максимальное количество резидентных блоков в мультипроцессоре - 8. Мультипроцессоров в 9600GSO - 6 штук, кажется.

Т.е. одновременно (на карте) исполняются 48 блоков, загружая карту на несколько процентов, потому и долго.

Оказалось проблема была в

Оказалось проблема была в том, что я компилировал Debug версию... в Relesase версии всё норм. Что касается TDR: вроде я его выключил (зашел в HKLM\System\CurrentControlSet\Control\GraphicsDrivers, там было пусто. Я создал параметр TdrLevelOff с 0).
Может быть я что то упустил?) Из за чего так получается?) Спасибо.

Обьясните что делать с

Обьясните что делать с TDR
Программа вроде написана,даже скомпилена и запущена, но она выдает всякого рода "шумы"(надеюсь вы поняли меня,если нет,то это всякие полосы горизонтальные)
и с этим ничего нельзя поделать

Хотел бы с этим разобраться,а то считать фрактал на ЦПУ не хочется
В частности NSight говорит вот так мне:
Nsight Debug
The remote system's TDR delay is set to 2 seconds. This will timeout when setting breakpoints on the target. Please modify the system's TDR setting.
Nsight Debug
Shader Debugging and Pixel History are disabled when running locally.

Ну так NSight прямо там же

Ну так NSight прямо там же предлагает кнопку "выключить TDR", во всяком случае в старых версиях было так.

как уже отмечалось на этом

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

Или нужно все те ключи мне создать???

Нужны именно ключи в

Нужны именно ключи в registry. Собственно TdrLevel = 0

Простейший способ - я проверил - запустить Nsight Monitor открыть там Options и в General - 'Microsoft Display Driver' поставить WDDM TDR Enabled в False. Ну и перезагрузиться.

библиотеки

тот же пример, но у меня ругется на библиотеки
#include "book.h"
#include "cpu_bitmap.h"
мол нету таких, собственно где их взять и куда засунуть
p.s. если кто знает где можно найти мануальчик по куде в виндус 7x32 и студио 2008 в стиле "для чайников" ссылочку дайте пож.

спс

благодарю

А дальше?

Скажите пожалуйста куда поместить эти заголовочные файлы и как правильно вызвать? Архив с файлами и примерами уже скачал и сами файлы нашёл, но не могу разобраться как ими воспользоваться. Компилятор ошибку выдаёт на строке inciude. Спасибо!

Есть проблема с этими book.h

Есть проблема с этими book.h and cpu_bitmap.h
при компиляции второй программы из книги CUDA by Example, из главы 3,2,3 прога мне выдает кучу ошибок именно в библиотеке
что делать???
мыслей у меня нету вообще никаких(=