OpenCL:根据local_item_size混淆结果
OpenCL: Confusing Results according local_item_size
我的代码就像二维矩阵乘法(http://gpgpu-computing4.blogspot.de/2009/09/matrix-multiplication-2-opencl.html)。矩阵的维数为(1000*1000、10000*10000、100000*100000)
My Hardware is: NVIDIA Corporation GM204 [GeForce GTX 980] (MAX_WORK_GROUP_SIZES: 1024 1024 64).
问题是:
我有一些令人困惑的结果取决于local_item_size,我需要了解发生了什么?
-
1000 X 1000矩阵&local_item_size = 16: INVALID_WORKGROUP_SIZE.
-
1000 X 1000矩阵&local_item_size = 8: WORKS:).
-
1000 X 1000矩阵&
local_item_size = 10: WORKS:)(执行时间8时更好)。 10000 × 10000矩阵&local_item_size = 8或16: CL_OUT_OF_RESOURCES 。
提前致谢
对于你的第二个问题,这是背后的原因:
- 1000/8 = 125, ok
- 1000/16 = 62.5,错!INVALID_WORKGROUP_SIZE
- 1000/10 = 100 ok,但是10和10的倍数将永远不会完全使用GPU内核。
- IE:如果你有16次经线,6次是浪费的,如果你有32次,2次是浪费的,以此类推。
- 10000x10000 = 400MB(至少,如果使用浮点数)仅用于输入,因此对于内存来说有些东西变得太大了,因此CL_OUT_OF_RESOURCES
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 大于65535的C++数组[size]引发不一致的溢出
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 为什么(-1)%vector::size()总是返回0
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在更改for循环的第三部分后,未使用for循环结果
- 使用++运算符会导致意外的结果
- 为什么在逗号分隔符上下文中将预增量的结果强制转换为void
- C++Brute Force攻击函数不会返回结果
- std::array::max_size 和 std::array::size 给出不同结果的示例
- C++向量与.size()结果混淆
- 可以将vector.size()的结果存储到int类型的变量中吗