Подтвердить что ты не робот

Почему аппаратные ускорители с плавающей запятой не ускоряются, как двоичные числа с плавающей запятой?

Стоит ли его реализовать в аппаратных средствах? Если да, то почему? Если нет, то почему?


Извините, я подумал, что ясно, что я говорю о десятичных Rational Numbers! Хорошо что-то вроде decNumber ++ для С++, десятичный для .NET... Надеюсь, теперь ясно:)

4b9b3361

Ответ 1

Последняя версия стандарта IEEE 754: 2008 действительно определяет аппаратные десятичные числа с плавающей запятой, используя представления, показанные в программном обеспечении, на которое делается ссылка в вопрос. В предыдущей версии стандарта (IEEE 754: 1985) не было представлено десятичных чисел с плавающей запятой. В большинстве современных аппаратных средств используется стандарт 1985 года, а не стандарт 2008 года, но компьютеры IBM iSeries, использующие Power6 чипы имеют такую ​​поддержку, а также z10 мэйнфреймы.

Усилия стандартизации для десятичной плавающей запятой возглавил Майк Коулисау из IBM UK, у которого есть веб-сайт, содержащий полезную информацию (включая программное обеспечение в вопросе). Вероятно, что со временем производители других аппаратных средств также будут вводить десятичные числа с плавающей запятой на своих чипах, но я не слышал указания о том, когда (или нет) Intel может добавить его. Intel действительно оптимизировала программные библиотеки для этого.

Комитет стандартов C хочет добавить поддержку десятичной плавающей запятой и эта работа TR 24732.

Ответ 2

Некоторые процессоры IBM имеют выделенное десятичное аппаратное обеспечение (Decimal Floating Point | DFP-unit).

Вклад ответил 18 сентября в 23:43 Даниэль Праден

Основная причина в том, что DFP-устройства нуждаются в большем количестве транзисторов в чипе, а затем в BFP-устройствах. Причиной является код BCD для вычисления десятичных чисел в двоичной среде. IEEE754-2008 имеет несколько способов минимизации перегрузки. Кажется, что метод DPD hxxp://en.wikipedia.org/wiki/Densely_packed_decimal более эффективен по сравнению с методом BID hxxp://en.wikipedia.org/wiki/Binary_Integer_Decimal.

Обычно вам нужно 4 бита, чтобы покрыть десятичный диапазон от 0 до 9. Бит 10-15 недействителен, но все еще возможен с BCD. Поэтому DPD сжимает 3 * 4 = 12 бит на 10 бит, чтобы охватить диапазон от 000 до 999 с возможностями 1024 (10 ^ 2).

В общем, это означает, что BFP быстрее, чем DFP. И BFP нужно меньше места на чипе, чем в DFP.

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

С аппаратной ускоренной десятичной арифметикой некоторые ошибки не совпадают, как в двоичном. 1/5 = 0,2 = > 0,0110011001100110011001100110... в двоичных, поэтому повторяющиеся фракции можно было бы избежать.

И более сложная функция round() в excel больше не нужна: D (- > function = 1 * (0,5-0,4-0,1) wtf!)

надеюсь, что немного объясните свой вопрос!

Ответ 3

Существует (крошечный бит) ускорение десятичной строки, но...

Это хороший вопрос. Моя первая реакция заключалась в том, что "macro ops всегда не удалось доказать", но, подумав об этом, вы говорите об этом намного быстрее, если это будет реализовано в функциональной единице. Я думаю, дело сводится к тому, что эти операции сделаны достаточно, чтобы иметь значение. Существует довольно печальная история макросов и специальных специальных инструкций для конкретных приложений, и, в частности, старые попытки десятичных финансовых форматов теперь представляют собой только устаревший багаж. Например, я сомневаюсь, что они используются много, но каждый ПК имеет коды операций Intel BCD, которые состоят из

DAA, AAA, AAD, AAM, DAS, AAS

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

В наши дни даже не все бинарные операционные системы фактически находятся в реальном ISA. CPU переводит устаревшую ISA в micro-ops во время выполнения. Все это происходит быстро, специализируясь на основных операциях. На данный момент левые переходы, похоже, ждут какой-либо графики и 3D-работы, то есть MMX, SSE, 3DNow!

Я полагаю, что дизайн с чистым листом может сделать что-то радикальное и унифицировать современные (HW) научные и (SW) десятичные форматы с плавающей запятой, но не задерживайте дыхание.

Ответ 4

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

Ответ 5

Оборудование, которое вы хотите использовать, довольно распространено.

