Es gab Profilierungszähler in cudaprof für globales Gedächtnis (gst_coherent, gst_incoherent, gld_coherent, gld_incoherent), die nützlich und klar für mich waren, weil sie mir sagten, wie viele nichtkoaleszierte globale Lese- und Schreibvorgänge Ich hatte.CUDA Profiling (Interpretieren von gst/gld Anfragen)
Nun scheint es nur "gst Anfragen" und "gld Anfragen" zu geben. Dies sind die gesamten Ladungen/Speicher pro Warp auf mp 0. Wie kann ich feststellen, ob ich unkoaleszierte Lese-/Schreibvorgänge habe? Ich vermute, dass es weniger Anfragen geben würde, wenn die Anfragen zusammengeführt würden. Soll ich herausfinden, wie viele ich pro Thread erwarte und vergleiche? Leider ist mein Kernel dafür zu dynamisch.
Diese sehen wie eine ausgezeichnete Quelle aus. Ich werde auch einige meiner eigenen Zähler einbauen - das wird mir helfen, die Profilerausgabe zu verstehen. – jmilloy
Sind bei 2.0-GPUs L1-Cache-Misses in irgendeiner Weise "verschmolzen"? Ist es möglich, dass 2.0 globale Lesevorgänge langsamer als 1.0 globale Lesevorgänge enden, wenn viele Fehler auftreten? Ich denke, ich muss mehr auf die Veränderungen im globalen Speicherzugriff zwischen meiner alten und meiner neuen GPU eingehen! – jmilloy
Auf sm_2x holt die Hardware eine Cache-Zeile bei einem Miss, was dasselbe bewirkt. Sie können den L1-Cache auch umgehen. Weitere Informationen zu beiden Modi finden Sie im CUDA-Programmierhandbuch. – Tom