Статьи

Intel OpenCL 1.5: AVX, отладчик, но плохая производительность

Tagged:  

Пощупал вышедший вчера Intel OpenCL SDK 1.5.

Заявленные новые фишки:

  • Поддержка AVX-векторизации (т.е. векторов в 256 бит)
  • Отладчик
Имею сказать:
Отладчик
Отладчик - работает. Пошаговая отладка, просмотр значений переменных, все отлично. С каким конкретно потоком работать - задается до запуска программы.

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

Параллельное программирование на современных видеокартах - слайды

Выкладываю слайды со встречи, проходившей вчера на физфаке МГУ.

По сравнению с тем, что было показано в аудитории, стало чуть больше слайдов и добавлен небольшой список литературы (учебные курсы и статьи, которые упоминались с голоса)

Полная презентация в PDF-формате доступна тут: Parallel-Programming-On-GPU-29092010-PhysDept-MSU.pdf

Алгоритмы поиска на графическом процессоре с помощью технологии NVidia CUDA

В данной статье рассмотрим бинарный поиск и связанную с ним задачу сортировки. Попытаемся сделать теоретическую оценку алгоритмов и провести практические тесты.

Введение

Данная статья является продолжением темы CUDA search . В этой теме рассматривался простейший линейный поиск на графическом процессоре с помощью технологии nVidia CUDA. В наихудшем случае т.е. когда искомый элемент массива был последним, алгоритм на GPU превзошел свой аналог на CPU почти на 40%. Количество элементов в массиве было равно количеству процессоров. Такие условия задачи достаточно хороши для GPU. Однако, как быть в других условиях? Как с ними справиться GPU? Подходит ли он для других алгоритмов? Что ж, попытаемся ответить на эти вопросы.

OpenCL: ATI + NVidia, текущее состояние дел (windows)

По случаю выхода ATI Stream SDK 2.01, описанное в предыдущей статье несколько устарело. Теперь все иначе, по меньшей мере под Windows.

OpenCL.DLL устанавливается и драйверами NVidia (поверх имеющегося) и ATI SDK (только если в системе такого нет? если в системе есть более старый?) . При этом тот вариант, который ставят драйвера NVidia 196.xx - хороший, позволяющий работать и с NVidia и с ATI картами без каких-то избыточных телодвижений, а вот ATI-шный в двухкарточном варианте у меня вызывал непонятные проблемы.

NVdia Nexus: работа из виртуальной машины

После успеха с запуском NVidia Nexus на двух машинах, я загорелся сделать это на одной.

Стандартные системные требования в этом случае простые: две G92/G200 видеокарты, к одной подключается монитор (мониторы, если их несколько), вторая настраивается как "ускоритель PhysX" (без подключенного монитора) и все должно работать.

У меня в рабочей машине - две видеокарты, но одна из них NVidia, а вторая - ATI и сделать так, как написано выше - невозможно, если отключить от NVidia-карты мониторы, то она пропадает из системы, запустить CUDA-программу даже локально (без Nexus) не выходит. Вынимать ATI (менять на NVidia) не хотелось, для третьей двухслотовой карты места в машине нет, покупать еще одну видеокарту хотелось еще меньше.

После успеха с запуском NVidia Nexus на двух машинах, я загорелся сделать это на одной.

Стандартные системные требования в этом случае простые: две G92/G200 видеокарты, к одной подключается монитор (мониторы, если их несколько), вторая настраивается как "ускоритель PhysX" (без подключенного монитора) и все должно работать.

У меня в рабочей машине - две видеокарты, но одна из них NVidia, а вторая - ATI и сделать так, как написано выше - невозможно, если отключить от NVidia-карты мониторы, то она пропадает из системы, запустить CUDA-программу даже локально (без Nexus) не выходит. Вынимать ATI (менять на NVidia) не хотелось, для третьей двухслотовой карты места в машине нет, покупать еще одну видеокарту хотелось еще меньше.

NVidia Nexus: нулевые шаги

UPDATE: от большинства проблем удалось избавиться просто переустановкой NVidia Nexus на обеих машинах. Secure connection заработала, синхронизация - преимущественно заработала, хотя бывают необъяснимые сбои (и тогда надо удалить синхронизируемые файлы с той машины, на которую копируем т.е. ту, где Nexus Monitor).

