int main(int argc, char *argv[]) { testMemcpy("sceDmacMemcpy", &sceDmacMemcpy); testMemcpy("sceDmacTryMemcpy", &sceDmacTryMemcpy); checkpointNext("Size of copy:"); // Approximate speed: 225 MB/s. checkpoint(" sceDmacMemcpy 1MB: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00100000)); checkpoint(" sceDmacTryMemcpy 1MB: %08x", sceDmacTryMemcpy((void*)0x04000000, (void*)0x04100000, 0x00100000)); checkpoint(" sceDmacMemcpy 1KB: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00000400)); checkpoint(" sceDmacMemcpy 512B: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00000200)); // This is suspiciously consistent, but maybe it's just chance. checkpoint(" sceDmacMemcpy 272B: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00000110)); checkpoint(" sceDmacMemcpy 271B: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x0000010F)); checkpoint(" sceDmacMemcpy 257B: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00000101)); checkpoint(" sceDmacMemcpy 256B: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00000100)); checkpointNext("Concurrent copies:"); SceUID copyThread = sceKernelCreateThread("dmac", &dmacCopyFunc, 0x10, 0x1000, 0, NULL); sceKernelStartThread(copyThread, 0, NULL); checkpoint(" sceDmacTryMemcpy 1MB: %08x", sceDmacTryMemcpy((void*)0x04000000, (void*)0x04100000, 0x00100000)); checkpoint(" sceDmacMemcpy 1MB: %08x", sceDmacMemcpy((void*)0x04000000, (void*)0x04100000, 0x00100000)); checkpointNext("memalign:"); void *ptr; ptr = memalign(128 , 2048); checkpoint("%d", ((int)ptr) % 128); ptr = memalign(1024, 2048); checkpoint("%d", ((int)ptr) % 1024); //ptr = memalign(100 , 2048); checkpoint("%d", ((int)ptr) % 100); //checkpoint("%i bytes available", oslGetRamStatus().maxAvailable); return 0; }
int main() { #define TEST_SZ (1024) int i; for (i=TEST_SZ;i>0;--i) { // testMemmoveAlign(i); // testBcopyAlign(i); testMemcpy(i); } }