AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 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

如何在 Asus-WS-Pro-X570-ACE 主板上启用双通道内存模式?

  • 772

我有一块华硕 WS-Pro-X570-ACE 主板,并根据用户手册中有关启用双通道第 1.4 节(第 1-12 页)的内容,将两个完全相同的内存条(Hynix,16GB,DDR4,2R*8)插入到它的 A2 和 B2 插槽上。

但是当我在 debian12 中运行时sysbench memory run,我得到的结果与在单通道模式下运行时的结果相同。

像这样:

sysbench 1.0.20(使用系统LuaJIT 2.1.0-beta3)

使用以下选项运行测试:线程数:1 从当前时间初始化随机数生成器

使用以下选项运行内存速度测试:块大小:1KiB 总大小:102400MiB 操作:写入范围:全局

初始化工作线程...

讨论已开始!

总操作数:77184144(每秒 7718000.79 次)

已传输 75375.14 MiB(7537.11 MiB/秒)

总体统计:总时间:10.0000s 总事件数:77184144

延迟(毫秒):最小值:0.00 平均值:0.00 最大值:0.01 第 95 百分位数:0.00 总计:3647.56

线程公平性:事件(平均值/标准差):77184144.0000/0.00 执行时间(平均值/标准差):3.6476/0.00

我是否遗漏了什么巧妙的方法?

memory
  • 1 1 个回答
  • 33 Views

