4

Я только начал изучать курс параллельного программирования на Udacity, и уже немного растерялся. Здесь, в этом видео сегменте: https://youtu.be/gbj0oauFFI8?t=52s

Нам говорят, что средний GPU имеет тысячи ALU и сотни процессоров. Я смущен частью "сотен процессоров". Почему их так много? Разве это не должен быть один ...? GPU действительно обозначает блок графического процессора. Разве GPU не похож на CPU, это один процессор с тысячами ALU внутри, НО полностью специализированный для определенных задач? Как эти "процессоры" вступают в игру?

Если я не прав, то я предполагаю, что каждый процессор имеет около 10 (потому что 10 * 100 процессоров = 1000 ALU) внутри него. Можно ли посмотреть макет, чтобы я мог это проверить?

Спасибо.

5 ответов5

8

Процессоры SISD, графические процессоры SIMD.

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

SIMD - это одна инструкция, несколько данных: одна и та же операция выполняется одновременно для нескольких наборов данных. Например, взять 128 значений X 1 -X 128, взять 128 значений Y 1 -Y 128, умножить соответствующие значения попарно и вернуть 128 результатов. Процессор SISD должен будет выполнить 128 инструкций (+ чтение / запись в память), поскольку он может умножать только два числа одновременно. Процессор SIMD делает это за несколько шагов или, может быть, даже за один, если в его регистр помещается только 128 номеров.

SISD-процессоры хорошо работают для повседневных вычислений, потому что они в основном последовательные, но есть некоторые задачи, которые требуют перебора больших объемов данных аналогичным образом - например, обработка графики, рендеринг видео, взлом паролей, майнинг биткойнов и т.д. Графические процессоры обеспечивают массовое распараллеливание вычисления, при условии, что все данные должны быть обработаны одинаково.

Хорошо, это чистая теория. В реальном мире обычные процессоры предлагают несколько SIMD-инструкций (SSE), поэтому на обычном процессоре можно более эффективно выполнять несколько операций с данными. В то же время не все ALU в графических процессорах должны работать над одним и тем же, поскольку они сгруппированы в партии (см . Ответ Мокубая). Таким образом, процессоры не являются чисто SISD, а графические процессоры - не просто SIMD.

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

4

Современный графический процессор является очень сложным устройством и может иметь тысячи процессорных ядер. Например, Nvidia GTX 970 имеет 1664 ядра. Эти ядра сгруппированы в пакеты, которые работают вместе.

Для карты Nvidia ядра сгруппированы в пакеты по 16 или 32 в зависимости от базовой архитектуры (Kepler или Fermi), и каждое ядро в этом пакете будет выполнять одну и ту же задачу.

Различие между пакетом и ядром, хотя и является важным, поскольку каждое ядро в пакете должно выполнять одну и ту же задачу, его набор данных может быть отдельным.

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

Если вы настаиваете на наличии картинки, чтобы доказать это, то на изображении ниже (из обзора GTX 660Ti Direct CU II TOP) показаны 5 зеленых областей, которые в значительной степени похожи и будут содержать несколько сотен ядер каждая, что в общей сложности 1344 активных ядер будет разделено на то, что выглядит для меня будет 15 функциональных блоков:

При внимательном рассмотрении каждый блок имеет 4 набора логики управления сбоку, что говорит о том, что каждый из 15 больших блоков, которые вы видите, имеет 4 блока SMX.

Это дает нам 15 * 4 блоков обработки (60) с 32 ядрами, каждый из которых дает в общей сложности 1920 ядер. Пакеты из них будут отключены, поскольку они либо работают со сбоями, либо просто для разделения их на различные группы производительности. Это даст нам правильное количество активных ядер.

Хороший источник информации о том, как партии отображаются вместе, находится на переполнении стека: https://stackoverflow.com/questions/10460742/how-do-cuda-blocks-warps-threads-map-onto-cuda-cores

2

Графические данные идеально подходят для параллельной обработки. Разделите изображение размером 1024x1024 пикселей на блоки 16x16, и пусть каждое ядро обрабатывает такой маленький блок. Сгруппируйте результаты вместе, и результат не будет отличаться от одного процессора, обрабатывающего эти блоки один за другим.

Условием для этого является то, что результаты одного ядра не будут влиять на результаты других ядер, и наоборот. Нечто подобное может работать и для листа Excel, где ячейки в столбце C складывают значения столбца A + B. C1 = A1 + B1, C2 = A2 + B2, а строки 1 и 2 не зависят друг от друга.

Обработка графических данных - это очень специфическая задача, и вы можете спроектировать процессор специально для этого вида задач, который может быть использован и для других задач, таких как майнинг биткойнов. И, очевидно, вы можете сделать процессор более эффективным, используя множество ядер рядом друг с другом вместо одного большого процессора. Более эффективный означает не только быстрее, но также имеет то преимущество, что если вам нужно всего лишь 20% процессорных ядер, вы можете отключить остальные, что является энергоэффективным.

Отказ от ответственности: приведенный выше пример не может быть технически правильным. Это больше, чтобы показать принцип. Фактическая обработка данных будет намного сложнее, я думаю.

1

Процессоры имеют 1,2,4,6,8 и более ядер. Точно так же, у графических процессоров их сотни и тысячи. Вот почему топовая видеокарта имеет примерно в 80 раз большую вычислительную мощность, чем четырехъядерный процессор.

Разница в том, что они являются типоспецифичными и кластерными (см. Ответ выше). Специфичный для типа означает, что они были разработаны, чтобы сделать определенные не общие вычисления. Очень сложно заставить стандартное программное обеспечение использовать ядра GPU вместо процессорных ядер. Если бы программное обеспечение могло быть таким хорошим, оно сделало бы процессоры бесполезными. К сожалению, только очень конкретные могут приблизиться к истинной вычислительной мощности видеокарты. Некоторое программное обеспечение для обработки хэша может сделать это.

1

Основной ответ заключается в том, что они проще, поэтому вы можете собрать их вместе, они выполняли одно задание, и на экране появлялись фраги. но в наши дни они носят более общий характер, чем процессоры. Основная причина между процессором и процессором GPU заключается в том, что архитектура архитектуры процессора основана на архитектуре x86, а архитектура в процессоре gpu основана на технологии AMD GCN или NVIDIA CUDA.

попробуйте прочитать http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-amd-architects-for-compute http://www.anandtech.com/show/5699/nvidia-geforce -gtx-680-обзор /2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .