Физические параметры памяти компьютера, влияющие на производительность. Связный текст, страница 2

Число переменных

C-код

asm-код (icl /Fa /O1 vars.c)

1

for (r0=0;r0<100;r0++);

        xor    eax, eax

.B3.2:

        inc    eax

        cmp    eax, 100

        jl     .B3.2

2

for (r0=0;r0<100;r0++)

{ r1++; }

        xor    eax, eax

.B4.2:

        inc    edx

        inc    eax

        cmp    eax, 100

        jl     .B4.2

. . .

7

for (r0=0;r0<100;r0++)

{ r1++; r2++; r3++; r4++;

  r5++; r6++;

}

        xor    eax, eax

.B9.2:

        inc    edi

        inc    edx

        inc    ecx

        inc    ebx

        inc    esi

        inc    ebp

        inc    eax

        cmp    eax, 100

        jl     .B9.2

8

for (r0=0;r0<100;r0++)

{ r1++; r2++; r3++; r4++;

  r5++; r6++; r7++;

}

        xor    eax, eax

.B10.2:

        inc    DWORD PTR [esp]

        inc    edi

        inc    edx

        inc    ecx

        inc    ebx

        inc    esi

        inc    ebp

        inc    eax

        cmp    eax, 100

        jl     .B10.2

9

for (r0=0;r0<100;r0++)

{ r1++; r2++; r3++; r4++;

  r5++; r6++; r7++; r8++;

}

        xor    esi, esi

.B11.2:

        inc    DWORD PTR [esp]

        inc    edi

        inc    eax

        inc    edx

        inc    DWORD PTR [esp+4]

        inc    ecx

        inc    ebx

        inc    ebp

        inc    esi

        cmp    esi, 100

        jl     .B11.2

10

for (r0=0;r0<100;r0++)

{ r1++; r2++; r3++; r4++;

  r5++; r6++; r7++; r8++;

  r9++;

}

        xor    esi, esi

.B12.2:

        inc    DWORD PTR [ebp-16]

        inc    edi

        inc    eax

        inc    edx

        inc    DWORD PTR [ebp-12]

        inc    ecx

        inc    ebx

        inc    esi

        inc    DWORD PTR [ebp-8]

        inc    DWORD PTR [ebp-4]

        cmp    esi, 100

        jl     .B12.2

Видно, что в данном случае при использовании в одном блоке вычислений до семи переменных, все они отображаются на регистры. Время работы программы при этом является наименьшим. Если же число переменных оказывается больше семи, то процессор вынужден производить операции с памятью, которые значительно увеличивают время счета.

Рекомендация: следует по возможности минимизировать число локальных переменных, чтобы все они были отображены на регистры.

Кэш-память – относительно небольшая память с малым временем доступа. Современные компьютеры обычно имеют 2 или 3 уровня кэш-памяти. Кэш-память 1 уровня располагается на кристалле процессора, имеет время доступа несколько тактов и работает на частоте процессора. Ее объем обычно лежит в диапазоне 16 – 128 Кбайт. Большинство процессоров используют раздельный кэш 1 уровня для данных и команд. Кэш-память 2 уровня имеет еще большее время доступа. Она располагается либо на системной плате (работает на частоте системы), либо на отдельном кристалле в корпусе процессора (работает на 1/2, 1/3, 2/3, … частоты процессора), либо на кристалле процессора (работает на частоте процессора). Ее объем обычно составляет от 256 Кбайт до нескольких мегабайт. Кэш 3 уровня используется на некоторых серверах и имеет объем от 512 Кбайт до нескольких мегабайт.

Кэш-память способна оказывать большое влияние на производительность, и ее параметры желательно учитывать при написании программ. Наиболее значимыми параметрами кэш-памяти являются:

-  объем

-  размер строки

-  ассоциативность

Объем кэш-памяти определяет объем данных, которые могут быть доступны процессору с заданной скоростью. Эта скорость определяется уровнем кэш-памяти. Чем на более высокий уровень иерархии памяти попали данные, тем быстрее будет в дальнейшем осуществляться доступ к ним. В следующем тесте было произведено многократное обращение к областям данных различных объемов. Диаграммы показывают зависимость времени работы программы от объема области:

Тестирование происходило на процессоре Pentium4 с кэш-памятью данных L1 8 Кбайт и L2 256 Кбайт. На первой диаграмме видно, что с позиции чуть меньше 8 Кбайт начинается более резкое увеличение времени счета. Позиция изменения не совпадает с меткой 8 Кбайт, так как часть кэша 1 уровня занимают данные операционной системы и других программ, выполняющихся в это же время. Прыгающий характер графика является результатом влияния посторонних программ, выполняющихся в системе в то же время. На второй диаграмме видно, что с позиции чуть меньше 256 Кбайт также начинается более резкое увеличение времени счета. Различные ступени на диаграмме связаны с влиянием других параметров памяти.