Tôi đã làm việc với OpenCL trên một vài dự án, nhưng luôn viết hạt nhân làm một (đôi khi khá lớn). Bây giờ tôi đang làm việc trên một dự án phức tạp hơn và muốn chia sẻ các chức năng trên một số hạt nhân.Làm thế nào để cấu trúc hạt nhân OpenCL lớn?
Nhưng các ví dụ tôi có thể tìm thấy tất cả hiển thị hạt nhân dưới dạng tệp đơn (rất ít thậm chí gọi hàm phụ). Có vẻ như có thể sử dụng nhiều tệp - clCreateProgramWithSource()
chấp nhận nhiều chuỗi (và kết hợp chúng), mặc dù pyopencl's Program()
chỉ lấy một nguồn duy nhất.
Vì vậy, tôi muốn nghe từ bất cứ ai có kinh nghiệm làm điều này:
- Có bất kỳ vấn đề liên quan đến nhiều file nguồn?
- Giải pháp tốt nhất cho pyopencl có đơn giản là ghép nối các tệp không?
- Có cách nào để biên dịch một thư viện các hàm (thay vì truyền trong thư viện nguồn với mỗi hạt nhân, ngay cả khi không phải tất cả đều được sử dụng)?
- Nếu cần phải chuyển vào nguồn thư viện mọi lúc, các chức năng không sử dụng đã bị hủy bỏ (không có phí)?
- Bất kỳ phương pháp hay đề xuất hay nhất nào khác?
Cảm ơn.
Bạn có thể tạo một tệp nối có #include "part1.cl" #include "part2.cl". Điều này làm việc cho tôi (trình biên dịch NVidia), mặc dù mọi thứ có thể được biên dịch mỗi khi ứng dụng chạy. Tôi nghĩ rằng có một thư viện các chức năng biên dịch trước là một chút khoa học viễn tưởng, vì mã chức năng được gạch chân vào mỗi hạt nhân (đó là lý do tại sao bạn không thể viết các hàm đệ quy). –