es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.__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>

Tags:  ,

Answer

  1. Avatar for 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.

Comments are closed.