2017-01-18 21 views
2

sse2組み込み関数を使用してfloor()呼び出しをベクトル化し、パフォーマンスの向上を測定することを検討しています。しかし、最終的にバイナリは私がアクセスできない仮想マシン上で実行されます。sse2ベクトル化と仮想マシン

私は実際にVMの仕組みを知らない。バイナリは完全にソフトウェアエミュレートされた仮想CPU上で実行されていますか?

もしそうでなければ、バイナリからSSE2命令を実行するときに、VMがCPUのSSE2命令を使用できますか?

私のベクトル化はVM上で有益でしょうか?

答えて

4

私は実際にVMの仕組みを知りません。バイナリは完全にソフトウェアエミュレートされた仮想CPU上で実行されていますか?

重大な目的のためには、それは遅すぎるためです。 (例えば、Bochsはそうです;他のものの中でカーネルのデバッグに便利です)

バイナリはできるだけ "通常"実行されます。これは一般に、OSと対話しようとしないコードが直接実行されることを意味します。例えば、システムコールは、VM実装の関与を必要とする可能性が高い。

もしそうでなければ、バイナリからSSE2命令を実行するときに、VMはCPUのSSE2命令を使用できますか?

はい。

私のベクトル化はVM上で有益でしょうか?

はい。

3

VMテクノロジとCPUの機能に依存します。最初のx86 VM(32ビットマシンのVMWareなど)は、の再コンパイルを使用しました。彼らはVMのバイナリコードを調べて、ハイパーコールで置き換えるための有害な命令(生のメモリや特殊レジスタへのアクセスなど)を探しました。

SSE2命令は有害ではないので、そのまま残しておき、VMにパフォーマンスペナルティは追加されません。さらに、最新のx86 CPUでは、再コンパイルを避けることができる「ハードウェア仮想化」が使用されています。有害な命令がCPUによって捕捉され、割り込みを生成しますが、SSE2 instrsはそれを起動しません。

もちろんQEMU(QEMU-KVMではなく)やBochsのようなフルプロセッサエミュレータがありますが、それは別の話です。たとえば、BochsエミュレートされたCPUは、ホストCPUより約1000倍遅いです。

+0

何を試しましたか、何を気付いていますか?あなたが練習の意味でそれに固執する必要があると推測するよりむしろ。私のVM上では、パフォーマンスが実際に非常に良好であることがわかりました。これにはベクトル化も含まれます。あなたはあなたが結論するものについてここに投稿することができます。 – Holmz