【问题标题】:Recursive include of files in OpenCL source under Xcode在 Xcode 下的 OpenCL 源代码中递归包含文件
【发布时间】:2020-10-16 01:15:09
【问题描述】:

我正在寻找在我的 GPU 设备上运行调用 OpenCL 代码的主机程序。 cl源的格式如下:

#include "skip_mwc.cl"
typedef struct{ uint x; uint c; } mwc64x_state_t;
//blah...

如果我摆脱 #include 指令并将“skip_mwc.cl”的内容直接复制/粘贴到此源中,我可以部分“构建”并至少得到一些错误,表明我的编译器(clang9 cl编译器)至少可以识别内核代码。使用#include 方法我得到以下错误:

Build log::
<program source>:9:10: fatal error: 'skip_mwc.cl' file not found
#include "skip_mwc.cl"

我已经检查并且文件在搜索路径中,所以我倾向于认为我的 Xcode IDE 没有正确索引 .cl 文件以执行自动文件包含(如 .c 或 .cpp)。

我真的很想避免将源文件从一个文件复制/粘贴到另一个文件中。非常欢迎和需要任何熟悉 Xcode 并遇到此问题并设法解决的人提出的任何建议。

谢谢, 一个

【问题讨论】:

    标签: xcode include opencl


    【解决方案1】:

    两种可能的解决方案:

    1. 在clBuildProgram() 中设置-I include_dir 编译器选项,另请参见this answer。
    2. 使用 fstream 从 C++ 读取这两个文件并将其内容进行字符串连接。

    另请参阅通过stringification macro 将 OpenCL 代码嵌入到可执行文件中的选项。

    【讨论】:

    • 我采用了方法 2,该方法可行,但想知道当您的内核有很多 .cl 文件时会发生什么。需要不断地将新文件添加到字符串解析中。如果 Xcode 像处理 .cpp 文件一样处理这些文件的索引,并且在看到 #include 时直接包含它们,那就太好了
    • 有一种方法可以检测目录中具有特定结尾(如.cl)的所有文件,然后在循环中自动将它们读取为字符串。您必须给它们一个特定的标签,例如 ..._1.cl、..._2.cl、...以确保连接顺序正确。
    • 所以实际上,没有办法让Xcode动态解析在另一个“yyy.cl”文件中调用的#include“xxx.cl”的内容?事物必须以“静态”的方式提供给它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多