【发布时间】:2019-11-01 13:44:07
【问题描述】:
我的应用程序极大地受益于 gcc 在使用 -march native 运行时可以访问的高级 CPU 功能。 Docker 可以平滑操作系统的差异,但它如何处理不同的 CPU?要构建一个可以在任何 CPU 上运行的应用程序,我必须为 amd64 构建,这会损失很多性能。当需要为每个 CPU 架构单独编译应用程序时,有没有好的方法来分发 Docker 镜像?
【问题讨论】:
-
解决这个问题的一个通用方法是构建多个版本并在运行时选择最好的一个。 (例如,使用帮助脚本)。或者,如果您的代码是一个动态库,使用动态库技巧将函数指针解析为运行它的 CPU 的版本。但是,如果您的程序不是共享库,并且您不希望程序内部运行时调度开销,那么可以构建多个版本并选择一个与脚本或 CPU 检测包装程序一起运行是一种方法。 (例如,运行
cpuid的 C 或 asm 程序,或解析 /proc/cpuinfo 的 shell 脚本)
标签: docker gcc x86-64 cpu-architecture avx