请选择 进入手机版 | 继续访问电脑版

开源计算机图形学社区(Open Source Computer Graphics Community) |OpenGPU Forum (2007-2013)| OpenGPU Project

 找回密码
 注册
搜索
查看: 375|回复: 1

kernel里面如何使用随机数 [复制链接]

Rank: 4

注册时间
2017-10-4
积分
32
发表于 2017-10-11 11:20:16 |显示全部楼层
由于kernel里面用不了rand(),不知道还有没有其他的办法?求帮忙。

Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

注册时间
2007-6-11
积分
29826
发表于 2017-10-11 11:47:58 |显示全部楼层
这里有个问题,是一个Kernel需要一个外部的随机数,还是你的Kernel内存在循环,需要随机数。

如果是1。外部生成好了,构造一个数组,丢给每一个Kernel,每一个Kernel都能获取。比如CUDA做好了一堆,https://developer.nvidia.com/curand

如果是2。得内部实现一个生成器,具体来说,每一个Kernel需要一个预先的状态,这样每个Kernel内部的序列都不相同,从而实现局部的伪随机序列。

比如Windows的rand()就是这样实现的。这些线性同余的RND道理都一样,但是状态有些会很复杂,比如mt19937等等。
int ms_rand(int& seed)
{
  seed = seed*0x343fd+0x269EC3;  // a=214013, b=2531011
  return (seed >> 0x10) & 0x7FFF;
}


使用道具 举报

最近看过此主题的会员

您需要登录后才可以回帖 登录 | 注册

‹‹
我的工具栏

关于我们|手机版|Archiver|开源计算机图形学社区(Open Source Computer Graphics Community) | OpenGPU Project | OpenGPU Forum (2007-2013)

GMT+8, 2017-10-23 23:19 , Processed in 0.043760 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部