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

[不懂就问]硬件变了,程序需要重新编译吗?

  •  
  •   oeagut · 2020-05-13 16:07:12 +08:00 · 3442 次点击
    这是一个创建于 1656 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想请教大家个问题,软件环境相同(比如 linux 同版本),硬件不同(不同品牌的服务器,但都是 x86 架构),编译出来的程序通用吗?

    举个简单的例子,我原来的程序是在 A 机器( amd 处理器)编出来的,可否直接拿到 B 机器( intel 处理器)上使用?

    或者说有哪位大佬讲解一下这方面的知识,感激不尽~

    P.S. 其实是服务器是志强的,工作站是酷睿 9700,忽然想到这个问题,网上搜了搜,一时半会没弄明白

    7 条回复    2020-05-14 12:50:50 +08:00
    Vegetable
        1
    Vegetable  
       2020-05-13 16:09:00 +08:00
    据说 amd 到 intel 一般没问题,反过来可能会有问题.
    sbw
        2
    sbw  
       2020-05-13 16:15:10 +08:00   ❤️ 1
    要看你的编译选项,-march=native 的话就只针对当前 cpu 编译,x86 的话选 -march=x86-64 就可以在所有 x86-64 cpu 上跑
    Vegetable
        3
    Vegetable  
       2020-05-13 16:18:42 +08:00
    又研究了一下,得到的答案是可以。你正常编码,不搞什么花活,就不会有问题。
    oeagut
        4
    oeagut  
    OP
       2020-05-13 19:13:22 +08:00 via iPhone
    @sbw 好的谢谢~
    oeagut
        5
    oeagut  
    OP
       2020-05-13 19:13:53 +08:00 via iPhone
    @Vegetable 嗯嗯谢谢~
    Mithril
        6
    Mithril  
       2020-05-13 19:22:39 +08:00   ❤️ 1
    不同厂商,不同型号,不同代的处理器支持的指令集是不一样的。一般都是向下兼容的。性能要求高的程序会直接针对指令集写 intrinsics 。如果没配套的就跑不了。一般这种都是提供好几个版本,其中最基础的肯定能在大多数处理器上跑,不过性能就差一些。比如 mkl 那一堆 dll 。

    不过通用程序一般编译器只会使用很老的指令集去优化,SSE,SSE2 这种。不乱开什么编译参数一般都没问题的。
    Crimilals
        7
    Crimilals  
       2020-05-14 12:50:50 +08:00 via iPhone
    应用层的一般没问题,涉及到底层的可能不一样,例如 intel 和 amd 的 VT 实现就不一样
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:54 · PVG 08:54 · LAX 16:54 · JFK 19:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.