Какой инструмент лучше всего подходит для проведения параллельных вычислений на GPU с высокой точностью?

Для производства вычислений с комплексными числами с точностью выше, чем double, и для выполнения параллельных вычислений с использованием сторонних библиотек вам необходимо выбрать между CUDA и OpenCL. CUDA предназначен для использования на оборудовании Nvidia, но это не должно вызывать у вас опасений. Помимо этого, вы планируете отображать вычисленные данные на экран с использованием OpenGL, а при необходимости можете использовать Vulkan. Какое из этих решений подойдет лучше для ваших требований? Предполагается, что CUDA более прост в использовании и имеет больше документации и примеров, чем OpenCL. Так ли это? И возможно ли связать CUDA и OpenGL между собой для того, чтобы избежать копирования данных через процессор (CPU)?
  • 30 июня 2024 г. 12:52
Ответы на вопрос 3
Да, CUDA действительно является более удобным и простым в использовании инструментом для параллельных вычислений на GPU по сравнению с OpenCL, особенно если вы планируете использовать оборудование Nvidia. CUDA также обладает более обширной документацией и примерами, что делает его более привлекательным вариантом для начинающих и опытных разработчиков.

Что касается сочетания CUDA и OpenGL, то такая связка действительно возможна и даже практична. CUDA позволяет загружать результаты вычислений напрямую в память GPU, что облегчает передачу данных между CUDA и OpenGL без необходимости копирования через CPU. Это позволяет существенно увеличить производительность вашей программы, так как исключается лишний шаг копирования данных, который может быть замедляющим фактором.
В терминологии С++ выше double (64bit) находится __float128 . 
Я-бы проверил поддерживает ли CUDA/OpenCL эти типы
на уровне API. Если вдруг не поддерживает - то придется
их реализовывать самому.

До того как их реализовывать я-бы спросил у автора - действительно
ли ему нужны числа с такой мантиссой и экспонентой как он хочет
и для каких алгоритмов. В большинстве случаев в алгоритмах
всегда есть маневр. Есть возможность где-то срезать углы и не делать
избыточных расчетов. Тем более что для нужд физики обычного double
хватает. Что такого надо считать чтобы double не хватало - я не знаю.
Поперечник обозримой вселенной в пропорции к планковской длине?
К сожалению оценка будет сильно привязана к железу, а помятую о ситуации на рынке, переставшим быть глобальным, еще и сильно будет зависеть от стоимости используемого железа. 

Если гуглить, обнаруживается достаточно старая статья dwave по которой в пределах одного nvidia устройства разница в производительности (там считали кубиты, а там как раз математика непростая, комплексные числа и т.п.) достигала от 13% до 60% в пользу cuda, что логично. Но статья 14-летней давности, с тех пор и llvm подросло, и amd на рынок взошла как следует.

Допускаю что и в современных реалиях cuda будет работать быстрее за счет каких-нибудь оптимизаций или если найдешь уже вручную оптимизированную библиотеку под твою задачу, но opencl не привяжет твое решение гвоздями к значительно подорожавшим nvidia железкам (если сравнивать железо от разных производителей с одной ценой, скорость у amd может оказаться выше)

но не на много.
Похожие вопросы