2012-06-14 49 views
7

Làm cách nào để chuyển mảng vào một hàm trong OpenCL? Tôi đã nhận lỗi" ..argument kiểu "float * _global" không tương thích với tham số có kiểu "float *" trong dòng c [n] = FindIndexFromArray (a, 3);Truyền mảng tới tham số hàm trong 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? 
} 

nguồn thay đổi nội dung của tôi mã số:..

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

Trả lời

2

nó như đã nêu trong thông báo lỗi của bạn myArrayKey đi kèm với các loại globalread-only, do đó bạn phải khai báo các loại tương tự khi đi qua nó để chức năng khác nói tóm lại bạn FindIndexFromArray nên

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

Tôi vẫn nhận được một số cảnh báo nhưng đây là thông báo lỗi: 'Các loại toán tử không tương thích (" float "và" __global float * "' trong dòng này 'if (myArray [i] == Key)'. Tôi nghĩ tôi đã khai báo myArray và Key là __global type. Làm thế nào để sửa lỗi này? –

+0

bạn có thể hiển thị mã nguồn đã chỉnh sửa của mình không? – ardiyu07

+0

Tôi đã chỉnh sửa câu hỏi của mình để hiển thị mã nguồn đã chỉnh sửa của mình. –

Các vấn đề liên quan