Next: , Previous: Number of iterations, Up: Loop Analysis and Representation


14.8 数据依赖分析

用于数据相关性分析的代码可以在tree-data-ref.c中找到,接口和数据结构在tree-data-ref.h中描述。用来计算对于给定循环的所有数组和指针引用的数据相关性的函数为compute_data_dependences_for_loop。该函数目前被用于线性循环转换和向量化过程。在调用该函数之前,必须分配两个向量:第一个向量将会包含在被分析的循环体中的数据引用集,第二个将会包含数据引用之间的依赖关系。因此,如果数据引用向量的大小为n,则包含依赖关系的向量将包含n*n个元素。但是,如果被分析的循环包含副作用,例如对数据引用有潜在干扰的调用,则分析会在扫描循环体中的数据引用时停住,并在依赖关系数组中插入一个chrec_dont_know

数据相关性是在扫描循环体时,按照特定顺序发现的:循环体按照执行顺序分析,每条语句的数据引用被压入数据引用数组的尾部。两个数据相关性在程序中的语法位置,和在数据相关性数组具有相同的顺序。这种语法顺序在一些经典数据相关性测试中很重要,并且将这中顺序映射到数组的元素可以避免对循环体表示的昂贵查询开销。

目前处理了三种类型的数据相关性:ARRAY_REF, INDIRECT_REF和COMPONENT_REF。数据相关性的数据结构体为data_reference,其中data_reference_p为指向数据相关性结构体的指针名。结构体包含了以下元素:

描述两个数据引用之间关系的结构体是data_dependence_relation,指向这种结构体的指针的简短名字为ddr_p。该结构体包含:

有一些函数可以很好的打印由数据相关分析抽出的信息:dump_ddrs打印最详尽的数据依赖关系数组,dump_dist_dir_vectors只打印数据依赖关系数组的典型的距离和方向向量,dump_data_references打印数据引用数组中的详细的数据引用。