Итак, для моего окончательного задания в моем классе Computer Systems нам нужно оптимизировать эти forloops быстрее, чем оригинал. Базовый класс составляет менее 7 секунд, а полный уровень составляет менее 5 секунд с нашего сервера linux. Этот код, который у меня здесь, составляет около 5,6 секунды. Я думаю, мне, возможно, придется использовать указатели с этим в некотором роде, чтобы заставить его двигаться быстрее, но я не уверен. Может ли кто-нибудь предложить какие-либо советы или варианты, которые у меня есть? Большое вам спасибо!
QUICKEDIT: файл должен оставаться 50 строк или меньше, и я игнорирую те строки с комментариями, которые включил инструктор.
#include <stdio.h>
#include <stdlib.h>
// You are only allowed to make changes to this code as specified by the comments in it.
// The code you submit must have these two values.
#define N_TIMES 600000
#define ARRAY_SIZE 10000
int main(void)
{
double *array = calloc(ARRAY_SIZE, sizeof(double));
double sum = 0;
int i;
// You can add variables between this comment ...
register double sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0, sum6 = 0, sum7 = 0, sum8 = 0, sum9 = 0;
register int j;
// ... and this one.
printf("CS201 - Asgmt 4 - \n");
for (i = 0; i < N_TIMES; i++)
{
// You can change anything between this comment ...
for (j = 0; j < ARRAY_SIZE; j += 10)
{
sum += array[j];
sum1 += array[j + 1];
sum2 += array[j + 2];
sum3 += array[j + 3];
sum4 += array[j + 4];
sum5 += array[j + 5];
sum6 += array[j + 6];
sum7 += array[j + 7];
sum8 += array[j + 8];
sum9 += array[j + 9];
}
// ... and this one. But your inner loop must do the same
// number of additions as this one does.
}
// You can add some final code between this comment ...
sum += sum1 + sum2 + sum3 + sum4 + sum5 + sum6 + sum7 + sum8 + sum9;
// ... and this one.
return 0;
}