CUDA gridDim,blockDim总是用户定义的
CUDA gridDim, blockDim are always user defined?
当我在内核调用时传递网格大小和线程计数时,这些值会始终完全按照我传递它们的方式放置在 gridDim 和 blockDim 中吗?
此外,blockIdx 和 threadIdx 会始终遵守这些限制吗?
换句话说,调用
kernel<<<5, 7>>>()
总是导致在内核中拥有,
gridDim.x == 5 && blockIdx.x < gridDim.x
blockDim.x == 7 && threadIdx.x < blockDim.x
以上条件要成立?(同样与 2D 和 3D 大小和索引相同?
我知道这听起来可能很愚蠢,但我想知道是否允许 CUDA 忽略资源分配的此限制,因此程序员总是需要检查。
希望清楚,谢谢!
是的,如果你在维度 <<<5,7>>> 中启动内核,它将有 5 个块,每个块 7 个线程。请注意,如果您在 GPU 的范围内操作,则效率最高。您应该使用从设备属性中读取的 warpsize 来获得卡的最大速度。根据需要使用大量线程,但块应该是扭曲大小的倍数。
CUDA 本身不会将您的线程/块更改为另一种大小,因此您应该可以接受寻址。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- Visual C++(VS2017)中用户定义的转换不明确
- 使用用户定义的参数调用future/async并调用类方法
- 带有用户定义类的c++折叠表达式
- g++用户定义的动态链接库上的全局new和delete运算符
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 修改"std::set"中用户定义类型的值
- 参数包构造函数在类模板中隐藏用户定义的转换
- MAKE:找不到包含的用户定义的头文件?
- C++:用户定义的显式类型转换函数错误
- 从用户定义的类生成格式字符串?
- 为用户定义的类正确调用复制构造函数/赋值运算符
- C++ 向量与用户定义的类比较?(==, <, >)
- STL 用户定义的二进制操作
- 将用户定义的类型与 std::vector 和 std::sort 一起使用
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- C++:用户定义的类,以成员字段作为地址