Dis*_*ame 1 gcc x86-64 cpu-architecture avx docker
我的应用程序受益于gcc与gcc一起运行时可以访问的高级CPU功能-march native。Docker可以消除OS中的差异,但是如何处理不同的CPU?要构建可以在任何CPU上运行的应用程序,我必须为amd64构建,但会损失很多性能。当需要针对每种CPU架构分别编译应用程序时,是否有一种分发Docker映像的好方法?
Docker根本不处理CPU。它只是内核命名空间,FS系统分层(例如UnionFS)和进程引用的组合。
当您在docker容器上运行某些内容时,它只是在OS上运行的可执行文件,而没有进行虚拟化,它只能访问一组选定的内核对象(例如设备),并且会因覆盖不同的FS而被更改为FS层次结构(包括docker容器中的一个)。
因此,Docker根本不处理CPU,它与您的问题完全正交。
正如Peter所评论的,CPU调度基本上有两种方法:
主要问题是,有时ISA扩展是正交的,这会使组合(即库/二进制文件的数量)呈指数增长。因此,考虑到您正在与Docker的用户群打交道,可以稍微简化此方法(如果组合存在问题):
amd64,一为amd64-avx,一为amd64-avx2-aesni-tsx和类似。想法是只创建几个容器来覆盖所有,大多数和少数用户。编辑
正如BeeOnRope在评论中指出的那样,Dockers 具有在Windows上运行的版本。它使用Hyper-V在Linux版本的docker上运行Linux VM。
由于Hyper-V是本机VMM,因此除了额外的层外,同样的注意事项也适用。
同样,也有macOS版本。这次,它使用基于xhyve的管理程序框架。