연타 당신이 일류 시민으로서의 벡터 값을 처리 할 수있는하는 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}
이 벡터 SSE 인텔 맥에 기본 플랫폼의 SIMD 명령어를 사용 (만드는 것이 내가 믿는 것, NEON on ARM). 그러나, Mac OS 호출 규칙이 벡터 유형을 다루는 방법에 대해서는 너무 확신 할 수 없습니다.
참조 또는 복사본으로 벡터를 전달하는 것이 더 효율적입니까? 그 차이는 크지 않을 수도 있지만 많은 벡터 주위를 지나갈 것이므로 가능한 한 빨리 올바른 습관을 고를 수있을 것이라고 생각했습니다.
SSE 레지스터는 128 비트 폭이지만 'double4'는 256 비트 폭입니다. –
@DietrichEpp, AVX가 256 비트'ymm0' -ymym15' 레지스터를 가져 왔다는 것을 이해할 수 있습니다. ('xmm'은 이제 이들 중 하위 128 비트를 나타냅니다.) – zneak
AVX는 기본적으로 활성화되어 있지 않습니다. –