Clang имеет/C расширение C++ то, что позволяет рассматривать значение вектора, как и граждане первого класса:В Mac OS X, эффективнее ли передавать векторы по ссылке или по значению?
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 Базовой платформы (SSE на Intel Macs, NEON на ARM). Тем не менее, я не слишком уверен, как соглашение о вызове Mac OS имеет дело с типами векторов.
Будет ли более эффективно передавать векторы по ссылке или путем копирования? Разница может быть не огромной, но поскольку я буду проходить вокруг множества векторов, я решил, что смогу как можно скорее подобрать правильную привычку.
Регистры SSE имеют ширину 128 бит, но 'double4' имеет ширину 256 бит. –
@ DietrichEpp, я понимаю, что AVX принес 256-битные регистры 'ymm0'' ''ymm15' (' xmm' теперь относится к нижним 128 бит из них). – zneak
AVX не включен по умолчанию. –