1. 程式人生 > >【MPI程式設計】MPI_Bcast廣播講解和使用

【MPI程式設計】MPI_Bcast廣播講解和使用

函式正規化

int MPI_Bcast(
	void * data_p;
	int count;
	MPI_Datatype datatype;
	int source_proc;
	MPI_Comm comm;
);

例項

  • 功能描述: 下面實現了0件程序讀取資料,並廣播給所有其他執行緒。

  • 注意,跟其他集合通訊函式類似,每個函式的內容都是一樣的。

  • 還有,關於非0的程序,需要單獨申請空間的。 我一開始以為不需要,所以還想看看是不是同一空間,所以加了那個輸出指標的部分。

  • 只有一個執行緒不操作,是我想通過vs來生成可執行檔案,這樣我就只需要加了個只有一個執行緒的時候不操作。

#include<stdio.h>
#include<string.h>
#include<mpi.h>
#pragma warning(disable : 4996)
#define MAX_STRING 100
using namespace std;
#include <fstream>
#include <iostream>

int main(void) {
	int comm_sz;
	int my_rank;
	MPI_Init(NULL, NULL);
	MPI_Comm_size(MPI_COMM_WORLD,
&comm_sz); MPI_Comm_rank(MPI_COMM_WORLD, &my_rank); // 只有一個執行緒的時候不操作 if (comm_sz <= 1) { MPI_Finalize(); return 0; } ifstream cin("D:\\C++\\VS\\repo\\MPI-DEMO\\MPI-DEMO\\input.txt"); int N = 0; double *a=NULL; if (my_rank == 0) { cin >> N; a = new double[N]; for (
int i = 0; i < N; ++i) { cin >> a[i]; } } MPI_Bcast(&N, 1, MPI_INT, 0, MPI_COMM_WORLD); if (my_rank != 0) { a = new double[N]; } MPI_Bcast(a, N, MPI_DOUBLE, 0, MPI_COMM_WORLD); cout << my_rank << endl; for (int i = 0; i < N; ++i) { cout << a[i] << " "; }cout << endl; cout <<"ADDR: "<< a << endl; delete[] a; MPI_Finalize(); return 0; }