CPU 密集型的操作是否只能横向堆机器,从软件层面上没有什么好的解决方案么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
SystemLight
V2EX    程序员

CPU 密集型的操作是否只能横向堆机器,从软件层面上没有什么好的解决方案么?

  •  
  •   SystemLight
    SystemLight 2020-06-02 20:40:37 +08:00 3779 次点击
    这是一个创建于 1957 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CPU 密集型多核 CPU 下可以采用进程或者方式来执行程序,但是这种资源是有限的,在高并发的前提下非 IO 密集型的操作是不是只能堆机器了呢!

    17 条回复    2020-06-03 12:33:26 +08:00
    unixeno
        1
    unixeno  
       2020-06-02 20:50:58 +08:00 via Android   2
    CPU 密集型任务的瓶颈是 CPU
    要么减少计算量=用更高效的算法优化
    要么提升机器计算能力=换更高性能的 CPU 或者堆机器
    reus
        2
    reus  
       2020-06-02 20:55:51 +08:00
    改进算法啊
    lithiumii
        3
    lithiumii  
       2020-06-02 21:29:48 +08:00 via Android
    算法?
    AX5N
        4
    AX5N  
       2020-06-02 21:41:27 +08:00
    换成 c++
    cljnnn
        5
    cljnnn  
       2020-06-02 21:47:10 +08:00
    数据结构与算法
    namelosw
        6
    namelosw  
       2020-06-02 21:51:31 +08:00
    优化算法,优化技术栈,以前还有换专用 CPU,现在有的计算可以 GPU 之类的。

    而且大部分软件也不能直接横向堆机器,得能横向执行的代码才行,比如 Spark 上跑的那种。我们面试默写的大部分算法是不能有效率地横向执行的。
    cabing
        7
    cabing  
       2020-06-02 22:00:48 +08:00
    瓶颈在 cpu,得看那些功能影响 cpu,分层次去优化。

    程序 cpu 性能监控。对当前程序的消耗能有个了解啊。方便后续优化对比。
    编程语言层级:越靠近操作系统的语言性能越高,有些地方可以用汇编代替
    代码层级:优化代码功能
    代码设计层级:合理的设计,是否充分利用了每个 cpu
    业务层级:业务能否优化和改进
    架构层级:架构上是否合理?是否高效?如果单机不合理,是否能够多机部署呢?
    就像上面说的也可以换专业的 GPU 来,GPU 编程可能有点不一样,需要学习下。


    当然算法也很重要。如果真的是很耗费资源,是时候对关键部分做算法分析了。


    土豪只用看下架构能够堆机器就行,不用太管其他的优化。
    dazhangpan
        8
    dazhangpan  
       2020-06-02 22:21:40 +08:00
    能做的事情特别多,特别特别多...先学个 profiler 作为入门吧..
    nightwitch
        9
    nightwitch  
       2020-06-02 22:43:58 +08:00
    CPU 密集型
    高并发

    这两个词是矛盾的,CPU 密集型的应用都期望尽可能的抢占 CPU 和系统资源, 而高并发需要每一个会话尽可能的少占用资源。
    Mithril
        10
    Mithril  
       2020-06-02 22:50:22 +08:00
    改算法
    换 Cpp+Intel Compiler
    手写并行指令
    横向堆机器的前提是你的算法可以横向扩展,并不是所有算法都可以这么干的。有的时候你横向扩展带来的通信损耗都比收益高
    tanranran
        11
    tanranran  
       2020-06-02 22:51:08 +08:00
    换语言
    MiffyLiye
        12
    MiffyLiye  
       2020-06-02 23:59:37 +08:00
    1L 已经指出来了两个大方向

    补充一下要减少计算量,除了改进算法之外,还有其他选项

    1. 降低资源消耗
    改进算法
    降低对精确度的要求:用精确度不高的算法(例如 Monte Carlo method )
    降低对实时性的要求:用任务队列异步处理
    降低其他要求:需要综合很多因素权衡利弊

    2. 提高资源供给
    换更强的 CPU
    加 CPU
    ConradG
        13
    ConradG  
       2020-06-03 00:11:14 +08:00
    还可以撸专用芯片,比如写个 FPGA 之类。
    penguinWWY
        14
    penguinWWY  
       2020-06-03 01:28:53 +08:00
    Profile-guided optimization
    msg7086
        15
    msg7086  
       2020-06-03 04:18:53 +08:00 via Android
    还可以想办法改用 GPU 。显卡同价位下性能可不是强一点点。
    p2pCoder
        16
    p2pCoder  
       2020-06-03 08:44:36 +08:00
    性能调优 先跑个 profiler 找下瓶颈在哪
    并发的 cpu 密集计算 建议 几方面优化 ,首先是合理的 计算分片,减少线程 进程切换的 cpu 消耗,然后是并行计算要考虑中间结果的缓存,看逻辑上是否有大量的重复计算,最后,就是优化算子,比如 整形 浮点型的位数,字符串转 hash,减少字符串操作,用取 hash 及 hash 后的整数的位运算取代
    如果是 java golang python 这些语言,还要考虑在计算密集型的应用中,gc 的巨大压力,以及语言本生的限制,如果最后真的是调优无法达到要求,就建议 c++重写,性能会有质的提升,还可以从编译器以及硬件架构层面进行优化
    wtsamuel
        17
    wtsamuel  
       2020-06-03 12:33:26 +08:00
    调优以及
    能用硬件解决的事,别用软件解决
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2628 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 14:04 PVG 22:04 LAX 07:04 JFK 10:04
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86