AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1858151
Accepted
Leon
Leon
Asked: 2024-10-09 00:31:23 +0800 CST2024-10-09 00:31:23 +0800 CST 2024-10-09 00:31:23 +0800 CST

Como habilitar o modo de memória de canal duplo em uma placa-mãe Asus-WS-Pro-X570-ACE?

  • 772

Tenho uma placa-mãe Asus WS-Pro-X570-ACE e conecto dois pentes de memória exatamente iguais (Hynix, 16 GB, DDR4, 2R*8) nos slots A2 e B2, de acordo com o manual do usuário sobre Habilitar Canal Duplo, seção 1.4 (página 1-12).

Mas quando executo sysbench memory runno debian12, obtenho um resultado que é o mesmo que quando executo no modo de canal único.

Assim:

sysbench 1.0.20 (usando o sistema LuaJIT 2.1.0-beta3)

Executando o teste com as seguintes opções: Número de threads: 1 Inicializando o gerador de números aleatórios a partir do horário atual

Executando teste de velocidade de memória com as seguintes opções: tamanho do bloco: 1 KiB tamanho total: 102400 MiB operação: gravação escopo: global

Inicializando threads de trabalho...

Tópicos iniciados!

Total de operações: 77184144 (7718000,79 por segundo)

75375,14 MiB transferidos (7537,11 MiB/seg)

Estatísticas gerais: tempo total: 10.0000s número total de eventos: 77184144

Latência (ms): min: 0,00 avg: 0,00 max: 0,01 95º percentil: 0,00 soma: 3647,56

Justiça de threads: eventos (média/desvio padrão): 77184144,0000/0,00 tempo de execução (média/desvio padrão): 3,6476/0,00

Existe algum método complicado que eu tenha esquecido?

memory
  • 1 1 respostas
  • 33 Views

