演習問題 (2-3)
同じように書き換えれば、2-2ももう少し綺麗になるはず。
演習2-4は面倒なのでパス。今までのまとめなので、同じようにやればできるはず&いかにループや演算回数を減らすかで頭を使えそうではあるんだけど・・。
仕事ではこう言うパズルのような頭を使うことはないんだけど、たまにはこんな感じのも悪くないかなあ。脳の老化を感じます(笑)
#include <stdio.h>
#include <altivec.h>
#define SIZE (16)
float in[SIZE] __attribute__((aligned(16))) = { 1, -2, 3, -4,
5, -6, 7, -8,
9, -10, 11, -12,
13, -14, 15, -16 };
float out[SIZE] __attribute__((aligned(16)));
static float zero[4] __attribute__((aligned(16)));
int main(int argc, char *argv[])
{
int i;
vector float *va = (vector float *)in;
vector float *vc = (vector float *)out;
vector float *vz = (vector float *)zero;
vector unsigned int vpat;
vector float vc_true, vc_false;
for (i = 0; i < SIZE / sizeof(float); i++) {
vpat = vec_cmpgt(*vz, va[i]);
vc_true = vec_sub(*vz, va[i]);
vc_false = va[i];
vc[i] = vec_sel(vc_false, vc_true, vpat);
}
for (i = 0; i < SIZE; i++) {
printf("out[%02d]=%0.0f\n", i, out[i]);
}
return 0;
}
例題プログラム2-3を見ていたら、元の配列からvectorにキャストしたときに、vectorの配列のように扱えることができることがわかったので、2-2よりすっきりしている。同じように書き換えれば、2-2ももう少し綺麗になるはず。
演習2-4は面倒なのでパス。今までのまとめなので、同じようにやればできるはず&いかにループや演算回数を減らすかで頭を使えそうではあるんだけど・・。
仕事ではこう言うパズルのような頭を使うことはないんだけど、たまにはこんな感じのも悪くないかなあ。脳の老化を感じます(笑)
カテゴリ
Linuxトラックバック(0)
このブログ記事を参照しているブログ一覧: CELLプログラミングその2
このブログ記事に対するトラックバックURL: https://www.wizard-limit.net/cgi-bin/mt/mt-tb.cgi/1114

コメントする