Введение в архитектуру графических процессоров NVIDIA

Поскольку графические процессоры развивались в своей собственной среде, у них не только другая архитектура, как было сказано выше, но и другой набор терминов. Но мере изучения терминологии графических процессоров вы увидите сходство с подходами, рассмотренными в предыдущих разделах, например сходство с мелкомодульной многопоточностью и векторами.

Чтобы помочь вам с переходом к новым словам, будет представлено краткое введение в термины и идеи, используемые в архитектуре Tesla GPU и в программной среде CUDA.

Отдельная микросхема GPU расположена па карте, которая подключена к персональному компьютеру через разъем шины PCI-Express. Так называемые GPU, встроенные в материнскую плату, интегрированы в чипсет материнской платы, например в северный мост или в южный мост.

Графические процессоры обычно предлагаются в виде семейства микросхем с разными диапазонами стоимости производительности, сохраняющими программную совместимость друг с другом. Наборы микросхем на основе Tesla GPU предлагаются в диапазоне от 1 до 16 узлов, которые NVIDIA называет мультипроцессорами. В начале 2008 года самая старшая версия называлась GeForce 8800 GTX, имела 16 мультипроцессоров и тактовую частоту 1,35 ГГц. Каждый мультипроцессор имел восемь многопоточных блоков для работы с числами с плавающей точкой одинарной точности и блоки обработки целых чисел, которые NVIDIA называла потоковыми процессорами.

Поскольку архитектура включает инструкции умножения-сложения чисел с плавающей точкой одинарной точности, пиковая производительность умножения-сложения одинарной точности чипсета 8800 GTX равна 16 МР.

Каждый из 16 мультипроцессоров в составе GeForce 8800 GTX имеет локальное программно-управляемое запоминающее устройство объемом 16 Кбайт плюс 8192 32-разрядных регистра. Система памяти 8800 GTX состоит из шести сегментов 900 МГц графической DDR3 DRAM-памяти, каждый шириной 8 байт и объемом 128 Мбайт. Общий объем памяти, таким образом, составляет 768 Мбайт.

Чтобы скрыть латентность памяти, каждый потоковый процессор имеет аппаратно-поддерживаемые потоки. Каждая группа из 32 потоков называется варпом (warp). Варп является блоком диспетчеризации, и активные потоки в варпе выполняются в параллельном режиме SIMD-способом. Но многопоточная система справляется с условиями, позволяя потокам расходиться по разным путям условных переходов. Когда потоки варпа идут по расходящимся путям, варп последовательно выполняет код по обоим маршрутам, делая неактивными некоторые потоки, что приводит к более медленному выполнению активных потоков. Как только условная часть завершится, оборудование снова объединяет потоки в полностью активный варп. Для достижения наивысшей производительности все 32 потока варпа нуждаются в совместном параллельном выполнении. Похожим образом оборудование также следит за течением адресов, поступающих от разных потоков, чтобы попытаться объединить отдельные запросы в меньшее количество передач более крупных блоков памяти для увеличения производительности при работе с памятью.

Каждый микропроцессор Tesla состоит из восьми потоковых процессоров, которые выполняют восемь параллельных потоков за тактовый цикл, что показано на горизонтальной оси. Как ранее уже упоминалось, наивысшая производительность достигается, когда все 32 принадлежащих варпу потока выполняются вместе в SIMD-подобной манере, что в архитектуре Tesla называется «одна инструкция — несколько потоков (single-instruction multiple-thread, SIMT). SIMT в динамическом режиме обнаруживает, какие принадлежащие варпу потоки могут выполнять вместе одну и ту же инструкцию и какие независимые потоки будут простаивать в данном цикле. Ядро Т2 содержит только один многопоточный процессор. В каждом цикле он выполняет одну инструкцию для одного потока.

В микропроцессоре Tesla используется мелкомодульная аппаратная многопоточность для диспетчеризации по времени 24 варпов, которые показаны вертикально в блоках из четырех тактовых циклов. Аналогично этому, UltraSPARC T2 осуществляет диспетчеризацию по времени восьми аппаратно поддерживаемых потоков, показанных по вертикали, по одному в каждом цикле. Таким образом, так же, как оборудование T2 осуществляет переключение между потоками для поддержания занятости ядра T2, оборудование Tesla осуществляет переключение между варпами, чтобы сохранить занятость мультипроцессора Tesla. Основное различие состоит в том, что у ядра T2 имеется один процессор, способный переключать потоки с каждым тактовым циклом, в то время как минимальной единицей переключения варпов в мультипроцессоре Tesla является интервал в два тактовых цикла параллельно для восьми потоковых ядер. Хотя Tesla предназначен для программ с большим объемом параллелизма на уровне данных, разработчики считали, что между переключениями каждые два или четыре цикла по сравнению с переключениями на каждом цикле различий в производительности немного и что при ограничении частоты переключений оборудование было бы намного проще.

У среды программирования CUD А также есть своя собственная терминология. Программа CUDA является унифицированной С/С++-программой, предназначенной для гетерогенного центрального процессора и системы GPU. Она выполняется на центральном процессоре и осуществляет диспетчеризацию параллельной работы для GPU. Эта работа состоит из передачи данных от оперативной памяти и из диспетчеризации потоков. Поток является частью программы для GPU. Программисты указывают количество потоков в поточном блоке и количество поточных блоков, которое требуется запустить на выполнение на GPU. Программисты заботятся о поточных блоках, поскольку все потоки в блоке подвергаются диспетчеризации для запуска на одном и том же мультипроцессоре, поэтому они совместно используют одну и ту же локальную память. Благодаря этому они могут обмениваться данными через загрузки и сохранения, а не через сообщения. Компилятор CUDA распределяет регистры каждому потоку при том ограничении, что количество регистров на один поток, умноженное на количество потоков на паточный блок, не должно превышать число, равное 8192 регистрам на один мультипроцессор.

Потоковый блок может иметь до 512 потоков. Каждая группа из 32 потоков в потоковом блоке запакована в варпы. Большие потоковые блоки более эффективны, чем небольшие, и они могут уменьшаться до одного блока. Как уже ранее упоминалось, потоковые блоки и варпы, состоящие менее чем из 32 потоков, работают менее эффективно, чем заполненные.

Аппаратная диспетчеризация старается, по возможности, спланировать выполнение нескольких потоковых блоков на мультипроцессоре. Если это удается, диспетчер также динамически делит 16 Кбайт локального запоминающего устройства между различными потоковыми блоками.





Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: