演習問題 (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
コメントする