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

Reply via email to