キャリーアラウンドスカラ変数とベクトル化

ループ内で使用されるが設定されないスカラ変数は、ベクタレジスタの各位置で複製され、その複製がベクタ計算で使用されます。

設定され、ループ内で使用されるスカラは、ベクタに昇格されます。一般的に、これらの変数はループ内で一時的なスカラ値を保持し、一時的なベクタ値を保持する必要があります。Example 5 内で、x使用されたスカラであり、y昇格されたスカラです。

Example 5.  ベクトル化可能なループ

float a[99], b[99], x, y;
int i, n;
...
for (i = 0; i < n; i++)
{
    y = x + b[i];
    a[i] = y + 1/y;
};

使用され、ループ内で設定されるスカラは、キャリーアラウンドスカラと呼ばれます。これらの変数は、ループの 1 つのパスで計算された値が次のパスに繰り越されるのでベクトル化にとって問題になります。Example 6x は、キャリーアラウンドスカラです。

Example 6.  ベクトル化不可能なループ

float a[99], b[99], x;
int i, n;
...
for (i = 0; i < n; i++)
{
    a[i] = x + b[i];
    x = a[i] + 1/x;
};

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711