俺言語「詞葉」のバージョン3.0のドキュメントにこんなことを書く事になるとは。
従って、詞葉コンパイラは常に最適化を優先します。エイリアスアクセスで問題が生じる場合には、次のように_m_fence文を記述してプログラマがコンパイラに知らせる必要があります。
int foo( void ) naked
{
int a = 1 ;
int b ;
int * p = &a ;
a = 2 ;
_m_fence ; // メモリへの反映を保証
b = *p ;
return b ;
}
の _m_fence ですが。まあ、ただのメモリエイリアスです。
普通のC++コンパイラだとエイリアスの可能性のある変数に対しては常に問題の生じないコードを出力するわけですが(大抵オプションスイッチなどで切り
替え可能だと思いますが、実際にはエイリアスの問題が無くても可能性があれば逐一メモリアクセスしてしまうので高速化の障害になる)、詞葉では常に無視し
て高速化を優先する、というルールにしたということですね。
まあ、ある程度はエイリアス解析はするんで、実際には殆ど _m_fence を書く必要はないと思いますが。(ただ、詞葉の場合は、コンパイラが確実にエイリアスになるのが分かった場合のみ対処して、可能性があるというだけの場合は無視(コードで明示が必要)するということで)
因みに、この高速性を重視した naked モード。まだデバッグ中ですが、現状で(当初の推定通り)既に10数倍は高速になっています。
更にコードの最適化で高速化した上で、詞葉 3.1 で実行時にネイティブコード(SSE2)に変換して実行する機構も追加予定です。
ただ、直近の目論見としては Android での高速な自前のスクリプト言語を獲得することですけどね。
純粋なスクリプト上の演算ループなどでは、Android 1.6 の Java より高速に実行出来そうな気がしています。(ネイティブコードに変換しない実行でも)
|