Как стать автором
Обновить
2.49

GPGPU *

Технология Nvidia для реализации алгоритмов

Сначала показывать
Порог рейтинга
Уровень сложности

Моделирование электрического поля средствами CUDA

Время на прочтение7 мин
Количество просмотров20K
Данная статья написана с целью продемонстрировать как с помощью технологии CUDA можно смоделировать простое взаимодействие заряженых частиц (см. Закон Кулона). Для вывода статической картинки я использовал библиотеку freeglut.
Как пишут частенько на Хабре:
прошу под кат
Всего голосов 15: ↑15 и ↓0+15
Комментарии29

Космики: моделирование эволюции многоклеточных организмов

Время на прочтение4 мин
Количество просмотров43K
Здравствуй, Хабр!

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

На меня произвело впечатление, как простые итеративные преобразования могут производить субъективно сложные и интересные вычисления, формируя нетривиальные визуально-кинетические модели.

Со временем возникло несколько идей, что интересного можно смоделировать.

Вот что получилось с одной из них (в кадре мелкие объекты, смотреть в HD):



Читать дальше →
Всего голосов 91: ↑86 и ↓5+81
Комментарии71

Unbiased DirectX Рендеринг на GPU, CPU и в облаке

Время на прочтение9 мин
Количество просмотров44K
Как создать рендерер, который бы работал даже на компьютере вашей бабушки? Изначально перед нами стояла немного другая задача — создать unbiased рендер для всех моделей GPU: NVidia, ATI, Intel.
Хотя идея такого рендера для всех видеокарт витала в воздухе давно, до качественной реализации, тем более на Direct3D, дело не доходило. В своей работе мы пришли к весьма дикой связке и дальше расскажем, что нас к ней привело и как она работает.

renderbro resource combined
Читать дальше →
Всего голосов 83: ↑79 и ↓4+75
Комментарии55

CUDA: синхронизация блоков

Время на прочтение12 мин
Количество просмотров44K
При использовании средств параллельных вычислений весьма вероятно может сложиться ситуация, когда алгоритм содержит два таких последовательных этапа: i) каждый j-ый поток сохраняет некоторый промежуточный результат вычисления в j-ой ячейке памяти, а, затем, ii) этот поток должен использовать результаты одного или более «соседних» потоков. Очевидно, что необходимо организовать в коде программы некий барьер по времени, который каждым потоком преодолевается уже после того, как все сохранят свои промежуточные результаты в соответствующих ячейках памяти (этап (i)). В противном случае, какой-то поток может перейти к этапу (ii), пока какие-то другие потоки еще не завершили этап (i). Как это ни прискорбно, но создатели CUDA посчитали, что такой специальный встроенный механизм синхронизации любого числа потоков на одном GPU не нужен. Так как же можно бороться с этой напастью? Хотя Google, судя по подсказкам, и знаком с данным вопросом, но готового удовлетворительного рецепта под свою задачу найти не удалось, а на пути к достижению желаемого результата для новичка (которым я и являюсь) имеются некоторые подводные камни.

Читать дальше →
Всего голосов 31: ↑30 и ↓1+29
Комментарии19

Истории

Изучение OpenCL на примере взлома паролей

Время на прочтение10 мин
Количество просмотров10K

Вступление


Недавно, почитав различных статей и презентаций про GPGPU, я решил тоже попробовать для себя программирование под видеокарты. Фактически, выбор технологий в этой области не велик — сейчас живы и развиваются только CUDA (проприетарный стандарт nVidia) и OpenCL (свободный стандарт, работает на GPU от ATI, nVidia, а также на центральных процессорах). В связи с тем, что мой ноутбук располагает видеокартой ATI (Mobility Radeon 5650 HD), то выбор и вовсе свёлся к одному варианту — OpenCL. В этой статье речь пойдёт о процессе изучения OpenCL с нуля, а также о том, что из этого получилось.
Читать дальше →
Всего голосов 33: ↑32 и ↓1+31
Комментарии2

Запускаем Java-программы на GPU

Время на прочтение1 мин
Количество просмотров17K
На Github выложен исходный код компилятора Rootbeer, с помощью которого можно почти любой Java-код запустить на графическом процессоре, а также легко разделить Java-программу на фрагменты для CPU/GPU.

Компилятор опубликован под лицензией MIT, он прошёл тщательное тестирование и вполне пригоден для использования. По словам автора, это самый продвинутый транслятор байткода Java на платформу CUDA. Судя по всему, OpenCL тоже поддерживается.

Автор программы — преподаватель Сиракузского университета Фил Пратт-Желига (Phil Pratt-Szeliga).
Читать дальше →
Всего голосов 41: ↑39 и ↓2+37
Комментарии37

Используем OpenCL в Python

Время на прочтение6 мин
Количество просмотров32K
В последнее время параллельные вычисления прочно входят в жизнь, в частности, с использованием GPU.

