Ausführungsplanung von Tasks auf GPUs

  • Die massiv datenparallele Ausführungseinheit einer GPU kann für geignete Problemstellungen zu einer erheblichen Laufzeitverkürzung im Vergleich zu einer entsprechenden CPU-Lösung führen. Viele Problemstellungen eignen sich jedoch nur für die GPU, wenn neben Datenparallelität auch Task-Parallelität genutzt wird. Anstatt wie bei Datenparal- letliät simultan die gleiche Funktion auf viele Datenelemente anzuwenden, werden bei Task-Parallelität simultan unterschiedliche Funktionen angewandt. Ein klassischer Ansatz zur Erzielung von Task-Parallelität ist es, innerhalb eines Kernels in jedem Block eine unterschiedliche Funktion auszuführen. Ein alternativer Ansatz ist es, mittels Streams aus der CUDA API mehrere Kernel mit unterschiedlichen Funktionen parallel auszuführen. In dieser Arbeit wurde eine Bibliothek entwickelt, die Tasks entgegennimmt und so zur Ausführung bringt, dass die Gesamtausführungszeit minimal wird. Tasks können dabei beliebige Abhängigkeiten zu anderen Tasks haben. Beide Ansätze wurden analysiert, verglichen, implementiert und anhand von vier Anwendungsfällen evaluiert.