Использование возможностей CUDA на языке Python Александр Мыльцев (Parallel Compute) 1
CUDA из Python Copperhead – data-parallelism для Python Theano – mathematical expressions evaluator Computer vision – Python binding to OpenVIDIA PyCUDA 2
CUDA из Python Copperhead – data-parallelism для Python Theano – mathematical expressions evaluator Computer vision – Python binding to OpenVIDIA PyCUDA 3
Высокопроизводительный код «Традиционный» подход: – C/C++/Fortran – Библиотеки «Альтернативный» подход: – Скрипты для управления – GPU для ускорения 4
Скриптовый язык Интерактивный Автоматическое управление памятью Динамически типизированный Хорошо подходит для «склейки» низкоуровневых частей 5
Интерпретация без компиляции Создание программы 6
Интерпретация без компиляции Создание программы 7
Python Пример скриптового языка – Зрелый – Большое сообщество – Написан на C (портируемость) – Мультипарадигмальный 8
Как это выглядит? 9
GPU GPU не программируется скриптами – Параллельность – Аппаратно-зависим – Делается для быстродействия Дополнить друг друга 10
GPU GPU не программируется скриптами – Параллельность – Аппаратно-зависим – Делается для быстродействия Дополнить друг друга Скриптовый язык на CPU – Для управления задачами 11
GPU GPU не программируется скриптами – Параллельность – Аппаратно-зависим – Делается для быстродействия Дополнить друг друга Скриптовый язык на CPU – Для управления задачами Python + CUDA = PyCUDA 12
Простой пример examples/demo.py в пакете PyCUDA 13
Простой пример 14
Простой пример. Проще 15
Особенности PyCUDA Предоставляет полный доступ Автоматическое управление памятью Предоставляет абстракции Можно работать в интерактивно режиме Автоматическая проверка ошибок Интеграция с numpy 16
Поддержка CUDA Полная Например: – Массивы и текстуры – Передача данных – Streams и events – GL – … 17
Операционные системы Все, которые поддерживает CUDA – Linux – Windows – OS X 18
Документация 19
Процесс разработки 20
Авточистка Достижимые объекты (память, потоки, …) никогда не удаляются Недостижимые объекты удалятся когда- нибудь в будущем Можно удалить вручную – obj.free() 21
gpuarray pycuda.gpuarray numpy.ndarray – gpuarray.to_gpu(numpy_array) – numpy_array = gpuarray.get() +, -, *, /, fill, sin, exp, rand, norm, … Разные типы (int32 + float32 = float64) print gpuarray для отладки 22
Поэлементные выражения Экономия циклов 23
Редукция. Проще Пример: вычисление скалярного произведения 24
Брошюра «Вычисления на NVIDIA Tesla» – На последней странице контакты Антона Джораева – Основана на лекции Андреаса Клёкнера (Andreas Klockner) – Вопросы 25