1. 依赖

    1. 数据依赖关系

    Untitled

    最好就是举例第几轮产生,第几轮使用,

    Untitled

    注意有反依赖,因为有对同一存储区域的读后写操作。

    Untitled

    1. 语句依赖图,迭代依赖图(一维二维)

    Untitled

    注意J比I大

    1. 依赖类型(流依赖,反依赖,输出依赖),依赖距离向量,依赖方向向量(<,=,>)或者(1,0,-1)

    Untitled

    注意根据之后的 循环逆转(循环置换导致的自变量由递增变递减) 的例子可以明显知道,这里的下标的意思是迭代次数的意思。而且这里的a与b的数据相关,要有a是先处理,b是后处理的(我猜的。而且第一个非0的方向下标是1

    Untitled

    Untitled

    Untitled

    Untitled

    例子

  2. 循环向量化

    Untitled

    1. 可能性充要条件(要求没有并行化严格)

    Untitled

  3. 循环并行化doall

    Untitled

    1. 可并行化充要条件
    2. 可并行的关键在于没有对同一个元素的读写依赖

    Untitled

  4. 循环变换(改变执行次序,但是不改变结果)

    循环分布(大循环分解为多个小循环)

    循环重排(改变次序,但是避开依赖改变,使之可向量化)

    循环置换/交换(多次循环因为粒度与向量化而交换)

    循环逆转(循环置换导致的自变量由递增变递减)

    圈收缩(类似循环展开,使之向量化)

C5746AA1A11D4DC6EAF75705FC4154F6.png

TIPS

迭代图怎么画,xy还是ij,但是只有流依赖吗?不止,可以通过前后来判断是不是反依赖

??? 而且箭头与依赖距离向量无关,起点终点是依赖的i,j)

Untitled