MPI实例之中值滤波二

前言前段时间写了“MPI实例之中值滤波”,当时测试出来的结果显示并行时间是超过串行时间的,这是因为程序在进程通信上花费太多时间。后来我将点对点通信修改为集合通信,通信时间大大减少。代码修改后的代码如下:#include <gdal_priv.h> #include <iostream>#include "mpi.h"using namespac...
摘要由CSDN通过智能技术生成

前言

前段时间写了“MPI实例之中值滤波”,当时测试出来的结果显示并行时间是超过串行时间的,这是因为程序在进程通信上花费太多时间。后来我将点对点通信修改为集合通信,通信时间大大减少。


代码

修改后的代码如下:

#include <gdal_priv.h>  
#include <iostream>
#include "mpi.h"

using namespace std;

void _medianfilter(const unsigned char* image, unsigned char* result, int width, int height);//中值滤波


int main(int argc, char *argv[])
{
    time_t start, stop;//使用time_t函数计时
    start = time(NULL);
    MPI_Status status;
    const char *inPath = "/home/ubuntu/data/GF1_WFV3_E115.7_N28.9_20170729_L1A0002514125.tiff";//原始影像路径
    //const char *inPath = "/home/ubuntu/data/1.bmp";
    //const char *outPath = "/home/ubuntu/data/2.bmp";
    const char *outPath = "/home/ubuntu/data/gdal_out.tiff";//输出路径
    int nImgSizeX, nImgSizeY, bandcount;
    int rank, size;
    int interval;//每个进程分到的影像高度,该程序直接按影像高度分块
    int i, j;
    //开辟内存  
    unsigned char **pImgData;//主节点存储影像数据
    pImgData = NULL;
    unsigned char **data;//各节点存放数据
    data = NULL;
    unsigned char **result;//各节点存储结果数据
    result = NULL;
    unsigned char **final_data;
    final_data = NULL;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);//rank是进程号
    MPI_Comm_size(MPI_COMM_WORLD, &size);//size是执行程序时使用的进程数
    if (!rank) {
  //主进程(这里是0号进程)
        //打开图像  
        GDALDataset *poDataset;
        GDALAllRegister();
        poDataset = (GDALDat
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值