컴파일러가 내 코드를 벡터화하고 있는지 어떻게 알 수 있습니까?


9

Jed Brown의 조회 비용 대 계산 비용에 대한 대답에서 알 수 있듯이 벡터화 및 비 벡터화 부동 소수점 연산을 사용하면 코드가 훨씬 빨라집니다. 많은 최신 컴파일러는 자동 벡터화를 수행 할 수 있다고 주장합니다. 내 코드의 어느 부분이 성공적으로 벡터화되고 있습니까?

답변:


10

현대의 빈티지 인텔 컴파일러와, -O3 -vec-report3. 최적화 수준 3은 벡터화하려는 것을 보장하며 벡터 보고서는 수행중인 작업을 알려줍니다.

벡터화에 대한 GNU 페이지는 기본적으로 최적화 수준 3에서 켜져 있지만 vec-report에 해당하는 것을 찾을 수 없습니다.


빠른 답변 감사합니다. 나는 -vec-report3에 대해 몰랐다. 이 유형의 경우 (자동 벡터화) 컴파일러 환경 설정이 있습니까?
Matthew Emmett

인텔 컴파일러는 실제로 훌륭하지만 인텔 칩에만 적합합니다. 모든 올바른 pragma를 추가하면됩니다 (#pragma ivdep가 가장 쉽습니다) GCC 4.7은 훨씬 나아졌지 만 동료와 함께 일부 코드를 살펴보면 여전히 버그가 있습니다 (openmp pragma에 벡터화가없는 것처럼).
aterrel 2016 년

1
인텔 컴파일러가 AMD 칩에서 벡터화를 수행하는 방식을 다시 확인하는 것이 좋습니다. 나는 오래된 문제가 여전히 존재한다는 것을 100 % 확신하지 못한다.
Bill Barth

2
@BillBarth 예, 여전히 문제입니다. 최적화 공지를 참조하십시오 (예 : software.intel.com/sites/products/collateral/hpc/compilers/… ). AMD는 인텔이 경쟁을 멈추게하지 말고 경쟁을 중지해야한다는 사실을 공개하도록 요구하는 법원 싸움에서 승리했습니다. en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler# 비판
Jed Brown

@JedBrown, SSE가 여전히 이상하지만 AVX의 이야기는 무엇입니까? 이러한 링크는 두 회사 모두 AVX를 구현하기 때문에 문제가 발생하지 않았 음을 나타내지 만 불도저 시스템에서는 테스트하지 않았습니다.
Bill Barth


5

GNU 컴파일러의 경우 추가 -Wa,-ahl=asm.s하면 생성 된 어셈블리 코드가에 덤프됩니다 asm.s.

Intel 컴파일러의 경우 추가 -fcode-asm -Faasm.s하면 생성 된 코드가에 덤프됩니다 asm.s.

그런 다음 어셈블리 코드를 검사하고 벡터 부동 소수점 연산을 찾을 수 있습니다.


어셈블리 출력 검사가 코드가 실제로 벡터화되는지 확인하는 유일한 신뢰할 수있는 방법이라는 데 완전히 동의합니다. 컴파일러가 코드를 벡터화하려는 주장에 정직해야하는 것은 없습니다.
Jeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.