да, я знаю fsqrt.Но как процессор это делает?Я не могу отладить аппаратное обеспечение
Типичное аппаратное обеспечение div / sqrt в современных процессорах использует мощность 2 радиуса для вычисления нескольких результирующих битов одновременно.Например, http://www.imm.dtu.dk/~alna/pubs/ARITH20.pdf представляет детали проекта для ALU Radix-16 div / sqrt и сравнивает его с проектом в Penryn.(Они требуют меньшего времени ожидания и меньшей мощности.) Я посмотрел на фотографии;Похоже, основная идея состоит в том, чтобы что-то сделать и передать результат через множитель и суммировать итеративно, в основном, как длинное деление.И я думаю, что это похоже на то, как вы делали бы программное обеспечение по частям.
Intel Broadwell представила модуль Radix-1024 div / sqrt. Это обсуждение RWT спрашивает об изменениях между Penryn (Radix-16) и Broadwell.например, расширение векторного делителя SIMD, чтобы 256-битное деление было менее медленным по сравнению со 128-битным, а также увеличение радиуса.
Возможно также см.
Но, несмотря на то, что аппаратное обеспечение работает, IEEE требует sqrt
(и mul / div / add / sub) для правильного округления результат , то есть ошибка <= 0,5 ulp, поэтому <strong>вам не нужно знать, как это работает, только производительность .Эти операции являются специальными, другие функции, такие как log
и sin
do , а не , имеют это требование, и реальные реализации библиотеки обычно не так точны.(И x87 fsin
определенно не настолько точен для входов около Pi / 2, где катастрофическое подавление в уменьшении диапазона приводит к потенциально огромным относительным ошибкам.)
См. https://agner.org/optimize/ для таблиц инструкций x86, включая пропускную способность и задержку для скалярных и SIMD sqrtsd
/ sqrtss
и их более широких версий.Я собрал результаты в деление с плавающей запятой по сравнению с умножением с плавающей запятой
Для не-x86 аппаратного sqrt вам нужно будет посмотреть на данные, опубликованные другими поставщиками, или результаты от людей, которыепротестировали его.
В отличие от большинства инструкций, производительность sqrt
обычно зависит от данных.(Обычно более значимые биты или большая величина результата занимают больше времени.)