2016-12-12 16 views
0

SSE 지침을 사용하는 특수 코드 세트를 작성하기 위해 회사와 협력 중입니다. 그들은 Qt Creator IDE를 사용하고 있습니다. 나는 XCode와 Visual Studio에서 컴파일되는 C 헤더 파일과 해당 * .c 파일을 제공했다. Qt Creator에서는 컴파일되지 않습니다.Qt Creator의 SIMD 지침

SSE 명령어가 Qt Creator에서 컴파일되도록 적절한 컴파일러 설정을 어떻게 변경합니까?

다음과 같이 첫 번째 오류의 원인이 라인은 다음과 같습니다

_mm_store_ps(outData, _mm_add_ps(*l, *r)); 

오류 문 읽기 :

SSE vector return without SSE enabled changes the ABI [-Wpsabi] 

감사합니다 : 우리는 또한이 경고를 받고있어

Inlining failed in call to always_inline ‘__mm_add_ps’: target specific option mismatch 
Inlining failed in call to always_inline ‘_mm_store_ps’: target specific option mismatch 

너의 도움을 위해.

+5

Qt Creator는 컴파일러가 아니며 IDE입니다. 컴파일러와 IDE는 다른 것들입니다. 사람들이 분석 할 수 있도록 몇 가지 오류 메시지와 문제 코드를 보여주십시오. – Velkan

+0

@Velkan 고맙습니다. 나는 지금 그것을했다 (나는 생각한다). – user24205

+0

선택한 빌드 시스템에 따라 컴파일러 플래그를 전달하는 방법에 따라 다릅니다. 그래서 그것은 qmake, cmake, 보통의 손으로 쓰는 Makefile입니까? 아니면 어떤 종류의 프로젝트입니까? 실제로 명령 행에서 사용할 수있는 빌드 시스템과 QtC로 빌드 할 때 빌드 시스템을 사용하는 Qt Creator 프로젝트가 있습니다. 가능한 경우 이들 중 첫 번째 플래그에 필요한 컴파일러 플래그를 추가해야합니다. – hyde

답변

2

gcc 및 clang과 같은 컴파일러는 내장 함수 및 벡터 유형을 사용하는 코드를 컴파일 할 때 관련 명령 세트 확장을 활성화해야합니다. 예 : . 또한 컴파일러는 SSE2를 사용하여 자동 벡터화 할 수 있습니다.

SSE2는 x86-64의 기준선이므로 어떤 이유로 32 비트 바이너리를 작성하고 있습니까?

일부 컴파일러 (어쩌면 MSVC)는 컴파일러가 자동으로 명령을 생성하지 않고 내장 함수를 사용할 수 있다고 생각합니다.

런타임 CPU 디스 패칭을 원한다면 SSE4.1 또는 AVX를 사용하지만 프로그램없이 컴퓨터에서 작업해야하는 기능이 있으므로 SSE4 및 AVX 기능을 별도의 파일에 넣으십시오. -msse4.1-mavx을 사용하여 해당 컴파일 단위를 작성하십시오.

은 보통 -march=nehalem 또는 -march=haswell도가 지원하는 확장 기능을 사용하여뿐만 아니라 가능성이 대상 CPU를 최적화 할 수 -mtune=haswell을 설정하는 더 중요한 (만약 당신이 원하는 경우) -mpopcnt 같은 물건을 활성화하고 할 수 있도록하는 것이 좋습니다.