猿问

C循环优化对最终分配的帮助

C循环优化对最终分配的帮助

因此,在我的计算机系统类的最后一次作业中,我们需要优化这些循环,使其比原来的更快。在我们的Linux服务器上,基本等级是7秒以下,完整级别是5秒以下。这里的代码大约有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   10000int 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;}


慕田峪9158850
浏览 778回答 3
3回答

互换的青春

在此之前,请尝试更改编译器设置以生成更快的代码。有一般的优化,编译器可能会进行自动矢量化。你要做的就是尝试几种方法,并检查什么是最快的。作为一个目标,尝试达到一个周期每增加或更好。每个循环的迭代次数:同时加10次和。可能是您的处理器没有足够的寄存器,或者它有更多的寄存器。我会测量4,5,6,7,8,9,10,11,12,13,14.每个循环的总和。和数:有一个以上和意味着延迟不会咬你,只意味着吞吐量。但超过四六个可能没有帮助。尝试四个和,每个循环有4,8,12,16次迭代。或6和,6,12,18次迭代。缓存:您正在运行一个80,000字节的数组。可能不止L1缓存。将数组分成2或4个部分。对两个或四个子数组进行外部循环迭代,下一个循环从0到N_倍-1,以及内环加值。然后您可以尝试使用向量操作,或者多线程您的代码,或者使用GPU来完成这项工作。如果您被迫使用任何优化,那么“注册”关键字可能实际上是有效的。
随时随地看视频慕课网APP
我要回答