__constant__数组开辟问题, cudaMalloc()??

关于__constant__数组的使用, 在<GPU高性能计算之CUDA>(P57)上有一段例子:
即先声明:
constant char p_HelloCUDA[11];
然后对其进行数据输入:
cudaMemcpyToSymbol ( p_HelloCUDA , helloCUDA , sizeof(char)*11 );
其中helloCUDA是host的数组

然后问题是, 如果我事先不知道p_HelloCUDA的长度怎么办?长度是一个变量int len
也就是我必须先要
constant char *p_HelloCUDA;
然后, 进行数据传入的时候应该是一样的吧:
cudaMemcpyToSymbol ( p_HelloCUDA , helloCUDA , len );

那么, 中间是不是可以使用cudaMalloc()来为p_HelloCUDA开辟内存呢?
如果不可以, 该咋办呢?
有人了解吧…

是不是跟CU_DEVICE_ATTRIBUTE_MAX_PITCH有关

这是个么CU_DEVICE_ATTRIBUTE_MAX_PITCH
不是很了解呀…
我这个数组很小的, 也就20~30个float的长度, constant memory应该可以放得开的吧

不能动态分配__constant__
constant char *只是一个常数存储器内的指针
可以对其分配,参考http://cudabbs.it168.com/thread-627-1-1.html
但分配的空间在device空间内,并不会有cache

Fermi上constant和device性能应该差不多,直接参考链接里的方法用__device__

不能动态分配,必须指定长度

其实可以有很变通的办法,就是你直接把所有constant内存全部消耗掉。。。开个大数组,然后根据你的需要去处理