|
Boost : |
Subject: Re: [boost] [compute] kernels as strings impairs readability and maintainability
From: Antony Polukhin (antoshkka_at_[hidden])
Date: 2014-12-25 05:58:15
2014-12-24 23:15 GMT+04:00 Pavan Yalamanchili <pavan_at_[hidden]>:
> I am a bit late to the party, but we faced the same problem with our
> library, ArrayFire.
>
> The solution we came up with is the following.
>
> - The kernels are written as .cl files and are part of the repository.
> - During the build process, the kernels in .cl files are converted to
> strings in *new* .hpp files.
> - The auto-generated kernel headers are the files that are included when
> trying to compile the said kernel.
>
There is a possible hack for that case! You'll need two helper header files
`import.pp` and `end_import.pp`. Something like the following could work
(not tested).
/// import.pp
#define TO_STRING(...) \
#__VA_ARGS__
/// end_import.pp
#undef TO_STRING
#undef IMPORT_AS
Now you'll need to write kernels like this:
/// kernel.cl
#ifdef IMPORT_AS
char IMPORT_AS[] = TO_STRING(
#endif
// Code goes here
#ifdef IMPORT_AS
); // not sure that this will work
#endif
That's it. Now if you need that kernel as a string, you just write the
following:
#define IMPORT_AS variable_name
#include "import.pp"
#include "kernel.cl"
#include "end_import.pp"
-- Best regards, Antony Polukhin
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk