V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
lwjef
V2EX  ›  程序员

高通 CPU 浮点这么快吗。。。

  •  
  •   lwjef · 2023-11-24 22:00:19 +08:00 · 9914 次点击
    这是一个创建于 399 天前的主题,其中的信息可能已经有所发展或是发生改变。
    wget https://github.com/xiexiexx/PPLA/raw/main/billionsort/billionsort.cpp
    
    clang++ -O3 billionsort.cpp
    
    ./a.out
    
    • redmi note12t 7+gen2 16+1t miui14.0.25 termux witout root

    有没有 8gen3 和 9300 的老哥跑一下让我长长见识

    • iphone11 a13 4+128g ios17.1.1 a-shell 跑的 1 亿
    [Documents]$ ./1x_millionsort_with_output 100
    Data size: 100000000
    0.0027 minutes
    0.02695 minutes
    0.478667 minutes
    
    • 7700k 32g xubuntu2204

    第 1 条附言  ·  2023-11-26 00:04:09 +08:00
    • 浮点性能快表达不准确,换个问题,为啥这台手机上这么快呢?
    67 条回复    2023-11-27 00:13:59 +08:00
    pubby
        1
    pubby  
       2023-11-24 22:34:14 +08:00
    $ uname -a
    Darwin Mac-mini.local 22.6.0 Darwin Kernel Version 22.6.0: Wed Oct 4 21:25:26 PDT 2023; root:xnu-8796.141.3.701.17~4/RELEASE_X86_64 x86_64
    $ sysctl machdep.cpu.brand_string
    machdep.cpu.brand_string: Intel(R) Core(TM) i9-9900T CPU @ 2.10GHz
    $ ./a.out
    0.0942143 minutes
    0.277907 minutes
    2.31389 minutes
    lwjef
        2
    lwjef  
    OP
       2023-11-24 22:39:03 +08:00
    @pubby #1 这个 i9 也太慢了。。。
    pubby
        3
    pubby  
       2023-11-24 22:41:46 +08:00
    @lwjef 低压 u, 内存频率也不高 :D
    kikitte
        4
    kikitte  
       2023-11-24 22:54:26 +08:00
    AMD 5950x ArchLinux

    [kikitte@archlinux test]$ clang++ -O3 billionsort.cpp
    [kikitte@archlinux test]$ ./a.out
    0.0128345 minutes
    0.954518 minutes
    1.46679 minutes
    hefish
        5
    hefish  
       2023-11-24 23:03:18 +08:00
    这个 sort 也跟 cpu 线程数有关吧
    maggch97
        6
    maggch97  
       2023-11-24 23:05:04 +08:00
    首先这个 sort 是单线程的
    lslqtz
        7
    lslqtz  
       2023-11-24 23:07:53 +08:00
    M1 Pro 感觉差不多.
    这是单核浮点吧.
    lwjef
        8
    lwjef  
    OP
       2023-11-24 23:08:46 +08:00
    @maggch97 #6 不是 io 项目单核下多线程也没用吧
    lwjef
        9
    lwjef  
    OP
       2023-11-24 23:10:19 +08:00
    @lslqtz #7 嗯嗯,就是高通的 fpu 有点离谱
    beetlerx
        10
    beetlerx  
       2023-11-24 23:11:40 +08:00
    OS: Debian GNU/Linux trixie/sid x86_64
    CPU: AMD Ryzen 7 7840H w/ Radeon 780M Graphics (16) @ 5.137GHz

    $ clang++-16 -std=c++2a -O3 ./billionsort.cpp
    $ ./a.out
    0.00709458 minutes
    0.757148 minutes
    1.45406 minutes
    看起来 7840H 单核浮点可以和 5950x 掰掰
    Philippa
        11
    Philippa  
       2023-11-24 23:18:56 +08:00
    .., larry@DESKTOP-OVBIJM9
    ....,,:;+ccllll ---------------------
    ...,,+:; cllllllllllllllllll OS: Windows 10 רҵ□□ x86_64
    ,cclllllllllll lllllllllllllllllll Host: ASUS
    llllllllllllll lllllllllllllllllll Kernel: 10.0.19045
    llllllllllllll lllllllllllllllllll Uptime: 14 hours, 59 mins
    llllllllllllll lllllllllllllllllll Packages: 3 (scoop)
    llllllllllllll lllllllllllllllllll Shell: bash 5.2.15
    llllllllllllll lllllllllllllllllll Resolution: 3840x2160
    DE: Aero
    llllllllllllll lllllllllllllllllll WM: Explorer
    llllllllllllll lllllllllllllllllll WM Theme: Custom
    llllllllllllll lllllllllllllllllll Terminal: Windows Terminal
    llllllllllllll lllllllllllllllllll CPU: AMD Ryzen 9 7950X3D (32) @ 4.200GHz
    llllllllllllll lllllllllllllllllll GPU: Caption
    `'ccllllllllll lllllllllllllllllll GPU: NVIDIA GeForce RTX 4090
    `' \*:: :ccllllllllllllllll GPU
    ````''*::cll Memory: 16818MiB / 130802MiB
    ``

    clang++ -std=c++2a -O3 main.cpp

    0.0153925 minutes
    0.683383 minutes
    1.30065 minutes

    不是很懂,为什么这么慢
    lwjef
        12
    lwjef  
    OP
       2023-11-24 23:21:30 +08:00
    @Philippa #11 还有 15 个核在围观 QAQ
    Philippa
        13
    Philippa  
       2023-11-24 23:22:15 +08:00
    @lwjef 哈哈哈,那要怎么设
    maggch97
        14
    maggch97  
       2023-11-24 23:23:12 +08:00
    @lwjef ? 我不知道你是不是了解 CPU 性能,了解代码。

    你这个代码只能测出 CPU 跑 std::sort 这样的单线程负载的性能,速度受到 Memory, Cache 的影响
    lwjef
        15
    lwjef  
    OP
       2023-11-24 23:25:26 +08:00
    @maggch97 #14 那么是高通不够快吗 (狗头
    maggch97
        16
    maggch97  
       2023-11-24 23:27:37 +08:00   ❤️ 3
    这能叫做"浮点性能"吗,下面的回帖很多人也被误导了
    lwjef
        17
    lwjef  
    OP
       2023-11-24 23:28:57 +08:00
    @Philippa #13 就是跑的一个核,已经是贴子里 x86 最快的了
    lwjef
        18
    lwjef  
    OP
       2023-11-24 23:29:33 +08:00
    @maggch97 #16 那为啥高通这么快啊,请教下。。。
    Philippa
        19
    Philippa  
       2023-11-24 23:30:29 +08:00
    @lwjef 感谢科普
    bigtan
        20
    bigtan  
       2023-11-24 23:31:08 +08:00
    我这个 14700KF 怎么这么慢

    0.0179123 minutes
    0.263897 minutes
    3.26288 minutes
    lwjef
        21
    lwjef  
    OP
       2023-11-24 23:32:59 +08:00
    @bigtan #20 系统平台或者编译器的影响吧。
    maggch97
        22
    maggch97  
       2023-11-24 23:36:25 +08:00
    @lwjef 大概是你跑错代码了吧,跑了个 1e8 的
    bigtan
        23
    bigtan  
       2023-11-24 23:38:54 +08:00
    @lwjef 没开优化//
    lwjef
        24
    lwjef  
    OP
       2023-11-24 23:43:13 +08:00
    @maggch97 #22 ...跑了好多次 可以参考这里 https://weibo.com/5819320755/NtlsOeNah
    lwjef
        25
    lwjef  
    OP
       2023-11-24 23:45:44 +08:00
    @bigtan #23 感觉跑出来应该会超过上面的 7950
    forgottenPerson
        26
    forgottenPerson  
       2023-11-25 00:01:50 +08:00 via Android
    Xiaomi 11 termux without root
    0.133285 minutes
    0.286336 minutes
    1.66493 minutes
    maggch97
        27
    maggch97  
       2023-11-25 00:06:42 +08:00
    @lwjef 那打一条日志把 V.size()打出来吧
    lwjef
        28
    lwjef  
    OP
       2023-11-25 00:14:24 +08:00
    @maggch97 #27 你找个安卓跑一下
    billlee
        29
    billlee  
       2023-11-25 00:22:37 +08:00
    这和浮点有关系吗?测的是缓存和内存性能
    lwjef
        30
    lwjef  
    OP
       2023-11-25 00:28:57 +08:00
    @billlee #29 那意思是高通缓存内存赛高?。。。
    Philippa
        31
    Philippa  
       2023-11-25 00:52:59 +08:00
    7950x3D 加了编译优化后……

    clang++ -std=c++2a -O3 -Ofast -march=native -funroll-loops -flto main.cpp

    0.0153663 minutes
    0.0828322 minutes
    1.29281 minutes
    nuk
        32
    nuk  
       2023-11-25 02:23:47 +08:00
    感觉和浮点数的精度有关,建议生成 1.0 2.0 3.0 ...的浮点数组,然后用整数随机数把他们打乱。如果随机数分布均匀的话,排序时间应该是稳定的。
    felixlong
        33
    felixlong  
       2023-11-25 09:05:27 +08:00
    分配 7.5G 内存。然后只字不提每台设备的内存大小,那还比个毛线啊。
    BBBOND
        34
    BBBOND  
       2023-11-25 09:13:38 +08:00 via Android
    s23 跑完闪退了,爆内存了吧
    bigtan
        35
    bigtan  
       2023-11-25 09:31:11 +08:00
    @lwjef windows 平台的 cl 编译的,开的 O2

    0.0180589 minutes
    0.0676992 minutes
    1.45122 minutes
    xiaotianhu
        36
    xiaotianhu  
       2023-11-25 09:39:23 +08:00
    2017 的 16 寸 MBP ,2.6G 的 i7-6920HQ
    0.069159 minutes
    0.151773 minutes
    2.32275 minutes
    比手机都慢啊~
    xiaofeilongyy555
        37
    xiaofeilongyy555  
       2023-11-25 10:40:01 +08:00
    xiaomi 13ultra 8gen2 16+512 termux without root 性能模式
    0.0415852 minutes
    0.114332 minutes
    0.441386 minutes
    xiaofeilongyy555
        38
    xiaofeilongyy555  
       2023-11-25 10:46:28 +08:00
    13u 清理缓存后有进一步提升
    0.0221216 minutes
    0.118988 minutes
    0.465569 minutes
    L4Linux
        39
    L4Linux  
       2023-11-25 12:19:32 +08:00 via Android
    用标准库里面的函数来比 fpu 性能没啥意义。
    Satelli
        40
    Satelli  
       2023-11-25 12:46:44 +08:00
    基础款 M3 (24 GB)

    $ ./a.out
    0.00883733 minutes
    0.108414 minutes
    1.31298 minutes
    maggch97
        41
    maggch97  
       2023-11-25 13:46:36 +08:00
    @xiaofeilongyy555 和楼主一样的 cortex X2 的大核,那看来这个核心跑这个任务异乎寻常的快。比上面另一个小米 11 888 的 cortex x1 快了不止一倍
    xiaofeilongyy555
        42
    xiaofeilongyy555  
       2023-11-25 14:09:30 +08:00
    @maggch97 8gen2 用的是 3.2 GHz – Cortex-X3 ,888 是 2.84GHz (Cortex-X1)
    maggch97
        43
    maggch97  
       2023-11-25 14:14:23 +08:00
    @xiaofeilongyy555 不知道有没有非小米机型的数据
    lwjef
        44
    lwjef  
    OP
       2023-11-25 14:48:06 +08:00
    @nuk #32 我抽空用 int 改写个试试,业余程序员具体细节不是很懂。
    @felixlong #33 都来比高低了那不整个 16G 内存
    @BBBOND #34 s23 就 8g 太抠门了
    @maggch97 #41 我没少个 0 跑算是清白了。。。
    lwjef
        45
    lwjef  
    OP
       2023-11-25 14:49:02 +08:00
    @L4Linux #39 至少说明高通的 fpu 配安卓做了一些微小的工作让数据看起来不错。
    lovestudykid
        46
    lovestudykid  
       2023-11-25 14:55:20 +08:00
    看到 iPhone 11 比 M1 Max 快的时候就应该明白一定是哪里出了问题
    lovestudykid
        47
    lovestudykid  
       2023-11-25 14:56:35 +08:00
    @lovestudykid 看错了,跑的不是一个东西...
    tool2d
        48
    tool2d  
       2023-11-25 15:07:57 +08:00
    2014 年的 PC 电脑

    0.021993 minutes
    0.132118 minutes
    1.66888 minutes

    打不过年轻人了。
    msg7086
        49
    msg7086  
       2023-11-25 17:01:22 +08:00
    浮点性能不是应该看 AVX/AVX512 之类 SIMD 跑浮点的性能吗?
    L4Linux
        50
    L4Linux  
       2023-11-25 19:29:30 +08:00 via Android
    @lwjef 先控制一下变量吧。你难不成觉得 std::vector 实现都是一样的、而且是 header only 的?
    c0xt30a
        51
    c0xt30a  
       2023-11-25 19:44:07 +08:00
    单线程,而且是 sort ,跟浮点数表现无关,主要看 CPU 频率的样子。
    katsusan
        52
    katsusan  
       2023-11-25 19:48:29 +08:00
    同 arch 比较,像 Zen 和 xxLake 看指令吞吐延迟. 如果是 x86 和 arm 相比,这时候都是 tight loop,x86 的前端解码瓶颈被弱化,应该不会比 arm 阵营差那么多.
    dahakawang
        53
    dahakawang  
       2023-11-25 19:49:09 +08:00
    7.4G 的数据量,即便不考虑内存不够的情况,也有可能是内存性能 bounded 的原因,不妨试试比较用 cache 大小的数据量进行多轮 benchmark ?
    iwdmb
        54
    iwdmb  
       2023-11-25 20:05:04 +08:00
    $ lscpu | grep Model\ name
    Model name: 13th Gen Intel(R) Core(TM) i7-13700K
    $ ./billionsort
    0.0281303 minutes
    0.0913962 minutes
    1.14076 minutes
    iwdmb
        55
    iwdmb  
       2023-11-25 20:07:23 +08:00
    Rorysky
        56
    Rorysky  
       2023-11-25 20:32:37 +08:00
    莫非你是 算法老师?
    e3c78a97e0f8
        57
    e3c78a97e0f8  
       2023-11-25 22:21:23 +08:00
    浮点性能都是看加减乘除乃至线性代数的,哪有用浮点数比较来定义浮点性能的
    Donahue
        58
    Donahue  
       2023-11-25 23:23:20 +08:00
    3700x @4.2Ghz

    0.0260537 minutes
    0.115618 minutes
    1.66068 minutes

    虽然时间用了比较长,但是日常感知不大,软件都挺流畅的
    lwjef
        59
    lwjef  
    OP
       2023-11-26 00:11:58 +08:00
    浮点性能快表达不准确,换个问题,为啥这台手机上这么快呢?

    @msg7086 #49 是的,高通这么快可能是 Hexagon DSP 有加速
    @L4Linux #50 具体细节我是真不懂,但是快是为啥
    @c0xt30a #51 高通的频率也不是最强的啊
    @katsusan #52 高通和苹果 m1 比数据上也有差距
    @dahakawang #53 高通的内存性能从前两个时间来看相较 x86 和 m1 不太行,为啥最后一个时间那么短。。。
    @Rorysky #56 这个程序是算法老师写的,估计是为了测试 std::sort 的时间复杂度是线性对数 O(nlogn)
    @e3c78a97e0f8 #57 是的,是我表达错误,你说的没问题
    billlee
        60
    billlee  
       2023-11-26 00:29:37 +08:00
    会不会是随机数生成器有区别,先预先生成一个固定的数据序列保存在文件里,各个平台用同一份数据跑排序试试?
    cyy911
        61
    cyy911  
       2023-11-26 02:06:28 +08:00
    M3MAX
    0.00784537 minutes
    0.113421 minutes
    1.39678 minutes
    cyy911
        62
    cyy911  
       2023-11-26 03:17:28 +08:00
    8Gen3
    0.0407101
    0.131629
    2.03484
    是不是降频了啊
    holulu
        63
    holulu  
       2023-11-26 07:49:56 +08:00
    随机生成的数组乱序程度都不一样,std::sort 的排序过程也不一样。这个代码即使在同一个机器上跑多次,结果都会差距很大。应该用同一份数据在不同机器上跑的结果来比较才有意义。
    paopjian
        64
    paopjian  
       2023-11-26 09:47:49 +08:00
    risc 短指令的优势?试试有没有其他高级指令的?
    xixun
        65
    xixun  
       2023-11-26 16:59:06 +08:00 via iPhone
    高通有堆浮点吧,跑分好看
    hez2010
        66
    hez2010  
       2023-11-26 17:41:47 +08:00
    Windows 11, i7-13700K, DDR5 内存但频率只有 4000MHz:

    msvc /O2:
    0.0217156 minutes
    0.072249 minutes
    1.54053 minutes

    clang -O3:
    0.021577 minutes
    0.0523916 minutes
    1.54663 minutes
    memorycancel
        67
    memorycancel  
       2023-11-27 00:13:59 +08:00
    12th Gen Intel(R) Core(TM) i9-12900T
    ❯ ./a.out
    0.0288894 minutes
    0.760386 minutes
    1.34341 minutes
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:13 · PVG 08:13 · LAX 16:13 · JFK 19:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.