2009年6月7日星期日

在Visual Studio下以并行方式运行mpi程序

在项目属性对话框,
调试中,
命令项改为mpiexec.exe
命令参数改为-n [进程数] $(TargetPath)
mpich version: mpich2 32位 for windows
--
snigoal,HUST,Wuhan,China
 

2009年6月6日星期六

MPICH2/include/mpicxx.h(26): fatal error C1189: #error : "SEEK_SET is #defined but must not be for the C++ binding of MPI"

The error-

c:/Program Files/MPICH2/include/mpicxx.h(26): fatal error C1189: #error : "SEEK_SET is #defined but must not be for the C++ binding of MPI"

compiling your MPI application occurs because of MPI - 2 bug. This is because of SET_SEE which is defined in both mpi.h and stdio.h. The work around is to add

-DMPICH_IGNORE_CXX_SEEK

to a command line. This can be done by following the path : project properties - C/C++ - Command Line;

--
snigoal,HUST,Wuhan,China

all MPI v2.0 functions documents

http://mpi.deino.net/mpi_functions/index.htm

--
snigoal,HUST,Wuhan,China

2009年5月20日星期三

卡巴斯基在 Windows Server 2003 中的安装方案

该方案可以再Windows Server 2003上安装卡巴斯基2009(是kav,不是kis)

卡巴斯基2009的.msi文件修改方法:
首先,下载一个名叫"Orca"的软件,用这个软件打开卡巴斯基的.msi安装文件(该类型文件的获得方法见下文);
找到"LaunchCondition"表中的"MsiNTProductType=1 or Version9X",将其删除;
然后,按 Ctrl+F ,查找"MsiNTProductType=1",把找到的这个字串全部改为"MsiNTProductType>=1" 即可。
注意,其中共有四处,"InstallExecuteSequence" 三处,"LaunchCondition" 一处。

卡巴斯基2009的.msi文件获得方法:
在Windows Server 2003下运行卡巴斯基2009的安装文件,提示"无法安装应用程序,不支持当前的操作系统"。注意!!!别按"确定"。
Windows Server 2003得安装分区,进入"Documents and Settings "-"Administrator"(current user directory)-"Local Settings"-"temp"文件夹下找到一个.msi文件。(文件名不确定,双击找到的.msi文件看出现的的窗口是不是卡巴斯基)
将.msi文件复制出来,就得到了.msi文件。

出处:

最后:
卡巴斯基的授权文件可以到卡巴动力http://kabapower.cn/找。
-- 
snigoal,HUST,Wuhan,China

2009年5月9日星期六

ubuntu下java的安装

前辈的文章,不知道出处。

方法一:


首先我明确一下我的环境:
我是通过虚拟机安装的,宿主环境是windows xp sp3.
虚拟机是 virtualbox 1.6中文版
客户机是Ubuntu8.04
安装jdk
开始时我想下载那个.bin的jdk安装包,但又查到Ubuntu8.04上面有更好的安装方式如下:
sudo apt-get install sun-java6-jdk
如果你只想安装JAVA运行环境就用下面的指令
sudo apt-get iinstall sun-java6-jre
注意这两个命令会要求你管理员的权限。
我在安装的过程中并没有发现什么怪异的情况,有一个需要说明的是在安装过程中会弹出来个JDK的简介画面,在画面下部有一个确定按钮,一定要用TAB键选中然后按回车键,继续在旨出的"YES/NO"选项中依旧用TAB中选择确定后按回画。为了这个让我白等了好长时间,开始我以为是系统在后台执行,没想到是让我响应。看来LINUX的用户友好性还是差一些啊。
说明一下,apt-get的方式是在线下载的方式,如果你没有连接网络请不要用这种方式安装。我在安装的过程中中断退出过,后来重新执行后系统会从中断的地方继续安装,这一点非常好。
过几天我会介绍如何安装NetBens6.1中文版。

方法二:

以前在linux下使用jdk是在redhat下.还从来没有在debian系下安装过.
这个系安装比较特别.
于是开始动手.
动因是因为我在windows下死活不能下载的freemind在ubuntu上面竟然轻易就打开sf.net站点并且下载这个java开发的思维导图软件.使用这个软件就必须安装jdk或者jre.因为要用java感谢别的事情,所以还是安装jdk.
1.安装java-package
    本来在完善找到很多安装方法,但是必需要java-package这个软件,我的sources.list是默认的,没有被修改.
    直接 apt-get install java-package,竟然提示java-package不存在,难道是sources的原因,于是修改/etc/apt/sources.list
    添加国内的一个镜像站点 debian.cn99.com/ubuntu,接着更新源
    apt-get update
    提示的中文,我看得懂,说我的debian.cn99.com被忽略.那就别说了,
    apt-get install java-package肯定是失败的.
    后来才发现有的文章已经介绍在哪里获取java-package软件.地址是:
    deb http://gb.archive.ubuntu.com/ubuntu/ dapper main restricted
    deb http://gb.archive.ubuntu.com/ubuntu/ dapper universe multiverse
    使用方法:
    su命令到root下.
    sudo gedit /etc/apt/sources.list
    把上面的两个地址张贴到最后.
    然后运行
    apt-get update 更新源.
    然后就是安装java-package咯.
    apt-get install java-package
2.安装jdk,其实这个过程很简单的.就是花一点时间.到http://java.sun.com/javase/downloads/index.jsp下载最新版本的JDK,
    目前的版本号是JDK 5.0 Update 10。选择Linux self-extracting file(注意,不是RPM!是以bin结尾的自解压文件)
    将jdk-1_5_0_10-linux-i586.bin下载到本地。
    在命令行下进入该文件所在的目录,用如下命令制作适用于Ubuntu的安装文件:
    fakeroot make-jpkg jdk-1_5_0_10-linux-i586.bin
    如果你没有fakeroot这个软件,直接apt-get fakeroot安装就可以了.但是没有java-package
    就会提示make-jpkg无效.
