[Перевод] Анализ кристалла 8087: быстрый битовый шифтер математического сопроцессора

В 1980-м Intel 8087 сделал вычисления с плавающей запятой на 8086/8088 не «возможными», а по‑настоящему быстрыми — настолько, что на плате оригинального IBM PC под него оставляли пустой сокет. В этой статье автор буквально смотрит на 8087 изнутри: по микрофотографиям кристалла разбирает один из ключевых ускорителей — двухступенчатый бочкообразный сдвигатель, который за один проход выполняет сдвиг на 0–63 позиций и нужен и для обычной арифметики, и для CORDIC‑алгоритмов трансцендентных функций. Будет контекст про IEEE 754, много NMOS‑схемотехники и редкое удовольствие от того, как «железо» читается прямо по топологии. Как работает 8087

https://habr.com/ru/companies/otus/articles/987032/

#Intel_8087 #математический_сопроцессор #плавающая_запятая #IEEE_754 #анализ_кристалла #NMOS #микрокод #CORDIC

Анализ кристалла 8087: быстрый битовый шифтер математического сопроцессора

TL;DR: Статья — про вскрытие и разбор кристалла Intel 8087 с фокусом на его высокоскоростном сдвигателе, который занимал заметную площадь и сильно влиял на производительность операций с плавающей...

Хабр

Beware of Fast-Math | Hacker News

LinkBeware of Fast-Math
https://simonbyrne.github.io/posts/fast-math/

📌 Summary:
本文詳細解析了編譯器中常見的編譯選項「fast-math」,探討其優化浮點數運算的原理、可能帶來的問題及實務使用上的注意事項。fast-math 透過放寬 IEEE 754 浮點運算標準的限制,提升數學運算速度,但代價是生成的結果可能不完全正確,甚至導致程式錯誤。文章說明 GCC、Clang、ICC、MSVC 等編譯器實作 fast-math 旗標時開啟的多項優化選項,包括禁用特殊數檢測(NaNs 和無限大)、重新排序運算順序、以及將接近零的次正數(subnormals)直接設為零等。這些優化在多數情境下提高效率,但可能破壞精確度,影響需要嚴格運算順序的補償算法(如 Kahan summation)及導致錯判 NaN 狀態。文中指出,使用 fast-math 時應進行嚴謹測試,包括建立驗證測試與效能基準,並仔細逐項啟用或關閉各子選項,確保程式在滿足效能需求同時不犧牲精度。此外,建議程式碼層級提供更細微的優化控制,替代單一全域編譯旗標,未來編譯器與語言應提供更明確及局部性的設定方式以強化安全性與可控性。最後,文章也呼籲編譯器開發團隊改善相關文件與錯誤回報處理,並提升使用者教育,避免誤用 fast-math 造成難以偵錯的問題。

🎯 Key Points:
→ ★ fast-math 定義:一組允許打破 IEEE 754 浮點標準部分規則的編譯器旗標,目標是數學運算速度優先,允許不完全正確結果。
→ ★ GCC 中 -ffast-math 包含多項子選項,如-fno-math-errno、-funsafe-math-optimizations、-ffinite-math-only、-fassociative-math 等。
→ ★ 主要破壞點說明:
  ① -ffinite-math-only 假設無 NaN/±Inf,移除相關檢查,導致這些案例無法偵測與處理。
  ② -fassociative-math 允許改變浮點運算結合順序,利於 SIMD 指令優化但可能破壞精度,影響補償算法與高精度需求。
  ③ flushing subnormals to zero(FTZ)優化會將極小的次正數轉為零,這在音訊和圖像應用可能可接受,但會導致數值分析結果錯誤,且影響整個執行緒的浮點環境。
→ ★ SIMD 與向量化說明:重新排序浮點加法不符標準但有助於運用向量指令集(SIMD),大幅提昇速度。
→ ★ 使用建議:
  * 若不在意精度,fast-math 在影音、遊戲或機器學習等領域可能合適。
  * 若需精度保障,須採嚴格驗證流程,包括開發測試用例、效能基準,細分啟用選項和系統性排除錯誤。
  * 盡量避免將 fast-math 固定寫死於開源庫編譯規則中。
