tôi sau cùng với một hướng dẫn nằm ở đây: http://opencl.codeplex.com/wikipage?title=OpenCL%20Tutorials%20-%201OpenCL - có thể gọi hàm khác từ bên trong hạt nhân không?
Kernel họ đã liệt kê là thế này, trong đó tính tổng của hai số và lưu trữ nó trong biến đầu ra:
__kernel void vector_add_gpu (__global const float* src_a,
__global const float* src_b,
__global float* res,
const int num)
{
/* get_global_id(0) returns the ID of the thread in execution.
As many threads are launched at the same time, executing the same kernel,
each one will receive a different ID, and consequently perform a different computation.*/
const int idx = get_global_id(0);
/* Now each work-item asks itself: "is my ID inside the vector's range?"
If the answer is YES, the work-item performs the corresponding computation*/
if (idx < num)
res[idx] = src_a[idx] + src_b[idx];
}
1) Say ví dụ như các hoạt động thực hiện phức tạp hơn nhiều so với một tổng kết - một cái gì đó đảm bảo chức năng riêng của nó. Hãy gọi nó là ComplexOp (in1, in2, out). Làm thế nào tôi sẽ đi về thực hiện chức năng này như vậy mà vector_add_gpu() có thể gọi và sử dụng nó? Bạn có thể cung cấp mã ví dụ không?
2) Bây giờ chúng ta hãy lấy ví dụ đến cùng cực, và bây giờ tôi muốn gọi một hàm chung hoạt động trên hai số. Làm thế nào tôi sẽ thiết lập nó để hạt nhân có thể được thông qua một con trỏ đến chức năng này và gọi nó là cần thiết?
Chỉ cần một nhận xét. Đây là OpenCL chứ không phải CUDA. Bạn không bắt buộc phải sử dụng nhiều kích cỡ nhóm làm việc. Tôi thấy rất thường xuyên xấu xí 'if (idx
DarkZeros