gcc에서 x86-64의 SSE 벡터 명령어를 사용하고자하는데 어떤 인라인 어셈블리도 사용하고 싶지 않습니다. 내가 C에서 그렇게 할 수있는 방법이 있니? 그렇다면 누군가가 내게 모범을 보여줄 수 있습니까?인라인 어셈블리없이 gcc에서 SSE 명령어 사용
답변
예. * mmintrin.h 헤더의 내장 함수를 사용할 수 있습니다 (사용하려는 SSE 수준에 따라 emmintrin.h
, xmmintrin.h
등). 일반적으로 여러 가지 이유로 어셈블러를 사용하는 것이 좋습니다.
#include <emmintrin.h>
int main(void)
{
__m128i a = _mm_set_epi32(4, 3, 2, 1);
__m128i b = _mm_set_epi32(7, 6, 5, 4);
__m128i c = _mm_add_epi32(a, b);
// ...
return 0;
}
이 방법은 대부분의 x86 및 x86-64 컴파일러에서 작동합니다. gcc, clang 및 Linux/Mac OS X/Windows 및 Microsoft의 Visual C/C++ (물론 Windows 만 해당)의 Intel ICC가 있습니다.
gcc에있는 *intrin.h
헤더 (여기에서 /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/include/
)를 찾으십시오.
머리글 immintrin.h
에는 허용되는 기능 (예 : -msse2
또는 -mavx
사용)에 따라 다른 모든 intrins가 포함되어 있습니다.
원하는 것은 intrinsics으로 라이브러리 기능처럼 보이지만 실제로는 컴파일러에 내장되어 있으므로 특정 기계 코드로 변환됩니다.
Paul R 및 hroptatyr은 GCC의 설명서를 어디서 찾을 수 있는지 설명합니다. Microsoft also has good documentation on the intrinsics in their compiler; 비록 당신이 GCC를 사용하고있다 할지라도 MS의 아이디어에 대한 더 나은 튜토리얼을 찾을 수 있습니다.
ARM 아키텍처는 어떻게됩니까? NEON SIMD를 지원합니까? 또는 이것은 x86에서만 의미가 있습니까? – enthusiasticgeek
@enthusiasticgeek 질문은 x86-64를 지정합니다. ARM과 NEON은 고유 한 컴파일러와 자체 내장 함수를 가지고 있습니다. – Crashworks
- 1. 구조체를 gcc에서 SSE 벡터 유형으로 사용 하시겠습니까?
- 2. 버퍼의 SSE 명령어
- 3. AltiVec에 MMX/SSE 명령어 포팅하기
- 4. 정렬 인라인 asm 명령어
- 5. GCC에서 어셈블리없이 프로그램을 컴파일 할 수있는 방법이 있습니까?
- 6. 배열의 모든 요소를 추가하는 SSE 명령어
- 7. SSE 명령어 세트를 사용할 수 없음
- 8. gcc에서 인라인 어셈블러를 사용하는 메소드
- 9. SSE 프리 페치 명령어 크기를 결정하는 방법은 무엇입니까?
- 10. 어셈블리없이 CPU 기능 감지
- 11. C++에서 곱셈 누적 명령어 인라인 어셈블리 사용
- 12. Mono.Cecil을 사용하여 인라인 인수로 IL 명령어 만들기
- 13. Qt에서 시스템 명령어 사용
- 14. IRC 클라이언트에서 명령어 사용
- 15. Matlab의 OCX 라이브러리에서 명령어 사용
- 16. 쉘 프로그래밍 (쉘 명령어 사용)
- 17. SSE ints vs. floats 연습
- 18. Intrinsics Vs 인라인 ASM for SSE for VC++ 2K8
- 19. LLVM 세그먼트 화 오류/필요 명령어 대신 명령어 사용 *
- 20. 인라인 어셈블리의 여러 대체 피연산자 제약 조건 중에서 선택할 때 GCC에서 다른 명령어 니모닉을 내보낼 수 있습니까?
- 21. 서블릿을 SSE (Server Sent Events) 서버로 사용
- 22. SSE 명령의 UnsignedSaturate는 무엇을 의미합니까?
- 23. GCC에서 인라인 ARM 어셈블리를 사용할 때 사용되는 레지스터 최적화
- 24. 번역 단위와 gcc에서 자동으로 인라인 된 함수 4.6
- 25. Visual Studio 2008에서 CMake를 사용하여 SSE/SSE2 명령어 세트를 활성화하려면 어떻게해야합니까? 내가 갔던 비주얼 스튜디오 2005
- 26. gcc에서 -g 및 -O2 옵션 사용
- 27. gcc에서 정적 및 동적 링크 라이브러리 사용
- 28. gcc에서 생성 된 더미 이동
- 29. jqgrid에서 인라인 탐색 사용
- 30. SSE 명령어로 복제 - XMM 레지스터 확장
이것은 gcc 또는 VC++ 용입니까? – pythonic
gcc와 VC++ 모두 내장 함수를 지원합니다. –
FTW, icc도 이러한 내장 함수를 지원합니다. – hroptatyr