1 ポイント 投稿者 GN⁺ 2023-07-07 | 1件のコメント | WhatsAppで共有
  • Clangで生成されたCコードのループにある最適化の機会を探る記事
  • ループは文字列中の文字に基づいて数値を増減させます。
  • 著者はループを再配置し、null終端子の代わりに'p''s'の文字に最適化します。
  • 著者は算術演算と条件付き移動を使って条件分岐を取り除きます。
  • 最適化されたコードは、元のコードと比べて6.73倍という大幅な高速化を達成します。
  • 著者はほかの最適化手法も試しますが、コードを遅くすることが分かります。
  • ベンチマーク環境には、AMD Ryzen 5 5625U CPUと最新バージョンのClangおよびGCCが含まれます。
  • 結論として、アセンブリでの手作業による最適化が、特定のケースでは大きな高速化につながり得ると述べています。

1件のコメント

 
GN⁺ 2023-07-07
Hacker Newsの意見
  • 元のコードは、switch文の代わりにif文を使うことで最適化できます。
  • コードの別の最適化版では、分岐なしのsete/cmov命令を使い、最適化されたアセンブリコードと同等の速度を達成できます。
  • ベクトル化されたコード版は、可能であればAVX-512命令を使うことでさらに高速になるかもしれません。
  • 他のプロセッサでは、分岐によって性能特性が異なる場合があります。
  • C言語はもともと、システムレベルのコードをプラットフォーム間で容易に移植できるよう設計されており、そのために一部の機能を犠牲にしました。