Git   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了OpenCL的。 奇怪的数组寻址/指针错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有这个简单的内核进行tesTing。

__kernel void nfa(__global const int *a,__global int *output) { output[0] = a[0]; }

注意:这是在cpu上运行,内存可能在主机上。 它导致这个错误

* glibc检测到 ./program:malloc():smallbin双链表损坏:0x0000000000a4a540 * *

我怀疑这是破坏程序的一部分,因为它正在访问主机内存。 但据我所知,所有内存分配正确。 它在堆栈上,但在运行时停留在范围内。

当存在全局指针时,分叉进程如何互相影响?

运算符“新”返回一个非本地堆指针只有一个类?

两个printfs打印不同的String

使用Ptrace来跟踪正在打开的文件的位置

一个void指针(数据)投射到一个函数指针

但是,如果我这样做:

__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]; }

似乎只是访问一个[0],而不分配给自己导致的问题。

有谁知道发生了什么事?

我在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,请注明来意。
标签: