MPI实例之中值滤波

本文通过一个具体的实例,使用MPI进行中值滤波操作,探讨了MPI在数据并行处理中的应用。介绍了如何安装GDAL库,并讨论了在MPI环境下如何编译和执行程序,以及优化通信效率的可能性。实验结果显示,通过增加进程数量可以有效提高算法执行速度,但需注意数据传输的时间成本。最后,作者提到MPI编程的核心在于合理设计进程间的通信策略,以提高并行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

距上次更新MPI系列博客4个多月,该段时间甚少接触MPI。最近指导师弟进行毕设实验时再次用到,因此还是有必要记录下学习MPI的过程。我上篇博客(MPI集群环境搭建)已经详细介绍了MPI集群搭建的详细流程,当时是在VMware下创建了两个Ubuntu14.04虚拟机,后来我基于实验室OpenStack(关于OpenStack的搭建,后续有时间的话我会另作介绍)平台新建了两个Ubuntu16.04节点,搭建过程基本一致。节点参数如下:
节点参数


博客概要

本文直接结合具体实例(对tiff影像进行中值滤波)来学习MPI通信函数和并行策略(该实例采用数据并行,任务并行的话后面有机会再介绍)。算法流程如下(MPI是进程级的,下面所说的节点即一个个进程):
这里写图片描述


安装GDAL

GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库,本文用它来读取影像。
1.apt-get命令安装:

sudo apt-get install libgdal-dev

2.源码安装(为了后期配置更合理,推荐该方式。我一般都是采用该种安装方式)
下载源文件(GDAL),然后解压(tar -zxvf gdal-2.2.2.tar.gz

./configure
make
make install

可以指定安装路径,那样的话记得配置环境变量(Linux下源码安装,建议直接参考官网)
我们知道mpi执行时必须保证每个节点都有相同的执行程序,每个节点(进程)执行什么都在程序中写好了。如果只有主节点需要用到GDAL的话是不是其他节点就不用安装GDAL了?我在每个节点都安装了GDAL,所以这个我没有进行试验,我的想法是其他节点是不用安装GDAL的(这段完全在自言自语)


代码实现

#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, start1, stop1;//使用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 *outPath = "/home/ubuntu/data/gdal_out.tiff";//输出路径
    int nImgSizeX, nImgSizeY, bandcount;
    int rank, size;
    int interval;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值