No cache L1, L2 e DRAM, o acesso sequencial é mais rápido que o acesso aleatório?

No cache L1, L2 e DRAM, o acesso sequencial é mais rápido que o acesso aleatório?

No cache L1, L2 e DRAM, o acesso sequencial é mais rápido que o acesso aleatório devido à possibilidade de estabelecer leitura antecipada? Eu sei que em HDDs isso é mais rápido em ordens de grandeza.

Responder1

SIM, alguns iguais, mas não exatamente iguais.

De acordo com o manual do processador :-)
http://www.intel.com/content/dam/doc/manual/64-ia-32-architectures-optimization-manual.pdf

Há uma pré-busca de hardware específica, e um programador pode solicitar a pré-busca, além de haver maneiras de funcionar em pedaços de dados dos quais um programador consciente pode obter vantagens. Além disso, os mesmos métodos de hardware ou software feitos de maneira um pouco incorreta podem fazer com que a pré-busca seja descartada repetidamente, além de coisas como essa variarem para diferentes processadores.

Mover os dados para os níveis mais altos, presumindo que serão necessários (como leitura antecipada), e os dados estão lá porque estavam dentro do tamanho do bloco que eles movem para esses níveis (ser sequencial pode ajudar).
O processador, sabendo qual conjunto de instruções está armazenado ali, ou a lista de coisas que irá fazer, prepara esses dados.

2.1.5.4 Pré-busca de dados Os dados podem ser carregados especulativamente no L1 DCache usando pré-busca de software, pré-busca de hardware ou qualquer combinação dos dois. . . .

--

Streamer: Este pré-buscador monitora solicitações de leitura do cache L1 para sequências ascendentes e descendentes de endereços. As solicitações de leitura monitoradas incluem solicitações L1 DCache iniciadas por operações de carregamento e armazenamento e pelos pré-buscadores de hardware, e solicitações L1 ICache para busca de código. Quando um fluxo de solicitações para frente ou para trás é detectado, as linhas de cache antecipadas são pré-buscadas. As linhas de cache pré-buscadas devem estar na mesma página 4K. . . .

--

Wide Dynamic Execution  
Smart Memory Access - prefetches data  
Branch Prediction Unit  
Instruction Fetch Unit  
Instruction PreDecode  

A lista é infinita com muitos recursos que estão pensando no futuro.

Comece na página 60 do documento vinculado.

https://stackoverflow.com/questions/1922249/c-cache-aware-programming Mais PDFs estão vinculados ao Stack Overflow, e tenho certeza de que há muito mais informações sobre isso.

Os dados sobre isso e a técnica são muito longos para serem postados aqui, e todo o "como isso funciona na realidade" dos programadores também seria muito longo. Não só isso, eu mal entendo. Depois de ler isso (e as informações do programador), não é de admirar que um software fazendo quase a mesma coisa possa ser 50 vezes mais rápido que outro, as coisas poderiam ser feitas meticulosamente, testadas e testadas novamente, para ter a otimização final, ou poderiam perca algumas coisas e seja normal.

&NÃO, RAM é todo acesso totalmente aleatório, há apenas pequenas quantidades de latência, é "Ram" que um disco rígido usa para executar ações de leitura antecipada e transferências intermitentes muitas vezes mais rápidas do que podem ser lidas nos pratos. A sequencialidade é extremamente importante em discos rígidos porque o movimento da cabeça leva tempo e não retira os dados do prato. Depois que o cabeçote chega ao local, ele tem que esperar até que os dados apareçam na rotação.
Com a leitura antecipada do disco rígido, ele pode extrair dados na mesma rotação, economizando muitos milissegundos de tempo.

Pode ser um grande exagero de imaginação :-) presumir que há algo semelhante no 2.

informação relacionada