在OpenCl By Action一书中我读到了这个:
CL_MEM_USE_HOST_PTR:内存对象将访问主机指针指定的内存区域.
CL_MEM_COPY_HOST_PTR:内存对象将设置主机指针指定的内存区域.
CL_MEM_ALLOC_HOST_PTR:将分配主机可访问内存中的区域以用于数据传输.
这三面旗帜让我完全糊涂了.
我想知道至少前两个有什么不同.
1-In CL_MEM_USE_HOST_PTR内存对象将访问内存区域,而在CL_MEM_COPY_HOST_PTR内存对象将设置内存区域(在两种情况下由主机指定).这个设置和访问有何不同?然后第三个又让我很困惑.
2-是否所有这些固定内存分配?
是否可以从内核动态分配全局内存?在CUDA中,它是可能的,但我想知道在英特尔GPU上的OpenCL中是否也可以这样做.
例如:
__kernel void foo()
{
,
,
,
call malloc or clCreateBuffer here
}
Run Code Online (Sandbox Code Playgroud)
可能吗?如果是的话究竟如何?
Windows,MSVS 2010.
我无法理解为什么会产生编译错误:
#define INC(X) X++
int main() {
int X;
printf("%d", INC(X++));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
错误1错误C2105:'++'需要l值test.cpp 19 1测试
我正在Windows 7上使用Microsoft Visual Studio 2010编译一个小型C程序.这是一个小片段:
void test(char[] s)
{
//some code here
}
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
期待')'
我该如何解决这个问题?
实际上完整的代码在这里,在C中实现基数排序MSD(本书第10章):
#define N // integers to be sorted with values from 0 -256
void MSD (char[] s) {
msd_sort(s, 0, len(s), 0)
}
msd_sort(char [][] s, int lhs, int rhs, int d )
{
if (rhs<=lhs+1) return;
int * count =(int * )malloc(257*sizeof(int));
for(int i = 0; i < N; ++i)
count[s[i][d]+1]++;
for(int k = 1; k < 256; ++k)
count[k] += …Run Code Online (Sandbox Code Playgroud)