2012-11-16 3 views
0

MMX 및 SSE와 같은 SIMD 기능에 대해 C/C++ 내장 유형을 사용하는 방법에 대해 읽은 모든 내용은 이들을 불투명 한 형식으로 사용하고 내부 참조를 직접 참조하지 않아야 함을 나타냅니다.SIMD 내장 함수 및 포인터

그러나 많은 예제를 살펴보면 원시 데이터에 대한 포인터를 가져 와서 작업하기 전에 내장 유형에 대한 포인터로 재 해석합니다. 그러나 내장 유형에 대한 포인터를 사용하고 특히 해당 유형의 다른 데이터에 별명을 지정할 때 해당 규칙을 위반하지 않습니까?

+0

일반적으로 원시 데이터에 대한 포인터는 포인터 별칭 지정과 관련하여 특별한 규칙이있는 '서명되지 않은 char *'또는 'void *'입니다. 실제 내장 유형이 있으면 내장 유형 포인터를 사용하여 참조 할 수 있습니다. –

답변

4

당신이 발견 한 것처럼 보이는 것은 대부분의 경우가 빨기 때문입니다.

그것은, 그리고 연습에 SSE 타입의 "내부"를 (한이 컴파일로) 참조 할 사실은 꽤 안전한 당신 할 수있는 메모리의 "정상"데이터 유형 메모리에 그냥 별칭, 그리고 많은 왜냐하면 코드를 작성하고 사용하는 것이 더 편리하기 때문입니다.

그러나 SIMD 사용의 요점은 꽤 많이 파손됩니다. 이것은 많은 최적화를 방지합니다. 즉, 컴파일러는 SIMD 데이터 유형을 SIMD 레지스터에 보관하는 것보다 SIMD 데이터 유형을 지속적으로 저장 /로드해야합니다.

이어야합니다. 그리고 당신이 발견 한 것처럼, 많은 사람들이 "should"를 "자유롭게이 일을해야한다고 느낍니다"라고 읽습니다.

+0

그건 내가 생각한 것입니다. 이식성은 제쳐두고, 물론 작동하지만 컴파일러는 특정 인스턴스에 대해 차선의 코드를 생성합니다. – Omaha