• 请不要在回答技术问题时复制粘贴 AI 生成的内容
SystemLight
V2EX  ›  程序员

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

  •  
  •   SystemLight ·
    SystemLight · Jun 2, 2020 · 4795 views
    This topic created in 2352 days ago, the information mentioned may be changed or developed.

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

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

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

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


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


    土豪只用看下架构能够堆机器就行,不用太管其他的优化。
    dazhangpan
    dazhangpan
    Jun 2, 2020
    8
    能做的事情特别多,特别特别多...先学个 profiler 作为入门吧..
    nightwitch
    nightwitch
    Jun 2, 2020
    9
    CPU 密集型
    高并发

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

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

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

    2. 提高资源供给
    换更强的 CPU
    加 CPU
    ConradG
    ConradG
    Jun 3, 2020
    13
    还可以撸专用芯片,比如写个 FPGA 之类。
    penguinWWY
    penguinWWY
    Jun 3, 2020
    14
    Profile-guided optimization
    msg7086
    msg7086
    Jun 3, 2020 via Android
    15
    还可以想办法改用 GPU 。显卡同价位下性能可不是强一点点。
    p2pCoder
    p2pCoder
    Jun 3, 2020
    16
    性能调优 先跑个 profiler 找下瓶颈在哪
    并发的 cpu 密集计算 建议 几方面优化 ,首先是合理的 计算分片,减少线程 进程切换的 cpu 消耗,然后是并行计算要考虑中间结果的缓存,看逻辑上是否有大量的重复计算,最后,就是优化算子,比如 整形 浮点型的位数,字符串转 hash,减少字符串操作,用取 hash 及 hash 后的整数的位运算取代
    如果是 java golang python 这些语言,还要考虑在计算密集型的应用中,gc 的巨大压力,以及语言本生的限制,如果最后真的是调优无法达到要求,就建议 c++重写,性能会有质的提升,还可以从编译器以及硬件架构层面进行优化
    wtsamuel
    wtsamuel
    Jun 3, 2020
    17
    调优以及
    能用硬件解决的事,别用软件解决
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   917 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 54ms · UTC 20:33 · PVG 04:33 · LAX 12:33 · JFK 15:33
    ♥ Do have faith in what you're doing.