Frage:
Was ersetzt x86-Intrinsics für C, wenn Apple Intel-CPUs für ihre eigenen Chips einsetzt?
Nanashi No Gombe
2019-05-08 17:38:56 UTC
view on stackexchange narkive permalink

Es gibt ganze Branchen, die auf der Verwendung von Intel Intrinsics für die CPU-Parallelisierung (mit SIMD) basieren.Zum Beispiel ist die Gemeinschaft der Gitter-QCD-Physiker darauf angewiesen, um die Effizienz von Gittersimulationen zu steigern.

Intel-basierte Macs können und werden routinemäßig von solchen Fachleuten verwendet, um ihre Arbeit zu erledigen.Es gibt jedoch Gerüchte, dass Apple in zukünftigen Macs die Intel-CPU durch ARM-CPU ersetzt.Müssen diese Fachleute Macs durch andere Intel-basierte Computer ersetzen, oder gibt es Alternativen zu Intel Intrinsics for C, die auf ARM-basierten CPUs unterstützt werden?

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/93410/discussion-on-question-by-nanashi-no-gombe-what-replaces-x86-intrinsics-for-c-wh).
Einer antworten:
jksoegaard
2019-05-08 17:57:06 UTC
view on stackexchange narkive permalink

Intel Intrinsics ist eigentlich nur eine Bibliothek, die C-Programmierern den Zugriff auf eine Reihe von Intel-Befehlssätzen wie SSE (Streaming SIMD Extensions), AVX usw. erleichtert. Das Ziel besteht darin, diese Befehlssätze für die Parallelisierung usw. verwenden zu können, ohne dass die Montage auf niedriger Ebene von Hand programmiert werden muss.

Die ARM-Plattform verfügt über ähnliche Befehlssätze, die vielen der gleichen Zwecke dienen. Zum Beispiel ist NEON die ARM-Alternative zu SSE unter Intel. NEON gibt Ihnen SIMD-Anweisungen, mit denen Sie die Parallelisierung erhöhen können.

Und ähnlich wie bei Intel Intrinsics haben Sie den ARM Compiler Intrinsics, der denselben Zweck erfüllt. Sie können "arm_neon.h" in Ihr C-Programm aufnehmen, um NEON-Anweisungen mit einer C-Schnittstelle verwenden zu können, ohne auf Assembler-Programmierung auf niedriger Ebene zurückgreifen zu müssen.

Es ist jedoch anzumerken, dass die auf Intel und ARM verfügbaren Anweisungen nicht identisch sind. Ähnlich wie bei "normalen Programmen" können Sie SIMD-Anweisungen für Intel auf ARM nicht direkt verwenden (oder umgekehrt). In der Praxis verwenden Softwareprogrammierer häufig Softwarebibliotheken mit vorgefertigten Operationen auf höherer Ebene, die sowohl Intel-Anweisungen als auch ARM-Anweisungen nutzen können. Ein gutes Beispiel ist die Bildverarbeitungsbibliothek "Simd" ( https://github.com/ermig1979/Simd), die Operationen auf hoher Ebene mit separaten, optimierten Implementierungen für SSE, AVX, VMX, VSX bietet und NEON (dh Intel, PowerPC und ARM).

Soweit ich sehen kann, ist das Wachstum der neuen Parallisierungsfunktionen sowohl auf Intel- als auch auf ARM-Plattformen sehr hoch. Dies ist für die Bereitstellung der Leistung der nächsten Generation für einige Benutzer von entscheidender Bedeutung.Auf neueren ARM-Chips haben Sie beispielsweise Zugriff auf den SVE-Befehlssatz (Scalable Vector Extensions, ein wesentlich besserer SIMD-Befehlssatz für 64-Bit-ARM-Prozessoren).Weder für die Intel- noch für die ARM-Plattform gibt es einen inhärenten Vorteil hinsichtlich der Bereitstellung neuer und erweiterter SIMD-Befehlssätze für Programmierer in der Zukunft.

Apples eigene Prozessoren (z. B. iPhones und iPads) verfügen seit vielen Jahren über den NEON-Befehlssatz.Bei den A5-CPUs und höher ist auch Advanced NEON eingestellt.Die neueren A11-CPUs verfügen über die SVE-Anweisungen, und die neuesten A12-CPUs bieten darüber hinaus SIMD-Unterstützung für komplexe Zahlen.

Es sei darauf hingewiesen, dass ARM SIMD-Intrinsics überhaupt nicht mit SSE / AVX / AVX512-Intrinsics kompatibel sind.Es gibt einige plattformübergreifende SIMD-Wrapper-Bibliotheken, die versuchen, die einfacheren Operationen wie vertikales Hinzufügen / Sub / FMA portabel verfügbar zu machen, aber verschiedene ASM-Befehlssätze bieten unterschiedliche Mischvorgänge und andere Operationen.Das Portieren von x86-Intrinsics auf AArch64 ist nicht immer einfach und eine Menge Arbeit, selbst wenn es einfach ist.Aber wahrscheinlich verwenden die meisten Wissenschaftler Bibliotheken, die bereits x86- und ARM-SIMD-Code enthalten, anstatt Intrinsics direkt zu verwenden.
Ja, sie sind nicht quellenkompatibel - deshalb habe ich geschrieben, dass sie einen ähnlichen Zweck haben, aber definitiv nicht "identisch" sind.Es ist wirklich schwer zu versuchen, sie plattformübergreifend zu machen, da Sie dadurch höchstwahrscheinlich den Leistungsgewinn verlieren würden, den Sie in erster Linie erreichen wollten.Und ja, es gibt bereits viele Softwarebibliotheken mit SIMD-Code für ARM-CPUs - einschließlich für Standardmathematik wie lineare Algebra, aber auch für spezielle Zwecke für maschinelles Lernen, Computer Vision usw.
Ja genau.Da es sich um eine Apple-Frage handelt, nicht um einen Stapelüberlauf, hielt ich es für wichtig, dies klarer und expliziter für Personen zu sagen, die selbst keinen Code mit Eigenheiten schreiben und diesen Satz möglicherweise übersehen.Es ist ein ziemlich offensichtlicher Punkt für Leute, die verstehen, wie C zu asm kompiliert und auf CPUs ausgeführt wird, aber dann würden sie die Frage nicht stellen.(Nettes Update, genau das, was ich gedacht habe)


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...