自動ベクトル化

自動ベクトル化では、ユーザコードのループの高度な分析が行われます。これは、標準のコードの大部分を NEON ユニットの機能にマップする最も効果的な方法です。多くのコードでは、アルゴリズムに依存する小規模の並列処理による利点は、そのような並列処理が可能な場合の自動分析のコストに比べて非常に小さなものです。このため、NEON ユニットは、ループベースの並列処理対象として設計されています。

ベクトル化は、最適化されたコードから得られる結果がベクトル化されないコードの結果と同じになるように実行されます。場合によっては、不正な結果が生じる可能性を排除するために、ループのベクトル化は実行されません。このような場合は準最適なコードになるため、自動ベクトル化に適するように手作業でコードを調整する必要があります。

多くの場合、ソースコードの手作業によるループ展開や複雑な配列アクセスなど、手作業による事前のコードの最適化の試みも、自動ベクトル化を妨げる要因になります。最適な結果を得るための最善の方法は、コンパイラが最適化を実行できるように、単純なループを使用してコードを記述することです。手作業による最適化が行われた従来のコードでは、元のアルゴリズムに基づいて、単純なループを使用してコードの問題部分を書き直すほうが容易であることがあります。

明示的な NEON 命令を記述する代わりに、NEON 拡張機能を使用してベクトル化可能なループをコーディングすると、プロセッサ間のコードの移植性が保たれます。手作業でコーディングしたベクトル化と同等のパフォーマンスレベルをより簡単に達成できます。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0472BJ
Non-ConfidentialID011811