Я буду считать аксиоматичным, что ни один программный метод не будет конкурировать с инструкцией по аппаратному обеспечению для квадратных корней. Единственная трудность заключается в том, что .NET не дает нам прямого контроля над оборудованием, как во времена встроенного ассемблера для кода C.
Давайте сначала обсудим общую аппаратную перспективу x86.
Инструкция xQ с плавающей запятой FSQRT имеет три точности: одинарную, двойную и расширенную (стандартная точность 80-битных регистров FP), и существует сокращение времени на 25-40% для одинарной и двойной точности , См. здесь для 32-битных инструкций x86.
Это может звучать как большая возможность, но это всего лишь дюжина часов или около того. Такая экономия легко потеряется в накладных расходах, если вы не сможете тщательно управлять кодом от вызова функции до возвращаемого значения. Управляемый C ++ звучит (как предполагает Марсело Кантос) как более практичная основа для этого, чем C #.
Примечание. Синхронизация для FSQRT идентична тем FDIV, с которыми он разделяет исполнительный модуль в архитектуре Intel, и, следовательно, имеет общую задержку.
Лучшая возможность для специализированного кода C #, вероятно, существует в направлении инструкций SSE SIMD, где аппаратное обеспечение допускает параллельное выполнение до 4 квадратных корней одинарной точности. Поддержка компилятора JIT для этого отсутствовала в течение многих лет, но вот некоторые рекомендации по текущей разработке.
Вскочила Intel (15 декабря 2010 г.), увидев, что .NET Framework 4 ничего не делает с SIMD:
[Библиотеки производительности Intel позволяют ... инструкции SIMD в C #]
Еще до этого в проекте Mono добавлена поддержка JIT для SIMD в Mono 2.2:
[Mono: примечание к выпуску Mono 2.2]
Недавно была поднята возможность вызова поддержки Mono SIMD из MS C #:
[Вызов моно кода c # из Microsoft .net? - Stackoverflow]
Предыдущий вопрос также касается (хотя и без особой любви!) Того, как установить поддержку Mono SIMD:
[как включить Mono.Simd - Stackoverflow]