2015-01-18 2 views
0

Я следовали учебнику здесь http://www.nvidia.com/docs/IO/116711/sc11-cuda-c-basics.pdfCUDA тема и блоки объяснения

пытаемся научить себя основу программирования GPU. Я до сих пор не совсем понимаю топологию блоков и потоков. На стр. 42 код определяет данные о размере следующим образом:

#define N (2048*2048) 
#define THREADS_PER_BLOCK 512 

Этот учебник делает предположения? Я сейчас на ноутбуке с графическим процессором Nvidia 520m. используя структуру cudaDeviceProp, я смог определить, что я могу управлять 1024 потоками на каждый блок. Что именно определяет количество 2048x2048? Количество блоков? как узнать, правильно ли это?

ответ

1

N (2048 * 2048) количество является общий размер данных. Эта проблема представляет собой проблему с добавлением вектора, поэтому общий размер добавляемых векторов составляет N элементов.

Темы на блок уже определен на 512.

Количество блоков может быть определен с момента запуска ядра:

add<<<N/THREADS_PER_BLOCK,THREADS_PER_BLOCK>>>(d_a, d_b, d_c); 
    ^      ^ 
    number of blocks   number of threads in each block 

Таким образом, общее число блоков в сетке запускаемые составляет 2048 * 2048/512 = 8192

Эти конкретные параметры (512 потоков на блок, всего 8192 блоков) должны быть совместимы с любым доступным в настоящее время графическим процессором CUDA.

+0

Итак, если я правильно вас понимаю. этот 2048 * 2048 - это размер набора данных консерватизма или общее количество потоков. Один, который будет работать со всеми текущими GPU. Когда я запускаю GPU Z, получите эту информацию. 1 многопроцессорные (48 ядер) 1536 нитей на МП нити на блок 1024 размеров резьбы 1024x1024x64 размеров сетки 65535x65535x65535 ли это означает, что я должен иметь возможность работать с 1024 потоков на блок и 1024x1024x64 нитей. или я ограничена 1536 потоками, что будет намного меньше, чем этот код указывает? – mreff555

+1

Я бы очень рекомендовал прочитать первые несколько разделов руководства по программированию c. –

+0

Вы не ограничены 1536 потоками. Блоки блокировки CUDA не все должны быть запланированы в одно и то же время. Они могут быть запланированы один за другим, в какой-то степени разрешено аппаратное обеспечение. Как я уже сказал, 8192 блока из 512 потоков должны работать ** на любом доступном в настоящее время графическом процессоре CUDA **, включая ваши. Невозможно дать вам полный учебник CUDA в пространстве одного вопроса SO или набора комментариев. –

Смежные вопросы