Оценка производительности доступа к памяти OpenCL для разработки алгоритма

#opencl #gpu #gpgpu

#opencl #графический процессор #gpgpu

Вопрос:

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

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

С целью сравнения различного количества операций доступа к локальной памяти и операций доступа к глобальной памяти я хотел бы оценить цену (в циклах?) соотношение доступа к локальной памяти (чтение / запись) и цены доступа к глобальной памяти.

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

  • чтение из локальной памяти
  • запись в локальную память
  • чтение из глобальной памяти
  • запись в глобальную память

Примечание: Я использую «локальную память» и «глобальную память» в их значении в OpenCL.

Комментарии:

1. @Бен-Ун, я не уверен, что понял ваш вопрос на 100%, но вы видели тестовый образец пропускной способности?

2. Нет, что это? Я попытался прояснить вопрос.

3. @Ben-Un. Что бы вы измерили, так это пропускную способность локальной памяти и глобальную пропускную способность памяти. Я видел пример, который проверяет глобальную пропускную способность памяти. Это называется GlobalMemoryBandwidth .

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

5. Посмотрите на исходный код, метод вычисления этих параметров будет одинаковым для всех графических процессоров, поддерживающих opencl.

Ответ №1:

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

Насколько я понимаю, вы обеспокоены низкоуровневой оптимизацией. Если это так, то вы можете использовать программное обеспечение, которое обычно поставляется с SDK поставщиком графических процессоров. Многие из них (AMD, ARM и т.д.) Предоставляют автономные компиляторы, которые позволяют экспортировать скомпилированные двоичные файлы clProgramm на ассемблере с информацией об инструкциях за цикл. Тогда вы получите наиболее точные цифры.