2017-06-12 1 views
0

Wenn ja, was wäre der beste Weg, es zu benutzen?Verwendet die Android OpenGL Matrix-Klasse die GPU in ihren Berechnungen?

Bin ich richtig in der Annahme, es wäre am besten, wenn ich es benutze, benutze es so oft (innerhalb des Grundes) wie möglich, um die GPU zu sättigen?

Wenn nicht, was wäre eine einfache Möglichkeit, eine Menge Matrixmultiplikationen wirklich schnell zu machen? Ich arbeite in Android Studio mit Java.

+0

Wenn Sie bereit sind, nur auf ARM zu zielen, könnten Sie in NEON vektorisierte Anweisungen über das NDK/JNI https://developer.android.com/ndk/guides/cpu-arm-neon.html – samgak

Antwort

0

Operationen auf nur einem Satz von 4 × 4-Matrizen profitieren nicht wirklich von der GPU-Beschleunigung. Das ist aus vier Gründen:

  1. Es gibt einen bestimmten Aufwand im Zusammenhang mit dem Senden von Arbeitsaufgaben an die GPU.
  2. Obwohl GPUs über Verbindungen mit hoher Bandbreite verbunden sind, liegt die I/O-Bandbreite von/zu einer GPU normalerweise immer noch eine Größenordnung unter der Bandbreite des CPU-Speichers.
  3. Ein einzelner Satz von 4 × 4-Matrizen passt problemlos in den L1-Cache.
  4. Moderne CPUs haben Vektoranweisungen, die im Wesentlichen ganze 4 × 4 Matrizen als Ganzes knacken.

Wenn es was nicht eine einfache Möglichkeit wäre, sehr schnell eine Menge Matrix-Multiplikationen zu tun?

Das hängt tatsächlich von der Art der Daten ab: Wie ist die Populationsverteilung Ihrer Matrizen? Wie viel Austausch passiert zwischen Matrizengruppen? Werden Ihre Matrixzugriffe von Sammel- oder Streu-Schreibvorgängen dominiert?

Es gibt eine Reihe von pathologischen Fällen, in denen die CPU-Leistung eines einzelnen Threads GPUs schlägt.

+0

verwenden, wenn ich hätte Genug 4x4-Matrix-Multiplikationen, würde das den Overhead überwinden, der damit verbunden ist, alles zur GPU zu bewegen? Oder sind diese Matrizen einfach viel zu klein? –

+0

@FelixBrakel: Die Break Even-Schwelle hängt wirklich von der Plattform ab. Die typische Ausführungsaufbauzeit liegt jedoch in der Größenordnung von etwa 1 us. Alles, was Sie auf der CPU in under machen können, sagen wir, dass <100ns einfach nicht die Mühe wert ist, auf einer GPU gestartet zu werden. – datenwolf

Verwandte Themen