用户
 找回密码
 立即注册
Eric 该用户已被删除
发表于 2013-9-15 22:00:19
87308
斑竹你好!

在cuda中的stream有几个问题咨询一下。

(1)在用流的时候,流的多少是无限的吗?还是说可以通过cudagetpro获取属性的方式得到一个设备上最大可以设置的流数?

(2)以前在C++中创建一个数组如下:
int size = 3;
float M[size];是错误的,但是现在在cuda下
如此定义:
int size = 3;
cudaStream_t streams[size]就是正确的为什么?

谢谢!
使用道具 举报 回复
发表于 2013-9-15 22:04:55
LZ您好:

1:手册和其他官方资料中并没有提到最多可以建立多少个stream,我曾经测试过,连续建立10000个stream是无问题的。
http://cudazone.nvidia.cn/forum/ ... thread&tid=7082

以及,一般来说建立这么多的stream是无意义的,stream只是用来区分开多个逻辑依赖链,这只需要少数的几个或者几十个stream就足足够用了。
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:11:49
2:刚才实机测试了您的第二种写法:int size = 3; cudaStream_t streams[size];

编译器报错,error:expression must have a constant value

未能重现您说的现象。

祝您周末愉快~
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:12:15
ice 发表于 2013-9-15 22:04
LZ您好:

1:手册和其他官方资料中并没有提到最多可以建立多少个stream,我曾经测试过,连续建立10000个st ...

您说的“逻辑依赖”值得是不是可以并行实现的,流与流之间的数据是无相互影响(即一个流数据的产生需要另一个流的数据完成),只是逻辑上的依赖。对吗?
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:18:33
ice 发表于 2013-9-15 22:11
2:刚才实机测试了您的第二种写法:int size = 3; cudaStream_t streams;

编译器报错,error:expression m ...

我也实地弄了一下的确是错的,不知道那本书上为什么那么写!还以为自己搞错了
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:19:48
Eric 发表于 2013-9-15 22:18
我也实地弄了一下的确是错的,不知道那本书上为什么那么写!还以为自己搞错了 ...

该书可能是伪码,用来示意的。

请领会精神即可。

祝您好运~
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:24:47
ice 发表于 2013-9-15 22:19
该书可能是伪码,用来示意的。

请领会精神即可。

谢谢斑竹
使用道具 举报 回复 支持 反对
发表于 2013-9-15 22:53:01
Eric 发表于 2013-9-15 22:12
您说的“逻辑依赖”值得是不是可以并行实现的,流与流之间的数据是无相互影响(即一个流数据的产生需要另 ...

差点把这一楼看漏了。

逻辑依赖链指的是一个流程中后面需要前面的结果这样一个顺序的有因果关系约束的过程。

比如您需要运行kenrel A,之后将A的结果作为输入运行kernel B,这就是一个逻辑依赖链。
而同时,如果您还需要独立地运行kernel C,并将C的结果传回host,这是另外一个逻辑依赖链。

两个逻辑依赖链之间是无依赖关系的。

此时您可以将这两个依赖链分别放入不同的stream中。

大致如此,祝您晚安~
使用道具 举报 回复 支持 反对
发表于 2013-9-16 09:53:42
ice 发表于 2013-9-15 22:53
差点把这一楼看漏了。

逻辑依赖链指的是一个流程中后面需要前面的结果这样一个顺序的有因果关系约束的过 ...

明白了,谢谢
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册