现在越来越多的高性能并行计算将MPI与GPU结合起来:MPI的将任务并行分发,CUDA进行并行计算。大大提高了并行效率。然而我们知道在GPU上进行计算时常常出现数据重CPU到GPU或从GPU到CPU的拷贝过程,在数据量大的情况下这种拷贝过程往往会花费很多时间。因此英伟达公司实现了一种新的技术:CUDA-aware MPI。改技术实现了GPU缓存的直接访问,这样就很好地避免了在使用MPI+CUDA进行并行计算时数据拷贝花费的大量时间。
CUDA-aware MPI 具体介绍:https://devblogs.nvidia.com/parallelforall/introduction-cuda-aware-mpi/
以下是在搭建的一个环境及测试例子:
环境:Ubuntu 14.04.4系统,CUDA-7.5 ,OpenMPI2.0.0
CUDA环境安装可参考:http://blog.csdn.net/masa_fish/article/details/51882183
OpenMPI2.0.0下载地址:https://www.open-mpi.org/software/ompi/v2.x/
OpenMPI安装:下载OpenMPI2.0.0压缩包后
解压:tar zxvf openmpi-2.0.0rc.tar.gz
进入解压目录:cd openmpi-2.0.0rc
安装:$./configure --prefix=/usr/local/openmpi --with-cuda=/usr/local/cuda-7.5
$ make
$ make install
添加环境变量:$ vi ~/.bashrc
在末尾添加:export PATH="$PATH:/usr/local/openmpi/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/openmpi/lib/"
$sudo ldconfig
测试环境:$ ompi_info--parsable--all|grep mpi_built_with_cuda_support:value
输出: mca:mpi:base:param:mpi_built_with_cuda_support:value:true
测试例子test.cpp:
#include <stdio.h> #include <stdlib.h> #include <mpi.h> #include <time.h> #include <cuda_runtime.h> int main( int argc, char *argv[] ) { int rank,size; float *ptrA; float *hostptr , *hostptrB; int elements = 32; MPI_Status status; int i,j; clock_t starttime,endtime; starttime=clock(); MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size); hostptr=(float*)malloc( elements*sizeof(float) ); cudaMalloc( (void**)&ptrA, elements * sizeof(float) ); hostptrB=(float*)malloc( elements *sizeof(float) ); if( rank == 0 ) { for(i=0;i<elements;i++){ hostptr[i]=2.0f; } printf("d====%f\n",hostptr[5]); cudaMemcpy(ptrA,hostptr,elements*sizeof(float),cudaMemcpyHostToDevice); // ptrA=hostptr; MPI_Send( ptrA, elements, MPI_FLOAT, 1, 0, MPI_COMM_WORLD ); } if( rank == 1 ) { MPI_Recv( hostptrB, elements, MPI_FLOAT, 0, 0, MPI_COMM_WORLD, &status ); printf("data==%f\n",hostptrB[5]); endtime=clock(); printf("time===%f\n",(double)(endtime-starttime)/CLOCKS_PER_SEC); } cudaFree( ptrA ); free(hostptr); free(hostptrB); MPI_Finalize(); return 0; }
编译命令:mpicxx -I/usr/local/cuda-7.5/include -L/usr/local/cuda-7.5/lib64 test.cpp -o test -lcudart
运行命令:mpirun -np 2 ./test
运行结果:d====2.000000 data==2.000000 time===0.359201
参考文件: https://devblogs.nvidia.com/parallelforall/introduction-cuda-aware-mpi/
http://mirror.its.dal.ca/openmpi/faq/?category=runcuda#mpi-apis-cuda
http://bbs.gpuworld.cn/thread-10013-1-1.html
https://www.olcf.ornl.gov/tutorials/gpudirect-mpich-enabled-cuda/
http://on-demand.gputechconf.com/gtc-express/2011/videos/GPUDirectandUVA_webinar.mp4
相关推荐
CVPR 2022 Image Dehazing Transformer with Transmission-Aware 3D Position Embedding 源代码,很有学习价值,大佬任文琦团队的最新去雾杰作,从3D定位的角度去思考去雾。CVPR 2022 Image Dehazing Transformer ...
MPI CUDA编程.pdf WHAT YOU WILL LEARN ...What CUDA-aware MPI is What Multi Process Service is and how to use it How to use NVIDIA Tools in an MPI environment How to hide MPI communication times
Interest-aware Message-Passing GCN for Recommendat.md
2007年Shai Avidan 和Ariel Shamir论文《Seam Carving for Content-Aware Image Resizing》所提出方法的Matlab代码实现和作者的论文。 效果非常炫,而且代码不长
Ad-Aware SE Build 1.06r1是一款历史悠久且广受好评的反间谍软件,专注于清除电脑中的广告软件、间谍软件、恶意软件和其他潜在的不受欢迎的程序。这款特别版是免安装的绿色版本,意味着用户无需经过复杂的安装过程,...
《Context-Aware Saliency Detection在Matlab中的实现详解》 显著性检测是计算机视觉领域的一个重要课题,其目标在于识别图像中最具吸引力或最与众不同的区域,即图像的显著区域。Context-Aware Saliency Detection...
Relation-Aware Pedestrian Attribute Recognition with Graph Convolutional Networks
《Context-Aware Saliency Detection》是一篇关于计算机视觉领域的学术论文,主要研究的是目标检测技术,特别是如何利用上下文关系提升目标检测的准确性和鲁棒性。MATLAB作为强大的科学计算与图形处理软件,被该论文...
Group-Aware Long- and Short-Term Graph Representation Learning for Sequential Group Recommendation
《Context-aware Visual Tracking》是2009年发表在Pattern Analysis and Machine Intelligence (PAMI) 上的一篇重要论文,该文深入探讨了上下文感知在视觉跟踪中的应用。上下文感知(Context-aware)技术在计算机...
CUDA-aware MPI是一种对MPI库的扩展,它允许直接在GPU上发送和接收消息,这样可以减少主机内存的占用并减少主机到设备的数据传输时间。 NVIDIA的CUDA MPS可以为在同一个GPU上运行的多个CUDA应用程序提供服务。它...
毕业时的外文翻译原文 A Race-Aware Java Runtime
Processing for Android Create Mobile, Sensor-Aware, and VR Applications Using Processing 英文无水印原版pdf pdf所有页面使用FoxitReader、PDF-XChangeViewer、SumatraPDF和Firefox测试都可以打开 本资源...
【Position-aware Graph Neural Networks(P-GNN)】是2019年ICML会议上提出的一种新的图神经网络架构,旨在解决传统GNN在捕获节点在整体图结构中位置信息的局限性。P-GNN的核心思想是通过采样一组锚点节点,并计算...
Ad-aware是一款知名的杀毒反广告软件,其主要功能是保护用户的计算机系统免受病毒、间谍软件、广告软件、木马和其他恶意软件的侵害。它以其全面的安全防护和广告拦截能力而受到用户青睐,尽管其运行速度可能相对较慢...
藏经阁-Data-Aware Spark Data-Aware Spark 是一个分布式数据处理框架,旨在解决大规模数据处理中遇到的数据倾斜问题。该框架的设计目标是实现泛用型、engine-level 负载均衡和数据倾斜缓解。 Data-Aware Spark 的...
本文提出了一种名为“遮挡感知GAN”(Occlusion-Aware GAN, OA-GAN)的新方法,专门针对野生环境下的面部去遮挡问题。传统的面部去遮挡技术通常采用单阶段生成对抗网络(GAN),这种方法对遮挡类型不敏感,难以适应各种...
《Empower Sequence Labeling with Task-Aware Neural Language Model》是一篇探讨如何通过整合任务感知神经语言模型(Task-Aware Neural Language Model, TANLM)来增强序列标注性能的研究论文。该研究旨在解决传统...