Готовый перевод 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?
Очистка объектов привязана к времени жизни объектов. Эта идиома, часто называемая RAII в C++, дает более легкий способ написать корректный и свободный от утечек памяти и падений системы код. PyCUDA знает о зависимостях тоже, поэтому (например) она не хочет отделяться от контекста до того, каким образом выделенная в ней память также освободится.
Удобство. Абстракции наподобие pycuda.compiler.SourceModule и pycuda.gpuarray.GPUArray делают программирование на CUDA еще более удобным, чем с использованием Nvidia основанном на Си компилируемой runtime (компилятором nvcc).
Полнота. PyCUDA предоставляет полную мощь API CUDA драйвера в ваше распоряжение, если вы этого пожелаете.
Автоматическая проверка ошибок. Все ошибки в CUDA автоматически переводятся в выражении Python.
Скорость. Базовый слой PyCUDA написан на C++, поэтому он практически свободен от всех описанных его тонкостей.
Полезная Документация. Вы на нее смотрите. :)
Это пример, который создает вам впечатление об использовании PyCUDA:
import pycuda.autoinit
import pycuda.driver as drv
import numpy
from pycuda.compiler import SourceModule
mod = SourceModule("""
__global__ void multiply_them(float *dest, float *a, float *b)
{
const int i = threadIdx.x;
dest[i] = a[i] * b[i];
}
""")
multiply_them = mod.get_function("multiply_them")
a = numpy.random.randn(400).astype(numpy.float32)
b = numpy.random.randn(400).astype(numpy.float32)
dest = numpy.zeros_like(a)
multiply_them(
drv.Out(dest), drv.In(a), drv.In(b),
block=(400,1,1), grid=(1,1))
print dest-a*b
(Это пример examples/hello_gpu.py в дистрибутиве исходного кода PyCUDA.)
На поверхности лежит то, что эта программа будет печатать экран полный нулей. За нашем вниманием осталось много интересных вещей, которые происходят:
PyCUDA компилирует исходный код CUDA и закачивает его на карточку(графическую).
Замечание: Этот код не должен быть постоянным - вы можете легко заставить Python генерировать код, который вы хотите скомпилировать. Смотрите Метапрограммирование с PyCUDA.
Код взаимодействия numpy PyCUDA автоматически высвобождает место на вашем устройстве, копирует массивы numpy a и b поверх, запускает одноблоковую сетку 400x1x1, и копирует dest назад.
Отметим, что вы можете также и просто хранить ваши данные на карточке между вызовами ядра - нет нужды копировать данные все время.
Видите, почему в этом примере нет кода подчистки? Его нет, потому что мы слишком ленивые и просто его пропустили. И он просто не нужен. PyCUDA автоматически станет делать вывод, где и какая необходима подчистка памяти и делает это для вас.
Любопытно? Давайте начнем.
Переведено на Нотабеноиде
http://notabenoid.org/book/20422/66697
Переводчики: wuffur
Настройки
Готово:
