ホームページ >バックエンド開発 >C++ >Spektre の C 実装はモジュラー演算と NTT をどのように最適化してパフォーマンスを向上させますか?

Spektre の C 実装はモジュラー演算と NTT をどのように最適化してパフォーマンスを向上させますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-28 10:42:10511ブラウズ

How Does Spektre's C   Implementation Optimize Modular Arithmetic and NTT for Enhanced Performance?

C での最適化されたモジュラー演算と NTT (有限体 DFT) 実装

Spektre によって提供されたコードは、C でモジュラー演算と数論変換 (NTT) 最適化を実装します。以下にコードの説明と、提起された質問への回答を示します。

メイン関数フロー:

  1. fourier_NTT クラスは、NTT、逆 NTT (INTT)、モジュラー算術、
  2. DWORD src の配列に対して NTT を実行するには(符号なし 32 ビット整数)、src と必要な要素数 n を指定して NTT() を呼び出します (デフォルトは 0、src の長さを示します)。
  3. 同様に、INTT() は逆 NTT を実行します。
  4. このクラスは、モジュラー算術関数 mod()、modadd()、modsub() を提供します。 modmul() および modpow()。

最適化に関する質問への対処:

1. NTT パフォーマンスの最適化:

NTT パフォーマンスを最適化するために、コードはいくつかの手法を使用します:

  • 事前計算されたべき乗テーブル: W および iW のべき乗を事前計算します。特定のしきい値 (NN) まではアクセスを高速化します。再帰。
  • 安全性 Mod の削除: いくつかの不要な安全性 Mod が削除され、2.5% の高速化が実現しました。
  • Modmul 機能の改善: modmul () 関数はインライン アセンブリを使用して最適化されており、34.9% の高速化。

2.剰余算術最適化の安全性:

剰余算術の最適化では、0xC0000001 である剰余素数 p の特定のプロパティが利用されます。ただし、これらの最適化は p の異なる値には適さない可能性があることに注意することが重要です。

追加の最適化:

1。 NTT 高速ループの再配置:

メイン NTT ループは、パフォーマンス向上のために再配置されました。

2.剰余演算における分岐の削減:

ビット単位のトリックを使用して modadd() での分岐が排除され、実行が高速化されました。

3.不要な if ステートメントの削除:

不要な if ステートメントとビットごとの関数が削除され、コードがさらに合理化されました。

4.新しい Modmul インライン アセンブリ:

modmul() 関数は新しいインライン アセンブリ実装で強化され、速度がさらに向上しました。

結論:

Spektre が提供するコードにより、NTT およびモジュラー演算のパフォーマンスが大幅に向上します。最適化には、アルゴリズムの改善、事前計算されたパワー テーブル、効率的なインライン アセンブリが含まれます。

以上がSpektre の C 実装はモジュラー演算と NTT をどのように最適化してパフォーマンスを向上させますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。