【发布时间】:2016-06-29 17:15:02
【问题描述】:
到目前为止,我一直在尝试优化我的程序,但我的目标是让它少于 5 秒。我还可以在我的代码中进行哪些更改?
#include <stdio.h>
#include <stdlib.h>
#define N_TIMES 600000
#define ARRAY_SIZE 10000
int main(void) {
double *array = calloc(ARRAY_SIZE, sizeof(double));
double sum = 0;
int i, j;
printf("CS201 - Asgmt 4 - your name\n");
for (i = 0; i < N_TIMES; i++) {
for (j = 0; j < ARRAY_SIZE; j = j + 20) {
sum = sum + array[j] + array[j+1] + array[j+2] + array[j+3] +
array[j+4] + array[j+5] + array[j+6] + array[j+7] +
array[j+8] + array[j+9] + array[j+10] + array[j+11] +
array[j+12] + array[j+13] + array[j+14] + array[j+15] +
array[j+16] + array[j+17] + array[j+18] + array[j+19];
}
}
}
【问题讨论】:
-
在编译时知道大小的情况下不要使用动态内存分配。
-
代码优化是题外话。试试 codereview,也许吧。
-
@SouravGhosh:与加速程序无关,真的。那将是一个 O(1) 操作。
-
我有义务,因为我的老师希望我们使用 double *array = calloc(ARRAY_SIZE, sizeof(double));
-
程序过去是 22 秒,我把它缩短到 8 秒,我认为我的方向是正确的,对吧?
标签: c linux loops optimization