Программирование оборудования Intel IGP (например, Iris Pro 5200) без OpenCL

Пиковая GFLOPS ядер для настольного компьютера i7-4770k @ 4 ГГц составляет 4 ГГц * 8 (AVX) * (4 FMA) * 4 ядра = 512 GFLOPS. Но последний Intel IGP (Iris Pro 5100/5200) имеет пик более 800 GFLOPS. Поэтому некоторые алгоритмы будут работать еще быстрее на IGP. Объединение ядер с IGP было бы еще лучше. Кроме того, IGP продолжает поглощать больше кремния. Iris Pro 5100 теперь занимает более 30% кремния. Кажется ясным, в каком направлении движутся процессоры Intel для настольных ПК.

Однако, насколько я видел, Intel IGP в основном игнорируется программистами, за исключением OpenCL/OpenGL. Мне интересно узнать, как можно программировать аппаратное обеспечение Intel HD Graphics для вычислений (например, SGEMM) без OpenCL?

Добавлен комментарий: у них нет поддержки Intel для графики HD и OpenCL на Linux. Я обнаружил, что beignet - это попытка с открытым исходным кодом добавить поддержку Linux, по крайней мере, для графики Ivy Bridge HD. Я не пробовал это. Вероятно, люди, разрабатывающие Beignet, знают, как программировать HD-графику без OpenCL.

3 ответа

Решение

Имейте в виду, что при копировании данных на видеокарту и обратно происходит снижение производительности, поэтому это необходимо учитывать. AMD близка к выпуску чипов APU, которые имеют унифицированную память для CPU и GPU на одном кристалле, что будет способствовать решению этой проблемы.

Способ, которым GPU использовался до CUDA и OpenCL, должен был представлять память для работы в качестве текстуры с использованием DirectX или OpenGL. Слава Богу, нам больше не нужно этого делать!

AMD действительно продвигает модель APU / OpenCL, поэтому больше программ должны использовать преимущества GPU через OpenCL - если компромисс между производительностью есть. В настоящее время вычисления на GPU представляют собой небольшую нишу на рынке, отведенном для высокопроизводительных вычислений или обработки чисел, которые просто не нужны для просмотра веб-страниц и обработки текста.

Для поставщиков больше не имеет смысла позволять вам программировать с использованием низкоуровневого ISA.

  1. Это очень сложно, и большинство программистов не будут его использовать.
  2. Это мешает им корректировать ISA в будущих версиях.

Таким образом, программисты используют язык (например, C99 в OpenCL), а среда выполнения выполняет специфичные для ISA оптимизации прямо на компьютере пользователя.

Пример того, что это позволяет: AMD переключилась с векторных машин VLIW на скалярные машины, и существующие ядра все еще работали (большинство работало быстрее). Вы не можете сделать это, если вы написали ISA напрямую.

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

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

Может быть, вы можете придумать лучшую парадигму, чем opencl для достижения этой цели; но до тех пор, пока вы не сделаете, я предлагаю вам попробовать некоторые opencl. Если вы в питоне; pyopencl - отличное место для старта.

Другие вопросы по тегам