zeratax / yacx

Yet Another CudaExecutor - wrapper to easily compile and execute cuda kernels
https://zeratax.github.io/yacx
MIT License
8 stars 4 forks source link

Ich habe einen Test für einen einfache Ausführung einer sumArray Fkt … #112

Closed visualJames closed 4 years ago

visualJames commented 4 years ago

TestVonSumArray …geschrieben, aber irgendwie beim uploaden, werden die Variablen nicht korrekt hochgeladen und deswegen failt der Test

visualJames commented 4 years ago

Übrigens beim letzten Test kommt eine Segmentation Fault, weil die Größe des Arrays auch dann nicht mehr übereinstimmt und man auf Speicher zugreift, auf welchem wir keinen Zugriff haben. Es failen dann sozusagen die 3 Tests, die ich geschrieben habe. Ich bin mir unsicher, ob ich was falsch gemacht habe beim Testschreiben oder ob das Hochladen irgendwie nicht funktioniert.

LukasSiefke commented 4 years ago

Zu dem ersten Test: Du startest zu viele Threads bzw. es fehlt eine if-Abfrage innerhalb des Kernels. Deine Arrays haben die Länge 1 (4 Bytes). Du konfigurierst den Kernel mit 32 mal 8 mal 2 Blöcken mit jeweils einigen Grids. Entsprechend wird der Kernel mit vielen verschiedenen Indizes i aufgerufen. Da du auf das i-te Element zugreifst, i aber teilweise größer als 0 ist und deine Arrays die Länge 1 haben entsteht ein SegFault. Deshalb musst du entweder genau die richtige Anzahl an Threads starten (also block und grid-Variable ändern z.B. genau einen Block und nElem Grids) oder den Kernel so ändern, sodass dieser mit einer beliebien Anzahl an Threads funktioniert (Der Kernelfunktion einen zusätzlichen Parameter n für die Länge der Arrays hinzufügen und dann in einer if-Bedingung überprüfen, ob i < n gilt). Du kannst übrigens mit print-Statements auch innerhalb des Kernels Sachen ausprinten und so z.B. den Index i ausprinten.

Außerdem scheinst du für gpuRef kein Host-Speicher zu allokieren. Und du benutzt malloc oder nacher free zu nutzen...

visualJames commented 4 years ago

Ich habe jetzt eine endgültige Version. All die bemerkten Punkte müsste ich in den Verbesserungen eingeflossen sein. Danke für die Hilfe :)