2011-07-18 31 views
5

Tôi mới sử dụng OpenCL. Tôi đã làm việc với hạt nhân OpenCL với dữ liệu 1-D. Nhưng khi tôi cố gắng vượt qua một con trỏ 3-D, nó không thể xây dựng hạt nhân. Để cụ thể, tôi nhận được CL_BUILD_PROGRAM_FAILURE. Đây là mã giả cho hạt nhân tôi đang cố gắng xây dựng -Làm thế nào để sử dụng mảng 3-D trong hạt nhân OpenCL?

__kernel void 3D_Test(__global float ***array) 
{ 

x = get_global_id(0); 
y = get_global_id(1); 
z = get_global_id(2); 

array[x][y][z] = 10.0; 

} 

Bất kỳ ai có thể cho tôi biết có vấn đề gì với mã không? Cảm ơn trước!

+0

Bạn nên kiểm tra việc xây dựng nhật ký, có được nó với clGetProgramBuildInfo. –

+0

Bạn cũng có thể xem xét loại Image3D, được hỗ trợ trong OpenCL 1.1, cho phép bạn lưu trữ và truyền các mảng 3D khá dễ dàng. –

Trả lời

5

Đó không phải là hợp lệ OpenCL C (đó là lý do tại sao nó không biên dịch), cho mảng 3D, bạn sẽ phải sử dụng phiên bản linearlized của mảng đó, chỉ cần tạo một mảng bình thường của kích thước appropiate (sizeX * sizeY * sizeZ) và chỉ số nó theo cách này:

int index = x + y * sizeX + z * sizeX * sizeY; 

tùy chọn khác là sử dụng một hình ảnh 3D với clCreateImage3D

+0

@ Matias..thanks rất nhiều vì sự giúp đỡ của bạn. – andromida

0

Bạn sẽ phải đầu tiên để đảm bảo một cách nào đó mảng của bạn như đủ không gian, các cấp ...

như thế nào mảng của bạn tuyên bố hay phân bổ?

+0

Tôi sẽ chỉnh sửa câu trả lời khi tôi nhận được câu trả lời, vì vậy nó phải là một «thực» »...) – Macmade

+0

@ Macmade..I đã phân bổ chúng trong mã máy chủ. Nhưng tôi đã tự hỏi nếu nó là một vấn đề của việc sử dụng mảng 3-D trong hạt nhân. Bởi vì cùng một mã khi tôi chuyển 'mảng' và sử dụng 'mảng [x] = 10', không có vấn đề gì với việc biên dịch. Có gì sai với cú pháp không? Tôi không thể tìm thấy exaple với mảng 3-D trong OpenCL. – andromida

+0

Để cụ thể, tôi nhận được lỗi 'CL_BUILD_PROGRAM_FAILURE': ( – andromida

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