2013-01-20 3 views
0

매트릭스 효율을 확인하는 어플리케이션을 만듭니다. 나는 다양한 방법을 사용한다 (예를 들어 루프, 2/3 루프, openmp 등). 한 가지는 남았습니다. 데이터 프리 페치를 확인해야합니다.이 C 코드를 변경하여 일부 데이터를 미리 가져 오는 방법은 무엇입니까?

코드 : 자체 prefetch 데이터

#define SIZE 5000 

for(int i=0;i<SIZE;i++) 
for(int j=0;j<SIZE;j++) 
    mul+=tab[i][j] 

일반적으로 프로세서 (우리는 단일 행에 있고 j를 증가 할 때), 항상은 아니지만 (예를 들어 tab[0][0]prefeched 결코 또는 우리가 다음 행에 갈 때 (loop i++ ,tab[i][0])). 우리가 그들을 계산하기 전에이 코드를 procprefetch 데이터 tab[0][0], tab[1][0],tab[2][0],tab[3][0] 등으로 변경하는 방법?

+0

어떤 컴파일러/플랫폼을 사용하고 있습니까? – Hasturkun

+0

Visual Studio와 openMP를 사용하고 있습니다. – asss

답변

1

당신이 할 수있는 프리 페치 내장 기능을 사용

무효 _m_prefetch (무효 *)를;

사용자가있는 곳보다 먼저 최소 128 바이트를 미리 가져 오려고합니다. 루프를 풀어서 각 프리 페치간에 올바른 작업량을 수행하거나 실제 프리 페치 명령어에서 클럭 사이클을 낭비 할 수 있습니다.

"똑바로"메모리를 읽을 때 프로세서가 자체적으로 프리 페칭 작업을 수행 할 것으로 예상됩니다 [탭은 런타임이 아닌 2 차원 컴파일 타임 배열이라고 가정합니다. 내장 배열].