Пользовательский код CUDA в C ++ - PullRequest
2 голосов
/ 12 ноября 2011

Я пишу исследовательское приложение, которое будет использовать GPGPU с использованием C ++ и CUDA. Я хочу, чтобы пользователи приложения могли адаптировать программу, написав код ядра, который будет выполняться на GPU.

Пока я думал только о том, чтобы вывести код пользователя в файл .cu, а затем вызвать компилятор платформ для создания динамической библиотеки, которая затем может быть загружена хост-приложением во время выполнения. Это жизнеспособно? Даже если я очень обеспокоен тем, что это сделает мою программу нестабильной и станет кошмаром для кроссплатформенности.

Любые мысли / альтернативы или комментарии будут с благодарностью.

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Вы могли бы сделать это, это жизнеспособно, но IMO у вас должна быть действительно веская причина, чтобы позволить пользователям редактировать ядро ​​CUDA.Я не уверен, что вы имеете в виду для пользовательского интерфейса, и как код, который пользователь запускает в ядре CUDA, будет взаимодействовать с внешним миром, но это может оказаться непростым делом.Возможно, было бы лучше, если бы вы предварительно внедрили набор ядер CUDA и позволили пользователям использовать известный набор параметров для каждого ядра.

Вы смотрели на pycuda?Он в основном реализует аналогичную идею, позволяющую пользователям Python писать ядра C ++ CUDA внутри приложений Python.Pycuda предоставляет функциональность, которая помогает пользователям интегрировать свой код Python с ядрами, которые они пишут, так что когда они запускают скрипт Python, ядро ​​компилируется и запускается как его часть.Я не смотрел на внутреннюю работу Pycuda, но я предполагаю, что по своей сути он делает нечто похожее на то, что вы пытаетесь достичь.Изучение pycuda может дать вам представление о том, что необходимо для написания собственной реализации.

1 голос
/ 13 ноября 2011

Теоретически это возможно.Я бы вместо этого рекомендовал OpenCL вместо Cuda.Он не так оптимизирован, как Cuda на платформе Nvidia, но предназначен для поддержки компиляции во время выполнения (каждый драйвер времени выполнения OpenCl включает в себя компилятор, который в качестве первого шага выполнения ядра компилирует его).

Другое преимуществоВпрочем, OpenCL более переносим, ​​чем Cuda, так как OpenCL работает также на ATI (GPU и CPU) и Intel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...