1 respostas

  • Voted
  1. Best Answer
    比尔盖子
    2024-10-09T04:39:26+08:002024-10-09T04:39:26+08:00

    Mas quando executo o sysbench memory run no debian12, obtenho um resultado que é o mesmo que o resultado quando o executo no modo de canal único.

    75375,14 MiB transferidos (7537,11 MiB/seg)

    Um sistema DDR4 de 2 canais @ 3200 MT/s tem uma largura de banda de memória de pico teórica de 64b x 2 x 3,2G / 8 = 51,2 GB/s, mas seu benchmark mostra apenas 7,5 GB/s, o que é 10% do valor de pico teórico. Portanto, o benchmark em si é falho. Você não está saturando sua largura de banda de memória de sistema de pico para começar, então a falta de diferença não é surpreendente.

    Um bom benchmark de memória deve ser multithread, já que um aplicativo single-thread geralmente é incapaz de saturar a largura de banda completa (a vetorização pode ajudar, mas apenas até certo ponto). Além disso, o loop interno do programa deve ser idealmente escrito em uma linguagem de baixo nível como assembly, ou FORTRAN/C com otimização do compilador, para que você possa colocar o maior estresse na CPU e seu subsistema de memória. Existem vários benchmarks de memória respeitáveis ​​e padrão da indústria disponíveis, incluindo o benchmark STREAM de John D. McCalpin e o benchmark de memória integrado incluído na ferramenta likwid-benchno LIKWID. Ambas as ferramentas são amplamente utilizadas no mundo da computação científica e de alto desempenho e foram usadas em muitos artigos de pesquisa acadêmica.

    Portanto, considere usar STREAM ou likwid-benchmedir corretamente a largura de banda de memória do seu sistema.

    FLUXO

    STREAM é um pequeno código C/FORTRAN escrito pelo Dr. John D. McCalpin e tem sido usado em supercomputadores de referência desde a década de 1990. Hoje, continua sendo um padrão da indústria devido à sua simplicidade.

    Para executar um teste STREAM, obtenha o código-fonte em https://github.com/jeffhammond/STREAM (este é um espelho não oficial).

    git clone https://github.com/jeffhammond/STREAM.git
    

    Compile o código C manualmente (não use o Makefile) com:

    gcc -fopenmp -O3 -march=native -DSTREAM_ARRAY_SIZE=100000000 stream.c -o stream.100M
    

    A macro STREAM_ARRAY_SIZEcontrola o tamanho do array alocado.

    Em seguida, execute-o com:

    ./stream.100M
    

    Por padrão, o OpenMP executará STREAM em todos os núcleos da CPU. Finalmente, o seguinte resultado pode ser obtido:

    -------------------------------------------------------------
    Function    Best Rate MB/s  Avg time     Min time     Max time
    Copy:           42926.6     0.038757     0.037273     0.043436
    Scale:          28796.6     0.056992     0.055562     0.060382
    Add:            31537.8     0.078600     0.076099     0.086864
    Triad:          31400.9     0.079844     0.076431     0.092603
    -------------------------------------------------------------
    

    Devido à falta de otimização de armazenamento não temporal no GCC, nos testes Scale, Add e Triad, a CPU executa Write-Allocate, o que cria uma sobrecarga extra no subsistema de memória que não é medida. Para interpretar corretamente esse resultado, você deve multiplicar o resultado de Scale por 1,5 e multiplicar o resultado de Add e Triad por 1,33. O motivo para fazer isso envolve uma compreensão do cache da CPU, já expliquei em outra resposta Resultados esperados de um benchmark de largura de banda de memória de fluxo aqui.

    Por exemplo, neste caso:

    • Cópia: 42926,6 x 1,0 = 42926,6 MB/s
    • Escala: 28796,6 x 1,5 = 43194,9 MB/s
    • Adicionar: 31537,8 x 1,33 = 41945,3 MB/s
    • Tríade: 31400,9 x 1,33 = 41763,2 MB/s

    Como você pode ver, na minha máquina, estou obtendo cerca de 40 GB/s de largura de banda de memória no benchmark STREAM em todos esses testes. Isso é esperado, pois a largura de banda de memória utilizável geralmente fica em torno de 70%-80% da largura de banda teórica da memória. Observe que a largura de banda de memória é sempre relatada em GB/s por convenção, não em GiB/s.

    Executar a memória de canal único do sistema reduzirá pela metade a velocidade do STREAM. Tente fazer este experimento você mesmo: Remova um canal DIMM, os resultados do STREAM serão reduzidos em 50. Adicione o canal DIMM de volta, os resultados sobem novamente.

    LÍQUIDO

    STREAM é um clássico, então é útil executá-lo para comparação com benchmarks de outras pessoas. Mas ele pode ser propenso a erros. Em desktops, pode ser aceitável (desde que você entenda a eficácia dos Non-Temporal Stores). Mas em servidores, há muitas armadilhas relacionadas ao comportamento de alocação de gravação do NUMA, compilador e CPU - que não são manipuladas automaticamente e podem gerar resultados enganosos.

    Então, para testar a largura de banda da memória da CPU, prefiro usar o LIKWID. O Likwid é o canivete suíço do ajuste de desempenho em aplicativos HPC. Seu uso principal é coletar estatísticas de contadores de desempenho de hardware de baixo nível para entender e otimizar as características de desempenho do seu código. Mas ele também inclui uma ferramenta micro-benchmacrk chamada likwid-bench.

    Primeiro, execute makee make installde acordo com o manual oficial do LIKWID. Então, uma ferramenta chamada likwid-benchse torna disponível. likwid-benchpode iniciar automaticamente várias instâncias dos programas de benchmark e fixar o processo e a memória de cada instância em seu nó NUMA correspondente. Ele também fornece muitos kernels de benchmark pré-escritos (incluindo o equivalente a um benchmark STREAM Triad) em assembly escrito à mão, permitindo resultados precisos e consistentes, como:

    $ likwid-bench -a
    copy - Double-precision vector copy, only scalar operations
    copy_avx - Double-precision vector copy, optimized for AVX
    copy_avx512 - Double-precision vector copy, optimized for AVX-
    copy_mem - Double-precision vector copy, only scalar operations but with non-temporal stores
    copy_mem_avx - Double-precision vector copy, uses AVX and non-temporal stores
    copy_mem_avx512 - Double-precision vector copy, uses AVX-
    copy_mem_sse - Double-precision vector copy, uses SSE and non-temporal stores
    copy_sse - Double-precision vector copy, optimized for SSE
    stream - Double-precision stream triad A(i) = B(i)*c + C(i), only scalar operations
    stream_avx - Double-precision stream triad A(i) = B(i)*c + C(i), optimized for AVX
    stream_avx512 - Double-precision stream triad A(i) = B(i)*c + C(i), optimized for AVX-
    stream_avx512_fma - Double-precision stream triad A(i) = B(i)*c + C(i), optimized for AVX-
    stream_avx_fma - Double-precision stream triad A(i) = B(i)*c + C(i), optimized for AVX FMAs
    stream_mem - Double-precision stream triad A(i) = B(i)*c + C(i), uses SSE and non-temporal stores
    stream_mem_avx - Double-precision stream triad A(i) = B(i)*c + C(i), uses AVX and non-temporal stores
    stream_mem_avx512 - Double-precision stream triad A(i) = B(i)*c + C(i), uses AVX-
    stream_mem_avx_fma - Double-precision stream triad A(i) = B(i)*c + C(i), optimized for AVX FMAs and non-temporal stores
    stream_mem_sse - Double-precision stream triad A(i) = B(i)*c + C(i), uses SSE and non-temporal stores
    stream_mem_sse_fma - Double-precision stream triad A(i) = B(i)*c + C(i), uses SSE FMAs and non-temporal stores
    

    Aqui está um exemplo de uso likwid-benchpara medir a largura de banda da memória usando o benchmark STREAM Triad, usando AVX, FMA e armazenamentos não temporais, usando 4 instâncias, cada uma fixada de forma ideal a um nó NUMA.

    Para comparar um único computador desktop usando o teste STREAM Triad, execute:

    $ likwid-bench -t stream_mem_avx_fma -w M0:1GB
    

    O argumento M0:1GBsignifica executar o teste no primeiro nó NUMA da máquina. Como os computadores desktop têm apenas um nó NUMA, isso é adequado. Para servidores, use tantos nós NUMA quantos a CPU tiver.

    Como o código assembly já usa armazenamentos não temporais para otimização, não há necessidade de corrigir manualmente o likwid-benchresultado. O likwid-benchresultado deve ser muito similar ao resultado STREAM corrigido manualmente.

    Para referência, esta é uma máquina Intel Xeon E5-2680 v4 de soquete duplo com DDR4 ECC RDIMM de 4 canais a 2400 MT/s em cada soquete, então ela deve se comportar como uma máquina de 8 canais. O modo Cluster-On-Die é habilitado no BIOS, como resultado, cada CPU é vista como dois nós NUMA - o silício da CPU é fisicamente particionado em 2 partes, cada uma com seu próprio controlador de memória de 2 canais interconectado por pontes entre dois Ring Bus separados, cada um com metade dos núcleos. A máquina inteira tem 4 nós NUMA. Para aplicativos com reconhecimento de NUMA, isso oferece a maior largura de banda de memória.

    $ likwid-bench -t stream_mem_avx_fma -w M0:1GB -w M1:1GB -w M2:1GB -w M3:1GB
    --------------------------------------------------------------------------------
    Cycles:                 22089219858
    CPU Clock:              2394502471
    Cycle Clock:            2394502471
    Time:                   9.224973e+00 sec
    Iterations:             14336
    Iterations per thread:  256
    Inner loop executions:  186011
    Size (Byte):            3999980544
    Size per thread:        71428224
    Number of Flops:        85332918272
    MFlops/s:               9250.21
    Data volume (Byte):     1023995019264
    MByte/s:                111002.50
    Cycles per update:      0.517719
    Cycles per cacheline:   4.141749
    Loads per update:       2
    Stores per update:      1
    Load bytes per element: 16
    Store bytes per elem.:  8
    Load/store ratio:       2.00
    Instructions:           39999805457
    UOPs:                   58666381312
    

    Aumentar o número de threads em sysbench?

    Não estou familiarizado com sysbench, mas ele permite que você execute o benchmark de memória com múltiplos threads. Se sim, considere refazer seu próprio teste usando tantos threads quanto núcleos de CPU ou threads SMT de hardware.

    • 1

relate perguntas

  • CPU/PC Congelando (Temperatura?)

  • Sistema que pode ler o disco rígido e gravar exclusivamente na RAM?

  • Comprando o tipo certo de RAM para laptop [fechado]

  • Ordem de instalação da RAM. 8GB E 16GB. Qual deles deve estar no slot 0?

  • CPU, RAM ou placa-mãe? (PEBCAK!)

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como posso reduzir o consumo do processo `vmmem`?

    • 11 respostas
  • Marko Smith

    Baixar vídeo do Microsoft Stream

    • 4 respostas
  • Marko Smith

    O Google Chrome DevTools falhou ao analisar o SourceMap: chrome-extension

    • 6 respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Martin Hope
    Vickel O Firefox não permite mais colar no WhatsApp web? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke Por que os arquivos tar.xz são 15x menores ao usar a biblioteca tar do Python em comparação com o tar do macOS? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh Como posso reduzir o consumo do processo `vmmem`? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Pesquisa do Windows 10 não está carregando, mostrando janela em branco 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve