Speicher-Objekt-Zuordnung in Opencl für ein dynamisches array in der Struktur
Erstellt habe ich folgende Struktur 'Daten' in C
typedef struct data
{
double *dattr;
int d_id;
int bestCent;
}Data;
Den 'dattr' ein array in der oben beschriebenen Struktur, die immer dynamischer werden.
Nehme an, dass ich 10 Objekte der oben genannten Struktur. also
dataNode = (Data *)malloc (sizeof(Data) * 10);
und für jedes Objekt dieser Struktur muss ich reservieren des Speichers in C für array 'dattr' mit:
for(i=0; i<10; i++)
dataNode[i].dattr = (double *)malloc(sizeof(double) * 3);
Was tun sollte, um die Durchführung des gleichen in OpenCL? Wie um den Speicher für das array 'dattr" sobald ich den Speicher für die Struktur der Objekte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorschlag Faken, wenn Sie Bedenken mit dynamischer Speicherzuweisung und Sie sind begierig, ändern Sie den Algorithmus ein wenig, hier noch ein Tipp:
Den folgenden code dynamisch zuweist, lokalen Speicher und gibt Sie als 8. argument, um den OpenCL-kernel:
Zuweisung von Speicher in OpenCL-Geräte (z.B. eine GPU) ausgeführt werden müssen, in den host-thread mit clCreateBuffer (oder clCreateImage2D/3D wenn Sie möchten, verwenden textur-Speicher). Diese Funktionen können Sie automatisch kopieren Sie host-Daten (erstellt mit malloc zum Beispiel) zu dem Gerät, aber ich bevorzuge normalerweise explizit clEnqueueWriteBuffer/clEnqueueMapBuffer (oder clEnqueueWriteImage/clEnqueueMapImage wenn mit textur-Speicher), so dass ich die Profil-Daten überträgt. Hier ist ein Beispiel:
Was Sie beachten müssen, ist, dass Sie wissen müssen, ist der Speicherbedarf von einem OpenCL kernel, bevor Sie es ausführen. Als solche Speicher-Zuweisung kann dynamisch sein, wenn durchgeführt, bevor der kernel die Ausführung (d.h. im host). Nichts hält dich davon ab, den Aufruf der kernel mehrere Male, und in jeder dieser Zeiten einstellen (Zuweisung) die kernel-Speicher-Anforderungen.
Müssen diese berücksichtigt werden, rate ich Ihnen zu überdenken, wie Sie Ihre Annäherung an das problem. Um zu beginnen, es ist einfacher (aber nicht unbedingt effizienter) arbeiten mit arrays von Strukturen sind, als bei den Strukturen von arrays (in diesem Fall die arrays haben eine Feste Größe sowieso).
Dies ist nur um Ihnen eine Idee geben, wie OpenCL funktioniert. Werfen Sie einen Blick auf Khronos OpenCL-Ressource-Seite, es hat viel OpenCL tutorials und Beispiele, und Khronos OpenCL-Seite, was hat die offizielle OpenCL Referenzen, man-pages und Referenzen Karten.