Программирование моделей различного оборудования - PullRequest
3 голосов
/ 25 ноября 2011

Я действительно не уверен, что это правильное место, чтобы спросить.Меня интересуют разные модели программирования для разных типов оборудования.

Все начинается так, я представлял некоторую работу, которую я выполнял с NVIDIA CUDA.Я говорил людям, что одной из основных проблем использования графического процессора в качестве сопроцессора является тот факт, что вам необходимо передавать данные с хоста на графический процессор и обратно.Затем несколько человек начали расспрашивать меня о «APU» от AMD и о том, что графические ядра находятся на том же кристалле, что и обычные ядра ЦП.

Я уклонился от вопросов, указав, что Intel / AMDМикросхемы CPU + GPU никогда не будут содержать столько графических ядер, сколько выделенные карты NVIDIA.

Дело в том, что я не совсем понимаю, какие модели программирования используются для APU AMD или чипов Intel Sandy / Ivy Bridge.

Мои вопросы:

  1. Как программы написаны для использования графических ядер на чипах AMD / Intel?
  2. Могут ли эти графические ядра действительно получить доступ к хосту?непосредственно в память?
  3. Есть ли какая-либо информация о производительности этих чипов в SP и DP FLOPS?
  4. Исходя из CUDA, какие сходства можно найти между программированием для графических процессоров NVIDIA идругие рассматриваемые чипы?
  5. Как SPE процессора Cell получили доступ к памяти, или как его модель программирования сравнивалась с этими Intel /Чипы AMD сегодня?

Ответы [ 3 ]

2 голосов
/ 25 ноября 2011

Как программы написаны для использования графических ядер на чипах AMD / Intel?

OpenCL, но я не думаю, что Intel проделала работу для использованияграфические ядра .

Могут ли эти графические ядра действительно обращаться к памяти хоста напрямую?

Да, но есть несколько предостережений.

  1. Хотя пропускная способность для хост-памяти лучше, чем для PCI-e, она не так велика, как у графического процессора для графической памяти (разница в 3-4 раза).
  2. Для OpenCL может потребоваться собственная копия данныхв некоторых обстоятельствах.Для GPU это должно происходить (Host Mem -> Graphics Mem), для APU вы хотите убедиться, что это не так.Это в значительной степени сводится к тому, как вы распределяете свои буферы, насколько я понимаю.

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

Это интересная разработка, которая, вероятно, делает методы GPGPU полезными в большинстве ситуаций,но без таких ОГРОМНЫХ выигрышей.Тем не менее, выигрыш все равно будет большим.

Есть ли какая-либо информация о производительности этих чипов в SP и DP FLOPS?

Мне не нравитсяповторяйте маркетинговые цифры, но AMD A8-3850 имеет заголовок 480 GFLOPS

Исходя из CUDA, можно найти сходство между программированием для графических процессоров NVIDIA и другими чипамивопрос?

Я не использовал CUDA, поэтому кто-то может захотеть ответить, но я понимаю, что CUDA и OpenCL имеют много одинаковых концепций (модели памяти, ядра и т. д.)Но CUDA приносит некоторые вещи стороне, которой нет OpenCL (C ++ - isms)

Тогда есть архитектурные различия между Nvidia и AMD, основным из которых является то, что ядра Nvidia масштабируются, а AMD -Vector, поэтому для достижения максимальной производительности на AMD вам нужно написать векторный код.

1 голос
/ 25 ноября 2011

У меня есть только опыт работы с CUDA, и ответ основан на этом опыте и некоторых вещах, которые я только что сделал быстрым поиском (я тоже хотел узнать некоторые ответы).

  1. Я думаюони написаны одинаково.Вы можете использовать OpenCL во всех них, и хотя существуют различия в аппаратной реализации, они следуют одним и тем же принципам.

  2. Я не знаю, как это для AMD и Intel, но я бы хотелскажи да.Вы можете сделать это с CUDA.Используя сопоставленную память хоста с блокировкой страницы, вы можете получить доступ к памяти хоста непосредственно из ядра.NVIDIA даже рекомендует использовать память таким образом, если у вас есть интегрированная система NVIDIA (раздел 5.3.1 Руководства по программированию CUDA C).

  3. Да.Для проверки Intel Руководство разработчика Intel HD Graphics DirectX (Sandy Bridge) на стр. 11 (максимум 125GFlops для Intel HD3000).Для AMD они указали определенное значение на странице спецификаций каждой карты, например AMD Radeon HD6990 .Вы, вероятно, можете найти где-нибудь сравнение.

  4. Как я уже сказал, я думаю, что модели программирования схожи, OpenCL также имеет понятие ядра, памяти хоста и устройства и идентификаторов для потоков и работы.группы (только несколько примеров).Чтобы максимизировать производительность, вам нужно знать кое-что о конкретных архитектурах, но вы можете работать со всеми, используя аналогичные подходы.

  5. Не знаю ...

0 голосов
/ 27 декабря 2016

Я работал в OpenCL с Bigdata.

Как пишутся программы для использования графических ядер на чипах AMD / Intel?

OpenCL - это модель программирования низкого уровня, котораяработает на гетерогенной среде.Он построен для использования всех вычислительных ресурсов в такой системе, как;Процессоры, графические процессоры, APU, FPGA и т. Д. Программы с кодом OpenCL также называются ядрами, которые работают на GPU и ядрах CPU.

Хотя Intel в основном известна своими процессорами, а не GPU, но они также предоставляют графические процессоры довольно долговремя, как Intel GMA, а затем Intel HD Graphics.

...