OpenCL

2012-06-14 19 views
7

dizesinde işlev dizisine geçirme dizisi OpenCL'deki bir işleve nasıl geçebilirim?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? 
} 

Düzenlenen kaynağı, I doğrultusunda c [n] = FindIndexFromArray (a, 3) şamandıra * " "tipi parametresi uyumsuz" _global float * hatası" tipi ..argument" var 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? 
} 

cevap

2

Bu hata mesajında ​​belirtildiği gibi var senin myArray ve Key böylece başka bir işleve geçirmeden aynı tür beyan etmek zorunda, tip global ve read-only ile geliyor Kısacası senin FindIndexFromArray olmalıdır

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

Hala birkaç uyarı alıyorum ama bu hata iletisidir: 'İşlenen türleri uyumsuz (" float "ve" __global float * "' bu satırda '' (myArray [i] == Key) '. MyArray ve Key'i __global türü olarak bildirdiğimi düşünmüştüm. Bunu nasıl düzeltirim? –

+0

düzenlenmiş kaynak kodunuzu gösterebilir misiniz? – ardiyu07

+0

Düzenlenmiş kaynak kodumu göstermek için sorumu düzenledim. –

İlgili konular