OpenCL中的CLreleaseMoobject

OpenCL中的CLreleaseMoobject,opencl,gpgpu,Opencl,Gpgpu,当我创建一个缓冲区,然后通过clreleasemobject函数释放缓冲区时,总会有一些奇怪的事情发生,例如,如果我将缓冲区的大小设置为128KB+8B,那么总是会发生异常(通常,但不是每次,它总是在多次正常执行之后发生),但是如果我将大小设置为128KB或256KB,或者将其他大小设置为2的整数幂,那么clreleasemobject总是可以正常工作。我不太确定OpenCL中缓冲区的大小是否有限制,有人知道这个问题的含义吗?谢谢 有一些约束与子缓冲区的对齐有关,但这些约束应该会影响以前的调用,

当我创建一个缓冲区,然后通过clreleasemobject函数释放缓冲区时,总会有一些奇怪的事情发生,例如,如果我将缓冲区的大小设置为128KB+8B,那么总是会发生异常(通常,但不是每次,它总是在多次正常执行之后发生),但是如果我将大小设置为128KB或256KB,或者将其他大小设置为2的整数幂,那么clreleasemobject总是可以正常工作。我不太确定OpenCL中缓冲区的大小是否有限制,有人知道这个问题的含义吗?谢谢

有一些约束与子缓冲区的对齐有关,但这些约束应该会影响以前的调用,而不是释放mem对象的调用。另一个是例如CL_DEVICE_MAX_MEM_ALLOC_SIZE,但如果不遵循这些规则,有效的实现将不允许您创建缓冲区/映像


您的问题似乎与某些缓冲区溢出有关。

“那么总是发生异常”-什么“异常”?程序崩溃了吗?它是否抛出了一个实际的C++异常?它是否会导致OpenCL错误代码(如果是,错误代码是什么)?还是使用C++ API并获得一个OpenCL错误代码导致的异常(在这种情况下,它又是什么错误代码)?如果这种情况不常见,可能是由于某种或多或少不相关的原因造成的,比如CPU代码中的堆损坏之类的。或者您正在映射它,并在128KB+8B的范围内进行写入。或者可能是对齐问题。无论如何,我想解决这个问题需要更多的信息。