Bonsoir à tous,
Je suis entrain d'optimiser un de mes algo en utilisant l'api C de NEON, et je me demandais qu'elle était la meilleure solution pour utiliser mes données.
Par exemple, j'ai 2 images :
* unsigned char *im1
* unsigned char *im2;
disons que im2 est un masque et qui met à 0 toutes les parties de l'image cachée (0 pour caché et 255 pour garder), je fais donc un simple "and".
Voici mon code (fonctionnel) ressemble à ça :
or j'ai vu que la solution "propre" serait d'utiliser vld1q_u8 et vst1q_u8, est-ce mieux ? plus sûr ? plus rapide ? plus lent ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 unsigned char *ptr1 = im1; unsigned char *ptr2 = im2; int size = (w*h)/16; for(int i = 0; i < size; i++){ uint8x16_t *d1 = (uint8x16_t*)ptr1; uint8x16_t *d2 = (uint8x16_t*)ptr2; *im1 = vandq_u8(*d1, *d2); ptr1 += 16; ptr2 += 16; }
Je sais que je peux faire des tests, mais les temps d'exécutions ne sont pas identiques d'une exécution à l'autre alors peu fiable.
Merci d'avance et bonne soirée,
X.
Partager