debug bug experience1

2016.3.22
诶呀妈呀,GaussianBlur可算调通了,虽然还有精度、性能、宽高不同的时候出错的问题,但是,诶呀妈呀,终于调通了

2016.3.22
用template时,这样用会编译出错:

template<typename T>
void fun(T a)
{
    if(typeid(T) == typeid(unsigned char))
        funA<unsigned uchar>();
    else if(typeid(T) == typeid(unsigned int))
        funB<unsigned int>();
    else 
        exit(0);
}

应改为:

template<typename T>
void fun(T a)
{
    if(typeid(T) == typeid(unsigned char))
        funA<T>();
    else if(typeid(T) == typeid(unsigned int))
        funB<T>();
    else 
        exit(0);
}

2016.3.18
模板的声明和实现为何要放在头文件中
http://www.cnblogs.com/wanyao/archive/2011/06/29/2093588.html
关键是:在分离式编译的环境下,编译器编译某一个.cpp文件时并不知道另一个.cpp文件的存在,也不会去查找[当遇到未决符号时它会寄希望于连 接器]。这种模式在没有模板的情况下运行良好,但遇到模板时就傻眼了,因为模板仅在需要的时候才会具现化出来,所以,当编译器只看到模板的声明时,它不能 具现化该模板,只能创建一个具有外部连接的符号并期待连接器能够将符号的地址决议出来。然而当实现该模板的.cpp文件中没有用到模板的具现体时,编译器 懒得去具现,所以,整个工程的.obj中就找不到一行模板具现体的二进制代码,于是连接器也黔

2016.3.2
gpu像是跑死了的样子,除了常见的死循环,还有可能是global数组访问越界造成的

2015.12.08
测试cuda程序时,如果kernel程序内出现越界访问,那么编译时会报错,报错的内容能够大概是“…memcpy时出错…”之类的~~~就是说:在数据从GPU读出时,出现错误。

在OpenCL中,kernel内local memory出现越界访问时,程序可能不能出现编译错误,但是执行时会出现错误结果。

2015.12.17
想测试一下将kernel中的if语句换成三目运算符,看一下效果怎么样。于是将如下代码:

if (lc_sc[threadIdx.x] < 0) { lc_sc[threadIdx.x] = 0; lc_fc[threadIdx.x] = 0; } 
else if (lc_sc[threadIdx.x]+1 >= src_cols) { lc_sc[threadIdx.x] = src_cols - 2; lc_fc[threadIdx.x] = 1; }

换成:

lc_fc[threadIdx.x] = lc_sc[threadIdx.x] < 0 ? 0 : lc_fc[threadIdx.x];
lc_sc[threadIdx.x] = lc_sc[threadIdx.x] < 0 ? 0 : lc_sc[threadIdx.x];
lc_fc[threadIdx.x] = lc_sc[threadIdx.x]+1 >= src_cols ? 1 : lc_fc[threadIdx.x];
lc_sc[threadIdx.x] = lc_sc[threadIdx.x]+1 >= src_cols ? src_cols -2 : lc_sc[threadIdx.x];

但是结果不对。至于为啥呢,相信你现在已经知道了(因为第一个三目运算指令,影响了下一条指令)

2012年12月18
这么复杂的语句最后我还是看懂了,虽然看了两天。。。(两天各种觉得代码复杂,难懂,看不进去,今天发现,其实症结在这段代码)

func = funcGeneric_<
                HfuncA<float, float, float>,
                VfuncA<float, float, float, Cast<float, float>,
                VfuncA_32f>, float>;

2012.12.21
哈哈,买了新衣服。嘿嘿。
如果出现本来应该是正数的数,却变成了负数,那么可以肯定是出现溢出了,检查一下数据类型和赋值。

你可能感兴趣的:(kernel,bug,调试,OpenCL)