2012-06-14 3 views
7

Wie übergebe ich Array in eine Funktion in OpenCL? Ich habe Fehler“..argument vom Typ "_global float *" ist inkompatibel mit Parameter vom Typ "float *" in Zeile c [n] = FindIndexFromArray (a, 3);Übergeben Array zu Funktionsparameter in OpenCL

float FindIndexFromArray(float myArray[], float Key) 
{ 
    // simple looping to find the index 
    for (int i=0;i<sizeof(myArray);i++) 
     if (myArray[i]==Key) 
     return i; 

} 

kernel void ProcessArray(
    global read_only float* myArray, 
    global read_only float* Key, 
    global write_only float* c) 
{ 
    int index = get_global_id(0); 
    c[index] = FindIndexFromArray(myArray, Key); // How do I pass myArray parameter? 
} 

My bearbeitet Quelle Code:..

float FindIndexFromArray(__global read_only float* myArray[], __global read_only float* Key) 
{ 
    // simple looping to find the index 
    for (int i=0;i<sizeof(myArray);i++) 
     if (myArray[i]==Key) 
     return i; 

} 

kernel void ProcessArray(
    __global read_only float* myArray, 
    __global read_only float* Key, 
    __global write_only float* c) 
{ 
    int index = get_global_id(0); 
    c[index] = FindIndexFromArray(myArray, Key); // How do I pass myArray parameter? 
} 

Antwort

2

es ist wie in der Fehlermeldung angegeben Ihre myArray und Key kommt mit dem Typ global und read-only, so müssen Sie die gleiche Art erklären, wenn es an eine andere Funktion übergeben kurz Ihre FindIndexFromArray sein sollte

+0

Ich bekomme immer noch mehrere Warnungen, aber das ist die Fehlermeldung: 'Operandentypen sind inkompatibel (" float "und" __global float * "' in dieser Zeile 'if (myArray [i] == Key)'. Ich dachte, ich habe myArray und Key als __global Typ deklariert. Wie behebe ich das? –

+0

können Sie Ihren bearbeiteten Quellcode anzeigen? – ardiyu07

+0

Ich habe meine Frage bearbeitet, um meinen bearbeiteten Quellcode anzuzeigen. –