我正在研究使用nvidia GPU进行蒙特卡罗模拟.但是,我想使用gsl随机数生成器以及并行随机数生成器,如SPRNG.有谁知道这是否可能?
更新
我使用GPU玩过RNG.目前还没有一个很好的解决方案.SDK附带的Mersenne Twister并不适合(我的)Monte-Carlo模拟,因为生成种子需要相当长的时间.
NAG库更有前途.您可以批量生成RN,也可以在单个线程中生成RN.但是,目前仅支持少数分布 - Uniform,exponential和Normal.
是否需要安装支持CUDA的显卡(在Linux中)用于编译CUDA程序nvcc?或者可以在任何地方编译程序并仅在此类系统上运行?
在CUDA 4.x上第一次调用cudaMalloc
可能是非常慢的(这被报告过几次)并不是秘密,似乎是CUDA驱动程序中的一个错误.
最近,我注意到了奇怪的行为:运行时间cudaMalloc
直接取决于我链接到我的程序的第三方CUDA库(请注意,我不使用这些库,只是将程序链接到它们)
我使用以下程序运行了一些测试:
int main() {
cudaSetDevice(0);
unsigned int *ptr = 0;
cudaMalloc((void **)&ptr, 2000000 * sizeof(unsigned int));
cudaFree(ptr);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
挂具:-lcudart -lnpp -lcufft -lcublas -lcusparse -lcurand运行时间:5.852449
链接:-lcudart -lnpp -lcufft -lcublas运行时间:1.425120
链接:-lcudart -lnpp -lcufft运行时间:0.905424
链接:-lcudart运行时间:0.394558
根据'gdb',时间确实进入了我的cudaMalloc,所以它不是由某些库初始化例程引起的.
我想知道是否有人对此有合理的解释?
我几乎完成了一个处理一些非常大的整数的算法(大约2的数量增加到100,000,000的功率).这需要在16核心服务器上使用几个小时的高度并行代码,并且内存足够,因为算法不是内存密集型的.我使用.NET 4中的BigInteger类.
算法的细节并不重要,但对于上下文,以下是对这些整数执行的操作的非常详尽的列表以及算法的一些显着特征:
我已经尽可能地优化了代码,现在分析只显示了两个瓶颈:
考虑到内存访问和日志操作,我开始考虑GPU以及是否可以有效地卸载一些工作.我对GPU知之甚少,只是它们针对浮点运算进行了优化.
我的问题是,使用像GPU .NET这样的库,如何在GPU上处理如此大的数字?我可以以某种方式利用浮点优化来计算如此大数的Log吗?
寻找形成战略的起点.
请原谅这个问题的广泛性.也许一旦我知道更多,也许我可以更具体地问.
我有性能敏感的tensorflow代码.从对gpu编程知之甚少的人的角度来看,我想知道哪些指南或策略是优化我的代码的"好开始".(单个gpu)
或许甚至可以读出每个张量流操作花了多长时间...
我有一个模糊的理解
可能还有其他常见因素在起作用,我不知道..
我是Ubuntu和GPU的新手,最近在我们的实验室中使用了带有Ubuntu 16.04和4个NVIDIA 1080ti GPU的新PC.该机器还配备了i7 16核心处理器.
我有一些基本问题:
为GPU安装了Tensorflow.那么我认为它会自动优先考虑GPU的使用情况?如果是这样,它是否一起使用全部4或者是否使用1然后在需要时再招募另一个?
我可以在模型训练期间实时监控GPU使用/活动吗?
我完全理解这是基本的硬件,但对这些具体问题的明确答案将是很好的.
编辑:
根据这个输出 - 这真的说我的每个GPU上的几乎所有内存都被使用了吗?