C
coros
Guest
Salut tout le monde,
Je fais des projets de traitement d'image sur le AT91RM9200, je tiens donc à augmenter les performances en permettant le cache et l'UMM.Voici le code:
void init_TLB () (
uint i, j, a; uint * tlb = (uint *) 0x20000000;
for (i = 0; i <4096; i ) (
tlb = 0x12 | (i <<20);
)
for (i = 512; i <528; i ) (
tlb | = 0xC; / / activer le cache pour write_back SDRAM
)
i = 0x20000000;
asm ( "mcr p15, 0,% 0, C2, C2, 0":: "r" (i)); / / set SEG base
i = 3;
asm ( "mcr p15, 0,% 0, C3, c0, 0":: "r" (i)); / / set accès de domaine
i = 0;
asm ( "mcr p15, 0,% 0, C7, C7, 0":: "r" (i)); / / invalider ICACHE & DCache
i = 0xC000107D;
asm ( "mcr p15, 0,% 0, c1, c0, 0":: "r" (i)); / / enable MMU ICACHE & & & clock DCache asyn
)
Puis-je mesurer la performance en comptant le nombre de décompositions svd d'une matrice 6x6 en 2.5s.
a = AT91C_BASE_ST-> ST_CRTR 5;
i = 0;
while (a> AT91C_BASE_ST-> ST_CRTR) (
Q = V;
SVD (Q, W, E);
i ;
)
std:: cout << "\ nsvd de Q \ n" <<W << "\ nCalculated" <<i << "fois en 2.5s";
J'obtiens des résultats suivants:
pas de cache 33 fois
Instruction Cache seulement 270
données et de cache d'instructions 35
Pourquoi est-il si lent lorsque les deux caches sont activés?C'est tellement lent que, sans cache.
Personne n'a une expérience similaire?
Merci
Je fais des projets de traitement d'image sur le AT91RM9200, je tiens donc à augmenter les performances en permettant le cache et l'UMM.Voici le code:
void init_TLB () (
uint i, j, a; uint * tlb = (uint *) 0x20000000;
for (i = 0; i <4096; i ) (
tlb = 0x12 | (i <<20);
)
for (i = 512; i <528; i ) (
tlb | = 0xC; / / activer le cache pour write_back SDRAM
)
i = 0x20000000;
asm ( "mcr p15, 0,% 0, C2, C2, 0":: "r" (i)); / / set SEG base
i = 3;
asm ( "mcr p15, 0,% 0, C3, c0, 0":: "r" (i)); / / set accès de domaine
i = 0;
asm ( "mcr p15, 0,% 0, C7, C7, 0":: "r" (i)); / / invalider ICACHE & DCache
i = 0xC000107D;
asm ( "mcr p15, 0,% 0, c1, c0, 0":: "r" (i)); / / enable MMU ICACHE & & & clock DCache asyn
)
Puis-je mesurer la performance en comptant le nombre de décompositions svd d'une matrice 6x6 en 2.5s.
a = AT91C_BASE_ST-> ST_CRTR 5;
i = 0;
while (a> AT91C_BASE_ST-> ST_CRTR) (
Q = V;
SVD (Q, W, E);
i ;
)
std:: cout << "\ nsvd de Q \ n" <<W << "\ nCalculated" <<i << "fois en 2.5s";
J'obtiens des résultats suivants:
pas de cache 33 fois
Instruction Cache seulement 270
données et de cache d'instructions 35
Pourquoi est-il si lent lorsque les deux caches sont activés?C'est tellement lent que, sans cache.
Personne n'a une expérience similaire?
Merci