for (n = 0; n < L_SUBFR; n++)
{
s = 0;
for (i = 0; i <= n; i++)
{
s += exc[i] * h1[n - i];
}
y1[n] = s;
}
Optimzed 버전 :은 루프 중첩 최적화
for (n = L_SUBFR; n != 0; n--)
{
for (i = n; i != 0; i--)
{
y1[n] = y1[n] + exc[i] * h1[n - i];
}
}
내가 그러나 gcc 4.4.6.
와 컴파일 후 AMD opteron 6274
비트 시스템에서 코드를 모두 실행 한, 내가 속도 또는 실행 시간에 어떤 이득을 볼 수 아니다 .
(1) 위의 코드를 더 이상 최적화 할 수있는 방법이 있습니까?
(2) 왜 내가 이득을 볼 수 없는지 말해 줄 수 있습니까?
왜 두 번째 버전이 더 빠릅니까? 게다가, 그들은 동등한 기능을 가지고 있지 않다. – SomeWittyUsername
** 컴파일러에 그런 최적화를 맡긴다. (두 버전이 같은 것을하고 있다고 가정 할 때 이는 의심 스럽다.) 컴파일러는 당신과 나보다 훨씬 더 좋다. –
내부 루프에 저장할 수있는 사이클은'y1' 할당 문에서 소비 된 사이클에 완전히 휩싸입니다. 그런 다음 외부 루프에서 절약 할 수있는 사이클이 내부 루프에 의해 완전히 저지됩니다. –