Comments 8
Ну это не полностью разные команды все-таки а разные вариации одних и тех же команд. FMA например это все по сути одна команда. Различия только в знаках (a*b+c, a*b-c, -a*b+c) и типах операндов (fp32, fp64, fp32 packed,....)․ Там декодер по сути достает эту одну команду и пару бит в виде "флагов" управляющих ею. Кроме того не все эти инструкции поддерживаются. Например FMA4 и FMA3 взаимно исключающие (разные реализации одного и того же). AVX512 вообще прям by design состоит из нескольких поднаборов инструкций которые могут поддерживаться не полностью. Наконец в списке инструкции частично "продублированы" - например FMA является частью AVX2․ Так что не все так плохо, да.
Активно использую инструкции SSE/AVX/AVX2/AVX512 для обработки текста. Дают хорошие плюшки в производительсности...
У Риск В минималистичный симд, потому что он состоит из необходимого минимума. Как только у производителей появятся настоящие клиенты, образуется столько расширений, что их в одной статье не перечислишь.
Как это можно удалить x87 FPU, если команд для работы с 80-битным форматом больше ни в одном наборе нет?
х87 даже синусы считает неточно, попробуйте посчитать sin(M_PI) при помощи SSE(2) и при помощи х87.
А если вам не хватает 53 бит мантиссы, попробуйте для начала https://en.wikipedia.org/wiki/Double-double_(arithmetic)#Double-double_arithmetic
Тригонометрические функции это не то что «даже» считается неточно, это единственное что там реализовано не идеально. Но даже эта проблема имеет нулевую практическую значимость и скорее является косяком документации которая гарантировала максимальную ошибку в относительных единицах тогда как реальная реализация fsin обеспечивает ее в абсолютной величине. Ну как бы да, формально нехорошо что величина синуса равная 1e-18 считается для некоторых значений с абсолютной погрешностью 1e-23 а не 1e-30 что формально обещает стандарт ( конкретные значения взяты с потолка чтобы показать принцип). Влияет это на хоть что то? Сомневаюсь. В любом случае в sse и даже в avx вплоть до avx-512 специальных инструкций для подсчета синуса аналогичных fsin просто нету, а любой алгоритм реализованный на обычных инструкциях даст лучшие результаты при использовании long double.
SIMD на x86 — чудовище Франкенштейна?