アセンブリを使用してこの 8 ビット位置ポップカウントを最適化するには?
Go で提供されている __mm_add_epi32_inplace_purego の実装は、高価な受け渡しのため最適ではありません。 [8]int32 配列の。パフォーマンスを向上させるには、代わりに配列へのポインターを渡すことをお勧めします。
ただし、質問はこの特定の関数の最適化を超えて、バイト上の位置人口カウント アルゴリズムのアセンブリを使用した内部ループの最適化を検討します。 .
アセンブリの最適化
提供されたアセンブリ コードは、位置人口カウント アルゴリズムの 2 つの機能を提供します:
導入された改善点
アセンブリ コードは、改善するためにさまざまな手法を利用しています。パフォーマンス:
パフォーマンス ベンチマーク
ベンチマークは、アセンブリの最適化により、純粋な Go の単純なリファレンス実装と比較してパフォーマンスが大幅に向上することを示しています。 :
完全なソース コード
両方のアセンブリ バリアントの完全なソース コードは、GitHub で見つけることができます。このコードには、Go プログラムの両方のバリアントに使用できる移植可能なライブラリも含まれています。
結論
アセンブリに位置人口カウント アルゴリズムを実装することで、大幅なパフォーマンスが得られます。利益を達成することができます。提供されたアセンブリ コードは、スループットを最大化するためにさまざまな最適化を利用しています。詳細と例については、GitHub リポジトリを参照してください。
以上がアセンブリの最適化により、バイトの位置ポップカウント アルゴリズムのパフォーマンスをどのように向上させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。