2013-02-06 3 views
2

여기 내 간단한 질문입니다. ICC를 사용하면 #pragma SIMD를 사용하여 컴파일러가 벡터화하지 않도록 선택하는 루프를 벡터화 할 수 있습니다. GCC와 비슷한 것이 있습니까? 또는 향후 릴리스에서이 기능을 추가 할 계획이 있습니까?강제로 GCC로 자동 벡터화

상당히 관련이 있습니다. Graphite로 강제 벡터화는 어떻게됩니까?

는 GCC가 SSE/SSE2/등의 지침을 사용하도록 허용되는 한 파비오

답변

1

을 내 요청 을 고려 주셔서 감사합니다, 컴파일러는 일반적으로 생산 벡터 명령에 그것은 "가치"의 것을 깨닫는다 때. 컴파일러에서 대부분의 일과 마찬가지로 컴파일러가 "아마도 이것이 안전하지 않습니다"또는 "이 작업이 너무 복잡해서 진행 상황을 파악할 수 없다"는 생각을 피하기 위해 프로그래머의 운/계획/관리가 필요합니다. 그러나 꽤 자주 gcc (4.x 버전)를 합리적으로 현대적인 버전으로 사용하면 성공할 수 있습니다.

컴파일러에서 -msse 또는 -msse2 등을 추가하여 SSE 또는 SSE2 명령어를 사용할 수 있습니다 (나중에 SSE 확장을 위해 등). -msse2은 x86-64에서 기본값입니다.

그러나 나는 당신이 이것을 강요 할 수있는 어떤 방법을 모르겠다. 컴파일러는 좋은 해결책이라는 것이 행복하기 때문에 또는 이렇게하지 않을 것입니다.

죄송합니다. 흑연에 대해 답변을 드릴 수 없습니다.

+0

네, 무슨 뜻인지 알고 있습니다. ICC를 사용하면 일부 성능이 향상되므로 일부 루프를 벡터화해야합니다. 그래서 저는 GCC의 반응을보고 싶어합니다. 그러나 그것이 가능한지와 벡터화를 강제하는 방법을 발견해야합니다. 어쨌든 고마워. – user2047635

+0

@ user2047635 컴파일러보다 더 잘할 수 있다고 생각되면 직접 내장 함수를 사용하여 수동으로 벡터화 할 수 있습니다. – Mysticial

+0

또는 더 나은, 아직, 어셈블러에서 모든 방법으로 작성 - 그런 식으로, 당신은 어떤 순서로 어떤 명령이 올지, 어떤 레지스터가 어디에서 사용되는지 등에 대해 100 % 제어 할 수 있습니다. –