Здесь было много статей на эту тему, поэтому ограничусь лишь поверхностным описанием технологии. GPGPU — использование графических процессоров для задач общего назначения, т.е. не связанных напрямую с рендерингом. Пример — библиотека Nvidia PhysX для расчёта физики в некоторых современных играх. Эта технология выгодна тем, что GPU хороши на параллельном выполнении с множеством потоков. Правда, потоков должно быть много, иначе производительность сильно упадет. Ещё из-за особенностей работы с памятью приходится несколько хитрить с передачей данных из оперативной памяти в видеопамять. Известные реализации: CUDA (Nvidia, только для видеокарт), OpenCL (Khronos Group, для гетерогенных систем) и AMD FireStream. Здесь будет обсуждаться только OpenCL.

Итак, приступим к практике. В качестве языка основной программы выберем Python. Он, конечно, не очень быстр сам по себе, зато отлично работает как «клей» — во многих применениях основной расчёт идёт в OpenCL, а код на Python только «подносит патроны». Существует отличная библиотека PyOpenCL, которой и будем пользоваться.

Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии6

Первые шаги с OpenCL или сказ о том как одинаковый код на GPU и CPU запускать

Время на прочтение15 мин
Количество просмотров58K
Итак, прошел почти год с момента моего первого поста о программировании видеокарт и страшилок о том, как это все сложно. Теперь настала пора показать, что все не так плохо и как пользоваться этой странной штукой по имени OpenCL, да еще и использовать его главное преимущество, то есть возможность запускать один и тот же код на разных девайсах. А еще я покажу как можно получить на порядок большую производительность обычного процессора практически бесплатно.
За деталями под кат...
Всего голосов 57: ↑54 и ↓3+51
Комментарии21

Новый виток архитектуры CUDA

Время на прочтение4 мин
Количество просмотров14K
Всем привет!
В начале апреля я увидел анонс новой видеокарты от nVidia, с новым мажорным индексом compute capability – 3.0. Внимательно изучив спеки был удивлён – по всему выходило, что теперь ветвления будут приводить к самым худшим последствиям: большим потерям производительности. Мне нравилось, что от версии к версии ветвления играют всё меньшую роль, а Kepler показался в этом плане шагом назад. Мозгом я понимал, что такое вряд ли возможно и решил немного выждать.
И вот на этой неделе мне пришёл whitepaper по новой числодробилке на архитектуре Kepler и многое прояснил.
А дальше - чистейший текст и ни одной картинки
Всего голосов 49: ↑45 и ↓4+41
Комментарии116

Быстрое сжатие изображений по алгоритму JPEG на CUDA

Время на прочтение13 мин
Количество просмотров20K
Краткое содержание: Создан быстрый кодер FVJPEG для сжатия изображений по алгоритму JPEG на видеокартах NVIDIA. Значительное ускорение получено при распараллеливании алгоритма, его реализации и оптимизации с помощью технологии CUDA. По скорости сжатия кодер FVJPEG превосходит все существующие в настоящее время программные и аппаратные решения для компрессии изображений по алгоритму Baseline JPEG.
Читать дальше →
Всего голосов 74: ↑59 и ↓15+44
Комментарии49

Анализируем проприетарное приложение на OpenCL, написанное с использованием AMD APP SDK

Время на прочтение8 мин
Количество просмотров4.1K
Рассмотрим следующую ситуацию: есть приложение, которое использует AMD GPU для своих вычислений. Как правило, на GPU выносятся самые ресурсоемкие операции. Поэтому если приложение работает быстрее своих конкурентов, то может возникнуть желание узнать, какой же алгоритм реализован в этой программе. Но что делать, если программа является проприетарной и распространяется по лицензии, запрещающей reverse engineering и дизассемблирование?

Чтобы не нарушать лицензии, можно воспользоваться одной маленькой хитростью, оставленной разработчиками AMD APP SDK. Однако чтобы эта хитрость сработала, необходимо выполнение еще одного условия (помимо использования разработчиками приложения указанного SDK): приложение должно использовать OpenCL для вычислений на GPU.

Читать дальше →
Всего голосов 8: ↑7 и ↓1+6
Комментарии17

AMD APP SDK: Compute Abstraction Layer (CAL)

Время на прочтение15 мин
Количество просмотров4.5K
AMD APP В первой части я рассказал о технологии AMD Intermediate Language (IL). В этой статье, как можно догадаться из заголовка, речь пойдет о второй составляющей: AMD Compute Abstraction Layer (CAL). Эти две технологии являются нераздельными друг от друга: невозможно использовать одну, не используя другую. Поэтому для понимания дальнейшего рекомендую ознакомиться с первой частью.

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

Follow the white rabbit
Всего голосов 14: ↑14 и ↓0+14
Комментарии8

AMD APP SDK: Intermediate Language (IL)

Время на прочтение8 мин
Количество просмотров14K
AMD APP
ATI Stream SDK было переименовано в AMD Accelerated Parallel Processing (APP) SDK, на смену основного языка программирования GPGPU вычислений Brook+ пришел OpenCL. Однако, не многие догадываются, что писать код для ATI-шных карточек можно при помощи другой технологии: AMD Compute Abstraction Layer (CAL) / Intermediate Language (IL). Технология CAL предназначена для написания кода, взаимодействующего с GPU и выполняющегося на CPU, в то время как технология IL позволяет писать код, который будет выполняться непосредственно на GPU.

