Мне нужно скопировать содержимое одного буфера в другой блоками n байтов ( n может отличаться), несколько раз для проверки производительности кэша.
Я использую memcpy, но боюсь, что не получаю успешных результатов. Размер блока варьируется от нескольких килобайт до мегабайт. И я должен зарезервировать максимальный блок для использования (длинный двойной).
Я немного растерялся в копии. Мне просто интересно, сталкивался ли кто-нибудь с этой проблемой, и может ли он помочь мне с некоторыми советами или псевдокодом.
Я редактирую тему, добавив в нее код:
int main (int argc, char *argv[])
{
FILE *fp;
fp= fopen("part1.dat", "w");
struct timeval time, oldtime;
float segundos, microsegundos, total;
// float rendimiento;
pid_t pid;
struct sched_param parametros;
int i, v,p;
char buffer1[100024];
char buffer2[100024];
pid = getpid();
parametros.sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(pid, SCHED_FIFO, ¶metros);
p=0;
gettimeofday(&oldtime, NULL);
for (i=1;i<65;i++)
{
size_t datos=i*1024;
for (v=0; p>i;v++)
{
memcpy(buffer1, buffer2, datos);
p=(MAX_SIZE/i*1024);
}
}
gettimeofday(&time, NULL);
segundos = (float) (time.tv_sec - oldtime.tv_sec);
microsegundos = (float) (time.tv_usec - oldtime.tv_usec);
total = (float) ((segundos * 1000000 + microsegundos));
// printf ("Dimension %d \t Tiempo 1: %.2f \t Fallos Metodo 1:%d \t Tiempo 2: %.2f \t Fallos Metodo 2:%d \t Multiplica: %f \t Rendimiento: %.2f\n", i, total, fallos1, total2, fallos2, iteraciones, rendimiento);
// fprintf (fp, "%d \t %.3f %.3f %.3f\n", i, total, total2,rendimiento);
fclose(fp);
printf("Se ha creado el archivo de datos: part1.dat\n");
return(0);
}
Идея состоит в том, чтобы скопировать из buffer1 в buffer2, в блоках данных 'p' раз, в этом случае предполагается, что это делается 256000 раз (i = 1, datos = 1024).