Замедление производительности с ростом количества операций - PullRequest
0 голосов
/ 27 декабря 2010

У меня следующая проблема.Мой код производительности зависит от количества операций!Как это может быть?(Я использую gcc v 4.3.2 под openSuse 11.1)

Вот мой код:

#define N_MAX 1000000

typedef unsigned int uint;

double  a[N_MAX];
double  b[N_MAX];
uint n;

int main(){


    for (uint i=0; i<N_MAX; i++) {
            a[i]=(double)rand()/RAND_MAX;
    }


    for (uint n=100000; n<500000; n+=5000) {

        uint time1 = time(NULL);

        for (uint i=0; i<n;++i)
            for (uint j=0;j<n;++j)
                    b[j] = a[j]; 

        uint time2 = time(NULL);

        double time = double(time2-time1);

        printf("%5d ", n);
        printf("%5.2f %.3f\n", time, ((double)n*n/time)/1e9);

    }

    return 0;
}

А вот журнал результатов:

n-time-Gflops (=)
200000 23,00 1,739
205000 24,00 1,705
210000 25,00 1,764
215000 26,00 1,777
220000 27,00 1,79
225000 29,00 1,746
230000 30,00 1,763
23532,00 1.726
240000 32.00 1.800
245000 34.00 1.765
250000 36.00 1.736
255000 37.00 1.757
260000 38.00 1.779
265000 40.00 1.756
270000 42.00 1.736
275000 44,00
280000 46,00 1,70
285000 48,00 1,669
290000 49,00 1,716
295000 51,00 1,706
300000 54,00 1,66
305000 54,00 1,723
310000 59,00 1,629
315000 61,00 1,627
320000 66,00 1,555
325000 71,00 1,48
330000 76,00 1,433
335000 79,00 1,421
340000 84,00 1,37
345000 85,00 1,400
350000 89,00 1,36
355000 96,00 1,331
3600102,00 1,271
365000 110.00 1.211
370000 121.00 1.131
375000 143.00 0.983
380000 156.00 0.926
385000 163.00 0.909

Изображение также есть, но я не могу опубликовать его как причинуограничения для новых пользователей.Но вот логарифм .

В чем причина этого замедления?Как от этого избавиться? Пожалуйста, помогите!

Ответы [ 2 ]

1 голос
/ 27 декабря 2010

Ваши внутренние циклы увеличивают количество итераций каждый раз - ожидается, что для выполнения их работы потребуется больше времени, если нужно выполнить больше вычислений. Первый раз нужно выполнить 100 тыс. Операций, второй раз выполнить 105 тыс. Операций и так далее. Это просто должно занять все больше и больше времени.

РЕДАКТИРОВАТЬ: Чтобы быть более ясным, я пытался сказать, что выглядит что-то, что Спольский назвал Шлемиэль алгоритм художника

0 голосов
/ 28 декабря 2010

Большое спасибо за ответ!

Мои ожидания основаны на идее, что число операций за единицу времени должно оставаться неизменным. Поэтому, если я увеличу количество операций, скажем, в два раза, то время вычислений также увеличится вдвое, поэтому соотношение количества операций и времени вычислений должно быть постоянным. Это то, что я не встречал. (

...