Característica de cache L1 ausente

2

Eu escrevi um programa simples (com a ajuda do artigo de Igor Ostrovsky 'Galeria de Efeitos do Cache do Processador') que supostamente examinava os níveis de cache no meu processador. De acordo com Coreinfo fornecido pela Microsoft meu processador tem os seguintes níveis de cache:

+------------------------+---------------+----------+-------------+
| *- Data Cache 0        | Level 1 32 KB | Assoc 8  | LineSize 64 |
| *- Instruction Cache 0 | Level 1 32 KB | Assoc 8  | LineSize 64 |
| -* Data Cache 1        | Level 1 32 KB | Assoc 8  | LineSize 64 |
| -* Instruction Cache 1 | Level 1 32 KB | Assoc 8  | LineSize 64 |
| ** Unified Cache 0     | Level 2 3 MB  | Assoc 12 | LineSize 64 |
+------------------------+---------------+----------+-------------+

mas se eu correr:

#include <vector>
#include <iostream>
#include <omp.h>

int main(int argc, char* argv[])
{
    int sz = 256;
    for (size_t s = 0; s < 18; s++)
    {
        std::vector<int> arr(sz, sz);
        int steps = 64 * 1024 * 1024;
        double start = omp_get_wtime();
        for (int i = 0; i < steps; i++)
        {
            arr[(i * 16) % arr.size()]++;
        }
        double end = omp_get_wtime();
        std::cout << "size: " << (4 * sz) / 1024 << "KB\t\t";
        std::cout << "avg time: " << (end - start)*1000000000 / steps << "ns" << std::endl;
        sz *= 2;
    }
}

Eu recebo a seguinte saída:

size: 1KB               avg time: 4.36752ns
size: 2KB               avg time: 4.27807ns
size: 4KB               avg time: 4.19745ns
size: 8KB               avg time: 3.93159ns
size: 16KB              avg time: 3.95425ns
size: 32KB              avg time: 3.88134ns
size: 64KB              avg time: 3.8112ns
size: 128KB             avg time: 3.60893ns
size: 256KB             avg time: 3.61895ns
size: 512KB             avg time: 3.62264ns
size: 1024KB            avg time: 3.63614ns
size: 2048KB            avg time: 4.34382ns
size: 4096KB            avg time: 24.5113ns
size: 8192KB            avg time: 28.271ns
size: 16384KB           avg time: 28.1093ns
size: 32768KB           avg time: 28.3462ns
size: 65536KB           avg time: 28.2305ns
size: 131072KB          avg time: 28.4871ns

O aumento repentino no tempo de acesso entre 2048 KB e 4096 KB é aparente devido ao cache L2 de 3 MB. Mas por que eu não vejo nenhum aumento semelhante entre 32KB e 64KB por causa do cache L1 de 32KB? Minha especificação de processador: link

    
por user2551229 18.12.2014 / 08:32

0 respostas

Tags