MPI4執行緒輸出hellowrold

2021-10-08 02:13:56 字數 2152 閱讀 4053

首先從helloworld入手,先建立資料夾

touch hellowrld.c後面的.c是字尾,c++語言字尾就.cpp。shell就是.sh python 就是.py都是一樣的。

sudo vim hellow.c編譯helloworld.c檔案

用的mpi進行並行程式設計,所以要引入標頭檔案

#include "mpi.h" 

裡面的函式mpi_init(&argc , &ar**);

這個函式就是單純的初始化函式,讓伺服器知道做好mpi的相關初始化。傳入的argc和ar**指向main函式的命令列引數argc,ar**的指標,這裡看main函式是

void main (int argc ,char *ar**)如果沒有命名行引數,也可以輸入null

知道個概念mpi_comm_world:通訊子,「一組可以互發訊息的程序集合」

mpi_comm_rank(mpi_comm_world, &procnum);第乙個引數是輸入引數--通訊子,第二個引數是輸出引數--程序號。

mpi_comm_size(mpi_comm_world, &numprocs);

同意第乙個引數是輸入引數--通訊子,第二個引數是輸出引數--通訊子中總程序數。

mpi_get_processor_name(pro_name,&namelen);得到當前程序的名字

主程式:

void main_(int argc,char *ar**){

mpi_init(&argc,&ar**);

//初始化函式,變數指向主函式裡面的命令列引數

int procnum;

mpi_comm_rank(mpi_comm_world, &procnum);

//得到當前程序的秩

int numprocs;

mpi_comm_size(mpi_comm_world,&numproces);

//呼叫這個方法可以得到所有可以工作的程序數量

int namelen;

char pro_name[mpi_max_processor_name]

mpi_get_processor_name(pro_name,&nalelen);

//得到當前程序的名字

printf("hellow world! %d of %d on %s\n",procnum,numprocs,pro_name);

列印hello world 並且列印當前程序的秩  總程序數  程序的名字;

mpi_finalize();

//釋放mpi的一些資源

搭建乙個mpi程式的第一步是引入#include這個標頭檔案。然後mpi環境必須以以下**來初始化:

mpi_init(int *argc,char*** ar**);

在這個過程中,所有mpi的全域性變數或者內部變數都會被建立。舉例來說,乙個通訊器communicator會根據所有可用的程序被建立出來(程序是我們通過mpi執行時的引數指定的),然後每個程序都會被分配獨一無二的秩rank  當前來說mpi_init 接受的兩個引數是沒有用處的,不過引數的位置保留著,可能以後的實現會需要用到。

在mpi_init 之後有兩個主要的函式被呼叫到了。這兩個函式幾乎所有的mpi程式都會用到。

mpi_comm_size(mpi_comm communicator,int *size)

mpi_comm_size 會返回communicator 的大小,也就是communicator中可用的程序數量。在我們的例子中。mpi_comm_world(這個communicator是mpi幫我們生成的)這個變數包含了當前mpi任務中所有的程序,因此我們的**裡的這個呼叫會返回所有可用的程序數目。因此在我們的**裡的這個呼叫會返回所有的可用的程序數目。

mpi_comm_rank(mpi_comm communicator,int *rank)

mpi_comm_rank這個函式會返回communicator 中當前程序的rank 。 communicator 中每個程序會以此得到乙個從0開始遞增的數字為rank值。rank值主要是用來指定傳送或接受資訊時對應的程序。

mpi_get_processor_name(char *name , int *name_length) 會得到當前程序實際跑的時候所在的處理器的名字。

**中最後乙個呼叫是mpi_finalize()是用來清理mpi環境的,這個呼叫之後就沒有mpi函式可以呼叫

mpi學習日誌 2 mpi4py與點對點通訊

前文說到,mpi是資訊傳遞介面,因此資訊傳遞是mpi的重點.而程序中的資訊傳遞就是程序通訊 今天我們將看看mpi建立的一組程序是怎麼相互通訊的.程序通訊有許多種,點對點通訊,廣播,散播等.今天我們先學習點對點通訊.什麼是點對點通訊?其實就是最簡單的程序a向程序b傳送資訊,而程序b向程序a接收資訊.這...

mpi學習日誌 13 mpi4py與非阻塞型函式

繼續填坑.前面第二篇也說過,很多函式有分阻塞型版本和非阻塞型版本,非阻塞型版本的名字比阻塞型的名字多乙個i字首.那麼,非阻塞型函式又是怎麼回事?我們知道,點對點通訊裡的recv函式是乙個阻塞函式,也就是接收方要等傳送方傳送了資訊,函式才能返回.那麼對應的,非阻塞型函式就是,不管傳送方是否傳送了資訊,...

mpi學習日誌 5 mpi4py與多點通訊續

在多點通訊裡我們已經學習了廣播bcast,散播scatter,收集gather,規約reduce.今天我們再來簡略看一些可能更為少用的多點通訊.簡單來說就是收集 廣播.gather中只有根程序會得到收集到的資訊,而allgather則是所有程序都會得到收集到的資訊,就相當於收集後再廣播一次.redu...