12.07.2015 Views

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

NEON ベ ク ト ル 化 コ ンパイ ラの 使 用ポインタの 使 用配 列 にア ク セスする 際 、 多 く の 場 合 は、 メ モ リ ア ク セスがオーバーラ ッ プ しない こ と を コ ンパ イ ラ 側 で 検 証 で き ます。 しかし、 ポインタを 使 用 すると、こ の 可 能 性 は 低 下 し、 ラ ン タ イ ムテ ス ト を 実 行 する か、 restrict を 使 用 する 必要 が 生 じ ます。コ ンパイ ラは、 ループが 安 全 であ る と 判 断 でき る 場 合 はポ イ ン タ を 含 んでいるループをベク トル 化 できます。 ループ 内 の 配 列 参 照 およびポ イ ン タ 参 照 は、メ モ リ へのベク タ ア ク セスがあ るかど う かを 判 断 するために 解 析 されます。場 合 によっては、 コンパイラはランタイムテストを 作 成 し、テストの 結 果 によってループのベクタバージョンかスカラバージョンを 実 行 します。関 数 の 引 数 はポ イ ン タ と し て 渡 さ れる 場 合 があ り ます。 複 数 のポ イ ン タ 変 数を 関 数 に 渡 す 場 合 は、 メ モ リ のオーバーラ ッ プ し てい る セ ク シ ョ ン をポ イ ントすることが 可 能 です。 実 行 時 に こ の よ う にな る こ と はほ と んど あ り ませんが、 コ ンパイ ラ は 常 に 安 全 な 方 法 に 従 い、 代 入 演 算 子 の 左 辺 および 右 辺 にポイ ン タ があ るループの 最 適 化 は 回 避 し ます。 例 えば、 例 3-8 の 関 数 を 参 照 して下 さい。例 3-8 ポイ ン タの 条 件 付 きベク ト ル 化void func (int *pa, int *pb, int x){int i;for (i = 0; i < 100; i++) *(pa + i) = *(pb + i) + x;};この 例 では、 1 つのループパスの 結 果 によ って 次 のループパスにフ ィ ードバックされるよ うにメモリ 内 で pa と pb がオーバーラ ップしている と、 ループのベ ク ト ル 化 に よ って 不 正 な 結 果 が 得 ら れる こ と があ り ます。 以 下 の 引 数 で関 数 が 呼 び 出 さ れた 場 合 は、 ベ ク ト ル 化 はあいまいな も のにな り ます。int *a;func (a, a-1);コンパイラはランタイムテストを 実 行 して、 ポインタのエイ リアスの 生 成 が行 われるかど う かを 調 べます。 ポ イ ン タ のエ イ リ ア ス 生 成 が 発 生 し ない 場 合は、 コー ド のベク ト ル 化 バージ ョ ンを 実 行 し ます。 ポインタのエイ リアス 生成 が 発 生 する 場 合 は、 元 のベク トル 化 されていないコードが 代 わりに 実 行 されます。 これによって、 ランタイムの 効 率 が 良 くなり コードサイズが 小 さ くなります。<strong>ARM</strong> DUI 0205IJ Copyright © 2002-2010 <strong>ARM</strong> Limited. All rights reserved. 3-11ID 100419Non-Confidential,

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!