Metal - 一个线程本地的命名空间变量?

时间:2017-11-22 15:58:22

标签: c++ random gpu gpgpu metal

我正在尝试在Metal中创建一个伪随机数生成器(PRNG),类似于life的RNG,每次在线程<​​/ em>中调用RNG 时,它会产生给定特定种子的不同随机数,在这种情况下,将是print(red.life) 。我把它设置得很完美,现在我使用我的代码得到了一个很好的均匀随机图片。

但是,我的代码每个线程只能运行一次。我想实现一个thrust函数,它使用最后一个结果作为种子返回一个新的thread_position_in_grid。但是,由于我的RNG是命名空间,因此我无法存储最后的结果,并且我只能将最后的结果存储在next_rng()地址空间中,这是不可更新的。有没有办法绕过这个/重构我的代码以避免这个?

我在网上找到的最好的帮助是this SO post,遗憾的是,我无法与我合作,因为我无法在函数中将变量声明为静态,就像在解决方案中一样。

如果有帮助,我会以任何方式重组我的代码。我可以将它变成静态类或类或其他东西吗?毫无头绪,但我只想要一个PRNG

我的代码(简化)基本上与帖子的结构相同:

rng

编辑:

框架在这里完成并整齐地打包:Link

1 个答案:

答案 0 :(得分:0)

我最终使用了@KenThomases的建议,我刚刚为RNG创建了一个类。我打包了代码并调用了RNG LokiHere is the link to the repo如果有人想在将来使用它。