2016-07-24 2 views
-1

이 코드를 감안할 때 :__attribute__ vector_size 란 무엇입니까?

using vec = uint32_t __attribute__ ((vector_size (16))); 
이 MSVC 2015 년 다시 쓸 수있는 방법

?

+0

아마'__m128', 우리는 당신이 그것을 사용하여 볼 수 없습니다. –

답변

3

64 비트보다 큰 정수형 & 플로트 타입을 생성하기위한 GCC 전용 확장이며, VC++에서 직접 대체 할 수는 없지만 대신 사용할 수있는 __m128d 유형이 있습니다. .

1

이는 SIMD 명령어에 대한 추상화 인 gcc vector extensions의 예입니다.

이 특정 라인은 총 16 바이트 길이의 벡터에 대해 유형 별칭 vec을 만들고 32 비트 크기의 서명되지 않은 이가 터로 구성됩니다.

MSVC에는 동일한 확장명이없는 것으로 보입니다. SIMD의 사용은 alignment routines and inline assembly을 통해 지원됩니다. 따라서 정확하게 라인을 다시 쓰는 방법은없고 이 라인을 다시 쓰는 것만으로는 충분하지 않으며 유형을 사용하는 별칭이나 객체가 사용되는 라인도 사용됩니다.

+0

MSVC는 OP가 찾고있는 것과 동일한 레이아웃으로 [__m128i] (https://msdn.microsoft.com/en-us/library/26232t5c.aspx) 데이터 형식을 제공합니다. '__m128i'유형의 변수도 16 바이트 경계에서 적절히 정렬됩니다. SIMD 명령어는 [compiler intrinsics] (https://msdn.microsoft.com/en-us/library/26td21ds.aspx)를 통해 지원됩니다. x64 컴파일러는 인라인 어셈블리를 지원하지 않으므로 인라인 어셈블리는 SIMD 코드를 구현하는 권장 방법이 아닙니다. – IInspectable