Wie kann ich eine CPU-Anweisung von C # aufrufen?

8

Mein Prozessor (Intel i7) unterstützt die POPCNT instruction und ich möchte sie von meiner C # -Anwendung aus aufrufen. Ist das möglich?

Ich glaube, ich habe irgendwo gelesen, dass es nicht ist, aber das JIT wird es aufrufen, wenn es verfügbar ist, aber welche Funktion müsste ich aufrufen, die durch eine solche Anweisung ersetzt werden kann?

Popcount wird millionenfach in einer Schleife aufgerufen, daher möchte ich diese CPU-Optimierung wenn möglich haben.

    
Ryan Peschel 13.03.2015, 19:34
quelle

1 Antwort

13

Du willst mit Feuer spielen, und hier spielen wir gerne mit Feuer ...

%Vor%

(dieses kleine Beispiel der Assembly wird einfach 42 zurückgeben ... Ich denke, es ist die perfekte Zahl für diese Antwort :-))

Am Ende ist der Trick:

A) Sie müssen die Opcodes kennen, die der asm entsprechen, die Sie schreiben möchten

B) Sie verwenden VirtualAlloc, um eine Seite des Speichers ausführbar zu machen

C) Irgendwie kopierst du deine Opcodes dort

(der Code wurde aus Ссылка )

übernommen

Ok ... der andere war wie auf der Website geschrieben (minus einem Fehler in der uint - & gt; IntPtr dwSize ), so sollte es geschrieben werden (oder zumindest ist es ein +1 verglichen zum ursprünglichen ... Ich würde alles in einer IDisposable -Klasse einkapseln, anstatt try... finally )

zu verwenden %Vor%     
xanatos 13.03.2015, 19:51
quelle

Tags und Links