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

一个新的 CPU 架构会对上层产生多大的影响?

  •  
  •   James369 · 2021-08-27 21:24:31 +08:00 · 5089 次点击
    这是一个创建于 1190 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在都流行什么 AI 芯片,神经网络处理,或者新的架构比如 RiscV 等,这种新的 CPU 诞生,会产生什么样的影响呢?

    软件层面我认为影响不大,怎么说呢,因为编译器和操作系统都适配好了。那么上层应用只要通过编译器重新编译打包一下就好了,源代码都不用改。
    AI 芯片呢,可能会多加一些并行计算库的支持,应用层代码改动也不大。

    倒是会对原有的硬件产业产生影响,比如接口重新设计,板卡要重新打造
    27 条回复    2021-09-02 18:09:18 +08:00
    tcfenix
        1
    tcfenix  
       2021-08-27 21:27:38 +08:00
    那种新?是英特尔除了 12 13 14 代那种新?英特尔自己会做向前兼容, 没啥影响

    要是 x64 arm 那种新, 那就更加没影响了, 反正不兼容....没人理咯
    James369
        2
    James369  
    OP
       2021-08-27 21:36:51 +08:00
    @tcfenix 恩,就好比前不久苹果 M1 出来,好像要翻天了似的
    billlee
        3
    billlee  
       2021-08-27 22:35:50 +08:00   ❤️ 2
    怎么就没影响了
    amd64 普及多少年了还有很多软件只有 i386 的二进制提供。intel 和 amd 的虚拟化就需要分别写两套实现。mac 换 arm 直接把 bootcamp 和虚拟机干没了。以前的游戏主机多平台移植基本上和重写差不多。
    secondwtq
        4
    secondwtq  
       2021-08-27 22:48:32 +08:00
    你指的是 ISA 还是 uArch ?
    Huelse
        5
    Huelse  
       2021-08-28 00:20:20 +08:00
    影响是有,但好在现在 ARM 、RISC-V 等架构都是精简指令集
    LeeReamond
        6
    LeeReamond  
       2021-08-28 00:48:39 +08:00
    我也很疑惑,理论上这是编译器需要干的适配,然而微软特意提到开发者需要做大小核优化...我好奇是 C 语言里有指定大小核的指令还是汇编里有指定大小核的指令,感觉都没有啊
    JerryCha
        7
    JerryCha  
       2021-08-28 00:52:41 +08:00
    按我理解,你不走歪门邪道、API 调用跟随官方规范的话,影响可能比较小。
    neoblackcap
        8
    neoblackcap  
       2021-08-28 01:01:11 +08:00
    @LeeReamond NUMA 呗,系统是有对应的 API 提供的。调用不同的 API,运算当然是不一样。还有就是 SIMD 指令,小核可能是没有,或者弱化
    icyalala
        9
    icyalala  
       2021-08-28 01:09:14 +08:00
    @neoblackcap Intel 这次就是因为小核不支持 AVX-512,所以把大核的也给禁了。。
    misdake
        10
    misdake  
       2021-08-28 01:12:23 +08:00
    “通过编译器重新编译”这件事对于一些活跃的开发者可能还好,但整个生态都重新编译不是那么容易的。
    那些开发者不再支持的软件,不用转义或者虚拟机就永远运行不了了。
    如果软件依赖了其他的静态库,就要等待库的更新或者自己去编译,越底层越可能需要有改动。如果用了一些 ISA 特定的 trick,或者写了各种汇编,就要真的重新付出去开发,可能写汇编的人早就离职了干别的去了,没人会了。
    Jooooooooo
        11
    Jooooooooo  
       2021-08-28 01:21:08 +08:00
    像是完全没接触的人会说的

    你要不搜下 fpga
    agagega
        12
    agagega  
       2021-08-28 01:38:24 +08:00 via iPhone   ❤️ 2
    这是不同层面的事情。

    像从给 CPU 编程到给 GPU 编程,这个属于编程模型上的变化,代码可能需要大量的重写。

    如果是换个指令集,比如从 x86 迁移到 ARM,理论上你的代码如果全都是标准的可移植的那种,那的确重新编译就可以了。但很多项目 (1) 假定了很多平台特性(比如 x86 和 ARM 的内存一致性模型不一样),或者用了平台相关的内联汇编 /Intrinsic (2) 用了上游的库,而上游又依赖着更上游的代码,那就得等到他们全都改好才行,目测到今天还没有适配 M1 的那些软件就属于这种情况。当然即使同样是 x86,也会有指令集的不同,比如一些 CPU 支持 AVX512 而另一些不支持,情况类似,但不需要像到 ARM 那么大的功夫。

    如果是说 CPU 自己的微架构,这是 CPU 内部的事情,你不用重新编译。
    msg7086
        13
    msg7086  
       2021-08-28 05:01:50 +08:00
    如果都是用比较高级的语言写的,重新编译下倒也不是大问题。

    很多用汇编写的软件就跑不起来了,要重写指令集。最典型的就是很多运算密集型软件,比如 ffmpeg 全家桶,你只能放弃掉汇编的部分,纯靠编译器来优化,速度天差地别。
    minikyu
        14
    minikyu  
       2021-08-28 10:05:06 +08:00
    最近在搞模型部署,用的芯片是 arm 的,之前测试用的是 x64 的,结果就是,虽然两者都是 linux 系统,但是很多东西都不通用,搞死我了😟
    ilotuo
        15
    ilotuo  
       2021-08-28 11:44:20 +08:00
    AI 芯片是属于 SIMT 架构吧. 和 pc 上的 cpu 不是一个东西
    yolee599
        16
    yolee599  
       2021-08-28 12:57:45 +08:00 via Android   ❤️ 1
    一个 CPU 架构不会轻易出现,也不会轻易改变的。编译器的实现,烧录软件的实现,产品线(一个架构只有一款硬件,别人不敢用,用了容易被绑死),硬件烧录器,bsp 代码,社区,等,这些都需要考虑的。通常是在外设上添加功能模块,通过某种总线和 CPU 通信。AI 芯片也是在现有的 CPU 构架上添加 NPU 外设,通过某种方式和 CPU 通讯
    beginor
        17
    beginor  
       2021-08-28 14:05:41 +08:00 via Android
    我觉得高级语言影响不大,重新编译一下很多问题就解决了。

    但是如果用到相对底层的汇编语言,基本上就要重写。
    BiteTheDust
        18
    BiteTheDust  
       2021-08-28 15:03:14 +08:00
    一些性能优化的代码是高度依赖底层硬件架构的。
    js8510
        19
    js8510  
       2021-08-28 16:30:45 +08:00 via Android   ❤️ 2
    对追求高性能的大型服务后台影响非常大。这些 binary 为了追求极致性能,常年反复压榨,往往把编译器能用的所有 option 已经调了一个遍,全都要重新做。另外部署的时候各种多线程的优化,kernel 层面的已有优化,甚至是代码风格的要求都会有变化。
    aneostart173
        20
    aneostart173  
       2021-08-28 16:35:23 +08:00
    @LeeReamond 每个 ISA 都有自己的 feature,内存一致性也有可能不一样。
    youxiachai
        21
    youxiachai  
       2021-08-28 22:00:02 +08:00
    新架构???那个是新的啊。。就算是 RiscV 理论也是 80 年代就有了。。

    严格来说,目前在做的事情都是在完善上层应用。。谈不上什么新。。。
    adoal
        22
    adoal  
       2021-08-29 00:43:48 +08:00
    以前(大概在 2000 年)遇到过的一个实际例子,某个开源组件在 i386 的 Linux 上跑得好好的,到了 alpha 的 Linux 上就会频繁在 console 跳出错误,程序运行结果都是对的,就是性能不太行。
    因为 i386 上 word/dword/qword 并不要求对齐到整个数据类型的边界;而 alpha 上要求对齐,否则会触发错误,然后操作系统捕获以后来根据指针位置拆开运算再合起来,这样性能损失会很大。

    还有大家可能熟悉的近几年的例子,X86 和 ARM 的内存一致性模型不一样,习惯了 X86 的人写出来的程序在 ARM 上可能就会出问题。
    Cloutain
        23
    Cloutain  
       2021-08-29 08:56:57 +08:00
    会对编译器和操作系统产生深刻的影响,编译器和操作系统的编写必须充分结合 CPU 的特性。上层软件全部重编译都是体力活了
    misaka20
        24
    misaka20  
       2021-08-29 16:37:24 +08:00
    难道编译器后端是摆设吗?
    Zepp
        25
    Zepp  
       2021-08-30 00:12:48 +08:00
    一个帖子,暴露出 v2 多少所谓程序员的计算机知识水平……
    INCerry
        26
    INCerry  
       2021-08-30 10:54:18 +08:00
    新架构吗? ARM 这些也不算新了,要说真的新架构的话 那看看 LoongArch
    Chinsung
        27
    Chinsung  
       2021-09-02 18:09:18 +08:00
    现在都在层上编程,CPU 架构改了,指令集一般向前兼容,如果你是干编译器或者虚拟机的,对你来说影响是巨大的。
    对于大部分用高级语言的来说,基本是没有什么区别的。
    大小核这种情况,最先也是操作系统的调度该考虑。然后才到语言和编程模型级别。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2191 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:21 · PVG 08:21 · LAX 16:21 · JFK 19:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.