ARMプロセッサ,NEONの並列化について
現在組み込み化プログラムの勉強をしております.
ARMプロセッサのNEONを用いて並列化を試みているのですがうまくいきません...
一般的なCソースに対して,ループ内の配列に,"__restrict"をつけて,
下記のコマンドを用いております.
すると,__restrictをつけた方がなぜか遅くなる始末...
また-Sで出力したアセンブラを見てもNEON固有の命令 (先頭にVがつくもの)が無いようです.
どなたかお分かりになりますでしょうか...
よろしくお願いします. <(_ _)>
コマンド
arm-none-linux-gnueabi-gcc -Wall -O3 -march=armv7-a -mtune=cortex-a8 -ftree-vectorize -mhard-float -mfloat-abi=softfp -mfpu=neon -mvectorize-with-neon-quad -fno-strict-aliasing -o output_file input_file
/********************ここからソース********************/
//NEONの自動化を検証するプログラム
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <arm_neon.h>
#define NUM_VAL 10
#define LOP_VAL 100000000
char* __restrict vmla(char* __restrict a, char* __restrict x, char* __restrict y, char* __restrict z);
int main(void);
char* __restrict vmla(char* __restrict a, char* __restrict x, char* __restrict y, char* __restrict z){
//ポインタの初期化
char p = 0;
a = &p;
x = &p;
y = &p;
z = &p;
int i, j;
for(j = 0; j < LOP_VAL; j ++){
for(i = 0; i < NUM_VAL; i++){
a[i] = x[i] * y[i] * z[i];
}
}
return a;
}
int main(void){
char an = 0;
char a_val[NUM_VAL];
char x_val[NUM_VAL];
char y_val[NUM_VAL];
char z_val[NUM_VAL];
for(an = 0; an < NUM_VAL; an ++){
a_val[an] = 0;
x_val[an] = 0;
y_val[an] = 0;
z_val[an] = 0;
}
time_t time_start;
time_t time_stop;
printf("Start\n");
time_start = clock();
vmla(a_val, x_val, y_val, z_val);
time_stop = clock();
printf("Processing time is %f\n", (double)(time_stop - time_start));
return 0;
}
お礼
ありがとうござい! そうなんですか~ よくわかりました★