Update2 И с виртуальной машиной тоже получилось, поэтому проще поменять полностью текст, чем вносить еще поправки:

  1. Если не работает синхронизация или Secure connection (при стандартных настройках, когда вы ничего не меняли) - попробуйте переставить Nexus Monitor, мне помогло.
  2. Иногда (закономерность понять не удалось) синхронизация файлов не может синхронизироваться. Тогда нужно вручную удалить синхронизируемые файлы с той машины, где запущен Nexus Monitor (на Win7/Vista это %user profile%/AppData/Roaming/Nvidia corporation/Nexus/Monitor/Mirror/)

Еще об NVidia и ATI в одной машине

Как ни печально, но поведение драйверов NVidia ничем не лучше драйверов ATI: чтобы CUDA/OpenCL работали, к какой-то видеокарте NVidia должен быть подключен какой-то из активных дисплеев.

Таким образом, идея потестировать NVidia Nexus на одной машине с двумя видеокартами, одна ATI и одна NVidia, полностью провалилась: если к Geforce не подключать монитор, то с точки зрения CUDA/NEXUS этой карты не существует. Вот если бы у меня было две карты NVidia, разговор был бы другой.

OpenCL, NVidia, ATI и все все все....

Вопрос о совместимости OpenCL между железом разных производителей - является необычайно волнительным. Понятно, что задумывалось все совместимым, но насколько это получилось и сколько граблей разложено на пути к этой совместимости - отдельный интересный вопрос, который перешел в практическую плоскость сразу после выпуска ATI Stream SDK 2.0 beta 4, где появилась поддержка OpenCL на графическом адаптере. До того поддержка OpenCL на PC была только у NVidia и вопрос был сугубо теоретическим.

Как только мне в руки попал Radeon HD5870, так сразу захотелось тему исследовать... и в первом приближении я ее изучил.

SGEMM/DGEMM на видеокарте и CPU, серия 7: NVidia GTX280

Как я уже писал в прошлый раз, становится какой-то дурной традицией переделывать тест умножения матриц каждые несколько месяцев.

В этот раз причиной для тестов стало появление у меня в доступности видеокарты NVidia GTX280, что позволило протестировать два момента:

  • Производительность умножения матриц с одинарной точностью (SGEMM) на новом быстром оборудовании.
  • Производительность умножения матриц с двойной точностью (DGEMM).
И сравнить результаты с mainstream-поколением процессоров Intel (Penryn), к сожалению i7 в доступности у меня пока нет.

NVidia GTX 280, Tesla T10P

Как и обещали, публике предъявили новый чипсет и новые видеокарты на нем. Нас они интересуют не с точки зрения графики, а с точки зрения вычислений, так их и рассмотрим.

SGEMM на видеокарте и CPU, серия 6

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

Видеокарта с двойной точностью или AMD strikes back

Одна из наиболее неприятных проблем при расчетах на видеокартах — это поддержка только 32-битных чисел с плавающей точкой (single precision).

NVidia G92: совсем не то, что хотелось

Как многие уже знают, сегодня Nvidia анонсировала видеокарту GeForce 8800GT на новом чипсете G92.

То что анонсировано, сильно отличается от того, что прогнозировали весной, никакого терафлопа нету, новый чипсет медленнее и предыдущей топовой модели 8800Ultra и следующей за ней 8800GTX.

Умножение матриц, серия 5: вычисления на GPU - 2

Почему переделываем тесты?

Предыдущая моя статья на эту тему была написана в феврале 2007 года, сразу после выхода первой публичной бета-версии CUDA Toolkit/CUDA SDK. Представители NVidia предупреждали, что в бета-версии производительность не является оптимальной, к релизу она будет улучшена.

За прошедшие полгода, пока я занимался совсем другими вещами, были выпущены релизы:

  • NVidia CUDA: SDK и библиотеки CUBLAS/CUFFT v1.0;
  • NVidia CUDA Display Driver 162.xx (драйвер, собственно, транслирует псевдокод в реальные программы GPU);
  • RapidMind Platform версий 2.0.0, а затем и 2.0.1.

Интересно посмотреть, стала ли производительность лучше.

О пирамидальном сложении на параллельной архитектуре

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

Для второго шага reduce обычно используется пирамидальная схема: сначала в N/2 потоков сложим N результатов попарно, затем сложим N/2 в N/4 и так далее.

Syndicate content
Copyright © 2008-2011 Alex Tutubalin