→ ★ 未來期望:
  * 編譯器應提供更細緻、局部的優化控制機制(函式或區塊層級)。
  * 改善文件與錯誤提示,教育用戶理解使用風險。
  * 重新命名旗標避免誤導,例如改成 “unsafe-math” 更易提醒用戶。
  * 處理 FTZ 在共享庫載入造成行為不一致的問題(此為 GCC 多年尚未修正的缺陷)。
→ ★ 範例說明瞭 fast-math 如何破壞 Kahan summation的運算順序,導致優化成普通加法,喪失精度。
→ ★ 探討業界對 fast-math 的不同看法與使用場景,包含科學運算、圖形及遊戲程式開發。
→ ★ 文章提醒無法簡單用防護程式碼避免 fast-math 引起的錯誤,因為有些檢查(如 isnan)會在編譯階段被移除。

🔖 Keywords:
#fast-math #浮點運算_Floating_Point #IEEE_754 #SIMD #編譯器優化_Compiler_Optimization

Beware of Fast-Math | Hacker News

[Перевод] Ни одна реализация элементарных функций не соответствует стандарту IEEE 754

Введённый в 1985 году стандарт IEEE-754 для чисел с плавающей запятой был предназначен для решения проблемы разнородности реализаций чисел с плавающей запятой, мешавших портируемости кода, а также для повышения стабильности между платформами. Он получил широкое применение и многократно пересматривался в течение прошедших лет. Если вы когда-нибудь работали с любыми вещественными числами в своих приложениях, то они, вероятно, отвечали этому стандарту. Моя работа в течение последнего года заключалась в анализе погрешности различных математических функций, накопления этой погрешности и способов её уменьшения при помощи различных программных паттернов. Одной из исследованных мной тем были базовые математические функции, используемые в функциях активации нейронных сетей, а также способы их аппроксимации для повышения производительности . В процессе работы нам пришлось столкнуться с противодействием со стороны людей, активно стремящихся к корректной реализации математических функций и к соответствию их стандартам, в частности, к соблюдению обеспечения корректности одной наименее значимой единицы измерения (unit in last place, ULP) для элементарных функций. Я был заинтересован в дальнейшей работе по аппроксимации этих функций, поэтому приступил к исследованию того, каким образом они гарантируют корректность, и если они корректны только на 1 ULP, то где располагаются ошибки в области определения функции. В процессе изучения я обнаружил, что ни одна из популярных математических библиотек, используемых во множестве сфер вычислений, на самом деле не выполняет корректное округление в соответствии с требованиями любой версии IEEE 754 после первой редакции 1985 года.

https://habr.com/ru/companies/ruvds/articles/881698/

#числа_с_плавающей_запятой #floating_point #ieee_754 #плавающая_запятая #плавающая_точка #погрешности_округления #fpu #ruvds_статьи

Ни одна реализация элементарных функций не соответствует стандарту IEEE 754

Введённый в 1985 году стандарт IEEE-754 для чисел с плавающей запятой был предназначен для решения проблемы разнородности реализаций чисел с плавающей запятой, мешавших портируемости кода, а также для...

Хабр

Малые числа, большие возможности: как плавающая запятая ускоряет ИИ и технологии

Привет, Хабр! С вами снова ServerFlow, и сегодня мы решили погрузиться в увлекательный мир чисел с плавающей запятой . Вы когда-нибудь задумывались, почему существуют разные виды этих чисел и как они влияют на производительность наших процессоров и видеокарт? Как малые числа с плавающей запятой помогают развивать нейросети и искусственный интеллект? Давайте вместе разберемся в этих вопросах, раскроем тайны стандарта IEEE 754 и узнаем, какое значение имеют большие и маленькие числа с плавающей запятой в современных вычислениях.

https://habr.com/ru/companies/serverflow/articles/846732/

#плавающая_запятая #fp32 #fp16 #INT8 #квантизация #Тензорные_ядра #fpu #floatingpoint #floating_point #ieee_754

Малые числа, большие возможности: как плавающая запятая ускоряет ИИ и технологии

Привет, Хабр! С вами снова ServerFlow, и сегодня мы решили погрузиться в увлекательный мир чисел с плавающей запятой. Вы когда-нибудь задумывались, почему существуют разные виды этих чисел и как они...

Хабр