我正在尝试使用cmake来简化我的OpenCL程序的分发.我有一个内核文件,其中包含几个头文件和其他源文件,我希望有一个自包含的可执行文件.
我的计划是让cmake 在内核源代码上运行C预处理器,将cl文件及其包含文件转换为一个更易于使用的单元.
我可以使用add_custom_command通过使用-E调用gcc/clang来实现它,但是我没有得到包含正确目录的标志来查找命令中的各种头文件,我看不到一个简单的方法查找在编译器的自定义调用中使用的所有当前包含目录.
有没有办法在具有当前cmake环境的文件上只运行C预处理器?
我需要以最快的方式定期将文件与内存同步.
我想我想要的是有一个mmap'd文件,它只能手动同步到磁盘.我不确定如何防止任何自动同步发生.
除非我手动指定,否则无法修改该文件.关键是要有一个检查点文件,它将状态的快照保存在内存中.我想尽可能避免复制,因为这需要相当频繁地调用,速度很重要.
假设我有一个大数组,我计算索引并传递给第二个函数.举个简单的例子,例如:
void foo(float* array, float c, unsigned int n)
{
for (unsigned int i = 0; i < n; ++i)
array[i] *= c;
}
void bar(float* restrict array, float* restrict array2, unsigned int m, unsigned int n)
{
for (unsigned int i = 0; i < m; ++i)
foo(&array[i * n], array2[i], n);
}
Run Code Online (Sandbox Code Playgroud)
这是否打破了bar()中限制的规则,你将数组的一部分地址传递给foo(),即使你真的没有在bar()中使用别名作为数组的一部分?