prefetch optimizations
Niavis Panagiotis
niavis@ceid.upatras.gr
Thu Jul 10 11:51:00 GMT 2003
I'm not sure if this is the right mailing list to post this. I'm using the
function block_prefetch(follows) to prefetch a 4Kb array in the cpu
cache. In the program I allocate a scr pointer and a dest pointer (both
50MB) and I copy data from src to dest(whith memcpy) in 4KB
chuncks. I observe the following behaviours:
1) The best bandwidth is achieved when at the begining of each 4KB chunk
the destination pointer is passed to block_prefetch before coping to it.
2) malloc returns me pointers 8 bytes after a page barrier. If i align
them to page barrier the bandwidth drops a lot.
Can someone explain me or point me to some documents which explain this
behaviour?
Thank you in advance.
The block_prefetch follows:
int pfetch;
static const void inline block_prefetch(void *addr)
{
int *a = (int *) addr ;
pfetch += a[0] + a[16] + a[32] + a[48]
+ a[64] + a[80] + a[96] + a[112]
+ a[128] + a[144] + a[160] + a[176]
+ a[192] + a[208] + a[224] + a[240] ;
a += 256;
pfetch += a[0] + a[16] + a[32] + a[48]
+ a[64] + a[80] + a[96] + a[112]
+ a[128] + a[144] + a[160] + a[176]
+ a[192] + a[208] + a[224] + a[240] ;
a += 256;
pfetch += a[0] + a[16] + a[32] + a[48]
+ a[64] + a[80] + a[96] + a[112]
+ a[128] + a[144] + a[160] + a[176]
+ a[192] + a[208] + a[224] + a[240] ;
a += 256;
pfetch += a[0] + a[16] + a[32] + a[48]
+ a[64] + a[80] + a[96] + a[112]
+ a[128] + a[144] + a[160] + a[176]
+ a[192] + a[208] + a[224] + a[240] ;
}
Niavis Panagiotis
Computer Engeneering & Informatics Department
University of Patras
Greece
More information about the Gcc
mailing list