Tag: NEON
Tengo la siguiente multiplicación entre 2 vectores de 16 bits: int16x8_t dx; int16x8_t dy; int16x8_t dxdy = vmulq_s16(dx, dy); En caso de que dx y dy sean lo suficientemente grandes, el resultado puede desbordarse. Me gustaría limitar la multiplicación resultante entre los valores MININT16 y MAXINT16. Hasta ahora no he . . . Read more
if(length == 24) { start = clock(); for(i = 0 ; i < 24; i++) { theta = (abc24[u][i] *M_PI)/4; sample[i].real_sample = cos(theta); sample[i].img_sample = sin(theta); sample_real_vals[i] = reduce_precision(sample[i].real_sample); sample_img_vals[i] = reduce_precision(sample[i].img_sample); printf(” %x %x\n”,sample_real_vals[i], sample_img_vals[i]); } end = clock(); cpu_time_used = ((double) (end – start)) / CLOCKS_PER_SEC; printf(“time used . . . Read more
¿Existe una operación similar a xtn2 pero que realmente borre la mitad inferior en lugar de dejarla tal como está? Tengo un vector de 128 bits llamado v0, cuya vista como 4s es {a,x,b,y} con x e y irrelevantes. Quiero obtener {0,0,a,b}. Si hago xtn2 v0.4s, v0.2d mov v0.d[0], xzr . . . Read more
En un proyecto centrado en acelerar el rendimiento en ARM, estoy usando la implementación mmshuffleepi8 de la página https://github.com/f4exb/cm256cc/blob/master/sse2neon.h#L981. Pero la implementación anterior es subóptima y conlleva costos de rendimiento. ¿Existe un equivalente correcto de mmshuffle_epi8 para ARM?
La prueba simple, c unsigned f(unsigned long long x) { return __builtin_popcountll(x); } cuando se compila con clang –target=arm-none-linux-eabi -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a15 -Os, ⁎ resulta en que el compilador emite numerosas instrucciones para implementar el popcount clásico para las palabras bajas y altas en x en paralelo, y luego suma . . . Read more