математика высокой точности на GPU

Использование стандарт функция XPath содержит () .

Функция : булевская переменная содержит (строка, строка)

Эти содержит , функция возвращает true, если первая строка аргумента содержит вторую строку аргумента и иначе возвращает false

7
задан Pete Kirkham 18 September 2009 в 16:42
поделиться

4 ответа

Stream SDK от ATI поддерживает некоторую собственную двойную точность, но это не HLSL.

Уловки заключаются в следующем:

  • не все графические процессоры имеют оборудование двойной точности, только карты более высокого уровня, такие как HD 4870
  • , не все операции двойной точности доступны. Например, нет инструкции деления.

OpenCL будет поддерживать двойную точность как расширение, но это все еще находится в стадии бета-тестирования.

0
ответ дан 6 December 2019 в 11:50
поделиться

Графические процессоры только начинают поддерживать двойную точность в оборудовании, хотя в ближайшем будущем он будет намного медленнее, чем одинарная точность. На протяжении многих лет было разработано множество методов для синтеза более точных чисел с плавающей запятой с использованием представления, состоящего из нескольких чисел с плавающей запятой, с любой точностью, имеющей быструю аппаратную поддержку, но накладные расходы довольно значительны. IIRC, руководство по crlibm довольно хорошо обсуждает некоторые из этих методов, с анализом ошибок и псевдокодом (CRLIBM использует их для представления чисел как более чем одного значения двойной точности, но те же методы можно использовать и с одиночным)

Не зная больше о том, что вы пытаетесь сделать, трудно дать лучший ответ. Для некоторых алгоритмов только одна небольшая часть вычислений требует высокой точности; в таком случае вы можете получить достойную производительность на графическом процессоре, хотя код не обязательно будет очень красивым или простым для работы. Если вам нужна высокая точность во всем алгоритме, то графический процессор, вероятно, не является для вас привлекательным вариантом.

Наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?

но те же методы можно использовать с single)

Трудно дать лучший ответ, не зная больше о том, что вы пытаетесь сделать. Для некоторых алгоритмов только одна небольшая часть вычислений требует высокой точности; в таком случае вы можете получить достойную производительность на графическом процессоре, хотя код не обязательно будет очень красивым или простым для работы. Если вам нужна высокая точность во всем алгоритме, то графический процессор, вероятно, не является для вас привлекательным вариантом.

Наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?

но те же методы можно использовать и с single)

Не зная больше о том, что вы пытаетесь сделать, трудно дать лучший ответ. Для некоторых алгоритмов только одна небольшая часть вычислений требует высокой точности; в таком случае вы можете получить достойную производительность на графическом процессоре, хотя код не обязательно будет очень красивым или простым для работы. Если вам нужна высокая точность во всем алгоритме, то графический процессор, вероятно, не является для вас привлекательным вариантом.

Наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?

В таком случае у вас может быть возможность получить приличную производительность на GPU, хотя код не обязательно будет очень красивым или простым для работы. Если вам нужна высокая точность во всем алгоритме, то графический процессор, вероятно, не является для вас привлекательным вариантом.

Наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?

В таком случае у вас может быть возможность получить приличную производительность на GPU, хотя код не обязательно будет очень красивым или простым для работы. Если вам нужна высокая точность во всем алгоритме, то графический процессор, вероятно, не является для вас привлекательным вариантом.

Наконец, почему HLSL, а не язык, ориентированный на вычисления, такой как CUDA или OpenCL?

10
ответ дан 6 December 2019 в 11:50
поделиться

Используя два числа с плавающей запятой (т. Е. Значения с одинарной точностью), вы можете достичь примерно 56-битной точности. Это приближается к точности double, но многие операции, которые вы можете реализовать для этого типа данных «double single», медленны и менее точны, чем при использовании double. Однако для простых арифметических операций их обычно достаточно.

Эта статья немного рассказывает об идее и описывает, как реализовать операцию умножения. Более полный список операций, которые вы можете выполнять, и способы их реализации можно найти в пакете DSFUN90 здесь . Пакет написан на Fortran 90, но может быть переведен на все, что имеет числа одинарной точности. Однако имейте в виду, что вы должны лицензировать библиотеку у них, чтобы использовать ее в коммерческих целях.

5
ответ дан 6 December 2019 в 11:50
поделиться

Это немного не по теме ответ, но если вы хотите увидеть, как повлияет на вашу проблему переключение некоторых операций на арифметику с одинарной точностью, вам следует подумать об использовании интервальная арифметика для эмпирического измерения границ неопределенности при смешивании точности различными способами. Boost имеет библиотеку интервальной арифметики, которую я когда-то использовал для инструментирования существующего научного кода C ++: ее было довольно легко использовать.

Но учтите: интервальная арифметика заведомо пессимистична: то есть иногда преувеличивает границы. Предполагается, что аффинная арифметика лучше, но я так и не нашел для этого подходящей библиотеки.

2
ответ дан 6 December 2019 в 11:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: