Для каких типов кодовых доменов подходит OpenCL? - PullRequest
2 голосов
/ 30 января 2012

Я прочитал обзор OpenCL, и в нем говорится, что он подходит для кода, который запускает процессоры, GPGPU, DSP и т. Д. Однако, просматривая справочник команд, кажется, что это все математические операции и операции с изображениями.Я ничего не видел, скажем, для строк.

Это заставляет меня задуматься, что бы вы запустили на CPU через OpenCL?

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

EDIT Я заметил, что предстоящий Ivy Bridge от Intel рекламируется как «OpenCL-совместимый» со ссылкой на его графические блоки.Значит ли это сделать вывод, что ядра процессора не OpenCL совместимыми, или же нет такого вывода?

1012 * EDIT В интересах недопущения обсуждения и конструктивности, я был бы признателен, если кто-то может мне точкуна официальные ссылки, которые ответили бы на мой вопрос.

Ответы [ 3 ]

1 голос
/ 31 января 2012

Вы можете рассматривать OpenCL как комбинацию среды выполнения (для обнаружения устройств, организации очередей) и языка программирования на основе Си. Этот язык программирования имеет нативные векторные типы и встроенные функции и операции для выполнения всяких забавных вещей с этими векторами. Это хорошо, потому что вы можете написать векторизованное ядро ​​в OpenCL, и ответственность за его соответствие лежит на фактическом векторном ISA вашего оборудования.

Из этой статьи 4/2011 , которая может исчезнуть:

Существует две основные архитектуры ЦП: x86 и ARM. который скоро должен запустить код OpenCL.

Если вы напишите приложение OpenCL, предназначенное для обеих этих архитектур, вам не придется беспокоиться о написании двух версий, одной SSE и одной NEON. Просто напишите OpenCL C и покончите с этим. Да, я знаю. Это предполагает, что поставщик выполнил свою работу и написал твердую реализацию, которая полностью использует базовый ISA. Но если он этого не сделает, пожаловайтесь!

Кроме того, некоторые реализации CL предлагают автоматическую векторизацию скалярных ядер, которые обычно проще писать. Хороший авто-векторизатор даст вам прирост производительности без каких-либо усилий. Поскольку ядра CL скомпилированы «онлайн», для получения такого преимущества не потребуется пересылать перестроенный код.

1 голос
/ 31 января 2012

Это заставляет меня задуматься, что бы вы запустили на процессоре через OpenCL?

Я предпочитаю использовать ocl для перегрузки работы процессора с моего графического оборудования. Иногда у моей видеокарты есть ограничение, поэтому мне нравится иметь резервное ядро ​​для использования с процессором. Такими ограничениями могут быть объем памяти, узкое место в памяти, низкая тактовая частота или когда мешает шина pci-e.

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

Я полагаю, что лучше всего проверить ядро ​​GPU на процессоре, чтобы убедиться, что оно работает так, как ожидалось. Если у пользователя вашего программного обеспечения установлен opencl, но только процессор (или младший процессор), хорошо иметь возможность выполнять один и тот же код на разных устройствах.

1 голос
/ 30 января 2012

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

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

...