Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Thust OMP在CPU上并行蒙特卡罗

使用Thust OMP在CPU上并行蒙特卡罗
EN

Stack Overflow用户
提问于 2014-08-14 12:21:57
回答 1查看 202关注 0票数 0

目标是使用thrust::omp并行化蒙特卡罗过程。

代码语言:javascript
运行
AI代码解释
复制
int main()
{
  unsigned Nsimulations = 1000;
  // construct some objects here that will be required for Monte Carlo
  A a;
  B b;
  C c;

  /*
   * use thrust::omp to run the simulation Nsimulation times
   * and write a custom reduction function (a sum for objects of type R)
   */
}

// this is the Monte Carlo function - it needs the global variables a, b, c
// passed by reference because they are very large; the return type is R
R monteCarlo(A& a, B& b, C& c)
{
   // something supercomplicated here
   return r;
}

我需要知道:

  1. 如果/如何访问全局变量a,b,c(此处只读取不存在竞争条件问题)
  2. 如何设置线程的数量(N模拟是数以千计的,也许更多,所以我不想为此过度杀戮。
  3. 我希望运行monteCarlo函数,n模拟时间,并可能将它们存储在一个向量中,并最终将其存储在推力缩减或串行缩减中,因为这不是耗时的部分。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-14 12:41:45

正如我在你之前的问题中说过的,为了回答这样的问题,您必须使用学习更多关于推力的知识,这样的问题对您有任何意义。

你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
thrust::generate(...);

生成你的初始随机数。这里的向量的长度是你想要的模拟次数。

你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
thrust::for_each(...);

将先前生成的随机数向量作为输入传递,可能使用结果向量压缩。每次操作将使用自定义函子对输入向量中的每个随机数元素单独调用monteCarlo例程。每个输入元素的monteCarlo例程的输出将位于结果向量中的相应位置。A,B,C全局值中的参数/数据可以作为初始化参数传递给for_each使用的函子。

你可以这样做:

代码语言:javascript
运行
AI代码解释
复制
thrust::reduce(...);

在以前生成的结果向量上,创建最终的约简。

我不会关心你想要做的模拟到OMP线程的映射。推力将处理这一点,就像#pragma omp parallel for在OMP情况下处理它一样。

下面是一个充分发挥作用的例子:

代码语言:javascript
运行
AI代码解释
复制
$ cat t536.cpp
#include <iostream>
#include <stdlib.h>
#include <thrust/system/omp/execution_policy.h>
#include <thrust/system/omp/vector.h>
#include <thrust/reduce.h>
#include <thrust/for_each.h>
#include <thrust/iterator/zip_iterator.h>


struct A {
  unsigned a;
};

struct B {

  int b;
};

struct C {

  float c;
};

A a;
B b;
C c;

float monteCarlo(int rn){

  return ((rn % a.a)+ b.b)/c.c;
}

struct my_functor
{
  template <typename Tuple>
  void operator()(const Tuple &data) const{

    thrust::get<1>(data) = monteCarlo(thrust::get<0>(data));
   }
};


int main(int argc, char *argv[]){
  a.a = 10;
  b.b = 2;
  c.c = 4.5f;
  unsigned N = 10;
  if (argc > 1) N = atoi(argv[1]);
  thrust::omp::vector<unsigned> rands(N);
  thrust::omp::vector<float> result(N);
  thrust::generate(thrust::omp::par, rands.begin(), rands.end(), rand);
  thrust::for_each(thrust::omp::par, thrust::make_zip_iterator(thrust::make_tuple(rands.begin(), result.begin())), thrust::make_zip_iterator(thrust::make_tuple(rands.end(), result.end())), my_functor());
  float answer = thrust::reduce(thrust::omp::par, result.begin(), result.end());
  std::cout << answer << std::endl;
  return 0;
}
$ g++ -O2 -I/usr/local/cuda/include -o t536 t536.cpp -fopenmp -lgomp
$ ./t536 10
14.8889
$

(对于a,b,c的这些选择,当N变大时,答案应该在1.444*N的数据类型限制内收敛)

正如@JaredHoberock在前面的问题中提到的那样,主旨monte实例可能会引起人们的兴趣。它演示了操作的“融合”,以便将类似的活动简化为单个推力调用。上述程序可能也可以简化为一个单一的推力调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25316924

复制
相关文章
蒙特卡罗计算积分
通常情况下,我们不能解析地求解积分,必须借助其他方法,其中就包括蒙特卡罗积分。你可能还记得,函数的积分可以解释为函数曲线下的面积。
磐创AI
2020/11/09
7800
蒙特卡罗计算积分
蒙特卡罗方法入门
蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。
统计学家
2019/04/23
4990
蒙特卡罗方法入门
蒙特卡罗方法入门
本文通过五个例子,介绍蒙特卡罗方法(Monte Carlo Method)。 一、概述 蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。 它非常强大和灵活,又
ruanyf
2018/04/13
9700
蒙特卡罗方法入门
MCMC(一)蒙特卡罗方法
    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础。比如我们前面讲到的分解机(Factorization Machines)推荐算法,还有前面讲到的受限玻尔兹曼机(RBM)原理总结,都用到了MCMC来做一些复杂运算的近似求解。下面我们就对MCMC的原理做一个总结。
刘建平Pinard
2018/08/14
1K0
MCMC(一)蒙特卡罗方法
蒙特卡罗方法计算定积分
0.0 (2.666666666666667, 2.960594732333751e-14)
裴来凡
2022/05/29
3360
蒙特卡罗方法计算定积分
MCMC之蒙特卡罗方法
马尔可夫链蒙克卡罗(Markov Chain Monte Carlo,MCMC)是一种随机采样方法,在机器学习、深度学习及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础,例如受限玻尔兹曼机(RBM)便是用MCMC来做一些复杂算法的近似求解。在具体讲解什么是MCMC之前,我们先看看MCMC可以解决什么样的问题,为什么需要MCMC方法。
小一
2019/08/14
7290
MCMC之蒙特卡罗方法
随机采样方法——蒙特卡罗方法
地址:http://www.cnblogs.com/pinard/p/6625739.html
机器学习算法工程师
2018/08/17
2.8K0
随机采样方法——蒙特卡罗方法
蒙特卡罗方法计算圆周率
N= 100 pi= 3.24 N= 1000 pi= 3.124 N= 10000 pi= 3.1464 N= 100000 pi= 3.14244 N= 1000000 pi= 3.142796
裴来凡
2022/05/29
5990
蒙特卡罗方法计算圆周率
时间序列的蒙特卡罗交叉验证
交叉验证应用于时间序列需要注意是要防止泄漏和获得可靠的性能估计本文将介绍蒙特卡洛交叉验证。这是一种流行的TimeSeriesSplits方法的替代方法。
deephub
2023/02/01
1.2K0
如何通过Python实现蒙特卡罗模拟算法
蒙特卡罗(Monte Carlo)方法,又称随机抽样或统计试验方法,是通过使用随机数(或更常见的伪随机数)来解决很多计算问题的方法,将所求解的问题同一定的概率模型相联系,用计算机实现统计模拟或抽样,以获得问题的近似解。
活用数据
2022/04/02
3K0
如何通过Python实现蒙特卡罗模拟算法
伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
分享一道由群员“Melbourne”,外号 “Paper Machine”,有数学小王子之称的小伙伴分享的题目!
程序员小浩
2020/03/30
2.1K0
伪蒙特卡洛(Quasi-Monte Carlo, QMC)随机
点云蒙特卡罗卷积网络Monte Carlo Convolution
标题:Monte Carlo Convolution for Learning on Non-Uniformly Sampled Point Clouds
点云乐课堂
2020/05/18
1.1K0
误码率仿真,蒙特卡罗方法,置信度
误码率是通信系统性能评价的一个重要指标,在给定信道、编译码方式下,误码率是一个固定取值。少部分情况下,可以通过理论推导得到理论的误码率,但是在大多数情况下,理论误码率无法推得,这时往往考虑采用蒙特卡罗方法对误码率进行仿真。(误比特率、误码率同理)
sea-wind
2019/07/31
2K0
误码率仿真,蒙特卡罗方法,置信度
六西格玛与商业分析:蒙特卡罗模拟
做生意就是要承担风险。无论您是决定成为企业家、开设新办公室还是投资一家公司,您都在承担风险。那么,如何准确预测下一个商业决策的风险呢?六西格玛是您首选。凭借数据分析的基础,六西格玛被证明是组织运营的绝佳工具。这就是为什么六西格玛专业人员使用蒙特卡洛模拟解决问题和风险评估需求的原因!
用户9972271
2023/02/15
2880
蒙特卡罗法近似求解圆周率π
1. 原理 2. 模拟代码 # -*- coding:utf-8 -*- # @Python Version: 3.7 # @Time: 2020/5/2 9:02 # @Author: Michae
Michael阿明
2020/07/13
4790
蒙特卡罗法近似求解圆周率π
Python使用pycuda在GPU上并行处理批量判断素数
借助于扩展库pycuda,可以在Python中访问NVIDIA显卡提供的CUDA并行计算API,使用非常方便。安装pycuda时要求已正确安装合适版本的CUDA和Visual Studio(注意,并不是版本越新越合适,目前2015暂时还不行,最好使用VS2013),然后再使用pip安装pycuda。 下面的代码用来统计100000000之内的所有素数个数。 import time import pycuda.autoinit import pycuda.driver as drv import numpy
Python小屋屋主
2018/04/16
2.1K0
Python使用pyopencl在GPU上并行处理批量判断素数
扩展库pyopencl使得可以在Python中调用OpenCL的并行计算API。OpenCL(Open Computing Language)是跨平台的并行编程标准,可以运行在个人电脑、服务器、移动终端以及嵌入式系统等多种平台,既可以运行在CPU上又可以运行于GPU上,大幅度提高了各类应用中的数据处理速度,包括游戏、娱乐、医学软件以及科学计算等等。 import numpy as np import pyopencl as cl import pyopencl.array from pyopencl.ele
Python小屋屋主
2018/04/16
1.9K0
强化学习(四)用蒙特卡罗法(MC)求解
    在强化学习(三)用动态规划(DP)求解中,我们讨论了用动态规划来求解强化学习预测问题和控制问题的方法。但是由于动态规划法需要在每一次回溯更新某一个状态的价值时,回溯到该状态的所有可能的后续状态。导致对于复杂问题计算量很大。同时很多时候,我们连环境的状态转化模型$P$都无法知道,这时动态规划法根本没法使用。这时候我们如何求解强化学习问题呢?本文要讨论的蒙特卡罗(Monte-Calo, MC)就是一种可行的方法。
刘建平Pinard
2018/08/30
8590
强化学习(四)用蒙特卡罗法(MC)求解
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
Steve Wang
2019/10/22
6920
Monte Carlo(MC) Policy Evaluation 蒙特·卡罗尔策略评估
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?
这只是众多算法之一。这个术语代表“马尔可夫链蒙特卡洛”,因为它是一种使用“马尔可夫链”(我们将在后面讨论)的“蒙特卡罗”(即随机)方法。MCMC只是蒙特卡洛方法的一种,尽管可以将许多其他常用方法看作是MCMC的简单特例。
拓端
2021/12/15
1.3K0
如何实现马尔可夫链蒙特卡罗MCMC模型、Metropolis算法?

相似问题

并行蒙特卡罗树搜索

10

蒙特卡罗-π近似的并行化

12

如何使用pthread并行化π的蒙特卡罗估计?

20

使用并行工具箱实现GPU上的简单蒙特卡罗

11

与QuTiP并行的蒙特卡罗求解器

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文