wer kennt sich mit cuda aus?



  • hallo,

    hab vor einiger zeit mit der gpu-programmierung unter cuda angefangen und ein c-programm von mir darauf portiert, das auf ner cpu einfach zu langsam läuft(trotz extremer optimierungen -der suchraum ist einfach zu riesig). mit dem visual profiler von nvidia kann ich auch sehen, was für aktionen bzw. befehle auf der gpu ausgeführt worden sind.
    mein problem ist jetzt folgendes: er führt meine kernels nicht aus, keine ahnung warum. es gibt auch keine fehlermeldung, der nvcc-kompiler kompiliert auch anstandslos.
    eventuell liegt es ja an der kernel-grösse insgesamt(variablenverbrauch und code), so das er die geforderte zahl von threads(variabel von 128 bis 6000)
    nicht erstellen kann weil der interne shared-speicher des einzelnen threadprozessoren nicht reicht. wo legt er denn eigentlich den kernel-code ab?
    im globalen ram der grafikkarte oder im shared-speicher des jeweiligen thread-prozessors? der variablenverbrauch im kernel ist nur 46 byte(inklusive übergabeparameter). mein kernel-aufruf ist eigtentlich relativ simpel:
    mein_kernel <<<16,9>>> (a,b,c);
    wobei a,b,c die zu übergebenden parameter sind und die beiden zahlen in den<<<>>> geben die anzahl der blöcke insgesamt an(16) und die anzahl der threads pro block(9). auch müsste die direkte angabe von block und threaddaten funktionieren, da ich das auch in programmierbeispielen von nvidia gesehen hab(normalerweise sind diese parameter von nvidia-eigenen vektor-datentypen).

    mein entwicklungssystem: fedora8 64bit(programmcode ist auch 64bit), gforce 9800gtx 512mb(hat 16 multiprozessoren und eine rechenfähigkeit von 1.1)

    code kann ich jetzt leider nicht posten, weil auf arbeit, aber später kein problem.

    kennt sich jemand mit der materie aus? hab zwar massig tutorials, aber irgentwie werden oft einzelne grundlegende dinge für mein dafürhalten nicht richtig erklärt.



  • Läuft dein Code im Emulationsmodus?

    Ansonsten wäre ein Blick in den Code nicht schlecht!



  • [quote="tenim"
    eventuell liegt es ja an der kernel-grösse insgesamt(variablenverbrauch und code), so das er die geforderte zahl von threads(variabel von 128 bis 6000)
    nicht erstellen kann weil der interne shared-speicher des einzelnen threadprozessoren nicht reicht. wo legt er denn eigentlich den kernel-code ab?
    [/quote]
    eigentlich sollte die groesse nur dafuer sorgen dass weniger threads gleichzeitig laufen. die erstellten threads muessen nicht alle gleichzeitig ablaufen afaik.

    der kernelcode sollte im vram liegen, das vram ist nicht shared.

    mein problem ist jetzt folgendes: er führt meine kernels nicht aus, keine ahnung warum
    

    wie verifizierst du das?



  • ich kann das im profiler sehen, der mit cuda geliefert wird. aber das problem hat sich erledigt. ich hatte pointerwerte falsch berechnet und er hat im kernel versucht, auf zu grosse bereiche des grafikrams zuzugreifen.

    😉


Anmelden zum Antworten