OpenCL Benchmark - PullRequest
       23

OpenCL Benchmark

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

Я могу много читать об OpenCL, и это, кажется, самая многообещающая (единственная?) Библиотека для нескольких архитектур. OpenCL должен стать первым стандартом программирования параллельной архитектуры, и в конечном итоге он будет принят большинством программистов. Это хорошо, хорошо, но есть ли потеря производительности при переходе с нативной библиотеки программирования на OpenCL? В случае nVidia GeForces я уже нашел статью, в которой сравнивались две реализации одной и той же программы - код CUDA против OpenCL - и первая, казалось, была более производительной. В случае с потоками Pthread или Windows я действительно понятия не имею, но я думаю, что «универсальность» и мультиархитектурный подход всегда будут чем-то «платным». Просто чтобы перестать размышлять о том или ином, я бы хотел все проверить сам, но мне нужно, чтобы вы мне помогли! Существует ли универсальный набор тестов OpenCL, который я могу использовать для сравнения с нативным кодом? Есть ли аналог CUDA SDK, написанный в коде OpenCL? Спасибо всем.

Ответы [ 4 ]

4 голосов
/ 25 октября 2011

Не будучи экспертом по производительности / бенчмаркингу, я могу лишь попытаться дать вам несколько общих соображений относительно OpenCL и CUDA.Честное предупреждение, хотя, я могу ошибиться.

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

Вот примеры кода NVIDIA, готовов обоих CUDA и OpenCL .Вы можете выбрать несколько и сравнить свои результаты.

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

  • будет оптимально использовать код для всей доступной пропускной способности памяти
  • позволит компилятору создать эффективный код
  • вы можете использоватьиз всех вычислительных единиц
  • и т. д. *

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

Я намеренно нене пишите ничего о других случаях использования OpenCL, например, на процессорах.Это поле гораздо шире, поскольку у вас разные ОС, даже разные OpenCL SDK для одних и тех же процессоров (например, Apple и Intel) и множество способов параллельного программирования без OpenCL (для сравнения).

3 голосов
/ 16 ноября 2011

В настоящее время нет установленных показателей производительности для тестирования скоростей различных сред.Несколько ориентиров были созданы.Известные примеры включают набор тестов SHOC и Rodinia .На горизонте, скорее всего, скоро выйдут OpenCL и 13 гномов , что может пригодиться для целей бенчмаркинга.

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

2 голосов
/ 17 июля 2012

Для употребления с зерном соли:

http://clbenchmark.com/result.jsp

Поскольку карты NVidia могут иметь более низкую поддержку OpenCL, чем CUDA, они могут иметь более высокий рейтинг с эквивалентными программами CUDA.

2 голосов
/ 09 марта 2012

Вообще говоря, OpenCL и CUDA имеют одинаковую производительность. Не существует подходящих тестов, потому что просто нельзя сравнивать разные аппаратные средства и архитектуры.

Если вы планируете написать приложение на основе графического процессора и просто хотите узнать, какое из них вам следует выбрать. Не решайте одно или другое только из-за скорости. По сравнению с реализацией CPU OCL и CUDA обеспечат ускорение x100-x300.

Мой совет:

  • Если вы собираетесь создать приложение высокого уровня и вам нужно много библиотек, вероятно, следует использовать CUDA, поскольку он имеет лучший SDK и поддержку.

  • Если вы собираетесь создавать низкоуровневое приложение и будете писать с нуля весь код, используйте OpenCL, поскольку он будет поддерживать практически все будущие аппаратные средства (ЦП и ГП). Есть также некоторые библиотеки, которые вы можете использовать, но они не так хороши, как CUDA.

...