您的位置:首页 > 其它

麻省理工时域差分软件 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)函数改为:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: