Il s’agit d’un anneau de communication. Écrire un programme MPI où parmi n processus, le processus de rang r reçoit la valeur 1000 + (r − 1) du processus de rang r − 1, 1 ≤ r ≤ n − 1, et où le processus de rang 0 reçoit la valeur 1000 + (n − 1) du processus de rang n − 1

时间: 2023-11-28 11:50:04 浏览: 34
Voici un exemple de programme MPI en C qui implémente l'anneau de communication décrit dans votre question : ```c #include <mpi.h> #include <stdio.h> int main(int argc, char** argv) { int rank, size, value; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); if (rank == 0) { // Le processus 0 envoie la valeur 1000 + (n - 1) au processus 1 value = 1000 + size - 1; MPI_Send(&value, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); } for (int i = 1; i < size; i++) { if (rank == i) { // Le processus i reçoit la valeur du processus i - 1 MPI_Recv(&value, 1, MPI_INT, i - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); printf("Process %d received value %d from process %d\n", rank, value, i - 1); // Le processus i envoie la valeur 1000 + (i - 1) au processus i + 1 value = 1000 + i - 1; if (i < size - 1) { MPI_Send(&value, 1, MPI_INT, i + 1, 0, MPI_COMM_WORLD); } } } if (rank == 0) { // Le processus 0 reçoit la valeur du processus n - 1 MPI_Recv(&value, 1, MPI_INT, size - 1, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE); printf("Process %d received value %d from process %d\n", rank, value, size - 1); } MPI_Finalize(); return 0; } ``` Le programme commence par initialiser MPI et obtenir le rang de chaque processus et la taille du communicateur MPI_COMM_WORLD. Le processus 0 envoie la valeur 1000 + (n - 1) au processus 1 en utilisant MPI_Send. Ensuite, chaque processus i (1 <= i < n) reçoit la valeur du processus i - 1 avec MPI_Recv et envoie la valeur 1000 + (i - 1) au processus i + 1 en utilisant MPI_Send (sauf pour le dernier processus, qui ne peut pas envoyer de valeur). Finalement, le processus 0 reçoit la valeur du dernier processus en utilisant MPI_Recv et affiche les valeurs reçues. Notez que ce programme suppose que le nombre de processus est supérieur à 1. Si n = 1, il ne se passera rien.

相关推荐

最新推荐

recommend-type

解决fatal:remote error:You can't push to git://github.com/username/*.git问题的办法

主要介绍了解决fatal:remote error:You can't push to git://github.com/username/*.git问题的办法的相关资料,需要的朋友可以参考下
recommend-type

git项目管理运维手册.docx

该资源是公司内部的项目管理运维手册,公司名称已隐藏,是学员去的第一家公司自己做的手册。这也是售前运维需要做的工作之一。
recommend-type

IDEA使用git提交代码至码云.docx

把自己在IDEA上使用git的心得整理成了笔记,以目录结构和图文形式展示,内容上我都做了注释的应该好理解,本来打算只自己看看的,后来想想还是分享出来吧,要是里面有什么不对的地方,欢迎给我留言指正
recommend-type

Git项目管理规范.docx

1.git项目管理规范 2.为了方便git管理,特制定规范 3.共享互助学习 4.凑齐50个字儿,应该足够了
recommend-type

XXX软件git发布管理流程规范V1.1(简化).doc

1.0太复杂不使用小团队。改版XXX软件git发布管理流程规范V1.1(简化).doc
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用 Python 画一个可以动的爱心

好的,我可以帮助您使用Python来绘制一个动态的爱心。您可以使用turtle库来实现。以下是实现代码: ```python import turtle import math # 设置画布和画笔 canvas = turtle.Screen() canvas.bgcolor("black") pencil = turtle.Turtle() pencil.speed(0) pencil.color("red", "pink") pencil.pensize(3) # 定义爱心函数 def draw_love(heart_size, x_offset=0, y_offset=0):
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。