2013-08-12 2 views
2

인텔 설명서는 예를 들어. 인텔 배열 표기법 벡터 작업

c[:] = c[:] + a[:]*b[:] 

는 다음과 같은 작업을 수행합니다 : 곱셈과 배열 또한 큰 배열의 경우

for(i=0; i<N; i++) tmp[i] = a[i]*b[i]; 
for(i=0; i<N; i++) c[i] = c[i] + tmp[i]; 

또는

for(i=0; i<N; i++) c[i] = c[i] + a[i]*b[i]; 

상당한 성능 차이가 있습니다. 내가 알고있는 한, 이러한 벡터 연산이 STL 벡터를 사용하여 수행되는 경우, 이전 벡터 연산이 수행됩니다.

미리 답변 해 주셔서 감사합니다.

답변

1

icc 12.1의 배열 표기법은 Fortran의 기능이며 임시적인 것입니다. 그런 다음 임시 노트는 질문 노트와 같이 성능에 큰 영향을 줄 수 있음을 발견했습니다. 따라서 배열 표기법은 icc 13.0 (및 public specification)에서 수정되어 임시가 생성되지 않습니다.

임시를 생성하지 않으면 C++의 "최소한의 패널티를 가진 추상화"철학 및 C/C++에서 구조 지정을위한 임시 테이블을 생성하지 않는다는 사실과 일치합니다.

슬라이드 33 내 ISC 2012 tutorial도 참조하십시오.