麻省理工时域差分软件 MEEP windows 下编译开发(二)——开始编译
2014-09-10 20:00
260 查看
1)用vs2012自带的lib.exe将fftw3里的.def文件导出为.lib文件。
2)新建一个控制台程序,并添加MEEP源文件,就是MEEP压缩包里src文件夹里的所有文件,如下图:
在每个.cpp文件都加入#include "stdafx.h"。把上次建立的config.h文件拷贝到同一个文件夹里。
3)新建两个文件夹,inc和lib。把涉及到的.h文件和.lib文件全部拷贝进去。然后在configuration properties->vc++ directories->include directories里添加 X:\XXX\inc;
在configuration properties->vc++ directories->library directories里添加 X:\XXX\lib;
X:\XXX就是你存放两个文件夹的地址。
在configuration properties->linker->input->additional independencies里添加 libfftw3-3.lib;blas.lib;lapack.lib;mpi.lib;hdf5.lib;libf2c.lib;
4)在vec.hpp文件#include <complex>之前加入
#undef min
#undef max
#undef abs
再把_Pragma改为__pragma
5)替换所有文件里面的complex为std::complex
6)打开step_generic_stride1.cpp,把
#define DPR double * restrict
#define RPR realnum * restrict
改为
#define DPR double *
#define RPR realnum *
7)打开step_generic.cpp,把
#define DPR double * restrict
#define RPR realnum * restrict
改为
#define DPR double *
#define RPR realnum *
8)去http://softagalleria.net/download/dirent/?C=M;O=D下载dirent.h,把dirent.h放在inc文件夹里。
把output_directory.cpp里#include <dirent.h>改为#include "dirent.h",#include <unistd.h>改为#include "unistd.h"。
9)去http://stackoverflow.com/questions/341817/is-there-a-replacement-for-unistd-h-for-windows-visual-c里拷贝unistd.h,保存到inc文件夹。把#include<getopt.h>改为#include"getopt.h"。
10)去https://gist.github.com/ashelly/7776712下载getopt.h和getopt.c,保存到inc文件夹。
11)把output_directory.cpp里void structure::set_output_directory(const char *name)函数改为:
12)把output_directory.cpp里mkdir函数里跟着的,00777删除。同时把mkdir改为_mkdir
13)把所有snprintf改为_snprintf
14)把mympi.cpp中# include <mpi.h>改为# include "mpi.h"。
15)在mpicxx.h中,extern const int MAX_PORT_NAME;前加入#undef MAX_PORT_NAME;。因为跟Windows Kits\8.1\Include\shared\mprapidef.h定义冲突。
16)在multilevel_atom.cpp中, extern "C" void DGETRF(const int *m,const int *n,realnum *A,const int *lda,int *ipiv,int *info);
extern "C" void DGETRI(const int *n,realnum *A,const int *lda,int *ipiv,realnum *work,int *lwork,int *info);
这两句前加入
#define DGETRF dgetrf_
#define DGETRI dgetri_
17)把sphere-quad.cpp里的main函数删了。
好,大功告成。下面是单核计算和4核计算的结果。用的是meep自带的benck.cpp。可以看到在复杂结构计算上,多核并行计算还是有优势的。
单核:
Using MPI version 2.2, 1 processes
Benchmarking with 1 processor...
bench:, test, total time (s), normalized time (s/Mgs)
bench:, Periodic 6x4 , 0.125429, 0.0559952
bench:, Periodic 12x1, 0.167706, 0.0791068
bench:, Periodic 1x12, 0.130626, 0.0616162
bench:, Periodic 12x0, 0.811873, 0.403515
bench:, Periodic 12x12, 0.16133, 0.0468982
bench:, Flux 1D 100, 0.705413, 0.0349215
bench:, Flux 1D 100, 0.717498, 0.0355197
bench:, Flux 1D 100, 0.733768, 0.0363251
bench:, 3D 1x1x10, 0.161097, 0.053699
bench:, 3D 10x1x1, 0.182902, 0.0609672
bench:, 3D 1x1x1 , 0.171015, 0.0814359
bench:, 3D 3x3x3 , 0.225936, 0.0480716
bench:, 3D 10x3x0, 0.639422, 0.278009
bench:, 3D 0x3x10, 0.478122, 0.207879
bench:, 2D 6x4 , 0.0876387, 0.0391244
bench:, 2D 12x12 , 0.119794, 0.0348238
bench:, 2D 12x12 , 0.11761, 0.0341889
bench:, 2D TM 6x4 nonlinear , 0.137402, 0.0324062
bench:, 2D TM 6x4 , 0.0790593, 0.0186461
bench:, 2D TM 12x12 , 0.0849441, 0.0156147
bench:, 2D TE 2x2 nonlinear , 0.310025, 0.0767388
bench:, 2D TE 2x2 , 0.185619, 0.0459452
bench:, 2D TE 10x11 nonlinear , 0.248175, 0.0486618
bench:, 2D TE 10x11 , 0.10419, 0.0204295
note: 1 Mgs = 1 million grid point time steps
多核:
Using MPI version 2.2, 4 processes
Benchmarking with 4 processors...
bench:, test, total time (s), normalized time (s/Mgs)
bench:, Periodic 6x4 , 0.425517, 0.189963
bench:, Periodic 12x1, 0.49668, 0.234283
bench:, Periodic 1x12, 0.479542, 0.226199
bench:, Periodic 12x0, 3.83214, 1.90464
bench:, Periodic 12x12, 0.24655, 0.0716716
bench:, Flux 1D 100, 6.18017, 0.305949
bench:, Flux 1D 100, 6.10181, 0.30207
bench:, Flux 1D 100, 5.64401, 0.279406
bench:, 3D 1x1x10, 0.0922378, 0.0307459
bench:, 3D 10x1x1, 0.0991379, 0.033046
bench:, 3D 1x1x1 , 0.187894, 0.0894735
bench:, 3D 3x3x3 , 0.126509, 0.0269168
bench:, 3D 10x3x0, 0.276782, 0.12034
bench:, 3D 0x3x10, 0.230069, 0.10003
bench:, 2D 6x4 , 0.0778789, 0.0347673
bench:, 2D 12x12 , 0.0607879, 0.0176709
bench:, 2D 12x12 , 0.060949, 0.0177177
bench:, 2D TM 6x4 nonlinear , 0.11919, 0.0281109
bench:, 2D TM 6x4 , 0.0938684, 0.0221388
bench:, 2D TM 12x12 , 0.0568677, 0.0104536
bench:, 2D TE 2x2 nonlinear , 0.545738, 0.135084
bench:, 2D TE 2x2 , 0.458133, 0.113399
bench:, 2D TE 10x11 nonlinear , 0.140469, 0.0275429
bench:, 2D TE 10x11 , 0.061741, 0.0121061
note: 1 Mgs = 1 million grid point time steps
2)新建一个控制台程序,并添加MEEP源文件,就是MEEP压缩包里src文件夹里的所有文件,如下图:
在每个.cpp文件都加入#include "stdafx.h"。把上次建立的config.h文件拷贝到同一个文件夹里。
3)新建两个文件夹,inc和lib。把涉及到的.h文件和.lib文件全部拷贝进去。然后在configuration properties->vc++ directories->include directories里添加 X:\XXX\inc;
在configuration properties->vc++ directories->library directories里添加 X:\XXX\lib;
X:\XXX就是你存放两个文件夹的地址。
在configuration properties->linker->input->additional independencies里添加 libfftw3-3.lib;blas.lib;lapack.lib;mpi.lib;hdf5.lib;libf2c.lib;
4)在vec.hpp文件#include <complex>之前加入
#undef min
#undef max
#undef abs
再把_Pragma改为__pragma
5)替换所有文件里面的complex为std::complex
6)打开step_generic_stride1.cpp,把
#define DPR double * restrict
#define RPR realnum * restrict
改为
#define DPR double *
#define RPR realnum *
7)打开step_generic.cpp,把
#define DPR double * restrict
#define RPR realnum * restrict
改为
#define DPR double *
#define RPR realnum *
8)去http://softagalleria.net/download/dirent/?C=M;O=D下载dirent.h,把dirent.h放在inc文件夹里。
把output_directory.cpp里#include <dirent.h>改为#include "dirent.h",#include <unistd.h>改为#include "unistd.h"。
9)去http://stackoverflow.com/questions/341817/is-there-a-replacement-for-unistd-h-for-windows-visual-c里拷贝unistd.h,保存到inc文件夹。把#include<getopt.h>改为#include"getopt.h"。
10)去https://gist.github.com/ashelly/7776712下载getopt.h和getopt.c,保存到inc文件夹。
11)把output_directory.cpp里void structure::set_output_directory(const char *name)函数改为:
void structure::set_output_directory(const char *name) { char buf[300]; outdir = name; if (!quiet) master_printf("Using output directory %s/\n", name); /*if (readlink(symlink_name, buf, 300) > 0) { // Link already exists. unlink(symlink_name); } symlink(name, symlink_name); outdir = name;*/ }
12)把output_directory.cpp里mkdir函数里跟着的,00777删除。同时把mkdir改为_mkdir
13)把所有snprintf改为_snprintf
14)把mympi.cpp中# include <mpi.h>改为# include "mpi.h"。
15)在mpicxx.h中,extern const int MAX_PORT_NAME;前加入#undef MAX_PORT_NAME;。因为跟Windows Kits\8.1\Include\shared\mprapidef.h定义冲突。
16)在multilevel_atom.cpp中, extern "C" void DGETRF(const int *m,const int *n,realnum *A,const int *lda,int *ipiv,int *info);
extern "C" void DGETRI(const int *n,realnum *A,const int *lda,int *ipiv,realnum *work,int *lwork,int *info);
这两句前加入
#define DGETRF dgetrf_
#define DGETRI dgetri_
17)把sphere-quad.cpp里的main函数删了。
好,大功告成。下面是单核计算和4核计算的结果。用的是meep自带的benck.cpp。可以看到在复杂结构计算上,多核并行计算还是有优势的。
单核:
Using MPI version 2.2, 1 processes
Benchmarking with 1 processor...
bench:, test, total time (s), normalized time (s/Mgs)
bench:, Periodic 6x4 , 0.125429, 0.0559952
bench:, Periodic 12x1, 0.167706, 0.0791068
bench:, Periodic 1x12, 0.130626, 0.0616162
bench:, Periodic 12x0, 0.811873, 0.403515
bench:, Periodic 12x12, 0.16133, 0.0468982
bench:, Flux 1D 100, 0.705413, 0.0349215
bench:, Flux 1D 100, 0.717498, 0.0355197
bench:, Flux 1D 100, 0.733768, 0.0363251
bench:, 3D 1x1x10, 0.161097, 0.053699
bench:, 3D 10x1x1, 0.182902, 0.0609672
bench:, 3D 1x1x1 , 0.171015, 0.0814359
bench:, 3D 3x3x3 , 0.225936, 0.0480716
bench:, 3D 10x3x0, 0.639422, 0.278009
bench:, 3D 0x3x10, 0.478122, 0.207879
bench:, 2D 6x4 , 0.0876387, 0.0391244
bench:, 2D 12x12 , 0.119794, 0.0348238
bench:, 2D 12x12 , 0.11761, 0.0341889
bench:, 2D TM 6x4 nonlinear , 0.137402, 0.0324062
bench:, 2D TM 6x4 , 0.0790593, 0.0186461
bench:, 2D TM 12x12 , 0.0849441, 0.0156147
bench:, 2D TE 2x2 nonlinear , 0.310025, 0.0767388
bench:, 2D TE 2x2 , 0.185619, 0.0459452
bench:, 2D TE 10x11 nonlinear , 0.248175, 0.0486618
bench:, 2D TE 10x11 , 0.10419, 0.0204295
note: 1 Mgs = 1 million grid point time steps
多核:
Using MPI version 2.2, 4 processes
Benchmarking with 4 processors...
bench:, test, total time (s), normalized time (s/Mgs)
bench:, Periodic 6x4 , 0.425517, 0.189963
bench:, Periodic 12x1, 0.49668, 0.234283
bench:, Periodic 1x12, 0.479542, 0.226199
bench:, Periodic 12x0, 3.83214, 1.90464
bench:, Periodic 12x12, 0.24655, 0.0716716
bench:, Flux 1D 100, 6.18017, 0.305949
bench:, Flux 1D 100, 6.10181, 0.30207
bench:, Flux 1D 100, 5.64401, 0.279406
bench:, 3D 1x1x10, 0.0922378, 0.0307459
bench:, 3D 10x1x1, 0.0991379, 0.033046
bench:, 3D 1x1x1 , 0.187894, 0.0894735
bench:, 3D 3x3x3 , 0.126509, 0.0269168
bench:, 3D 10x3x0, 0.276782, 0.12034
bench:, 3D 0x3x10, 0.230069, 0.10003
bench:, 2D 6x4 , 0.0778789, 0.0347673
bench:, 2D 12x12 , 0.0607879, 0.0176709
bench:, 2D 12x12 , 0.060949, 0.0177177
bench:, 2D TM 6x4 nonlinear , 0.11919, 0.0281109
bench:, 2D TM 6x4 , 0.0938684, 0.0221388
bench:, 2D TM 12x12 , 0.0568677, 0.0104536
bench:, 2D TE 2x2 nonlinear , 0.545738, 0.135084
bench:, 2D TE 2x2 , 0.458133, 0.113399
bench:, 2D TE 10x11 nonlinear , 0.140469, 0.0275429
bench:, 2D TE 10x11 , 0.061741, 0.0121061
note: 1 Mgs = 1 million grid point time steps
相关文章推荐
- 麻省理工时域差分软件 MEEP windows 下编译开发(一)——准备工作
- 龙芯软件开发(7)--编译PMON指南
- 龙芯软件开发(7)--编译PMON指南
- 借助开源项目,学习软件开发——开始
- 为Source insight加入自已编写make代理编译软件DIY超级IDE开发平台
- 开始写笔记,学习win8开发,争取做一个独立软件开发者
- Ubuntu 11.04 x64 常用软件及编译安装LAMP开发环境
- 使用64位系统用vs2008开发软件,程序编译后无法连接ODBC的解决办法
- Ubuntu 11.04 x64 常用软件及编译安装LAMP开发环境
- 开始开通博客,关注软件开发
- 从今天开始,我就要潜心研究软件开发技术了,不在被名利所困
- 软件Sniffer开发文档---开始写软件开发文档了
- 马宁教你如何通过软件编译实现嵌入式开发
- 软件开发成长起步开始
- ubuntu 11.04下搭建android开发/编译环境 安装必要工作用软件
- 龙芯软件开发(7)--编译PMON指南
- 对日软件开发的开始
- 2009ESRI杯中国大学生GIS软件开发竞赛开始报名啦!!
- OpenUP核心原则三:关注,从开始起,就将注意力放在软件架构上,以减轻风险,并组织软件开发
- 今天开始学习用vs.net开发smartphone软件