1 个回答

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

    但是当我在 debian12 中运行 sysbench memory run 时,我得到的结果与在单通道模式下运行时的结果相同。

    已传输 75375.14 MiB(7537.11 MiB/秒)

    双通道 DDR4 @ 3200 MT/s 系统的理论峰值内存带宽为 64b x 2 x 3.2G / 8 = 51.2 GB/s,但您的基准测试仅显示 7.5 GB/s,这是理论峰值的 10%。因此,基准测试本身存在缺陷。您一开始就没有达到峰值系统内存带宽的饱和,因此没有差异也就不足为奇了。

    良好的内存基准测试应该是多线程的,因为单线程应用程序通常无法饱和整个带宽(矢量化可以有所帮助,但只能达到一定程度)。此外,程序的内部循环最好用低级语言(如汇编语言)或经过编译器优化的 FORTRAN/C 编写,这样您就可以对 CPU 及其内存子系统施加最大的压力。有几种知名且符合行业标准的内存基准测试可用,包括 John D. McCalpin 的 STREAM 基准测试和likwid-benchLIKWID 工具中包含的内置内存基准测试。这两种工具都广泛应用于科学和高性能计算领域,并被用于许多学术研究论文中。

    因此,请考虑使用 STREAM 或likwid-bench正确测量系统的内存带宽。

    溪流

    STREAM 是由 John D. McCalpin 博士编写的一段小型 C/FORTRAN 代码,自 1990 年代以来一直用于基准超级计算机,如今由于其简单性,它仍然是行业标准。

    要运行 STREAM 测试,请从https://github.com/jeffhammond/STREAM (这是一个非官方镜像)获取源代码。

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

    使用以下命令手动编译 C 代码(不要使用Makefile):

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

    该宏STREAM_ARRAY_SIZE控制分配的数组大小。

    然后运行:

    ./stream.100M
    

    OpenMP默认会在所有CPU核上运行STREAM,最终可以得到如下结果:

    -------------------------------------------------------------
    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
    -------------------------------------------------------------
    

    由于 GCC 缺乏非临时存储优化,在 Scale、Add 和 Triad 测试中,CPU 执行 Write-Allocate,这会在未测量的内存子系统中产生额外的开销。要正确解释此结果,您应该将 Scale 的结果乘以 1.5,将 Add 和 Triad 的结果乘以 1.33。这样做的原因涉及对 CPU 缓存的理解,我已经在另一个答案流内存带宽基准测试的预期结果中对此进行了解释。

    例如,在这种情况下:

    • 复制:42926.6 x 1.0 = 42926.6 MB/s
    • 比例:28796.6 x 1.5 = 43194.9 MB/s
    • 添加:31537.8 x 1.33 = 41945.3 MB/s
    • 三元组:31400.9 x 1.33 = 41763.2 MB/s

    如您所见,在我的计算机上,在所有这些测试中,我在 STREAM 基准测试中获得了大约 40 GB/s 的内存带宽。这是可以预料的,因为可用内存带宽通常约为理论内存带宽的 70%-80%。请注意,按照惯例,内存带宽始终以 GB/s 为单位报告,而不是 GiB/s。

    运行系统单通道内存将使 STREAM 速度减半。请尝试自己做一下这个实验:移除一个 DIMM 通道,STREAM 结果将减少 50。重新添加 DIMM 通道,结果又会上升。

    利克维德

    STREAM 是一款经典产品,因此运行它与其他人的基准测试进行比较很有用。但它容易出错。在台式机上它可以没问题(只要您了解非临时存储的有效性)。但在服务器上,存在许多与 NUMA、编译器和 CPU 的写入分配行为相关的陷阱 - 这些陷阱不会自动处理,并且可能会产生误导性的结果。

    因此,为了测试 CPU 内存带宽,我更喜欢使用 LIKWID。Likwid 是 HPC 应用程序性能调优的瑞士军刀。它的主要用途是从低级硬件性能计数器收集统计数据,以了解和优化代码的性能特征。但它还包括一个名为的微型基准测试工具likwid-bench。

    首先,按照 LIKWID 官方手册运行 。然后,一个名为 的工具make就会出现。它可以自动启动基准测试程序的多个实例,并将每个实例的进程和内存固定到其对应的 NUMA 节点。它还提供了许多预先编写的基准测试内核(包括 STREAM Triad 基准测试的等效项),这些内核以手写汇编语言编写,可实现准确一致的结果,例如:make installlikwid-benchlikwid-bench

    $ 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
    

    下面是使用 STREAM Triad 基准测量内存带宽的示例likwid-bench,使用 AVX、FMA 和非临时存储,使用 4 个实例,每个实例都最佳地固定到 NUMA 节点。

    要使用 STREAM Triad 测试对单台台式计算机进行基准测试,请运行:

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

    该参数M0:1GB表示在机器的第一个 NUMA 节点上运行测试。由于台式计算机只有一个 NUMA 节点,因此这已经足够了。对于服务器,请使用与 CPU 相同的 NUMA 节点数。

    由于汇编代码已经使用非临时存储进行优化,因此无需手动更正结果likwid-bench。likwid-bench结果应该与手动更正的 STREAM 结果非常相似。

    作为参考,这是一台双插槽 Intel Xeon E5-2680 v4 机器,每个插槽上都有 4 通道 DDR4 ECC RDIMM @ 2400 MT/s,因此它应该表现得像一台 8 通道机器。BIOS中启用了Cluster-On-Die模式,因此,每个 CPU 被视为两个 NUMA 节点 - CPU 的硅片在物理上被分成 2 个部分,每个部分都有自己的 2 通道内存控制器,通过两个独立的环形总线之间的桥接器互连,每个环形总线都有一半的内核。整个机器有 4 个 NUMA 节点。对于 NUMA 感知应用程序,这提供了最高的内存带宽。

    $ 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
    

    增加线程数sysbench?

    我不熟悉sysbench,但它是否允许您使用多个线程运行内存基准测试。如果是这样,请考虑使用与 CPU 核心或硬件 SMT 线程一样多的线程重新进行您自己的测试。

    • 1

相关问题

  • CPU/PC 冻结(温度?)

  • 可以读取硬盘驱动器并专门写入 RAM 的系统?

  • 购买合适的笔记本电脑 RAM [关闭]

  • RAM 安装顺序。8GB 和 16GB。哪个应该在插槽 0 中?

  • CPU、内存还是主板?(PEBCAK!)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Vickel Firefox 不再允许粘贴到 WhatsApp 网页中? 2023-08-18 05:04:35 +0800 CST
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve