2015-01-07 1 views
2

Я пытаюсь скомпилировать и связать динамическое ядро ​​и использовать его с API-интерфейсом CUDA на GK110.Динамический параллелизм CUDA с API-интерфейсом драйвера

компилировать исходный .cu файл в Visual Studio с перемещаемым кодом устройства флагом и compute_35, sm_35 в файл PTX, а затем линкер CUDA добавляет cudadevrt.lib (по крайней мере, он пытался по линкеру вызова). Когда я делаю cuModuleLoad на ptx .obj, он говорит о неподдерживаемом коде устройства. Существует также .device-link.obj, который кажется нереалистично малым, и не функции драйвера api, похоже, распознают его как действительное изображение. При проверке файла ptx я вижу, что он вызвал вызов функции запуска ядра в соответствии с документацией CUDA (динамический параллелизм из раздела PTX).

Как я могу связать правильный код устройства, чтобы работать с динамическим ядром?

(это CUDA 6.5 на Win64 с VC2013)

ответ

3

Вы должны сделать увязку при загрузке PTX-файл, используя Cuda линкер предоставленного API драйвера:

  • Скомпилирует куб-источник файл с перемещаемого флагом PTX

в приложении:

  • Cr ЭАТС экземпляр компоновщика с cuLinkCreate()
  • Append в PTX-файл, используя cuLinkAddFile() или cuLinkAddData()
  • Append cudadevrt.lib с помощью cuLinkAddFile() или cuLinkAddData()
  • вызова cuLinkComplete(), который возвращает Вам вы можете загрузить как обычно (например, cuModuleLoadDataEx())
  • уничтожить экземпляр компоновщика с cuLinkDestroy()
+0

Спасибо! Это сработало. Все еще интересно, как сделать заранее связанную вещь. – FHoenig