mpich2 + windows 環境 DIY

來源:互聯網
上載者:User

現在又有必要用這個東東了,不僅僅是在叢集環境下,當前的CPU多核已相當普遍,你會問用mpich2會不會提高效率呢?

好的,我也想知道,從mpich2中的一個內建的pi計算程式(定積分的方法)看看在我的Intel Core(TM) 2 Duo CPU 上是否有效率提升。

 

好的,先找到mpich2的包,google一個mpich2,第一個就是,呵呵,說明很潮地http://www.mcs.anl.gov/research/projects/mpich2/

news & events

MPICH2-1.3.1 released (Nov. 17th, 2010)
A new release of MPICH2, 1.3.1, is now available to download. This is primarily a bug-fix release. A few new features have also been added including complete support for the FTB MPI events, improvements to RMA operations, and ability to modify collective algorithm selection thresholds using environment variables.

 

嗯,是最新穩定版,找了個win32的版本下載了。

安裝:

首先開啟附件,找到命令提示字元表徵圖,點右鍵,選擇以管理員身份運行(注意一定要在管理員權限下才行).

接著輸入命令msiexec去卸載或安裝mpich2包。

比如你剛才下載的 mpich2-1.2.1p1-win-ia32.msi   檔案放在e盤根目錄下,則

msiexec  /i  e:/mpich2-1.2.1p1-win-ia32.msi  這樣就可以完成管理員權限下的mpich2安裝,執行安裝過程中的,只需預設(路徑也不要改,這樣省心不少)下一步下一步,,直到完成。。

 

有心的可以注意到,smpd.exe這個進程(Process manager service for MPICH2 applications)出現在Windows工作管理員中了(win7的話,可能要選擇顯示所有的使用者進程才能看到它)。

 

接著開啟mpich2包中的example的檔案夾中找到icpi.c程式,如下(也可以複製以下程式儲存):

/* -*- Mode: C; c-basic-offset:4 ; -*- */
/*
 *  (C) 2001 by Argonne National Laboratory.
 *      See COPYRIGHT in top-level directory.
 */

/* This is an interactive version of cpi */
#include <mpi.h>
#include <stdio.h>
#include <math.h>
#pragma comment (lib, "mpi.lib")
double f(double);

double f(double a)
{
    return (4.0 / (1.0 + a*a));
}

int main(int argc,char *argv[])
{
    int done = 0, n, myid, numprocs, i;
    double PI25DT = 3.141592653589793238462643;
    double mypi, pi, h, sum, x;
    double startwtime = 0.0, endwtime;
    int  namelen;
    char processor_name[MPI_MAX_PROCESSOR_NAME];

    MPI_Init(&argc,&argv);
    MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
    MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    MPI_Get_processor_name(processor_name,&namelen);

   
    fprintf(stdout,"Process %d of %d is on %s/n",
     myid, numprocs, processor_name);
    fflush(stdout);
   

    while (!done) {
        if (myid == 0) {
            fprintf(stdout, "Enter the number of intervals: (0 quits) ");
     fflush(stdout);
            if (scanf("%d",&n) != 1) {
  fprintf( stdout, "No number entered; quitting/n" );
  n = 0;
     }
     startwtime = MPI_Wtime();
        }
        MPI_Bcast(&n, 1, MPI_INT, 0, MPI_COMM_WORLD);
        if (n == 0)
            done = 1;
        else {
            h   = 1.0 / (double) n;
            sum = 0.0;
            for (i = myid + 1; i <= n; i += numprocs) {
                x = h * ((double)i - 0.5);
                sum += f(x);
            }
            mypi = h * sum;
            MPI_Reduce(&mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD);

            if (myid == 0) {
                printf("pi is approximately %.16f, Error is %.16f/n",
                       pi, fabs(pi - PI25DT));
  endwtime = MPI_Wtime();
  printf("wall clock time = %f/n", endwtime-startwtime);       
  fflush( stdout );
     }
        }
    }
    MPI_Finalize();
    return 0;
}

編譯(實質是用vs系列的cl.exe編譯(很明顯可以交叉編譯組譯工具),所以可以用通用的vs IDE編譯環境,當然要把mpich2的包包含進來,我下面的只是對vc++6.0抽取了部分,也可以):

@echo off
set include=d:/Program Files/MPICH2/include;D:/vcPack/include;D:/vcPack/MFC/Include
set lib=d:/Program Files/MPICH2/lib;D:/vcPack/lib;D:/vcPack/MFC/lib
set path=d:/Program Files/MPICH2/bin;D:/vcPack/bin;%path%

 

echo ---------------=======By GoldenSpider 2010-11-27=======-------------------
echo on

cl   /c /o2  pi.c     

link /LIBPATH:"d:/Program Files/MPICH2/lib" pi.obj mpi.lib

del *.obj

pause

mpiexec -n 2 pi.exe

 

儲存為bat檔案運行。

需要注意的是,第一次運行,程式會叫你輸出使用者名稱和密碼(就是用開機的使用者名稱和密碼(有提示,很好懂的))

mpiexec -n 2 pi.exe  可實現多核運行,若直接開啟pi.exe則只有一個process,最好不要用多於核心數的命令

比如我的是雙核用mpiexec -n 2 pi.exe 較好,若為四核則mpiexec -n 4 pi.exe 較好,而mpiexec -n 8 pi.exe 不一定高效了。

 

運行效果如下:

雙Process並行如下(注意要在管理員權限下運行):

 

 

直接雙擊pi.exe,則是單Process運行,如下:

 

 

 

可以看出同一個程式用雙Process運行,用時有成倍的減少!!!!,不錯,呵呵..........

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.