В данной статье будет рассмотрена технология IL, ее область применения, ограничения, преимущества по сравнению с OpenCL. Кому интересно, прошу под кат.

Follow the white rabbit
Всего голосов 23: ↑23 и ↓0+23
Комментарии6

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Nvidia открыла исходный код компилятора CUDA

Время на прочтение1 мин
Количество просмотров2.7K
Nvidia открыла исходный код нового компилятора CUDA на базе LLVM. Сорцы не раздаются направо и налево, а доступны только для «квалифицированных исследователей и разработчиков». Для их получения нужно зарегистрироваться, заполнить форму и указать, для каких проектов вы намерены применять компилятор. Так что пока непонятно, под какой лицензией опубликован компилятор и вообще — свободная ли это лицензия. В пресс-релизе компания намекает на более открытый доступ к исходникам в будущем.



С помощью компилятора и нового CUDA Toolkit 4.1 можно будет приспособить платформу GPGPU для других архитектур и процессоров, в том числе AMD GPU и x86 CPU, а также создавать гетерогенные суперкомпьютерные системы.
Всего голосов 28: ↑24 и ↓4+20
Комментарии18

Обзор CUDA отладчика «NVIDIA Parallel Nsight 2.0»

Время на прочтение6 мин
Количество просмотров18K
imageОтладка параллельного кода – процесс утомительный и умозатратный. Ошибки распараллеливания проблематично отловить из-за недетерминированности поведения параллельных приложений. Более того, если ошибка обнаружена, ее часто сложно воспроизвести снова. Бывает, что после изменения кода, сложно удостовериться, что ошибка устранена, а не замаскирована. Чаще всего, ошибки в параллельной программе являются гейзенбагами. Порой испытываешь острую потребность в максимально удобных и функциональных инструментах отладки параллельных программ.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии6

Высокопроизводительная сортировка (radix) на CUDA

Время на прочтение1 мин
Количество просмотров3.6K
Реальное доказательство того, что GPU может осуществлять сортировку данных (алгоритм radix) в несколько раз быстрее, чем CPU.

Дуэйн Мэррилл (Duane Merrill) и Эндрю Гримшоу (Andrew Grimshaw) с кафедры вычислительной техники Виргинского университета в Шарлотсвилле опубликовали под свободной лицензией свой метод сортировки SRTS Radix Sort, в котором GTX 480 показывает скорость сортировки более 1 млрд 32-битных ключей в секунду: примерно вчетверо быстрее, чем на процессоре Core i7.

Метод подходит для любых CUDA-устройств. Текущая версия поддерживает сортировку любых встроенных числовых типов данных C/C++ (например, signed char, float, unsigned long long), а также автоматическую оптимизацию в случаях, если все ключи имеют одинаковую длину (ускорение сортировки в пять раз).
Всего голосов 28: ↑23 и ↓5+18
Комментарии22

Понимание конфликтов банков разделяемой (shared) памяти в NVIDIA CUDA

Время на прочтение3 мин
Количество просмотров11K
Разделяемая (shared) память является очень эффективным средством оптимизации за счет очень быстрого доступа (в 100 раз быстрее чем глобальная память). Однако, при неправильном использовании ее возможны конфликты банков, которые существенно замедляют быстродействие. В данной статье пойдет речь о том, как эти конфликты возникают, и как их избежать.
Читать дальше →
Всего голосов 21: ↑20 и ↓1+19
Комментарии6

Обзор генераторов псевдослучайных чисел для CUDA

Время на прочтение5 мин
Количество просмотров7.7K
По специфике работы часто приходится заниматься симуляциями на GPU с использованием генераторов псевдослучайных чисел. В результате накопился опыт, которым решил и поделиться с сообществом.

Читать дальше →
Всего голосов 49: ↑43 и ↓6+37
Комментарии13

NVIDIA выпускает новый продукт для работы с параллельными вычислениями CPU и GPU

Время на прочтение2 мин
Количество просмотров4.7K
image

Компания NVIDIA выпускает новый коммерческий продуктNVIDIA Parallel Nsight, который представляет собой пакет инструментов интегрирующихся в Visual Studio 2008 SP1. NVIDIA Parallel Nsight предлагает инструменты для разработки параллельных приложений использующих на полную мощность возможности многоядерных процессоров и современных ускорителей GPU.

image image 

Читать дальше →
Всего голосов 57: ↑45 и ↓12+33
Комментарии48

CUDA: Работа с памятью. Часть II.

Время на прочтение5 мин
Количество просмотров23K
Основная тема этой части – оптимизация работы с глобальной памятью при программировании GPU.

У GPU есть ряд особенностей, игнорирование которых может стоить многократной потери производительности при использовании глобальной памяти. Но если учесть все тонкости, то можно получить действительно эффективные CUDA-программы.

Приступаем.

Читать далее...
Всего голосов 18: ↑16 и ↓2+14
Комментарии22