Tôi là người mới bắt đầu với OpenCL và tôi đang cố gắng làm cho hạt nhân sau hoạt động. Khi tôi chạy chương trình tôi nhận được một lỗi trong quá trình xây dựng của chương trình hạt nhân. Cụ thể hơn, lỗi là như sau:OpenCL struct đối số không gian địa chỉ không hợp lệ
Error: Failed to build program executable!
<program source>:19:64: error: invalid address space for argument to __kernel function
__kernel void accelarate_flow(__global const t_param params,
^
Bạn có thể xem hạt nhân tại đây. Ban đầu tôi nghĩ rằng đó là bởi vì tôi đã không có cấu trúc được xác định bên trong hạt nhân, nhưng ngay cả khi tôi thêm chúng thì vấn đề vẫn tồn tại. Tôi làm gì sai ở đây?
const char *accelerate_flow_kernel_source =
#pragma OPENCL EXTENSION cl_khr_fp64 : enable
typedef struct
{
int nx;
int ny;
int maxIters;
int reynolds_dim;
double density;
double accel;
double omega;
} t_param;
typedef struct
{
double speeds[9];
} t_speed;
__kernel void accelarate_flow(__global const t_param params,
__global const int* obstacles,
__global t_speed* cells,
const unsigned int count)
{
int pos = get_global_id(0);
if(pos >= count || pos % params.nx != 0) return;
double w1,w2;
w1 = params.density * params.accel/9.0;
w2 = params.density * params.accel/36.0;
if(!obstacles[pos] &&
(cells[pos].speeds[3] - w1) > 0.0 &&
(cells[pos].speeds[6] - w2) > 0.0 &&
(cells[pos].speeds[7] - w2) > 0.0)
{
cells[pos].speeds[1] += w1;
cells[pos].speeds[5] += w2;
cells[pos].speeds[8] += w2;
cells[pos].speeds[3] -= w1;
cells[pos].speeds[6] -= w2;
cells[pos].speeds[7] -= w2;
}
}
Cảm ơn. Đó thực sự là vấn đề. Tôi đã thử nghiệm nó trước khi nhìn thấy câu trả lời của bạn và trở lại bình luận rằng tôi đã tìm ra giải pháp. – gkaran89
Tôi thấy nó tốt đẹp nói chung (không có ý tưởng về trường hợp này) để xem lỗi từ trình biên dịch khác nhau (AMD, Intel, ví dụ); không phải tất cả chúng đều hữu ích trong mọi trường hợp. – eudoxos