2009-09-12 12 views
6

Tôi đã thấy điều này được thực hiện từ lâu với mã shader hlsl/glsl - sử dụng #include trên tệp mã nguồn dán mã vào char* để không có tệp IO xảy ra khi chạy.Sử dụng #include để tải mã OpenCL

Nếu tôi là đại diện cho nó như là pseudo-code, nó sẽ trông một chút như thế này:

#define CLSourceToString(filename) " #include "filename" " 
const char* kernel = CLSourceToString("kernel.cl"); 

Bây giờ tất nhiên rằng #define sẽ không làm việc vì nó sẽ chỉ cố gắng sử dụng những dấu ngoặc kép để bắt đầu chuỗi.

+0

Không có câu hỏi ở đây. – dajobe

Trả lời

12

Xem các công cụ vật lý đạn sử dụng OpenCL cho how để thực hiện việc này đến kernel.

Trong C nguồn ++/C

#define MSTRINGIFY(A) #A 
char* stringifiedSourceCL = 
#include "VectorAddKernels.cl" 

Trong nguồn OpenCL

MSTRINGIFY(
    __kernel void VectorAdd(__global float8* c) 
    { 
    // snipped out OpenCL code... 
    return; 
    } 
); 
+0

Nó không hoạt động nếu tệp .cl của bạn chứa dấu phẩy không được chứa giữa các dấu ngoặc đơn, như "int x, y;", nó kết thúc chuỗi của bạn sau "int x". –

4

Theo this, không thể, nhưng bạn có thể sử dụng xxd -i để lưu trữ cùng một hiệu ứng.