Clang には C/C++ 拡張機能があり、ベクトル値を第一級市民として扱うことができます。
typedef double double4 __attribute__((ext_vector_type(4));
// easy assignment
double4 a = {1, 2, 3, 4};
double4 b = {4, 3, 2, 1};
// basic operators work component-wise
double4 c = a + b; // {5, 5, 5, 5}
// you can even swizzle elements!
double4 d = a.zyxw; // {3, 2, 1, 4}
これらのベクトルは、基盤となるプラットフォームの SIMD 命令 (Intel Mac では SSE、ARM では NEON) を利用していると思います。ただし、Mac OS の呼び出し規則がベクトル型をどのように扱っているかはよくわかりません。
ベクトルを参照またはコピーで渡す方が効率的ですか? 違いはそれほど大きくないかもしれませんが、多くのベクトルをやり取りするので、できるだけ早く正しい習慣を身につけることができると考えました.