Closed visualJames closed 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.
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...
Ich habe jetzt eine endgültige Version. All die bemerkten Punkte müsste ich in den Verbesserungen eingeflossen sein. Danke für die Hilfe :)
…geschrieben, aber irgendwie beim uploaden, werden die Variablen nicht korrekt hochgeladen und deswegen failt der Test