GNU C ++ 용 SSE SSE2 및 SSE3
GNU C ++에서 SSE, SSE2 및 SSE3를 빠르게 익힐 수있는 간단한 튜토리얼이 있습니까? SSE에서 코드 최적화를 어떻게 수행 할 수 있습니까?
튜토리얼을 몰라 죄송합니다.
최선의 방법 (IMHO)은 인텔이 (일반적으로) 단일 SSE 명령을 래핑하기 위해 제공하는 "내재 된"기능을 통해 SSE를 사용하는 것입니다. 이는 * mmintrin.h라는 포함 파일 세트를 통해 사용할 수 있습니다. 예를 들어 xmmintrin.h는 원래 SSE 명령어 세트입니다.
인텔의 최적화 참조 매뉴얼 의 내용에 익숙해지는 것은 좋은 생각이며 (내장 예제는 섹션 4.3.1.2 참조) SIMD 섹션은 필수 읽기입니다. 명령어 세트 참조 매뉴얼은 각 명령어의 문서에 해당하는 "내재적"기능이 포함되어 있다는 점에서 매우 유용합니다.
마 내장 함수에서 컴파일러에 의해 생성 된 어셈블러를 검사 시간을 보낼 (당신은 많은 것을 배울 수 있습니다) 및 프로파일 / 성능 측정에 (당신은 시간의 노력에 작은 수익에 대한 코드를 SSE는 - 보내고 낭비하지 것이다).
2011-05-31 업데이트 : Agner Fog의 최적화 PDF 에 내장 및 벡터화에 대한 매우 멋진 범위가 있습니다 ( 감사합니다 ). 비록 약간 분산되어 있지만 (예 : 첫 번째 섹션의 섹션 12 및 두 번째 섹션의 섹션 5 ). 이것들은 정확히 튜토리얼 자료는 아니지만 (사실 "이 매뉴얼은 초보자를위한 것이 아닙니다"라는 경고가 있습니다) 그러나 그들은 SIMD (asm, intrinsics 또는 컴파일러 벡터화를 통해 사용되는지 여부에 관계없이)를 더 큰 최적화 도구 상자의 한 부분으로 올바르게 취급합니다.
2012-10-04 업데이트 : gcc 벡터 내장 함수에 대한 멋진 Linux 저널 기사 를 여기서 언급 할 가치가 있습니다. SSE보다 더 일반적입니다 (PPC 및 ARM 확장도 포함). 마지막 페이지 에 좋은 참고 자료 모음이 있어서 인텔의 "내재 설명서"에 주의를 기울 였습니다.
사용하기 가장 간단한 최적화는 gcc가 SSE 코드를 내보내도록 허용하는 것입니다.
플래그 : -msse, -msse2, -msse3, -march =, -mfpmath = sse
386 옵션에 대한보다 간결 목록을 보려면 http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options을 더 정확하게, 특정 컴파일러 버전에 대한 문서는 http://gcc.gnu.org/onlinedocs/ 입니다.
최적화를 위해 항상 Agner Fog의 http://agner.org/optimize/를 확인하십시오 . 나는 그가 내장 함수에 대한 SSE 튜토리얼을 가지고 있지 않다고 생각하지만 그는 정말 멋진 std-c ++ 트릭을 가지고 있으며 SSE 어셈블리 코딩에 대한 많은 정보를 제공합니다 (흔히 내장 함수로 변환 될 수 있음).
물론 -mtune 및 -march 옵션, -msse * 및 -mfpmath를 확인하십시오. 이 모든 것이 GCC가 SSE 특정 최적화를 수행 할 수 있도록합니다.
그 이상은 어셈블러의 영역입니다. 두렵습니다.
MSDN은 SSE 컴파일러 내장 기능에 대해 꽤 잘 설명하고 있습니다 (그리고 내장 기능은 사실상 표준이며 clang / XCode에서도 작동합니다).
- http://msdn.microsoft.com/en-us/library/26td21ds.aspx
- http://msdn.microsoft.com/en-us/library/kcwz153a.aspx
이 참조에 대한 좋은 점은 동등한 의사 코드를 표시한다는 것입니다. 예를 들어 ADDPD 명령이 다음 과 같음을 알 수 있습니다 .
r0 := a0 + b0
r1 := a1 + b1
다음은 비밀 셔플 명령에 대한 좋은 설명입니다. http://www.songho.ca/misc/sse/sse.html
간단한 튜토리얼? 내가 알기로는 아니야.
그러나 MMX 또는 SSE의 모든 버전 사용에 대한 정보는 GCC 또는 ICC 또는 VC에 대해 학습에 유용합니다.
GCC의 벡터 확장에 대해 알아 보려면 "info gcc"를 입력하고 노드 : 벡터 확장으로 이동하십시오.
참조 URL : https://stackoverflow.com/questions/661338/sse-sse2-and-sse3-for-gnu-c
'programing' 카테고리의 다른 글
GCC / clang 어셈블리 출력에서 "노이즈"를 제거하는 방법은 무엇입니까? (0) | 2021.01.14 |
---|---|
LiveData의 별도의 MutableLiveData 하위 클래스가있는 이유는 무엇입니까? (0) | 2021.01.14 |
게시 된 RDL 파일은 어디에 있습니까? (0) | 2021.01.14 |
동일한 로거에 대해 서로 다른 로그 수준을 서로 다른 파일에 기록하도록 log4j를 구성하는 방법 (0) | 2021.01.14 |
실제 테이블 대. (0) | 2021.01.14 |