Largura de banda de memória é a taxa na qual os dados podem ser lidos ou armazenados em uma memória semicondutora por um processador. A largura de banda de memória é geralmente expressa em unidades de bytes/segundo, embora isso possa variar para sistemas com tamanhos de dados naturais que não são múltiplos dos bytes de 8 bits comumente usados. Ela define quanta informação se move entre a memória e os processadores a cada segundo. A largura de banda de memória anunciada para uma determinada memória ou sistema é geralmente a largura de banda teórica máxima. Na prática, a largura de banda de memória observada será menor do que (e é garantido que não excederá) a largura de banda anunciada. Existem vários benchmarks de computador para medir a largura de banda sustentada da memória usando uma variedade de padrões de acesso. Eles visam fornecer uma visão sobre a largura de banda de memória que um sistema deve sustentar em várias classes de aplicações reais.
Convenções de medição Existem três convenções diferentes para definir a quantidade de dados transferidos no numerador de "bytes/segundo":
A convenção bcopy: conta a quantidade de dados copiados de um local na memória para outro local por unidade de tempo. Por exemplo, copiar 1 milhão de bytes de um local na memória para outro local na memória em um segundo seria contado como 1 milhão de bytes por segundo. A convenção bcopy é autoconsistente, mas não é facilmente extensível para cobrir casos com padrões de acesso mais complexos, por exemplo, três leituras e uma escrita. A convenção Stream: soma a quantidade de dados que o código da aplicação lê explicitamente mais a quantidade de dados que o código da aplicação escreve explicitamente. Usando o exemplo anterior de cópia de 1 milhão de bytes, a largura de banda Stream seria contada como 1 milhão de bytes lidos mais 1 milhão de bytes escritos em um segundo, totalizando 2 milhões de bytes por segundo. A convenção Stream está mais diretamente ligada ao código do usuário, mas pode não contar todo o tráfego de dados que o hardware é realmente obrigado a realizar. A convenção de hardware: conta a quantidade real de dados lidos ou escritos pelo hardware, quer a movimentação de dados tenha sido explicitamente solicitada pelo código do usuário ou não. Usando o mesmo exemplo de cópia de 1 milhão de bytes, a largura de banda de hardware em sistemas de computador com uma política de cache write allocate incluiria um adicional de 1 milhão de bytes de tráfego porque o hardware lê o array de destino da memória para o cache antes de realizar as escritas. Isso dá um total de 3 milhões de bytes por segundo realmente transferidos pelo hardware. A convenção de hardware está mais diretamente ligada ao hardware, mas pode não representar a quantidade mínima de tráfego de dados necessária para implementar o código do usuário. Por exemplo, alguns sistemas de computador têm a capacidade de evitar o tráfego de write allocate usando instruções especiais, levando à possibilidade de comparações enganosas de largura de banda com base em diferentes quantidades de tráfego de dados realizadas.
Cálculo e nomenclatura da largura de banda A nomenclatura difere entre as tecnologias de memória, mas para memória DDR SDRAM, DDR2 SDRAM e DDR3 SDRAM de uso geral, a largura de banda total é o produto de:
Frequência base do clock da DRAM Número de transferências de dados por clock: Dois, no caso da memória "double data rate" (DDR, DDR2, DDR3, DDR4). Largura do barramento (interface) de memória: Cada interface de memória DDR, DDR2 ou DDR3 tem 64 bits de largura. Esses 64 bits às vezes são chamados de "linha". Número de interfaces: Computadores pessoais modernos normalmente usam duas interfaces de memória (modo dual-channel) para uma largura de barramento efetiva de 128 bits. Por exemplo, um computador com memória dual-channel e um módulo DDR2-800 por canal rodando a 400 MHz teria uma largura de banda máxima teórica de memória de:
400.000.000 ciclos por segundo × 2 linhas por ciclo × 64 bits por linha × 2 interfaces = 102.400.000.000 (102,4 bilhões) bits por segundo (em bytes, 12.800 MB/s ou 12,8 GB/s) Esta largura de banda máxima teórica de memória é referida como a "taxa de rajada", que pode não ser sustentável. A convenção de nomenclatura para módulos DDR, DDR2 e DDR3 especifica uma velocidade máxima (por exemplo, DDR2-800) ou uma largura de banda máxima (por exemplo, PC2-6400). A classificação de velocidade (800) não é a frequência máxima do clock, mas o dobro disso (devido à taxa de dados duplicada). A largura de banda especificada (6400) é o máximo de megabytes transferidos por segundo usando uma largura de 64 bits. Em uma configuração de modo dual-channel, isso é efetivamente uma largura de 128 bits. Assim, a configuração de memória no exemplo pode ser simplificada como: dois módulos DDR2-800 rodando em modo dual-channel. Duas interfaces de memória por módulo é uma configuração comum para memória de sistema de PC, mas configurações de canal único são comuns em dispositivos mais antigos, de baixo custo ou de baixo consumo. Alguns computadores pessoais e a maioria das placas gráficas modernas usam mais de duas interfaces de memória (por exemplo, quatro para a plataforma LGA 2011 da Intel e para a NVIDIA GeForce GTX 980). Placas gráficas de alto desempenho rodando muitas interfaces em paralelo podem atingir largura de barramento de memória total muito alta (por exemplo, 384 bits na NVIDIA GeForce GTX TITAN e 512 bits na AMD Radeon R9 290X usando seis e oito interfaces de 64 bits, respectivamente).
Bits ECC
Em sistemas com memória de correção de erros (ECC), a largura adicional das interfaces (tipicamente 72 em vez de 64 bits) não é contada nas especificações de largura de banda porque os bits extras não estão disponíveis para armazenar dados do usuário. Os bits ECC são melhor vistos como parte do hardware de memória, e não como informações armazenadas nesse hardware.
Ver também Latência CAS Memória de acesso aleatório dinâmica High Bandwidth Memory Latência de memória Tempos de memória Memória de acesso aleatório
Referências
Geral BSS Random Access Benchmark Performance Evaluation and Optimization of Random Memory Access on Multicores with High Productivity at ACM/IEEE HiPC 2010
Ligações externas STREAM Benchmark