Sorry, I was send wrong files.
I send my three files again.
#include <stdlib.h>
#include <stdio.h>
#include <ppu_intrinsics.h>
extern void *memcpy(void *, const void *, size_t);
int main() {
unsigned char *s, *d;
register unsigned long long start, finish, i;
if(posix_memalign((void *)&s, 128, 16384)) {
printf("failed\n");
goto end;
}
for(i = 128, j = 0; i > 0; i--, j += 128) { /* clear s from
cache */
__dcbf(s+j);
}
if(posix_memalign((void *)&d, 128, 16384)) {
printf("failed\n");
goto end;
}
for(i = 128, j = 0; i > 0; i--, j += 128) { /* clear d from
cache */
__dcbf(s+j);
}
__dcbt(memcpy); /* prefetch memcpy */
__dcbt(memcpy+128);
__dcbt(memcpy+256);
__dcbt(memcpy+384);
__dcbt(memcpy+512);
__dcbt(memcpy+640);
__dcbt(memcpy+768);
__dcbt(memcpy+896);
__dcbt(memcpy+1024);
__dcbt(memcpy+1152);
__dcbt(memcpy+1280);
__dcbt(memcpy+1408);
__dcbt(memcpy+1536);
__dcbt(memcpy+1664);
__dcbt(memcpy+1792);
__dcbt(memcpy+1920);
__dcbt(memcpy+2048);
__dcbt(memcpy+2176);
__dcbt(memcpy+2304);
__dcbt(memcpy+2432);
__sync();
start = __mftb();
memcpy(d, s, 4096);
finish = __mftb();
printf("%lld\n", finish - start);
free(s);
free(d);
end:
return 0;
}
#include <stdlib.h>
#include <stdio.h>
#include <ppu_intrinsics.h>
extern void *memcpy(void *, const void *, size_t);
int main() {
unsigned char *s, *d;
register unsigned long long start, finish, i;
if(posix_memalign((void *)&s, 128, 4096)) {
printf("failed\n");
goto end;
}
for(i = 32, j = 0; i > 0; i--, j += 128) { /* clear s from
cache */
__dcbf(s+j);
}
if(posix_memalign((void *)&d, 128, 4096)) {
printf("failed\n");
goto end;
}
for(i = 32, j = 0; i > 0; i--, j += 128) { /* clear d from
cache */
__dcbf(s+j);
}
__dcbt(cpymem); /* prefetch memcpy */
__dcbt(cpymem+128);
__dcbt(cpymem+256);
__dcbt(cpymem+384);
__dcbt(cpymem+512);
__dcbt(cpymem+640);
__dcbt(cpymem+768);
__dcbt(cpymem+896);
__dcbt(cpymem+1024);
__dcbt(cpymem+1152);
__dcbt(cpymem+1280);
__dcbt(cpymem+1408);
__dcbt(cpymem+1536);
__dcbt(cpymem+1664);
__dcbt(cpymem+1792);
__dcbt(cpymem+1920);
__dcbt(cpymem+2048);
__dcbt(cpymem+2176);
__dcbt(cpymem+2304);
__dcbt(cpymem+2432);
__sync();
start = __mftb();
memcpy(d, s, 4096);
finish = __mftb();
printf("%lld\n", finish - start);
free(s);
free(d);
end:
return 0;
}
Copy Memory-to-Memory, results are in ticks.
16KB 4KB 2KB 1KB 512B 256B 128B 64B
32B 16B
-----------------------------------------------------------------------------------------------------------------------------------
main1.C 2063~2466 669~879 60~63 33~36 22~24 19~21
17~21 17~19 15~17 15~16
main2.C 110~114 60~62 33~36 21~24 19~21
17~18 17~18 15~16 15~16
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev