English 中文(简体)
与海合会的洛普版本
原标题:Loop versioning with GCC
  • 时间:2009-11-10 03:29:37
  •  标签:

我正在与海合会合作,实现汽车病媒化。 由于客户要求,我无法使用内在或属性。 (我无法获得用户投入,以支持病媒化)

如果无法了解可以传播媒介的阵列的一致信息,海合会就援用一种循环版本。 在树上进行循环矢量生产时,将进行脱硫。 如果发现一种循环是病媒可承受的,而且对数据校正或数据依赖的限制正在阻碍它(因为无法在汇编时确定),那么将产生两种循环。 这些是循环的病媒化和非实验性版本,同时进行调节或依赖实施控制的时间检查。

我的问题是,我们必须如何执行协调? 如果我发现一种可病媒利用的循环,我不应因为缺乏一致性信息而产生两种循环。

例如。 审议以下法典

short a[15]; short b[15]; short c[15];
int i;

void foo()
{
    for (i=0; i<15; i++)
    {
      a[i] = b[i] ;
    }
}

Tree dump (options: -fdump-tree-optimized -ftree-vectorize)

<SNIP>
     vector short int * vect_pa.49;
     vector short int * vect_pb.42;
     vector short int * vect_pa.35;
     vector short int * vect_pb.30;

    bb 2>:
     vect_pb.30 = (vector short int *) &b;
     vect_pa.35 = (vector short int *) &a;
     if (((signed char) vect_pa.35 | (signed char) vect_pb.30) & 3 == 0)    ;; <== (A)
       goto <bb 3>;
     else
       goto <bb 4>;

    bb 3>:
</SNIP>

生成了第三版病媒化代码。 第4版没有病媒化。 通过核对校对(报表A)。 现在,没有使用内在特征和其他特性,我如何只获得病媒化代码(没有进行这次时间调整检查)。

最佳回答

如果有关数据是固定分配的,那么你可以使用<代码>_align__,称海合会支持具体指明该数据应与必要的边界一致。 如果你积极分配这些阵列,你可以超额分配,然后放弃回归点,以达到你们所需要的一致性。

如果你重新采用支持该守则的制度,你也可以使用<条码>。 最后,请注意,<代码>小型()将始终按照最大建筑类型的规模分配记忆,一般是8个按字节计算。 如果你不需要比这更好的东西,那么 Smalloc就足够了。

。 如果您修改了分配法,迫使这种检查是真实的(即如上所述,总分类),汇编者就应当有义务不将守则设定为条件。 如果你需要与8个逐个边界保持一致,这似乎是a = (a + 7) & ~3;

问题回答

www.un.org/Depts/DGACM/index_spanish.htm 我只拿到一个版本的 lo,,使用你的确切代码,其中可选择:gcc -march=分2 -c -O2 -fdump-tree-optimization -ftree-vectorize vec.c

我的海合会版本为gcc edition 4.4.1 (Ubuntu 4.4.1-4ubuntu8)

海湾合作委员会正在这样做。 该编码将<代码>a和b的阵列合并为16个。 <代码>c,大概是因为c从未用于病媒可分道。





相关问题
热门标签