2 중 어느 쪽이 더 빠릅니까? (C++)? 나는이 말이 여부를 알 수 없도록메모리 액세스 비교
for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
sum_b = sum_b + b[i];
}
또는
for(i=0; i<n; i++)
{
sum_a = sum_a + a[i];
}
for(i=0; i<n; i++)
{
sum_b = sum_b + b[i];
}
나는 초보자,하지만 첫 번째 버전, 배열 'A'에 액세스 한 후 'B'에서 이는 수도 배열 'a'와 'b'가 서로 다른 메모리 위치에 있기 때문에 많은 메모리 전환이 발생합니다. 하지만 두 번째 버전에서는 배열 'a'전체가 먼저 액세스 된 다음 배열 'b'전체가 사용됩니다. 즉, 연속 된 메모리 위치가 두 배열을 번갈아 사용하는 대신 액세스됩니다.
두 버전의 실행 시간간에 차이가 있습니까? (무시해도 될 정도로)?
테스트하여 알아낼 수 있습니다. 간단한 수학은 두 번째 예제에서 반복 횟수가 두 배임을 나타냅니다. – NathanOliver
하지만 그는 캐시 히트/미스에 대한 요점을 가지고 있습니다. – ABuckau
다른 아키텍처로 인해 올바른 대답이 없다고 생각합니다. – MaciekGrynda