Использование возможностей CUDA на языке Python Александр Мыльцев (Parallel Compute) 1

advertisement
Использование возможностей
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
• alexander.myltsev@parallel-compute.com
Вопросы
25
Download