Oromis16
BIOS-Overclocker(in)
@Olstyle
Der Blendpolis- und PCGH-Nutzer Placebo hat deine Frage hier gelesen und sie Thomas Dinges gestellt, das hier war seine Antwort:
Der Blendpolis- und PCGH-Nutzer Placebo hat deine Frage hier gelesen und sie Thomas Dinges gestellt, das hier war seine Antwort:
Thomas Dinges schrieb:[...]
1) Compiler
Der Rendering Kernel (also der gesamte Code, der für das Rendern zuständig ist), wird vom CUDA / OpenCL Compiler kompiliert. Dies geschieht auf der CPU. Die GPU ist hierbei nicht involviert. Nun ist es aber so, dass der Compiler aufgrund der Zielarchitektur (GPU) einiges beachten muss und GPUs immer noch nicht jeglichen Code ausführen können, so wie man es von CPUs kennt. Und hier lag das das Problem: Der CUDA / OpenCL Compiler ist nicht in der Lage den großen Render Kernel (effektiv) zu verarbeiten und zu optimieren. Nvidia hatte hier weniger Probleme mit CUDA als z.B AMD mit OpenCL, aber optimal war es schon lange nicht mehr.
Mit der Aufteilung des Kernels in kleinere Teile kommt der Compiler nun deutlich besser zurecht, da er jeweils nur einen kleines Teil von Cycles (Raytracing, Shaders, Render Passes....) verarbeiten muss. Dies bringt den Compiler nicht an seine Grenzen und verbraucht gleichzeitig auch weniger Ressourcen während der Kompilierung (Stichwort: Arbeitsspeicher Verbrauch).
2) Performance
Ebenso wie für den Compiler, ist auch für die GPU der Megakernel suboptimal. GPUs sind schnelle Floating Point Cruncher, sie lieben kleine Programme, die immer das selbe machen. Komplexer Code wie Cycles, mit hunderten von Funktionen und Tausenden Verzweigungen (if/else) sind nicht optimal. Durch die Aufspaltung kann die GPU die Berechnungen nun effizienter lösen und auch der Speicherverbrauch auf der GPU sollte sinken.
Wer es genauer wissen möchte sollte folgendes Paper lesen:
Megakernels Considered Harmful: Wavefront Path Tracing on GPUs
sowie die Dokumentation von den AMD Entwicklern: Split Kernel Optimizations[...]
Zuletzt bearbeitet: