V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lwjef
V2EX  ›  程序员

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

  •  
  •   lwjef · 351 天前 · 9518 次点击
    这是一个创建于 351 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条附言  ·  350 天前
    • 浮点性能快表达不准确,换个问题,为啥这台手机上这么快呢?
    67 条回复    2023-11-27 00:13:59 +08:00
    pubby
        1
    pubby  
       351 天前
    $ 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
       351 天前
    @pubby #1 这个 i9 也太慢了。。。
    pubby
        3
    pubby  
       351 天前
    @lwjef 低压 u, 内存频率也不高 :D
    kikitte
        4
    kikitte  
       351 天前
    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  
       351 天前
    这个 sort 也跟 cpu 线程数有关吧
    maggch97
        6
    maggch97  
       351 天前
    首先这个 sort 是单线程的
    lslqtz
        7
    lslqtz  
       351 天前
    M1 Pro 感觉差不多.
    这是单核浮点吧.
    lwjef
        8
    lwjef  
    OP
       351 天前
    @maggch97 #6 不是 io 项目单核下多线程也没用吧
    lwjef
        9
    lwjef  
    OP
       351 天前
    @lslqtz #7 嗯嗯,就是高通的 fpu 有点离谱
    beetlerx
        10
    beetlerx  
       351 天前
    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  
       351 天前
    .., 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
       351 天前
    @Philippa #11 还有 15 个核在围观 QAQ
    Philippa
        13
    Philippa  
       351 天前
    @lwjef 哈哈哈,那要怎么设
    maggch97
        14
    maggch97  
       351 天前
    @lwjef ? 我不知道你是不是了解 CPU 性能,了解代码。

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

    0.0179123 minutes
    0.263897 minutes
    3.26288 minutes
    lwjef
        21
    lwjef  
    OP
       351 天前
    @bigtan #20 系统平台或者编译器的影响吧。
    maggch97
        22
    maggch97  
       351 天前
    @lwjef 大概是你跑错代码了吧,跑了个 1e8 的
    bigtan
        23
    bigtan  
       351 天前
    @lwjef 没开优化//
    lwjef
        24
    lwjef  
    OP
       351 天前
    @maggch97 #22 ...跑了好多次 可以参考这里 https://weibo.com/5819320755/NtlsOeNah
    lwjef
        25
    lwjef  
    OP
       351 天前
    @bigtan #23 感觉跑出来应该会超过上面的 7950
    forgottenPerson
        26
    forgottenPerson  
       351 天前 via Android
    Xiaomi 11 termux without root
    0.133285 minutes
    0.286336 minutes
    1.66493 minutes
    maggch97
        27
    maggch97  
       351 天前
    @lwjef 那打一条日志把 V.size()打出来吧
    lwjef
        28
    lwjef  
    OP
       351 天前
    @maggch97 #27 你找个安卓跑一下
    billlee
        29
    billlee  
       350 天前
    这和浮点有关系吗?测的是缓存和内存性能
    lwjef
        30
    lwjef  
    OP
       350 天前
    @billlee #29 那意思是高通缓存内存赛高?。。。
    Philippa
        31
    Philippa  
       350 天前
    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  
       350 天前
    感觉和浮点数的精度有关,建议生成 1.0 2.0 3.0 ...的浮点数组,然后用整数随机数把他们打乱。如果随机数分布均匀的话,排序时间应该是稳定的。
    felixlong
        33
    felixlong  
       350 天前
    分配 7.5G 内存。然后只字不提每台设备的内存大小,那还比个毛线啊。
    BBBOND
        34
    BBBOND  
       350 天前 via Android
    s23 跑完闪退了,爆内存了吧
    bigtan
        35
    bigtan  
       350 天前
    @lwjef windows 平台的 cl 编译的,开的 O2

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

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

    0.021993 minutes
    0.132118 minutes
    1.66888 minutes

    打不过年轻人了。
    msg7086
        49
    msg7086  
       350 天前
    浮点性能不是应该看 AVX/AVX512 之类 SIMD 跑浮点的性能吗?
    L4Linux
        50
    L4Linux  
       350 天前 via Android
    @lwjef 先控制一下变量吧。你难不成觉得 std::vector 实现都是一样的、而且是 header only 的?
    c0xt30a
        51
    c0xt30a  
       350 天前
    单线程,而且是 sort ,跟浮点数表现无关,主要看 CPU 频率的样子。
    katsusan
        52
    katsusan  
       350 天前
    同 arch 比较,像 Zen 和 xxLake 看指令吞吐延迟. 如果是 x86 和 arm 相比,这时候都是 tight loop,x86 的前端解码瓶颈被弱化,应该不会比 arm 阵营差那么多.
    dahakawang
        53
    dahakawang  
       350 天前
    7.4G 的数据量,即便不考虑内存不够的情况,也有可能是内存性能 bounded 的原因,不妨试试比较用 cache 大小的数据量进行多轮 benchmark ?
    iwdmb
        54
    iwdmb  
       350 天前
    $ 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  
       350 天前
    Rorysky
        56
    Rorysky  
       350 天前
    莫非你是 算法老师?
    e3c78a97e0f8
        57
    e3c78a97e0f8  
       350 天前
    浮点性能都是看加减乘除乃至线性代数的,哪有用浮点数比较来定义浮点性能的
    Donahue
        58
    Donahue  
       350 天前
    3700x @4.2Ghz

    0.0260537 minutes
    0.115618 minutes
    1.66068 minutes

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

    @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  
       349 天前
    会不会是随机数生成器有区别,先预先生成一个固定的数据序列保存在文件里,各个平台用同一份数据跑排序试试?
    cyy911
        61
    cyy911  
       349 天前
    M3MAX
    0.00784537 minutes
    0.113421 minutes
    1.39678 minutes
    cyy911
        62
    cyy911  
       349 天前
    8Gen3
    0.0407101
    0.131629
    2.03484
    是不是降频了啊
    holulu
        63
    holulu  
       349 天前
    随机生成的数组乱序程度都不一样,std::sort 的排序过程也不一样。这个代码即使在同一个机器上跑多次,结果都会差距很大。应该用同一份数据在不同机器上跑的结果来比较才有意义。
    paopjian
        64
    paopjian  
       349 天前
    risc 短指令的优势?试试有没有其他高级指令的?
    xixun
        65
    xixun  
       349 天前 via iPhone
    高通有堆浮点吧,跑分好看
    hez2010
        66
    hez2010  
       349 天前
    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  
       349 天前
    12th Gen Intel(R) Core(TM) i9-12900T
    ❯ ./a.out
    0.0288894 minutes
    0.760386 minutes
    1.34341 minutes
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1932 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.