Графические процессоры только начинают поддерживать двойную точность в оборудовании, хотя в ближайшем будущем оно будет оставаться намного медленнее, чем одинарная. На протяжении многих лет разрабатывается множество методов, позволяющих синтезировать более плавную точку с высокой точностью, используя представление, состоящее из нескольких поплавков, при любой точности имеет быструю аппаратную поддержку, но накладные расходы довольно значительны. IIRC, руководство crlibm имеет довольно хорошее обсуждение некоторых из этих методов с анализом ошибок и псевдокодом (CRLIBM использует их для представления чисел как более одного значения двойной точности, но те же самые методы могут использоваться с одиночными)
Не зная больше о том, что вы пытаетесь сделать, трудно дать лучший ответ. Для некоторых алгоритмов только одна небольшая часть вычислений требует высокой точности; если вы в таком случае, возможно, вы сможете получить достойную производительность на GPU, хотя код не обязательно будет очень красивым или легким в работе. Если вам нужна высокая точность повсюду в вашем алгоритме, тогда графический процессор, вероятно, не является привлекательным вариантом для вас на данный момент.
И, наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?
Код предназначен для обработки итерационных фрактальных систем, поэтому он должен иметь высокую точность последовательно. Я ищу увеличение производительности по сравнению с обработкой на процессоре. И что касается CUDA и OpenCL, я просто знаком с HLSL atm. Хотя я собираюсь сделать это в CUDA. Раньше я учился в CUDA, но я не могу сказать, что я где-то рядом умею. – Mark
Если вам нужна высокая точность последовательно, в настоящее время, вероятно, невозможно превзойти хорошо написанный код, запущенный на CPU. Возможно, ваше время лучше потрачено на выполнение профилирования на CPU и настройку производительности. –
Не то, чтобы писать код GPGPU не стоит на его собственных достоинствах, просто вы действительно хотите выбрать что-то, где вы не будете пытаться сделать аппаратное обеспечение тем, для чего оно не предназначено. –