高性能计算

演示程序,效果描述

2009年5月12日 阅读(30)

1.相同源代码,串行程序版本
1.1编译过程,利用我们自己编写的脚本,自动生成针对两种平台上的目标程序
源代码:solve.c
演示过程:solve.c位于test/目录下
首先,进入test目录,下面运行我们编写的脚步程序
该脚步首先读取配置文件信息,发现cell平台的配置信息,因此首先生成cell 平台上的目标文件
生成cell 平台上的目标文件:
该脚步程序首先针对源代码进行automake,然后脚步设置环境变量,对生成的makefile修改,使得最后的结果可以
#makefile
PROGRAM_ppu :=  solve
IMPORTS =  $(SDKLIB_ppu)/libblas.so  \
            -lspe2 -lm -lnuma
LDFLAGS += -Wl,-rpath  $(SDKLIB_ppu)
include /opt/cell/sdk/buildutils/make.footer
makefile实际执行的命令为:
/opt/cell/toolchain/bin/ppu32-gcc -o solve  solve.c  -Wl,-rpath  /opt/cell/sysroot/usr/lib    -L/opt/cell/sysroot/opt/cell/sdk/usr/lib -R/opt/cell/sdk/usr/lib  -m32 -Wl,-m,elf32ppc /opt/cell/sysroot/usr/lib/libblas.so -lspe2 -lm -lnuma

然后脚本,在当前目录下建立一个子目录cell,在该目录下运行make命令,生成针对cell平台的目标文件,最终在test/cell/下产生solve。

完毕之后,继续读取取配置文件信息,发现intel的配置信息,因此接着生成intel 平台上的目标文件
生成intel平台上的目标文件:注意要生成intel平台的程序,必须先把,cblas.h malloc_align.h放到当前文件夹下
然后运行命令:
 gcc -o solve solve.c /home/duanple/CBLAS/lib/LINUX/cblas_LINUX.a /home/duanple/BLAS/blas_LINUX.a
即可生成solve程序,这一过程要通过脚本完成,最终在test/intel/目录下生成我们的solve

2.程序运行
cell上的solve运行,在模拟器上演示:
sudo su
ulimit -s unlimited
export PATH=/opt/ibm/systemsim-cell/bin:$PATH
systemsim -g
选择mode->fast mode ->go,在模拟器中输入如下命令
callthru source /home/duanple/test/test>test
chmod +x test
./test
当我们把采用blas编写的高斯消元解方程的cell程序,拷贝到模拟器时,出现如下错误:找不到libblas.so.1 libalf.so.4
解决方法:再次利用callthru source,将ubuntu上的这两个库放到了cell模拟器上的/lib目录下,这样就可以运行了
/opt/cell/sysroot/usr/lib/libblas.so.1
/opt/cell/sysroot/usr/lib/libalf.so.4
但是运行时出现了segement fault.原因是忘了拷贝data.txt,拷贝完毕就可以了。

intel的直接运行:
./solve即可

mpi版本的编译运行:(待续)

intel平台:

mpdboot -n 1 //注意这个需要在/home/duanple下运行,因为需要mpd.hosts文件
mpdtrace
mpicc -o cblas_ex1 cblas_example1.c /home/duanple/CBLAS/lib/LINUX/cblas_LINUX.a /home/duanple/BLAS/blas_LINUX.a
mpirun -n 4 ./cblas_ex1
修改:将程序中的文件路径改为绝对路径,否则读取时发生not found错误。

cell平台:

把intel的mpi中的libmpi.a拷贝到 /opt/cell/sysroot/usr/lib
/opt/cell/toolchain/bin/ppu32-gcc -o solve  cblas_example1.c  -Wl,-rpath  /opt/cell/sysroot/usr/lib   -L/opt/cell/sysroot/opt/cell/sdk/usr/lib -R/opt/cell/sdk/usr/lib  -m32 -Wl,-m,elf32ppc /opt/cell/sysroot/usr/lib/libblas.so  -lspe2 -lm -lnuma -lmpi
出现如下提示:/opt/cell/toolchain/bin/ppu-ld: skipping incompatible /opt/cell/sysroot/usr/lib/../lib/libmpi.a when searching for -lmpi

因为当前版本的mpi程序库,跟cell上的并不兼容,因此目前只能展示在intel上根据节点计算能力作出调整后的mpi程序。
解决mpi兼容性,问题应当直接在cell上安装mpi,然后尝试将上面的libmpi.a拷贝到这里,供elf32gcc使用

You Might Also Like