Cuda PTX内核函数的布尔参数不支持?金宝app
2视图(30天)
显示旧的评论
你好,
我有一个cuda核函数:
__global__无效backprop_float(*完全浮动,const浮*输入,int spotn, const int holoWidth, const int holoHeight, bool addcorr)
当我试着在matlab创建内核对象:
backpropk = parallel.gpu.CUDAKernel (“backprop_kernels.ptx”,“backprop_kernels.cu”,“backprop_float”);
我得到以下错误:
__错误使用iCheckPTXEntryAgainstCProto(第420行)
发现无效的映射类型<逻辑,.u8 >__
如果我改变最后一个函数参数的类型
bool addcorr
来
int
成功,matlab创建内核对象。
(我使用matlab r2012a vstudio2008 cuda工具包v4.2卡gtx 560 ti)
接受的答案
本Tordoff
2012年9月13日
谢谢你提供的编译。看来,学校网站的最新版本从映射bool作为“s8”切换到“与”根据目标体系结构(“s8”< sm_20,“与”> = sm_20)。parallel.gpu。CUDAKernel应付不了后者。这是一个错误。
当我们得到一个永久修复工作,我能想到的三个解决方法。这些都是伟大的,但应该让你继续:
- 编辑生成的PTX接受“s8”而不是“与”。你要小心,这不会引起问题在PTX条目。
- 改变CUDA内核的布尔参数作为unisgned识字课(或其他unsigned 8位类型)。由于PTX治疗布尔值为一个8位类型,这是非常接近正确的行为。
- 定点清除sm_13编译,因为这导致学校网站发出“s8”。有性能原因你可能不想这么做。
(2)的一个例子,“国旗”曾经是类型的“bool”:
myKernel.cu:
__global__
无效myKernel(浮动*,浮点数常量*,unsigned char const标志)
{
如果(旗){
* = - (*);
}其他的{
* = *;
}
}
> > k = parallel.gpu.CUDAKernel (“myKernel.ptx”,“myKernel.cu”);
> > =函数宏指令(k2, 0, 1,真的)
和永久性修复时我将会更新这个答案。