2011-11-14 4 views
3

어떻게 GCC에서 SSE2를 사용할 수 있습니까? 이중 값으로 작업하고 싶습니다.GCC에서 이중 계산을위한 SSE2

I s.th를 검색합니다. 다음과 같이하십시오 : http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 이중 값에 대해서만.

+0

'-msse' 등으로 컴파일하거나'-march = native'로 컴파일 할 수 있습니다 ... –

+0

그게 전부입니까? 나는 그것이 복잡 할 것이고 하나는 intrinsic을 사용해야한다고 들었다. –

+2

명시 적 구문을 사용하려면 내장 함수를 사용해야합니다. 컴파일러 플래그를 사용하면 사용 가능할 때 하드웨어를 사용하고 옵티마이 저가 올바른 선택이라고 결정하면 컴파일러에 알릴 수 있습니다. '-O' 레벨과 함께 사용하십시오. 보장은 없지만 어셈블리를 비교해보고 비교해보십시오. –

답변

4

insns를 사용하려면 gcc -mfpmath=sse -msse2으로 컴파일해야합니다.

옵션 -msse2 만 있으면 SSE2 내장 함수를 사용할 수 있으므로 -mfpmath=sse은 GCC가 모든 FP 작업에 대해 SSE2 insns를 방출하도록합니다.

또한 벡터화는 -O3에서 사용할 수 있습니다. 벡터화 SSE2-4의 INSN의

장점은 분명, 샌디 브릿지 프로세서는 사이클 당 (예를 들어 4 번 곱, 4 개 번 추가하고 그 위에 약간의 셔플) 세 256 비트 운영에

을 실행할 수 있습니다

그러나 Intel 최적화 설명서에서는 기존 x87 insns와 비교하여 플랫 레지스터 모델 및 짧은 대기 시간을 포함하여 스칼라 작업에도 SSE를 사용하도록 권장합니다.

편집 :

32 비트 코드, 당신은 또한 FP 인수의 원인이됩니다 -msseregparm을 추가하고 SSE 레지스터를 통해 전달되는 값을 반환 할 수 있습니다, 언급하는 것을 잊었다. 기본적으로 메모리에 전달되고 %st0에 각각 전달됩니다. 당연히 ABI가 변경되므로 상호 작용하는 모든 모듈을이 옵션으로 컴파일해야합니다.

+0

메모리가 올바르게 작동하면 64 비트 ABI에서 x87이 전혀 사용되지 않습니다. – phkahler

+0

@phkahler, 네, x87을 사용할 때'long double' 연산을 제외하고는 자연스럽게. – chill