我正在考虑用sse2内部函数向量化一些()调用,然后测量性能增益。但最终二进制文件将在我无法访问的虚拟机上运行。
我真的不知道VM是如何工作的。二进制程序是否完全在软件模拟的虚拟cpu上执行?
如果不是,假设VM运行在带有SSE2的cpu上,那么VM在从我的二进制文件执行SSE2指令时能使用他的cpu SSE2指令吗?
我的矢量化对VM有好处吗?
发布于 2017-01-18 22:56:16
我真的不知道VM是如何工作的。二进制程序是否完全在软件模拟的虚拟cpu上执行?
为了严肃的目的,不,因为太慢了。(例如,博克斯;它可以用于内核调试以及其他方面)
二进制文件将尽可能多地“正常”执行。这通常意味着任何不试图与操作系统交互的代码都将直接执行。例如,系统调用可能需要VM实现的参与。
如果不是,假设VM运行在带有SSE2的cpu上,那么VM在从我的二进制文件执行SSE2指令时能使用他的cpu SSE2指令吗?
是。
我的矢量化对VM有好处吗?
是。
发布于 2017-01-18 23:04:41
取决于VM技术和CPU能力。首先,x86 VM(如32位计算机上的VMWare )使用重新编译。他们查看VM的二进制代码,以寻找有害的指令(比如访问原始内存或特殊寄存器),用超级调用替换它们。
由于SSE2指令并不有害,所以它们只会保持原样,并且在VM中不会增加性能损失。此外,现代x86 CPU使用“硬件虚拟化”来避免重新编译。有害的指令被CPU捕获并产生中断,但是SSE2指令不应该触发它。
当然,也有像QEMU (不是QEMU)或Bochs这样的全处理器仿真器,但情况不同。例如,Bochs仿真CPU比主机CPU慢1000倍.
https://stackoverflow.com/questions/41730860
复制相似问题