3

LLVM 分析パスを使用して、プログラムで合体分析を実行しようとしています。

基本的には、配列アクセスを見て、メモリ アクセスが合体できるかどうか、つまりアクセス式が帰納変数に対して単調かどうかを調べる必要があります。

次の問題に直面しています。LLVM IR では、配列アクセスは getelementptr 命令で表現されます。そこからどのように表現を再構築できるでしょうか。

静的分析を使用してそれが不可能な場合は、動的分析も実行します。

それが役立つ場合は、次のアルゴリズムを実装しようとしています:

procedure getCoalescingFactor(f, warpSize, reqLineSize)
    x ← the variable that corresponds to the x grid coordinate
    fw ← f where all variables are fixed except x grid coordinate
    mono ← monotonicity(fw , x)
    if mono is unknown then
        culprits ← variables in fw which do not have a sign
        fw ← fw where each variable in culprits is assumed positive
        mono ← monotonicity(fw , x)
    end if
    if mono is monotonic then
        if mono is increasing then
            size ← f (x + warpSize) − f (x)
        else
            size ← f (x) − f (x + warpSize)
        end if
        return reqLineSize
    else
       offsets ← [fw (x), fw (x + 1), . . . , fw (x + warpSize)]
       uniqOffsets ← removeDuplicates(offsets)
       return size(uniqOffsets)
    end if
end procedure
4

0 に答える 0