gpt4 book ai didi

Docker 和 -march native

转载 作者:行者123 更新时间:2023-12-02 18:44:36 32 4
gpt4 key购买 nike

我的应用程序极大地受益于高级 CPU 功能,gcc 在使用 -march native 运行时可以访问这些功能。 Docker 可以消除操作系统的差异,但它如何处理不同的 CPU?要构建一个可以在任何 CPU 上运行的应用程序,我必须为 amd64 构建,这会损失很多性能。当应用程序需要针对每个 CPU 架构单独编译时,有没有一种分发 Docker 镜像的好方法?

最佳答案

Docker 根本不处理 CPU。它只是 kernel namespacing 的组合, FS 系统分层(例如 UnionFS )和 process quoting .
当你在 docker 容器上运行某些东西时,它只是一个在你的操作系统上运行的可执行文件,没有虚拟化,它只能访问一组选定的内核对象(例如设备)并且它被 chroot 到一个 FS 层次结构,这是由于覆盖不同的 FS(包括 docker 容器中的那个)而产生的。

因此,Docker 根本不处理 CPU,它与您的问题完全正交。

作为Peter commented基本上有两种 CPU 调度方式:

  1. 您加载了正确的动态库(但对库的每个函数调用都使用指针)。
  2. 您构建同一个静态链接二进制文件的多个版本并运行正确的那个。

主要问题是有时 ISA 扩展是正交的,这使得组合(即库/二进制文件的数量)呈指数级增长。因此,考虑到您正在处理 Docker 的用户群,您可以稍微简化该方法(如果组合有问题):

  1. 要么做一些需要的 ISA 扩展(如果没有这样会大大降低性能)。对于可选扩展,您可以使用上述方法之一。
  2. 只创建几个基线容器。例如。一种用于通用 amd64,一种用于 amd64-avx,一种用于 amd64-avx2-aesni-tsx 等。想法是仅创建几个容器来覆盖所有大多数少数 用户。

编辑
作为BeeOnRope pointed in the comments , Dockers 一个运行在 Windows 上的版本。 It uses Hyper-V to run a Linux VM with the Linux version of docker .
由于 Hyper-V 是 native VMM,除了一个额外的层外,同样的注意事项也适用。
同样,也有 macOS 版本。 This time it uses an hypervisor framework based on xhyve .

关于Docker 和 -march native ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56657145/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com