① 如何在命令行中使用intel c++编译器,并使用openmp和mkl来编译自己的程序,并运算
1、icc
Intel C/C++编译器接受遵守ANSI C/C++ , ISO C/C++ standards,GNU inline ASM for IA-32 architecture标准的输入。与linux下常用的gcc兼容并支持更大的C语言扩展,包括源文件、命令行参数、目标文件。不支持gcc的inline方式的汇编。例,f.c
#include<stdio.h>
int main(int argc, char* argv[]){
printf("Hello\n");
return 0;
}
编译:icc -c f.cpp -o f.o
链接:icc f.o -o f
运行:./f
注意,编译与链接都由icc来完成,icc常用命令行参数:
-o 输出文件命名
-I include路径
-L lib路径
-l 包含的lib名
-c 仅生成目标文件(*.o),不链接
-On n=0,1,2,3 编译器优化选项,n=0关闭编译器优化,n=3使用最激进的优化
-c99[-] 打开/关闭 c99规范的支持
详细的请参照icc的manpage.
2、ifort
Intel Fortran编译器支持F77/90/95标准并与CFV(Compaq Visual Fortran)兼容。例,f.f90
program f
print *, "Hello"
stop
end
编译:ifort -c f.f90 -o f.o
链接:ifort f.o -o f
运行:./f
编译与连接同样由ifort来完成,ifort常用命令行参数:
-o 输出文件命名
-I include路径
-L lib路径
-l 包含的lib名
-c 仅生成目标文件(*.o),不链接
-On n=0,1,2,3 编译器优化选项,n=0关闭编译器优化,n=3使用最激进的优化
-std90 使用F90标准编译
-std95 使用F 95标准编译
-f77rtl 编译使用F77运行方式的代码(用于解决特殊问题)
These options optimize application performance for a particular Intel? processor or family of processors. The compiler generates code that takes advantage of features of the specified processor.
Option
Description
tpp5 or G5 Optimizes for Intel? Pentium? and Pentium? with MMX? technology processors.
tpp6 or G6 Optimizes for Intel? Pentium? Pro, Pentium? II and Pentium? III processors.
tpp7 or G7 Optimizes for Intel? Pentium? 4, Intel? Xeon?, Intel? Pentium? M processors, and Intel? Pentium? 4 processors with Streaming SIMD Extensions 3 (SSE3) instruction support.
On Intel? EM64T systems, only option tpp7 (Linux) or G7 (Windows) is valid.
About tpp:
http://www.ncsa.illinois.e/UserInfo/Resources/Software/Intel/Compilers/9.0/main_for/mergedProjects/copts_for/common_options/option_tpp567_g567.htm
https://wiki.ke.e/display/SCSC/Compilers+and+Libraries
Intel Fortran Compiler Options: http://geco.mines.e/guide/ifort.html
Intel(R) Fortran Compiler Options: http://www.rcac.pure.e/userinfo/resources/common/compile/compilers/intel/man/ifort.txt
ifort编译器提供了非常多的优化参数
$ ifort --help | more 查看就可以
也可以定位到某个参数
$ifort --help | grep -5 '-mkl'
-5表示显示查找到的行及下面5行的内容。
3、Intel MKL数学库针对Intel系列处理器进行了专门的优化,主要包含的库有:
基本线形代数运算(BLAS)
向量与向量、向量与矩阵、矩阵与矩阵的运算
稀疏线形代数运算
快速傅立叶变换(单精度/双精度)
LAPACK(求解线形方程组、最小方差、特征值、Sylvester方程等)
向量数学库(VML)
向量统计学库(VSL)
高级离散傅立叶变换
编译:
icc multi.c -I/opt/intel/mkl/include –L/intel/mkl/lib –lmpi_ipf –o multi
4、MPI程序编译
消息传递接口(MPI)并行程序设计模型程序的编译命令。例,f.c
include<stdio.h>
#include<mpi.h>
main(argc,argv)
int argc;
char *argv[];
{
char name[BUFSIZ];
int length;
MPI_Init(&argc,&argv);
MPI_Get_processor_name(name, &length);
printf("%s: hello world\n", name);
MPI_Finalize();
}
编译与连接均使用mpicc,参数与mpicc中定义的编译器相同,这里与icc相同。
mpicc –c hello.c –o hello.o
mpicc hello.o –o hello
运行使用mpirun 命令,将运行需要的节点定义在文件中并在-machinfile中制定。
文件: nodelist
node1
node1
node2
node3
运行:
$mpirun –machefile nodelist –np 4 ./hello
node1: hello world
node1: hello world
node2: hello world
node3: hello world
5、32位向64位的移植
32位程序到64位移植中应注意的常见问题:
数据截断:
由于long类型变量的运算(赋值、比较、移位等)产生。long定义在x86上为32bits,而在ia64上为64bits.容易在与int型变量运算时出现异常。
处理方法:尽量避免不同类型变量间的运算,避免将长度较长的变量赋值到较短的变量中,统一变量长度可以解决这个问题。简单的对于32位转移到64位可以将所有long定义转换为int定义。
② mingw w64 编译Fortran 遇到问题,求助
应该是先安装MSYS,再安装mingw,在mingw文件夹里面应该有个bin文件夹,留意一下该文件夹里面“应该”有gcc.exe的应用程序,假设该bin文件夹的全称路径是X:\..\mingw\bin,那么将它添加将它添加到环境变量里面。上面是配置环境,下面是编译运行一个C程序:在比如新建"D:\main.c"文件,里面写main(){printf("Hello!\n");},保存;然后打开cmd控制台,执行:gccD:\main.c-oD:\main.exe这个时候D盘会生成名为main的应用程序,控制台继续执行:D:\main.exe就运行了,应该显示出Hello!了
③ python 中使用 FORTRAN 怎么搭
f2py是numpy自带的一个工具,只要安装了numpy,一般都会安装f2py.exe和f2py.py两个文件.
f2py.exe适合在命令行中使用,而f2py.py则一般在Python代码中使用.
废话少说, 先建立一个testfortran.f90的文件如下:
[plain] view plain
!SUBROUTINE
SUBROUTINE ADDSUB(A,B,C,D)
IMPLICIT NONE
DOUBLE PRECISION A,B,C,D
!f2py intent(in) :: A,B
!f2py intent(out) :: C,D
C = A + B
D = A - B
print*, "ADDSUB From Fortran!"
print*, "ADD=",C
print*, "SUB=",D
RETURN
END
注意这两行的代码:
[plain] view plain
!f2py intent(in) :: A,B
!f2py intent(out) :: C,D
对于Fortran只是注释,但对于f2py却很重要,相当于"签名".
注意签名的注释前面不能有空格!
当然也可以写成如下的形式:
[plain] view plain
Cf2py intent(in) :: A,B
Cf2py intent(out) :: C,D
下面开始编译Fortran代码为python模块,打开CMD窗口,输入如下命令:
[plain] view plain
f2py -m testfortran -c testfortran.f90
会在当前目录下生成testfortran.pyd的文件.
下面就可以再python中使用这个模块了:
[python] view plain
In [1]: import testfortran
In [2]: print testfortran.__doc__
This mole 'testfortran' is auto-generated with f2py (version:2).
Functions:
c,d = addsub(a,b)
.
In [3]: x=testfortran.addsub(4,9)
ADDSUB From Fortran!
ADD= 13.000
SUB= -5.000
In [4]: x
Out[4]: (13.0, -5.0)
In [5]:
④ 如何在windows中编写R程序包
在Windows环境下如何编写R程序包,即生成供linux环境编译运行的tar.gz文件,也生成供windows下使用的.zip文件呢?其实并不复杂,只要下载一些工具软件,按照相应的步骤填写相应的“表格”,继而运行一些简单的指令,就可以生成R的程序包了。
编写R程序包通常包括以下几步:
(1) 工具软件Rtools的安装和备选软件的安装。
(2) r脚本的准备,也就是用来生成程序包的函数脚本。
(3) 利用R中自带的package.skeleton()函数,生成制作包所需要的Description 文件和帮助文件帮助文件.rd。
(4) 编辑该函数生成的Description 文件和帮助文件.rd
(5) 在windows cmd的命令行中输入相应的命令,生成zip文件或者.tar.gz
下面我们来一起建立只有一个函数的R程序包,来详细说明:
一 工具软件安装和配置
制作r包的工具软件包括Rtools,HTML编译器,MikTeX 或Cte等(备选软件不一定要安装):
1 工具软件安装
(1)Rtools(制作R包的主要工具)
Rtools是在windows下制作R包的一系列工具,其中包括
1) CYGWIN 在Windows下模拟UNIX环境
2) MinGW编译器,可用来编译C和Fortran语言。
3) Perl
下载地址: http://www.murdoch-sutherland.com/Rtools/
(2) 微软HTML编译器(备选):
用来从源文件生成HTML格式的帮助文件
下载地址:http://go.microsoft.com/fwlink/?LinkId=14188
(3) MikTeX 或CteX(备选)
用来生成pdf格式的帮助文件
下载地址:http://www.miktex.org/ www.ctex.org/
分别按照要求安装好。
2 设置文件启动路径:
我的电脑>属性>高级>环境变量>系统变量 PATH一项,点击“编辑”,检查是否具有以下路径,如果没有,需要手工添加:
c:\Rtools\bin;c:\Rtools\perl\bin;c:\Rtools\MinGW\bin; C:\CTEX\MiKTeX\miktex\bin;C:\CTEX\CTeX\ctex\bin;C:\CTEX\CTeX\cct\bin;C:\CTEX\CTeX\ty\bin;C:\CTEX\Ghostscript\gs8.64\bin;C:\CTEX\GSview\gsview;C:\CTEX\WinEdt;C:\Program Files\R\R-2.9.0\bin\;
设置启动路径的目的是在cmd命令行可以直接调用相应的exe文件。
如果只是简单制作一个个人使用的包,只需将c:\Rtools\bin;c:\Rtools\perl\bin;c:\Rtools\MinGW\bin; 添加到系统路径即可
二 R脚本的准备
假如现在我们已经有了一个编好的R函数,用来给出回归的精确结果,存成了r脚本的格式,文件名为linmod.r
其内容如下所示,那么该如何制作R程序包呢?
linmod<- function(x, y)
{
## compute QR-decomposition of x
qx <- qr(x)
## compute (x'x)^(-1) x'y
coef <- solve.qr(qx, y)
## degrees of freedom and standard deviation of resials
df <- nrow(x)-ncol(x)
sigma2 <- sum((y - x%*%coef)^2)/df
## compute sigma^2 * (x'x)^-1
vcov <- sigma2 * chol2inv(qx$qr)
colnames(vcov) <- rownames(vcov) <- colnames(x)
list(coefficients = coef,
vcov = vcov,
sigma = sqrt(sigma2),
df = df)
}
三 R包框架的准备
1 生成准备文件
登陆R :开始>所有程序>R>R.2.9.0
(1)清除内存中的对象:
rm(list=ls())
(2)设定工作目录,这里设定为 c:/pa
setwd("c:/pa")
(3)将制作包的源文件 linmod.r拷贝到c:/pa/文件夹下,
之后输入:
package.skeleton(name="linmod",code_files="c:/pa/linmod.r")
此时,R控制台中显示
Creating directories ...
Creating DESCRIPTION ...
Creating Read-and-delete-me ...
Saving functions and data ...
Making help files ...
Done.
Further steps are described in './linmod/Read-and-delete-me'.
>
可以看到c:/pa文件夹下新出现了一个linmod文件夹
该文件夹下的内容就是R包的框架,包括data文件夹,man文件夹,只要按要求将其填写完整,再进行相应的编译即可。
首先查看Read-and-delete-me文件
文件内容如下:
* Edit the help file skeletons in 'man', possibly combining help
files for multiple functions.
* Put any C/C++/Fortran code in 'src'.
* If you have compiled code, add a .First.lib() function in 'R' to
load the shared library.
* Run R CMD build to build the package tarball.
* Run R CMD check to check the package tarball.
Read "Writing R Extensions" for more information.
大致意思如下:
可以man文件夹下编辑帮助文件
C/C++/Fortran 的源代码应该放入src文件夹下
需要在登录时载入包
可以运行R CMD建立和检查相应的包
查看更多信息,应该阅读Writing R Extensions
2 编辑Description文件和rd文件
(1) Description文件的编辑
按照提示,填好各项
Package: linmod
Type: Package
Title: test for linear regression
Version: 1.0
Date: 2009-07-20
Author: helixcn
Maintainer: helixcn <[email protected]>
Description: To give the exactly results of linear regression.
License: GNU 2 or later
LazyLoad: yes
(2)man文件夹中.rd文件编辑
man文件夹中包含两个文件 linmod.Rd和linmod-package.Rd,分别是对linmod()函数和linmod包的介绍,下面逐项填写:
1) linmod.Rd
\name{linmod}
\Rdversion{1.1}
\alias{linmod}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{
linear regression
}
\description{
to give the more exactly results of linear regression
}
\usage{
linmod(x, y)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
\item{x}{
a numeric design matrix for the model
}
\item{y}{
a numeric vector of responses
}
}
\details{
%% ~~ If necessary, more details than the description above ~~
}
\value{
%% ~Describe the value returned
%% If it is a LIST, use
%% \item{comp1 }{Description of 'comp1'}
%% \item{comp2 }{Description of 'comp2'}
%% ...
}
\references{
Friedrich Leisch,2008 Creating R Packages: A Tutorial
}
\author{
helixcn
}
\note{
Please read Friedrich Leisch,2008
}
%% ~Make other sections like Warning with \section{Warning }{....} ~
\seealso{
%% ~~objects to See Also as \code{\link{help}}, ~~~
}
\examples{
##---- Should be DIRECTLY executable !! ----
##-- ==> Define data, use random,
##-- or do help(data=index) for the standard data sets.
## The function is currently defined as
function (x, y)
{
qx <- qr(x)
coef <- solve.qr(qx, y)
df <- nrow(x) - ncol(x)
sigma2 <- sum((y - x \%*\% coef)^2)/df
vcov <- sigma2 * chol2inv(qx$qr)
colnames(vcov) <- rownames(vcov) <- colnames(x)
list(coefficients = coef, vcov = vcov, sigma = sqrt(sigma2),
df = df)
}
}
% Add one or more standard keywords, see file 'KEYWORDS' in the
% R documentation directory.
\keyword{ ~kwd1 }
\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line
2)linmod-package.Rd
\name{linmod-package}
\Rdversion{1.1}
\alias{linmod-package}
\alias{linmod}
\docType{package}
\title{Linear Regression Modification}
\description{to Give the more exactly output of linear regression rather than R default}
\details{
\tabular{ll}{
Package: \tab linmod\cr
Type: \tab Package\cr
Version: \tab 1.0\cr
Date: \tab 2009-07-20\cr
License: \tab GNU 2.0 or later\cr
LazyLoad: \tab yes\cr
}
~~The aim of the package was to give the more exactly output of linear regression~~ linmod~~
}
\author{helixcn
Maintainer: helixcn <[email protected]>}
\references{
Friedrich Leisch,2008,Creating R Packages: A Tutorial
}
\seealso{lm}
\examples{
data(cats, package="MASS")
mod1 <- linmod(Hwt~Bwt*Sex, data=cats)
mod1
summary(mod1)
}
四 通过cmd创建R包
开始>运行>cmd
键入 cd c:\pa\ 将工作目录转移到c:/pa下
键入 Rcmd build --binary linmod 制作window zip包
键入 Rcmd build linmod 制作linux平台下可运行的tar.gz包
命令运行完之后可以发现,在c:/pa/文件夹下分别生成了linmod.zip和linmod.tar.gz压缩包。
注意R CMD 系列命令是在windows控制台下运行,而非R控制台
参考网址
[1]http://www.robjhyndman.com/researchtips/building-r-packages-for-windows/
[2]http://cran.r-project.org/doc/contrib/Leisch-CreatingPackages.pdf
[3]http://faculty.chicagobooth.e/peter.rossi/research/bayes%20book/bayesm/Making%20R%20Packages%20Under%20Windows.pdf
[4]http://www.biostat.uni-hannover.de/teaching/fallstudien/schaarschmidt2.pdf