在这个过程中你会看到屏幕上出现许多错误提示,这些都没有关系。回答几次yes之后,安
    装文件就制作完成了。这个文件的文件名是sun-j2sdk1.5_1.5.0+update10_i386.deb。
    通过如下命令将这个软件包安装到Ubuntu上:
    sudo dpkg -i sun-j2sdk1.5_1.5.0+update10_i386.deb

    在命令行下运行java -version,可以发现最新版本的JDK已经被成功地安装在你的系统上了。
    不过,如
    果运行java,发现使用的还是Ubuntu缺省安装的gcj虚拟机。进入/etc/alternatives
    目录,运行如下命令:
  
    rm java
    ln -s /usr/lib/j2sdk1.5-sun/bin/java java
  
    再次运行java命令,就会发现使用的是刚刚安装完成的Sun 公司的虚拟机了。
  
    如果想每次登录就有java环境,你还得设置一下
$ sudo gedit /etc/profile 在文件最后添加

#set java environment

JAVA_HOME=/opt/jdk1.6.0_01(jdk的安装路径)

export JRE_HOME=/opt/jdk1.6.0_01/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
    (java环境变量的配置原文件好像有点问题,我改过来了,已经验证)


安装方法三

不要骂我,为什么把简单的方法放在后面,使用命令来安装有助于对ubuntu的熟悉和了解.最起码的软件安装会有个概念.
这个方法特别简单,是在ubuntu的一个台湾wiki上看到的,安装方法比windows下的软件安装一样简单.
具体方法:
点击桌面的"应用程序"->"添加/删除..."
然后再搜索里面输入"java",回车,就可以看到java相关的软件了,
这个时候你可以选择jdk或者jre来安装(选中复选框).然后点击"确定",开始安装.
安装结束你的java环境就已经搭建好了.
就这么简单.嘿嘿..以前在linux下使用jdk是在redhat下.还从来没有在debian系下安装过.
这个系安装比较特别.
于是开始动手.
动因是因为我在windows下死活不能下载的freemind在ubuntu上面竟然轻易就打开sf.net站点并且下载这个java开发的思维导图软件.使用这个软件就必须安装jdk或者jre.因为要用java感谢别的事情,所以还是安装jdk.(这个方法我没试,有兴趣的朋友可以试一下)

--
snigoal,HUST,Wuhan,China

2009年5月6日星期三

用MPI_Pack()打包C语言的struct


C 结构

考虑一个图像的应用,它传送8位彩色象素的固定长度扫描线。与象素矩阵一起是扫描线数,一个整数。可以在C中将消息描述成一个结构:

    struct {
        int             lineno;
        char            pixels[1024];
    } scanline;
除了导出类型,对于发送不连续和/或者异构数据消息打包是一个有用的方法。下面列出包装和发送上面结构的代码段:

#include <mpi.h>

{
    unsigned int        membersize, maxsize;
    int                 position;
    int                 dest, tag;
    char                *buffer;
/*
 * Do this once.
 */
    MPI_Pack_size(1,            /* 一个元素 */
            MPI_INT,            /* 数据类型是整数 */
            MPI_COMM_WORLD,     /* 一致的 comm. */
            &membersize);       /* 最大包装空间 req'd */

    maxsize = membersize;
    MPI_Pack_size(1024, MPI_CHAR, MPI_COMM_WORLD, &membersize);
    maxsize += membersize;
    buffer = malloc(maxsize);
/*
 * 为每一新消息做此。
 */
    position = 0;

    MPI_Pack(&scanline.lineno,  /* 包装此元素 */
            1,                  /* 一个元素 */
            MPI_INT,            /* 数据类型 int */
            buffer,             /* 打包缓冲区 */
            maxsize,            /* 缓冲区大小 */
            &position,          /* 下一可用字节的偏移 */
            MPI_COMM_WORLD);    /* 一致的 comm. */

    MPI_Pack(scanline.pixels, 1024, MPI_CHAR,
            buffer, maxsize, &position, MPI_COMM_WORLD);

    MPI_Send(buffer, position, MPI_PACKED,
            dest, tag, MPI_COMM_WORLD);
}
缓冲区分配一次以包含所打包的结构的大小。由于在消息中依赖于实现的开销,必须计算大小。变长的消息可以通过分配能容纳最大可能的消息的缓冲区来处理。对于MPI_Pack( )的位置参数总是返回当前包装缓冲区的大小。

下面列出解包消息的代码段,假设已分配接受缓冲区。

{
    int             src;
    int             msgsize;
    MPI_Status      status;

    MPI_Recv(buffer, maxsize, MPI_PACKED,
            src, tag, MPI_COMM_WORLD, &status);

    position = 0;
    MPI_Get_count(&status, MPI_PACKED, &msgsize);

    MPI_Unpack(buffer,          /* 打包缓冲区 */
            msgsize,            /* 缓冲区大小 */
            &position,          /* 下一元素的字节偏移 */
            &scanline.lineno,   /* 解包这个元素 */
            1,                  /* 一个元素 */
            MPI_INT,            /* 数据类型 int */
            MPI_COMM_WORLD);    /* 一致的 comm. */

    MPI_Unpack(buffer, msgsize, &position,
            scanline.pixels, 1024, MPI_CHAR, MPI_COMM_WORLD);
}
你应该能修改上面的代码以适应任意的结构。完全可能改变要解包元素的个数,这基于同一消息中前面解包的应用信息。

--
snigoal,HUST,Wuhan,China