首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

PVM (Parallel Virtual Machine) 並行計算環境配置、程式設計與實戰完整指南

     編輯:關於C

PVM 簡介

PVM (Parallel Virtual Machine) 是用於網絡並行計算的軟體工具,將異構計算機網絡連接起來,如同一組分散式並行處理器。支援 C/Fortran,提供通訊原語實現任務間訊息傳遞、同步、動態緩衝區管理、進程組等功能,具備容錯、易安裝配置、免費開源等特點。

環境配置步驟 (Linux/Ubuntu)

1. 環境變數設定 (/etc/environment)

PVM_ROOT=/usr/lib/pvm3
PVM_ARCH=LINUX

2. 主機配置檔 ($PVM_ROOT/hostfile)

deepfuture-laptop
&deepfuture-javaeye
&deepfuture-lx lo=deepfuture
ep=/home/deepfuture/private/mytest/pvmtest/
  • & 前綴:不自動加入該主機
  • lo=:指定非登入 PVM 環境的使用者名稱
  • ep=:二進制程式目錄

3. .rhosts 信任名單

deepfuture-laptop

4. 啟動 PVM 守護程式

pvmd hostfile &   # 或直接 pvmd &

5. 程式預設目錄

$HOME/pvm3/bin/

6. PVM 控制台操作

pvm
pvm> quit

7. 執行程式

$ testpro
# 或在 pvm 控制台
pvm> spawn -> testpro

多機器叢集配置

/etc/hosts 設定

hostname1 10.30.13.58
hostname2 10.30.13.62

Shell 環境設定 (bash)

PVM_ROOT=/usr/share/pvm3
PVM_ARCH=LINUX
export PVM_ROOT PVM_ARCH

.rhosts 互信

pvm01 pvmgroup
pvm02 pvmgroup

PVM 控制台加入主機

pvm> add pvm01
1 successful
HOST DTID
pvm01 80000
pvm> halt

PVM 程式設計範例:主從模式字串大小寫轉換

主進程 testpvm1.c

#include "pvm3.h"
#include 

int main() {
    int RetCode, MessageId = 1;
    int PTid, Tid;
    char Message[100], Result[100];
    
    PTid = pvm_mytid();
    RetCode = pvm_spawn("testpvm2", NULL, PvmTaskHost, "deepfuture-laptop", 1, &Tid);
    
    if (RetCode == 1) {
        strcpy(Message, "deepfuture.iteye.com");
        pvm_initsend(PvmDataDefault);
        pvm_pkstr(Message);
        pvm_send(Tid, MessageId);
        pvm_recv(Tid, MessageId);
        pvm_upkstr(Result);
        printf("send:%s\nrecv:%s\n", Message, Result);
        pvm_exit();
        return 0;
    } else {
        printf("無法啟動子進程\n");
        pvm_exit();
        return 1;
    }
}

從進程 testpvm2.c

#include "pvm3.h"
#include 
#include 

int main() {
    int MessageId = 1;
    int PTid = pvm_parent();
    char Message[100], myc[100];
    int i = 0;
    
    pvm_recv(PTid, MessageId);
    pvm_upkstr(Message);
    
    while (Message[i] != '\0') {
        myc[i] = islower(Message[i]) ? toupper(Message[i]) : Message[i];
        i++;
    }
    myc[i] = '\0';
    
    pvm_initsend(PvmDataDefault);
    pvm_pkstr(myc);
    pvm_send(PTid, MessageId);
    pvm_exit();
    return 0;
}

Makefile

testpvm: testpvm1 testpvm2
	sudo cp testpvm1 /usr/lib/pvm3/bin/LINUX/
	sudo cp testpvm2 /usr/lib/pvm3/bin/LINUX/

testpvm1: gcc -o testpvm1 -lpvm3 testpvm1.c
testpvm2: gcc -o testpvm2 -lpvm3 testpvm2.c

clean:
	rm testpvm*
	sudo rm /usr/lib/pvm3/bin/LINUX/testpvm*

執行驗證

./testpvm1
testpvm1 get ptid.....
spawn testpvm2.....
send:deepfuture.iteye.com
recv:DEEPFUTURE.iteye.com

PVM 控制台執行同樣成功,展示跨進程訊息傳遞與資料處理流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved