Различия производительности PyCUDA против C? - PullRequest
17 голосов
/ 28 октября 2011

Я новичок в программировании CUDA, и мне было интересно, как производительность pyCUDA сравнивается с программами, реализованными на простом C. Будет ли производительность примерно одинаковой? Есть ли какие-нибудь горлышки бутылок, о которых я должен знать?

EDIT: Я, очевидно, сначала попытался найти эту проблему в Google, и был удивлен, что не нашел никакой информации. то есть я бы исключил, что люди из pyCUDA ответили на этот вопрос в своем FAQ.

Ответы [ 4 ]

17 голосов
/ 28 октября 2011

Если вы используете CUDA - либо напрямую через C, либо с pyCUDA - вся тяжелая числовая работа, которую вы выполняете, выполняется в ядрах, которые выполняются на gpu и написаны на CUDA C (непосредственно вами или косвенно с поэлементными ядрами). Поэтому в этих частях кода не должно быть реальной разницы в производительности.

Теперь инициализация массивов и любой последующий анализ будут выполняться на python (возможно, с использованием numpy), если вы используете pyCUDA, и это, как правило, будет значительно медленнее, чем непосредственно в скомпилированном языке (хотя, если вы создали свой numpy / scipy таким образом, что он напрямую связывается с высокопроизводительными библиотеками, тогда эти вызовы, по крайней мере, будут одинаковыми на любом языке). Но, надеюсь, ваша инициализация и финализация - это небольшие доли от общего объема работы, которую вы должны выполнить, так что, даже если там есть значительные накладные расходы, все же, надеюсь, это не окажет большого влияния на общее время выполнения.

И на самом деле, если окажется, что части вычислений на python действительно влияют на производительность вашего приложения, начало разработки в pyCUDA все же может быть отличным способом для начала, так как разработка значительно проще, и вы можете всегда заново реализуйте те части кода, которые слишком медленны в Python на прямом C, и вызывайте их из python, получая некоторые из лучших в обоих мирах.

5 голосов
/ 04 декабря 2011

Если вас интересует разница в производительности при использовании pyCUDA по-разному, см. SimpleSpeedTest.py, включенный в примеры pyCUDA Wiki. Он сравнивает ту же задачу, выполняемую ядром CUDA C, инкапсулированным в pyCUDA, и несколькими абстракциями, созданными разработчиком pyCUDA. Разница в производительности.

4 голосов
/ 28 октября 2011

Я уже некоторое время использую pyCUDA, и мне нравится создавать на нем прототипы, потому что это ускоряет процесс превращения идеи в рабочий код.

С pyCUDA вы будете писать ядра CUDA с использованием C ++, а это CUDA, поэтому не должно быть различий в производительности выполнения этого кода.Но будет разница в производительности кода, который вы пишете на Python для настройки или использования результатов ядра pyCUDA по сравнению с тем, что вы пишете на C.

1 голос
/ 15 сентября 2016

Убедитесь, что вы используете оптимизацию -O3 и используйте nvprof / nvvp для профилирования ваших ядер, если вы используете PyCUDA и хотите получить высокую производительность.Если вы хотите использовать Cuda из Python, PyCUDA, вероятно, является выбором.Потому что интерфейс C ++ / Cuda через Python - просто ад.Вы должны написать чертовски много уродливых обёрток.А для полной интеграции потребовался бы еще более жесткий код завершения.

...