PyCUDA documentation / Документация PyCUDA: Welcome to PyCUDA’s documentation! http://documen.tician.de/pycuda/#welcome-to-pycuda-s-documentation
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
PyCUDA дает вам простой, Pythonический доступ к API параллельных вычислиний Nvidia CUDA. Некоторые обертки CUDA API уже существуют - поэтому, зачем нужна еще и PyCUDA? wuffur 02.08.11 в 07:11 |
|
|
Очистка объектов привязана к времени жизни объектов. Эта идиома, часто называемая RAII в C++, дает более легкий способ написать корректный и свободный от утечек памяти и падений системы код. PyCUDA знает о зависимостях тоже, поэтому (например) она не хочет отделяться от контекста до того, каким образом выделенная в ней память также освободится. wuffur 02.08.11 в 07:17 |
||
|
Удобство. Абстракции наподобие pycuda.compiler.SourceModule и pycuda.gpuarray.GPUArray делают программирование на CUDA еще более удобным, чем с использованием Nvidia основанном на Си компилируемой runtime (компилятором nvcc). wuffur 02.08.11 в 07:19 |
||
|
Полнота. PyCUDA предоставляет полную мощь API CUDA драйвера в ваше распоряжение, если вы этого пожелаете. wuffur 02.08.11 в 07:20 |
||
|
Автоматическая проверка ошибок. Все ошибки в CUDA автоматически переводятся в выражении Python. wuffur 02.08.11 в 07:20 |
||
|
Скорость. Базовый слой PyCUDA написан на C++, поэтому он практически свободен от всех описанных его тонкостей. wuffur 02.08.11 в 07:23 |
||
|
Полезная Документация. Вы на нее смотрите. :) wuffur 02.08.11 в 07:23 |
||
|
Это пример, который даcт вам представление о PyCUDA: wuffur 02.08.11 в 07:24 Это пример, который создает вам впечатление об использовании PyCUDA: wuffur 02.08.11 в 07:24 |
+1 | |
|
import pycuda.autoinit wuffur 02.08.11 в 07:24 |
||
|
from pycuda.compiler import SourceModule wuffur 02.08.11 в 07:24 |
||
|
multiply_them = mod.get_function("multiply_them") wuffur 02.08.11 в 07:24 |
||
|
a = numpy.random.randn(400).astype(numpy.float32) wuffur 02.08.11 в 07:24 |
||
|
dest = numpy.zeros_like(a) wuffur 02.08.11 в 07:24 |
||
|
print dest-a*b wuffur 02.08.11 в 07:26 |
||
|
(Это пример examples/hello_gpu.py в дистрибутиве исходного кода PyCUDA.) wuffur 02.08.11 в 07:26 |
||
|
На поверхности лежит то, что эта программа будет печатать экран полный нулей. За нашем вниманием осталось много интересных вещей, которые происходят: wuffur 02.08.11 в 07:28 |
||
|
PyCUDA компилирует исходный код CUDA и закачивает его на карточку(графическую). wuffur 02.08.11 в 07:29 |
||
|
Замечание: Этот код не должен быть постоянным - вы можете легко заставить Python генерировать код, который вы хотите скомпилировать. Смотрите Метапрограммирование с PyCUDA. wuffur 02.08.11 в 07:31 |
||
|
Код взаимодействия numpy PyCUDA автоматически высвобождает место на вашем устройстве, копирует массивы numpy a и b поверх, запускает одноблоковую сетку 400x1x1, и копирует dest назад. wuffur 02.08.11 в 07:36 |
||
|
Отметим, что вы можете также и просто хранить ваши данные на карточке между вызовами ядра - нет нужды копировать данные все время. wuffur 02.08.11 в 07:37 |
||
|
Видите, почему в этом примере нет кода подчистки? Его нет, потому что мы слишком ленивые и просто его пропустили. И он просто не нужен. PyCUDA автоматически станет делать вывод, где и какая необходима подчистка памяти и делает это для вас. wuffur 02.08.11 в 07:40 |
||
|
Любопытно? Давайте начнем. wuffur 02.08.11 в 07:38 |
