4.6 最適化バリアの挿入のためのコンパイラ組み込み関数

最適化バリアコンパイラ組み込み関数 __schedule_barrier__force_stores__force_loads、および __memory_changed では、命令の順序変更を無効にしてメモリの更新を強制することによってコンパイラ最適化をオーバーライドできます。

コンパイラでは、命令の順序変更や演算の結合など、さまざまな最適化を実行できます。メモリが複数のプロセッサから同時にアクセスされるシステムレベルのプログラミングのように、命令の順序変更を無効にしてメモリを強制的に更新することが必要になる場合もあります。
最適化バリアコンパイラ組み込み関数 __schedule_barrier__force_stores__force_loads、および __memory_changed では、コードは生成されませんが、コードサイズがわずかに増加し、追加のメモリアクセスが生じる場合があります。

システムによっては、メモリバリアコンパイラ組み込み関数を使用しても、メモリの整合性を確保できないことがあります。たとえば、__memory_changed コンパイラ組み込み関数を使用すると、レジスタで保持されている値がメモリに書き出されますが、データの書き込み先がバッファ可能な領域にある場合、データが書き込みバッファで待機することがあります。この場合、CP15 にデータを書き込むか、メモリバリア命令を使用して書き込みバッファをドレインする必要もあります。詳細については、お使いの ARM プロセッサのテクニカルリファレンスマニュアルを参照して下さい。
関連する参考文書
10.121 __force_stores コンパイラ組み込み関数
10.126 __memory_changed コンパイラ組み込み関数
10.139  __schedule_barrier コンパイラ組み込み関数
10.120 __force_loads コンパイラ組み込み関数
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.