パスワードを忘れた? アカウント作成
3422915 journal
日記

L.Entisの日記: コンパイラのメモリエイリアス問題

日記 by L.Entis
自前言語「詞葉」の高速モードを作っているのですが、基本メモリエイリアスを無視した最適化を行うポリシーにして、ドキュメントで注意も書いたのですが、実際どうなのかなぁ~と。
まあ、殆ど自分しか使わないと思うので、自分の好きなようにすればいいとは思うのですが、

 従って、詞葉コンパイラは常に最適化を優先します。エイリアスアクセスで問題が生じる場合には、次のように_m_fence文を記述してプログラマがコンパイラに知らせる必要があります。

    int foo( void ) naked
    {
        int    a = 1 ;
        int    b ;
        int *    p = &a ;
        a = 2 ;
        _m_fence ;    // メモリへの反映を保証
        b = *p ;
        return    b ;
    }

みたいな、_m_fence を明示しろとw
現バージョンのコンパイラで _m_fence 無しだと、この関数はゼロが返ってきます。(実際には不定(aの領域のスタック上の以前の値))

まあ、この例だと p が自明なので(例として自明にする必要があるという事情があるのですが)、最終バージョンでは _m_fence 無しでも期待通り 2 が帰ってくるかもしれませんが。

因みに、次のマイナーバージョンアップで実行時にネイティブコード(SSE2含む)に変換して実行するようにする予定なのですが、ネイティブに変換しない予定の Android 版でも Android 2.1 以前の Java の実行速度以上の速度で走りそうな感じがしています。(現在のバージョンでの実行速度からの推定で)

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あと、僕は馬鹿なことをするのは嫌いですよ (わざとやるとき以外は)。-- Larry Wall

読み込み中...