带MPI的fftw 3 的安装和使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

带MPI的fftw 3 的安装和使用
2007-10-08 16:26
/motioo/blog/item/d44e6fd32c6ae7033af3cfbc.html
0. 下载程序,解压
下载程序
http:fftw-3.2alpha2.tar.gz (ftp:fftw-3.2alpha2.tar.gz) (3.1MB)
mkdir -p /home/tlu/proj/
cp fftw-3.2alpha2.tar.gz /home/tlu/proj/
cd /home/tlu/proj/
tar xzvf fftw-3.2alpha2.tar.gz
cd fftw-3.2alpha2
1. configure
后面参数--prefix=/home/tlu表示安装的位置是/home/tlu/include 和/home/tlu/lib/下
--enable-mpi 表示要使用并行的MPI
./configure --prefix=/home/tlu --enable-mpi
2. 编译
make
3. 安装
make install
4. 安装后的头文件和库文件
tlu:~$ ls -rclt include/ lib/
lib/:
总用量1336
drwxr-xr-x 2 tlu tlu 4096 2007-10-08 16:17 pkgconfig
-rwxr-xr-x 1 tlu tlu 774 2007-10-08 16:17 libfftw3_
-rwxr-xr-x 1 tlu tlu 762 2007-10-08 16:17
-rw-r--r-- 1 tlu tlu 1238492 2007-10-08 16:17 libfftw3.a
-rw-r--r-- 1 tlu tlu 103388 2007-10-08 16:17 libfftw3_mpi.a
include/:
总用量32
-rw-r--r-- 1 tlu tlu 16236 2007-10-08 16:17 fftw3.h
-rw-r--r-- 1 tlu tlu 2447 2007-10-08 16:17 fftw3.f
-rw-r--r-- 1 tlu tlu 9342 2007-10-08 16:17 fftw3-mpi.h
5. 只要把include 和lib下的文件copy到另一台机器上同样的位置,另一台机器就安装好了。

使用的例子
/**
*
===============================================================
======================
*
* Filename: mpifftw.cpp
* 编译命令:mpicxx -DMPICH_IGNORE_CXX_SEEK -o mpifftw.exe mpifftw.cpp -I/home/tlu/include -lfftw3_mpi -lfftw3 -lm -L/home/tlu/lib
*
* Description: 计算二维DFT
*
* Version: 1.0
* Created: 2007年10月07日22时14分45秒CST
* Revision: none
* Compiler: mpicxx
*
* Author: TiaoLu,************
* Company: School of Mathematical Sciences, Peking University
*
*
=============================================================== ======================
*/
#include "fftw3-mpi.h"
#include <iostream>
#include <math.h>
using namespace std;
double my_function(int i,int j){
return (double)(i);
}
int main(int argc, char **argv)
{
const ptrdiff_t N0 = 10, N1 = 10;
fftw_plan plan;
fftw_complex *in, *out;
ptrdiff_t alloc_local, local_n0, local_0_start, i, j;
MPI_Init(&argc, &argv);
fftw_mpi_init();
/* get local in data size and allocate */
/*对于这个二维的数据(i,j),i=0,1,2,...,N0-1, j = 0,1,2,...,N1-1
分配只对i 作,CPU 储存(i,j), i = local_0_start, ...., local_0_start+ local_n0-1, j =0,1,...,N1-1
当然每个进程上local_0_start 和local_n0 可能是不同的。

alloc_local 是分配的存储,他可能比local_n0*N1 大,因为可能要存储一些中间值。

*/ alloc_local = fftw_mpi_local_size_2d(N0, N1, MPI_COMM_WORLD,
&local_n0, &local_0_start);
in = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * alloc_local);
out = (fftw_complex *) fftw_malloc(sizeof(fftw_complex) * alloc_local);
/* create plan for forward DFT */
/*二维离散Fourier变换*/
/* out[j][k] = \sum_{l=0}^{N0-1} \sum_{m=0}^{N1-1}exp( -I * 2 pi ( jl/N0 + km/N1) ) */ plan = fftw_mpi_plan_dft_2d(N0, N1, in, out, MPI_COMM_WORLD,
FFTW_FORWARD, FFTW_ESTIMATE);
/* initialize in data to some function my_function(x,y) */
for (i = 0; i < local_n0; ++i) for (j = 0; j < N1; ++j){
in[i*N1 + j][0] = my_function(local_0_start + i, j);
in[i*N1 + j][1] = 0.0;
}
/* compute transforms, in-place, as many times as desired */
fftw_execute(plan);
fftw_destroy_plan(plan);
for (i = 0; i < local_n0; ++i) for (j = 0; j < N1; ++j){
cout<<out[i*N1 + j][0] <<" "<< out[i*N1 + j][1] <<endl;
}
MPI_Finalize();
}。

相关文档
最新文档