Ich habe ein Programm, das ein Gradientenbild erzeugt. Wenn ich dies für meine GPU kompilieren und Blick auf den Ausgang der compile_to_lowered_stmnt ich es sehe beginnt mit (nach dem Ertrag Anweisung) ein halide_copy_to_host und startet dann die äußere Schleife. Wenn ich Funktionen neste, ist der Halogenid_copy_to_host an der gleichen Position, aber dann für die äußerste Funktion. Hinweis Ich mache nichts mit der Planung. Ich würde gerne verstehen, warum es an diesem Ort ist. Ich erwarte, dass es am Ende des Programms ist, um das Ergebnis zurück auf den Host zu kopieren, nicht erst, bevor die Berechnungen abgeschlossen sind. Und wenn ich möchte, dass das Ergebnis auf der GPU bleibt (z. B. Ausgabe auf Bildschirm), sollte der Algorithmus schneller ohne die Kopie laufen. Gibt es eine Möglichkeit, den halogenid_copy_to_host zu "entfernen"?Warum wird die letzte func in einer Reihe mit halide_copy_to_host beginnen, und wie es zu entfernen
Q
Warum wird die letzte func in einer Reihe mit halide_copy_to_host beginnen, und wie es zu entfernen
0
A
Antwort
0
Die copy_to_host ist wahrscheinlich dort, falls der Ausgangspuffer ist auf der GPU schmutzig. Wenn dies der Fall ist und wir nicht auf den Host kopiert haben, haben Sie einen Puffer auf der CPU und der GPU, der unmöglich abzugleichen ist, ohne zu verfolgen, welche Teile des Puffers auf jeder GPU gegenüber der CPU schmutzig sind.
ist jedoch copy_to_host eine no-op, wenn die dev_dirty Flag auf false gesetzt ist, so sollte es nicht wirklich etwas in Ihrem Fall tun. Ich denke, dass es wahrscheinlich keine Kopien gibt. Wenn Sie das Flag -debug target aktivieren, können Sie selbst überprüfen.
Halide keine copy_to_host nach GPU-falls wollen Sie das Ergebnis auf der GPU zu bleiben, aus den Gründen, sagen Sie.
Verwandte Themen
- 1. warum die letzte Reihe und Spalte des Arrays Null ist?
- 2. Wie letzte Zelle in einer Reihe auf Google Tabellen zu verweisen, auch wenn es leer ist
- 3. Wie wird die letzte Zeile einer CellTable in GWT angepasst?
- 4. Die letzte nicht leere Zelle in einer Reihe bekommen
- 5. Warum kann die Variable nicht mit einer Zahl beginnen?
- 6. Was ist Func, wie und wann wird es verwendet?
- 7. Warum scheinen Firebase-Sammlungen mit einer Nullzeile zu beginnen?
- 8. Wie lg2 einer Reihe zu bekommen, die
- 9. Force DIV's, die in einer neuen Reihe beginnen, direkt unter dem DIV über
- 10. Wie wird immer die letzte Datei in einer Liste ausgewählt?
- 11. Fluss 3 Artikel in einer Reihe, und wenn gewickelt, links letzte Reihe Artikel
- 12. Wie Spaltennamen verweisen, die mit einer Zahl beginnen, in data.table
- 13. Wie wird die letzte Revision in einer Datei angezeigt?
- 14. Wie div id bekommen und es zu Anoher func gesetzt
- 15. erhalten Datum für die letzte einer Reihe von Wochen
- 16. Entfernen Führende 0er in einer Reihe Pandas
- 17. Wie man Klassen auswählt, die mit einer bestimmten Zeichenkette beginnen
- 18. Update letzte db Reihe mit Postgres SQL
- 19. Letzte zwei Reihe von mehreren Aufzeichnungen Hilfe
- 20. Left-align letzte Galerie Reihe
- 21. Ausgabe ist Spalte und will es in einer Reihe sein
- 22. letzte Zeile (n) entfernen, wenn sie aus einer Reihe von Dateien leer sind
- 23. Wie bekomme ich die letzte n Reihe von Pandas Dataframe?
- 24. Warum wird die Farbe durch die letzte überschrieben?
- 25. Wie wird eine Zeichenfolge abgeglichen und die letzte Zeilenumleitung ignoriert?
- 26. So entfernen/entfernen letzte Zeichen aus einer Zeichenfolge in PHP
- 27. Warum beginnen Strings mit einem "" in Java?
- 28. wie Anker-Tag zu entfernen, und es
- 29. Geting letzte Datei hochgeladen von einer Reihe von dir
- 30. io_service, warum und wie wird es verwendet?
ok, ich verstehe. Später im Code sehe ich einen Aufruf von set_dev_dirty. Woher weiß ich, welcher Teil meines Codes diese Anweisung generiert und/oder wie verhindere ich dies? – pietervanderstar
Ich habe jemanden gesehen, der vorgeschlagen hat, den Hostzeiger auf NULL zu setzen, bedeutet das, dass dies nur für AOT kompilierte Halogenid funktioniert? – pietervanderstar
Hat es funktioniert. Sie müssen einen Puffer verwenden und diesen Puffer an die Realisierungsfunktion übergeben. Dann können Sie es mit copy_to_host zum Host bringen, wenn Sie möchten. Wenn man sich den gesenkten Code anschaut, sieht man aber immer noch das set_dev_dirty und das copy_to_device ist ebenfalls im Code, aber es scheint, dass es nicht mehr aufgerufen wird. – pietervanderstar