大佬教程收集整理的这篇文章主要介绍了OpenCL的。 奇怪的数组寻址/指针错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
__kernel void nfa(__global const int *a,__global int *output) { output[0] = a[0]; }
注意:这是在cpu上运行,内存可能在主机上。 它导致这个错误。
* glibc检测到 ./program:malloc():smallbin双链表损坏:0x0000000000a4a540 * *
我怀疑这是破坏程序的一部分,因为它正在访问主机内存。 但据我所知,所有内存分配正确。 它在堆栈上,但在运行时停留在范围内。
当存在全局指针时,分叉进程如何互相影响?
两个printfs打印不同的String
使用Ptrace来跟踪正在打开的文件的位置
但是,如果我这样做:
__kernel void nfa(__global const int *a,__global int *output) { a = a; output[0] = a[0]; }
这导致答案2,这是正确的,因为a是一个数组[2,4,8];
对自己的分配解决了这个问题…
这也很好,导致4。
__kernel void nfa(__global const int *a,__global int *output) { output[0] = a[1]; }
有谁知道发生了什么事?
我在Linux上与AMD OpenCL驱动程序(与英特尔cpu,但我有一个AMD卡)。
编辑:
缓冲区创build的代码(缩写,数组和缓冲区之间有其他代码):
int a[3]; a[0] = 2; a[1] = 4; a[2] = 8; cl::Buffer bufferA = cl::Buffer(context,CL_MEM_READ_ONLY | CL_MEM_USE_HOST_PTR,sizeof(int) * 3,&a);
在C ++中使用指针结构的beginthread
错误:一元'*'的无效types参数(有'int')
打印字符数组垃圾
C中的指针vs句柄(是用来传达单独事物的术语?)
Ubuntu信号量:分段错误(核心转储)
我可能是错的(我没有使用C ++ OpenCL,但我相信它大致相同的C绑定),但我相信:
最后一个类型调用cl :: Buffer的参数是void *。 你想要的是一个指向你传入的内存块的指针,在这种情况下,该数组(由于数组而自动转换为指针)。 你已经传入了一个指向数组的指针 (即指向指针的指针),这个指针被编译器静默地抛弃。 这意味着,你最终复制数组指针,然后不管发生了什么,在内存中2整数。 我可以想象这会造成糟糕的结果
我不知道为什么a = a或output = a [1]可以修复它,因为我没有cpu OpenCL的经验,我不确定具体是如何工作的。 在GPU上,您可能会将其解释为设备为了性能原因缓存内存,从而防止发生内存失效(或某事)
编辑:哎呀,刚刚意识到这是多大年纪,我应该学会更好地阅读
以上是大佬教程为你收集整理的OpenCL的。 奇怪的数组寻址/指针错误全部内容,希望文章能够帮你解决OpenCL的。 奇怪的数组寻址/指针错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。