.__builtin_prefetch acelera mi código. ¿Qué debo hacer en el código?
#include <stdio.h>
#include <stdint.h>
int main()
{
uint16_t *data=(uint16_t[]){1,2,3,4,5,6,7,8,9,10};
int mlen=10;
uint16_t partial=0;
__builtin_prefetch(data + 8);
while (mlen > 0) {
partial += *(uint16_t *)data;
data += 1;
mlen -= 1;
}
return 0;
}
Estoy utilizando __builtin_prefetch(data + 8); para que se acceda a la caché hasta el índice 8. Pero si compilo el programa con
gcc prefetcher.c -DDO_PREFETCH -o with-prefetch -std=c11 -O3
es más lento que esto
gcc prefetcher.c -o no-prefetch -std=c11 -O3
Esta es la salida respectiva.
12401 L1-dcache-load-misses # 6.76% de todos los accesos L1-dcache
183459 L1-dcache-loads
0.000881880 segundos transcurridos
0.000952000 segundos usuario
0.000000000 segundos sistema
y esto es sin prefetcher
12991 L1-dcache-load-misses # 6.87% de todos los accesos L1-dcache
189161 L1-dcache-loads
0.001349719 segundos transcurridos
0.001423000 segundos usuario
0.000000000 segundos sistema
Lo que necesito hacer es que mi código _builtinprefetch se ejecute más rápido.
La salida anterior es del programa de rendimiento.</stdint.h></stdio.h>
davy.ai
Parece ser que el código con
__builtin_prefetch
se está ejecutando más lento que el código sin él. Para que el código con__builtin_prefetch
se ejecute más rápido, tendrás que ajustar los parámetros de la función__builtin_prefetch
. Adicionalmente, podrías necesitar ajustar las opciones de optimización del compilador para asegurarte de que el código esté optimizado para el mejor rendimiento.