Какая функция более эффективна? - PullRequest
0 голосов
/ 19 января 2012

Какая функция более эффективна?

int rows=20000;
int col=30000;

void func1() {
    for(i=0;i<rows;i++) {
        for(j=0;j<col;j++)
            print(a[i][j]);
    }
}

void func2() {
    for(j=0;j<col;j++) {
        for(i=0;i<rows;i++)
            print(a[i][j]);
    }
}

Ответы [ 2 ]

4 голосов
/ 19 января 2012

Производительность, вероятно, будет лучше для первой функции, потому что данные, к которым осуществляется доступ, располагаются последовательно (или в основном последовательно) в памяти.Это быстрее, потому что выполнение чтения в одной ячейке памяти приведет к тому, что соседние ячейки памяти будут перенесены в кеш, поэтому, когда они читаются, они будут считаны намного быстрее, чем если бы их не было в кеш._ Причина, по которой все должны действительно знать о таких вещах, заключается в том, что разница в производительности может быть очень существенной.Около 5 лет назад я работал над оптимизацией производительности проекта, в котором был код, как во второй функции.Я смог увеличить скорость некоторых циклов примерно в 10 раз при программировании на C, последовательно обращаясь к памяти.

1 голос
/ 19 января 2012

Не зная больше, это зависит от того, как реализованы массивы.

Если массив хранится в порядке первой строки, то func1 быстрее, если он - в первой колонке, то func2 быстрее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...