У более старого процессора была аппаратная BCD (бинарная кодированная десятичная) арифметика. (Маленькие чипы Intel получили небольшую поддержку, как отмечалось в предыдущих плакатах)

Оборудование BCD было очень хорошим в ускорении FORTRAN, который использовал 80 бит BCD для чисел.

Научные вычисления, используемые для значительного процента мирового рынка.

Поскольку все (относительно говоря) получили домашние ПК, работающие с окнами, рынок получил крошечный в процентах. Так что никто больше этого не делает.

Поскольку вы не возражаете против 64-битного удвоения (двоичная с плавающей запятой) для большинства вещей, он в основном работает.

Если вы используете 128-битную двоичную с плавающей запятой на современных аппаратных блоках, это не так уж плохо. Еще менее точный, чем 80-битный BCD, но вы это понимаете.

На более ранней работе коллега, ранее бывший JPL, был удивлен, что мы все еще использовали FORTRAN. "Мы перешли на C и С++, которые он нам сказал". Я спросил его, как они решили проблему отсутствия точности. Они не заметили. (У них также нет той же точности посадки космического зонда, которой они располагали, но любой может пропустить планету.)

Итак, в основном 128-битные удвоения в векторной единице более хорошо и широко доступны.

Мои двадцать центов. Не указывайте его как номер с плавающей запятой:)

Ответ 6

Десятичный стандарт с плавающей запятой (IEEE 754-2008) уже реализован на оборудовании двумя компаниями; Серверы на базе IBM POWER 6/7 и карта ускорения SilMaxs SilAx на основе PCIe.

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

Кроме того, несколько публикаций "Michael J. Schulte" и другие показывают очень позитивные результаты тестов, а также сравнение между форматами DPD и BID (как определено в стандарте IEEE 754-2008).

Вы можете найти pdf файлы для:

  • Анализ производительности десятичных библиотек с плавающей запятой и ее влияние на десятичные аппаратные и программные решения

  • Обзор аппаратных конструкций для десятичной арифметики

  • Улучшение энергии и задержки с помощью десятичных единиц с плавающей запятой

Эти 3 статьи должны быть более чем достаточно для ваших вопросов!

Ответ 7

Я предполагаю, что нет приложений с интенсивным вычислением десятичных чисел. С другой стороны, число плавающих точек широко используется в технических приложениях, которые должны обрабатывать огромные объемы данных и не нуждаться в точном результате, просто нужно оставаться в пределах желаемой точности.

Ответ 8

Десятичные числа (и, более общо, фракции) относительно легко реализовать в виде пары целых чисел. Библиотеки общего назначения являются повсеместными и достаточно простыми для большинства приложений.

Любой, кто нуждается в максимальной скорости, собирается настроить свою реализацию (например, сменить дивизор в соответствии с конкретным использованием, алгебраически комбинировать/переупорядочивать операции, умное использование SIMD-тасов).... Простое кодирование наиболее распространенных функций в аппаратное ISA наверняка никогда их не удовлетворит - по всей вероятности, это не поможет вообще.

Ответ 9

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

Кстати: десятичные и двоичные - это числовые базы, а точки с фиксированной точкой и с плавающей запятой - механизмы приближения рациональных чисел. Эти два полностью ортогональны: вы можете иметь десятичные числа с плавающей запятой (.NET System.Decimal реализован таким образом) и двоичные числа с фиксированной запятой (обычные числа являются лишь частным случаем).

Ответ 10

Математика с плавающей запятой, по сути, является попыткой реализовать десятичные знаки в аппаратном обеспечении. Это хлопотно, поэтому десятичные типы создаются частично в программном обеспечении. Хороший вопрос: почему процессоры не поддерживают больше типов, но я полагаю, что он восходит к процессорам CISC и RISC - RISC выиграл битву за исполнение, поэтому они стараются держать вещи в эти дни, как я думаю.

Ответ 11

Современные компьютеры обычно общего назначения. Арифметика с плавающей точкой - очень общая цель, в то время как Decimal имеет гораздо более конкретную цель. Я думаю, что часть причины.

Ответ 12

Вы имеете в виду типичные числовые интегральные типы "int", "long", "short" (и т.д.)? Поскольку операции над этими типами определенно реализованы в аппаратном обеспечении. Если вы говорите о больших числах произвольной точности ( "BigNums" и "Decimals" и т.д.), Это, вероятно, комбинация редкости операций с использованием этих типов данных и сложности сборки оборудования для работы с произвольно большими форматами данных.