@meljor @Cidious precies dat inderdaad 
Ik kan zonder problemen een CUDA workload verzinnen waarbij je 100% GPU usage ziet, maar ik weldegelijk een keiharde CPU bottleneck heb en er 0,0001% van de GPU benut wordt. Uit m'n hoofd: 1 FP32 counter en die X keer verhogen op 1 block, 1 thread; dat is dus 1 partitie in 1 SM, met individuele calls voor elke verhoging. Dat gaat geheid 99-100% usage weergeven, wat uiteraard volstrekte onzin is. En de CPU is dan de beperkende factor omdat die de adder + sync aan moet roepen.
Bij Nvidia betekent "usage" eigenlijk "utilization", bij AMD wordt usage anders gemeten (en Intel doet het wéér anders), maar bij geen van allen betekent die term "occupancy" of iets in die trant.
100% occupancy is onmogelijk (op alle moderne GPU's of CPU's), maar vooral voor Nvidia is dit heel lastig, door de manier waarop zij dingen aansturen. Je zult in een kloktik binnen een SM nooit en te nimmer de beide ALU clusters (FP32 + FP32/INT32), de tensor core en de RT core aan kunnen sturen.
En verschillende onderdelen trekken inderdaad verschillende hoeveelheden stroom. RT is daarbij vrij intensief omdat de RT cores zelf heel compacte units zijn, maar ook flink wat druk op de registers en caches zetten en dan ook nog FP32 produceren voor die ALU's.
Nu ik dit allemaal weer uit typ, begin ik me af te vragen of er met Intel's perfmon werk niet wat nuttigere gegevens beschikbaar zijn. Via dingen als NSight krijg je uiteraard de meest gedetailleerde data, maar dat gaat veel te ver. Uit de data achter de grafieken die ze bij bijvoorbeeld GN lieten zien kun je denk ik vrij eenvoudig wat simpelere percentages extrapoleren die dan samen een beter beeld kunnen geven van waar je bottleneck zit. Want zowel CPU als GPU usage in taakbeheer of andere monitor software zijn volstrekt nutteloos voor dat doel.
Hier de video voor als iemand die nog niet gezien had: YouTube: Intel's Major Overhaul for CPU & GPU Benchmarking | "GPU Busy" & Pip...
Ik kan zonder problemen een CUDA workload verzinnen waarbij je 100% GPU usage ziet, maar ik weldegelijk een keiharde CPU bottleneck heb en er 0,0001% van de GPU benut wordt. Uit m'n hoofd: 1 FP32 counter en die X keer verhogen op 1 block, 1 thread; dat is dus 1 partitie in 1 SM, met individuele calls voor elke verhoging. Dat gaat geheid 99-100% usage weergeven, wat uiteraard volstrekte onzin is. En de CPU is dan de beperkende factor omdat die de adder + sync aan moet roepen.
Bij Nvidia betekent "usage" eigenlijk "utilization", bij AMD wordt usage anders gemeten (en Intel doet het wéér anders), maar bij geen van allen betekent die term "occupancy" of iets in die trant.
100% occupancy is onmogelijk (op alle moderne GPU's of CPU's), maar vooral voor Nvidia is dit heel lastig, door de manier waarop zij dingen aansturen. Je zult in een kloktik binnen een SM nooit en te nimmer de beide ALU clusters (FP32 + FP32/INT32), de tensor core en de RT core aan kunnen sturen.
En verschillende onderdelen trekken inderdaad verschillende hoeveelheden stroom. RT is daarbij vrij intensief omdat de RT cores zelf heel compacte units zijn, maar ook flink wat druk op de registers en caches zetten en dan ook nog FP32 produceren voor die ALU's.
Nu ik dit allemaal weer uit typ, begin ik me af te vragen of er met Intel's perfmon werk niet wat nuttigere gegevens beschikbaar zijn. Via dingen als NSight krijg je uiteraard de meest gedetailleerde data, maar dat gaat veel te ver. Uit de data achter de grafieken die ze bij bijvoorbeeld GN lieten zien kun je denk ik vrij eenvoudig wat simpelere percentages extrapoleren die dan samen een beter beeld kunnen geven van waar je bottleneck zit. Want zowel CPU als GPU usage in taakbeheer of andere monitor software zijn volstrekt nutteloos voor dat doel.
Hier de video voor als iemand die nog niet gezien had: YouTube: Intel's Major Overhaul for CPU & GPU Benchmarking | "GPU Busy" & Pip...