У меня есть существующее приложение WinForms на платформе .NET 4.0 CP, и я хочу, чтобы он выполнял вычисления на устройствах CUDA. Для этого я решил использовать обертку CUDAfy.NET в C/C++ Toolkit, потому что она (насколько мне известно) является единственной обновленной версией CUDA SDK. Разработка идет без каких-либо серьезных проблем на моей машине, но я столкнулся с проблемами при развертывании на другое устройство.Не удается запустить приложение CUDAfy.NET на целевом устройстве
Более конкретно, когда я создаю проект в VS, а затем запускаю его на своей машине, он работает нормально. Но странно, что он запускает nvcc.exe при инициализации модулей CUDAfy, которые являются частью CUDA SDK, и там не требуется. И когда я пытаюсь запустить двоичный файл на любом целевом компьютере, это генерирует это исключение:
Невозможно найти компилятор cl.exe в пути.
Это ошибка, связанная с отсутствием VS-инструмента для компилятора C++, и не возникает на целевых устройствах. И теперь самое странное; когда я создаю образец проекта, который поставляется с CUDAfy.NET и пытается запустить его на целевом устройстве, он генерирует одно и то же исключение.
Нет ничего плохого в целевой машине, в соответствии с приложением тестирования CUDAfy.NET Cudafy Viewer совместим и обладает возможностями CUDA. Кроме того, я тестировал его на нескольких разных устройствах, всегда с тем же результатом. Я проследил происхождение, за исключением и, как я указала, что она брошена при инициализации CUDAfy.NET:
CudafyModule module = CudafyTranslator.Cudafy();
GPGPU _gpu = CudafyHost.GetDevice(eGPUType.Cuda);
_gpu.LoadModule(module);
По CUDAfy.NET User Manual он должен работать идеально на устройствах, которые отвечают этим требованиям:
- Windows 64-разрядные
- .NET 4.0
- NVIDIA GPU с возможностью вычислительного 2.0 или выше
- до версии драйверов NVIDIA
- CURAND, CUSPARSE, CUFFT и CUBLAS DLLs При использовании этих математических библиотек модулей
- Скомпилированной CUDAfy
Все они удовлетворены, но он по-прежнему не работает. Это оставляет меня с проблемой на моей стороне, и я довольно застрял там.
Одна из возможностей заключается в том, что она вызвана неправильной компиляцией кода, который предназначен для cudafied. Согласно руководству, и я цитирую: «Как правило, вы не cudafy ваш код .NET в ситуации развертывания , так как для этого требуется полный CUDA SDK и Visual Studio. Модули CUDAfy могут быть свободными в .cdfy-файлах или внедрены в ваше приложение сборку (.exe или .dll) с помощью инструмента командной строки cudaycl. ". Это должно быть сделано автоматически, тем не менее я пытался использовать cudaycl, ufortunatelly без каких-либо улучшений. Но поскольку исключение возникает при инициализации CUDAfy, я думаю, что источник проблемы находится в другом месте.
Что еще может быть причиной того, что я создаю двоичный файл для конкретной архитектуры (например, CUDA 2.0), а затем развертывая его на другом (например, CUDA 3.0). Что-то об этом упоминается в разделе CUDA Toolkit Documentation в разделе о компиляторе nvcc: «Двоичный код имеет характерную архитектуру.Кубинский объект генерируется с использованием параметра-компилятора - кода, который указывает целевую архитектуру: например, компиляция с -code = sm_35 выдает двоичный код для устройств с возможностью вычисления 3.5. «.
Так или иначе, я могу Я буду признателен за любую помощь и предложения, которые у вас есть. Кстати, я использую последние CUDAfy.NET v1.29 и CUDA Toolkit 7.0 (последние еще не поддерживаются CUDAfy.NET).
От внешнего вида 'CudafyTranslator.Cudafy()' по умолчанию требуется рабочая инструментальная цепочка. Вероятно, вам нужно найти способ инициализации пустого модуля, который не вызывает их систему компиляции JIT. Есть ли прямая оболочка API-интерфейса драйвера в CUDAfy.NET? – talonmies
@talonmies Я не знаю ни одной прямой оболочки API-интерфейса драйвера, я не думаю, что в CUDAfy есть один. Но это нужно как-то решить, они упоминают запуск своих cudafied .NET-программ на целевых машинах. – SysGen
также, это дубликат http://stackoverflow.com/questions/29430655/avoiding-nvcc-compilation-when-using-cudafy – Val