并行Pi的计算

主要考虑两种PI的计算方法 , 一种为积分法的用共享内存试的GPU实现, 另外一种为在面积估算MPI伪代码实现。

1.积分法求pi

// 计算PI 
// 算法:在[0,1]范围内积分 1/(1+x*x)


// 做积分,把每一个block中的和放入sum对应的下标中
__global__ void kernel1(float* sum, int num){
	int gid = blockIdx.x*blockDim.x+threadIdx.x;//线程索引
	
	float temp;
	extern float __shared__ pi[]; // 每一个block中的共享内存
	pi[threadIdx.x] = 0.0; // 初始化
	__syncthreads();

	// 计算积分 , 放入对应线程里
	while(gid < num){
		temp = (gid + 0.5f) / num;
		pi[threadIdx.x] += 4.0/(1 + temp*temp);
		gid += blockDim.x * gridDim.x
	}

	// 对每一个block归约求和
	for(int i=(blockDim.x>>1);i>0;i>>=1){
       if(threadIdx.x<i){
          pi[threadIdx.x] += pi[threadIdx.x+i];
       }
       __syncthreads();
    }
    if(threadIdx.x==0)
       sum[blockIdx.x]=s_pi[0];
    }
}

// 对sum在执行一次归约求和

__global__ void  kernel2(float *sum,int num,float *pi){
   int id&
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值