2011-10-25 5 views
2

CPUCPU를 사용하여 다양한 벤치 마크 테스트를 실행하여 gcc의 속도와 관련하여 다양한 최적화 작업을 수행하려고합니다. 저는 -O1, -O2 및 -O3에 익숙하지만 -msse가 적절한 최적화라고 들었습니다. -msse는 정확히 무엇입니까? 나는 또한 -msse가 64 비트 아키텍처에서 기본값이라는 것을 보았습니다. 사용하지 않는 것과 사용하지 않는 것의 차이점을 비교하려면 어떻게 비활성화해야합니까?-msse 사용 안 함

답변

0

http://www.justskins.com/forums/gcc-option-msse-and-128289.html

SSE (http://it.wikipedia.org/wiki/Streaming_SIMD_Extensions) 이름이 말하는 것처럼 그들은의 vectorial 부동의 일종 빠른 펜티엄 3 이후 프로세서에 존재하는 SSE 명령어는 포인트 계산. 그들은 모든 64 비트 프로세서에서 사용할 수 있습니다. 왜 우리는 그것을 비활성화해야합니까?

-msse와 -msse2 중에서 선택할 수 있습니다. SSE2는 다른 강력하고 매우 빠른 벡터 명령어를 추가하는 SSE를 기반으로 구축 된 또 다른 명령어 세트입니다.

펜티엄 3에는 SSE가 있고 32 비트 프로세서입니다. 대신 SSE2가 현대적이며, 여전히 32 비트 프로세서 인 Pentium 4는 SSE2를 사용합니다.

+1

를 사용합니다. – erasmuss22

+0

'-msse','-msse2','-msse3','-msse4.1','-msse4.2' 중에서 선택할 수 있습니다. "실제"사용을 위해 특정 확장 대신 CPU 생성만을 대상으로 설정하는 것이 좋습니다. – millimoose

+0

SSE 명령어는 memset 및 memcpy의 일부 최적화 된 버전에서만 사용되거나 컴파일러가 더 나은 최적화가 될 수 있음을 이해할 수 있지만 sse 및 sse2는 거의 사용되지 않는 메모리 정렬과 같은 많은 요구 사항을 가지고 있습니다. -msse 또는 -mno-msse를 사용하여 프로그램을 컴파일해도 아무런 효과가 없다면 놀랄 일이 아닙니다. –

5

-msse은 SSE 명령어의 생성을 활성화합니다. 모든 64 비트 프로세서 (x86-64)에는이 프로세서가 있지만 일부 구형 32 비트 프로세서 (IA-32)에는 이러한 지침이 없습니다. 이것이 GCC의 기본 설정 이유입니다.

SSE 명령어는 벡터 연산 및 부동 소수점과 관련이 있습니다. 범용 코드에서 자동 벡터화의 기회가 거의 없다는 것을 고려하면 부동 소수점을 사용하면 관찰 할 수있는 유일한 차이점이 있습니다.

64 비트에

는 SSE 명령어를 사용하지 않도록 우리는 32 비트 및 64 비트 컴파일 사이의 전환을 포함하여 벤치 마크의 다양한 조합을 시도하고, 그래서 우리는 -msse 할 것 비활성화 무엇을보고 그냥 궁금하다 -mno-sse

+0

펜티엄 3에는 있지만 32 비트 프로세서입니다. SSE2는 대신 현대적이며 모든 32 비트 프로세서에는 있지만 일부는 가지고 있습니다. 펜티엄 4는 32 비트 프로세서이지만 SSE2가 있습니다. –

+0

@Salvatore 무슨 뜻인지 잘 모르겠습니다. 386에서 Pentium II까지의 모든 Intel IA32 프로세서는 SSE가없는 32 비트 프로세서입니다. 내 대답은 분명히 하겠지만 모든 x86-64 프로세서에는 SSE가 있지만 모든 IA32 프로세서에는 그렇지 않습니다. SSE의 확장으로서 SSE2는 물론 SSE를 지원하는 프로세서의 서브 세트에 의해서만 지원됩니다. –

+0

예 정확한 :) 지금은 나에게 아주 분명하다. –