Какой инструмент лучше всего подходит для проведения параллельных вычислений на 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. Это позволяет существенно увеличить производительность вашей программы, так как исключается лишний шаг копирования данных, который может быть замедляющим фактором.
В терминологии С++ выше <b>double (64bit)</b> находится <b>__float128</b> . <br/> Я-бы проверил поддерживает ли <b>CUDA/OpenCL</b> эти типы <br/> на уровне API. Если вдруг не поддерживает - то придется <br/> их реализовывать самому. <br/> <br/> До того как их реализовывать я-бы спросил у автора - действительно <br/> ли ему нужны числа с такой мантиссой и экспонентой как он хочет <br/> и для каких алгоритмов. В большинстве случаев в алгоритмах <br/> всегда есть маневр. Есть возможность где-то срезать углы и не делать <br/> избыточных расчетов. Тем более что для нужд физики обычного double <br/> хватает. Что такого надо считать чтобы double не хватало - я не знаю. <br/> Поперечник <b>обозримой вселенной</b> в пропорции к планковской длине?
К сожалению оценка будет сильно привязана к железу, а помятую о ситуации на рынке, переставшим быть глобальным, еще и сильно будет зависеть от стоимости используемого железа. <br/> <br/> Если гуглить, обнаруживается достаточно старая статья <a href="https://arxiv.org/abs/1005.2581" rel="nofollow">dwave</a> по которой в пределах одного nvidia устройства разница в производительности (там считали кубиты, а там как раз математика непростая, комплексные числа и т.п.) достигала от 13% до 60% в пользу cuda, что логично. Но статья 14-летней давности, с тех пор и llvm подросло, и amd на рынок взошла как следует. <br/> <br/> Допускаю что и в современных реалиях cuda будет работать быстрее за счет каких-нибудь оптимизаций или если найдешь уже вручную оптимизированную библиотеку под твою задачу, но opencl не привяжет твое решение гвоздями к значительно подорожавшим nvidia железкам (если сравнивать железо от разных производителей с одной ценой, скорость у amd может оказаться выше) <br/> <br/> но не на много.
Похожие вопросы