Я переношу некоторые вычисления с C# на CUDA. В С# есть много классов, которые я хочу портировать, для каждого класса С# я создаю файлы .cu и .cuh в своем проекте CUDA. Все классы связаны, и все они используются в расчетах. Мне нужно сохранить структуру моего кода C#, потому что в другом случае будет очень легко допустить ошибку.
P.S. В случае, если я помещаю весь код в один файл - все работает как положено, но чтение или исправление некоторых проблем становится настоящей проблемой.
Я хочу скомпилировать проект CUDA и использовать его в своем С# через библиотеку ManagedCuda. Я могу скомпилировать тестовый проект CUDA с одним файлом .cu в файл .ptx, загрузить его в C# через ManagedCuda и вызвать из него функцию.
Но когда я хочу скомпилировать свои настоящие проекты с несколькими файлами cu, в результате я получил несколько файлов .ptx для каждого файла .cu в проекте, более того, я не могу загрузить этот файл .ptx через ManagedCuda, я получил следующую ошибку:
ErrorInvalidPtx: указывает на сбой JIT-компиляции PTX.
Но эта ошибка ожидаема, т.к. в ptx файлах есть перекрестные ссылки, и они имеют смысл только если грузятся вместе.
Моя цель - скомпилировать мой проект CUDA в один файл, но в то же время я не хочу ограничиваться только конкретной видеокартой, которая у меня есть. Для этого мне нужно использовать PTX (или cubin с включенным ptx), этот файл PTX будет скомпилирован для конкретного устройства в момент его загрузки.
Я попытался установить для параметра «Создать код перемещаемого устройства» значение «Да» (-rdc = true) и скомпилировать в PTX и Cubin — в результате я получаю несколько независимых файлов для каждого файла .cu.