2012-06-14 20 views
7

Jak przekazać tablicę do funkcji w OpenCL? Mam błędzie”..argument typu "_global pływaka *" nie jest zgodny z parametrem typu "pływak *" zgodnie C [n] = FindIndexFromArray (A, 3);Przekazywanie parametru tablica do funkcji w 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 edytowany źródło Kod:..

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? 
} 

Odpowiedz

2

To jak podano w komunikacie swoje myArray i Key pochodzi z typem global i read-only, więc trzeba zadeklarować samego typu, gdy przekazanie go do innej funkcji w skrócie swoimi FindIndexFromArray powinny być

FindIndexFromArray(global read_only float* myArray, global read_only float* Key) 
+0

Ciągle otrzymuję kilka ostrzeżeń, ale jest to komunikat o błędzie: 'Typy operacji są niekompatybilne (" float "i" _global float * "' w tym wierszu 'if (myArray [i] == Key)'. Myślałem, że zadeklarowałem myArray i Key jako typ __global. Jak to naprawić? –

+0

Czy możesz pokazać edytowany kod źródłowy? – ardiyu07

+0

Edytowałem moje pytanie, aby pokazać mój edytowany kod źródłowy. –

Powiązane problemy