2017-01-18 2 views
2

Ich überlege, einige floor() -Aufrufe mit sse2 intrinsics zu vektorisieren und dann den Leistungsgewinn zu messen. Aber letztendlich wird die Binärdatei auf einer virtuellen Maschine laufen, auf die ich keinen Zugriff habe.sse2-Vektorisierung und virtuelle Maschinen

Ich weiß nicht wirklich, wie eine VM funktioniert. Wird eine Binärdatei vollständig auf einer Software-emulierten virtuellen CPU ausgeführt?

Wenn nicht, vorausgesetzt die VM wird auf einer CPU mit SSE2 ausgeführt, könnte die VM ihre cpu SSE2-Anweisung verwenden, wenn sie eine SSE2-Anweisung von meinem Binärcode ausführt?

Könnte meine Vektorisierung auf der VM nützlich sein?

Antwort

4

Ich weiß nicht wirklich, wie eine VM funktioniert. Wird eine Binärdatei vollständig auf einer Software-emulierten virtuellen CPU ausgeführt?

Für ernsthafte Zwecke, nein, weil es zu langsam ist. (Aber z. B. Bochs tut es; es kann unter anderem für Kernel-Debuggen nützlich sein)

Die Binärdatei wird "normal" so viel wie möglich ausgeführt. Dies bedeutet im Allgemeinen, dass jeder Code, der nicht versucht, mit dem Betriebssystem zu interagieren, direkt ausgeführt wird. Zum Beispiel erfordern Systemaufrufe wahrscheinlich die Beteiligung der VM-Implementierung.

Wenn nicht, vorausgesetzt die VM wird auf einer CPU mit SSE2 ausgeführt, könnte die VM ihre cpu SSE2-Anweisung verwenden, wenn sie eine SSE2-Anweisung aus meiner Binärdatei ausführt?

Ja.

Könnte meine Vektorisierung auf der VM nützlich sein?

Ja.

3

Hängt von VM-Technologie und CPU-Fähigkeiten ab. Erste x86-VMs (wie VMWare auf 32-Bit-Rechnern) verwendeten Rekompilierung. Sie untersuchten den Binärcode von VMs, um schädliche Anweisungen (wie den Zugriff auf den Rohspeicher oder spezielle Register) zu suchen, um sie durch Hyperaufrufe zu ersetzen.

Da SSE2-Anweisungen nicht schädlich sind, wurden sie einfach so belassen, wie sie sind, und es wurden keine Leistungseinbußen in der VM hinzugefügt. Darüber hinaus verwenden moderne x86-CPUs eine "Hardware-Virtualisierung", die eine Neukompilierung vermeidet. Schädliche Anweisungen werden von der CPU abgefangen und erzeugen einen Interrupt, aber wieder sollten SSE2-Instrukte diesen nicht auslösen.

Es gibt natürlich volle Prozessor Emulatoren wie QEMU (nicht QEMU-KVM) oder Bochs, aber es ist eine andere Geschichte. Die von Bochs emulierte CPU ist beispielsweise 1000-mal langsamer als die Host-CPU.

+0

Was haben Sie versucht und was haben Sie bemerkt? Anstatt zu raten, müssen Sie im Übungssinn stecken bleiben. Ich war überrascht, dass auf meinen VMs die Leistung tatsächlich sehr gut war. Dies beinhaltet die Vektorisierung. Sie könnten hier zurück posten, was Sie daraus schließen. – Holmz

Verwandte Themen