Я реализовал программу на GPU (CUDA), которая использует только хост (на C++) для запуска новых ядер. Во время расчета на устройстве мне нужны SVD и решающие системы 3х3 (плотных) матриц фиксированного размера.Размер SVD и решатель в CUDA (в устройстве)
У меня есть собственная реализация SVD и решателя, но она не является численной стабильностью (поэтому не используется). Из-за того, что я был довольно новым с C++ и CUDA, я предпочел бы вместо этого использовать библиотеку. (Числовой материал очень сложно)
Теперь у меня есть проблемы с поиском, что библиотека:
- cuSOLVER не является вызываемым из устройства
- CU не вызываемая формы устройства (и заброшен так кажется)
- Eigen выглядит многообещающим (должен быть вызван с устройства?), Но неясно, какой статус поддерживается CUDA (это говорит экспериментальный). Я нахожу, что люди говорят, что это работает, другие получили ошибки компиляции?
Желательно, чтобы я мог выполнять операции общей матрицы с библиотекой (транспонирование, инверсия, сумма, умножение, ...), так как мои собственные реализации, вероятно, будут менее эффективными и численно устойчивыми для них.
Любые идеи о том, как достичь этого?
UPDATE: Похоже Эйгеном поддерживает основные функции, такие как *, +, переставлять и даже собственные, но СВД, обратная ЭСТ пока не поддерживается. Это на момент написания.
Для матрицы 3x3, почему бы вам не разработать аналитическое решение? – JackOLantern
Исходный код (лицензия BSD) для пакетного решателя для небольших матриц фиксированного размера доступен в виде бесплатной загрузки с зарегистрированного веб-сайта разработчика CUDA. Он должен быть простым в использовании или адаптации для ваших целей. – njuffa