Использование возможностей 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» – На последней странице контакты Антона Джораева • http://mathema.tician.de/software/pycuda – Основана на лекции Андреаса Клёкнера (Andreas Klockner) – http://mathema.tician.de/news.tiker.net/files/main.pdf • [email protected] Вопросы 25