我在Mac OSX Mountain Lion上使用http://hpc.sourceforge.net上的gcc 4.8.1 .我正在尝试编译一个使用该to_string
函数的C++程序<string>
.我-std=c++11
每次都需要使用旗帜:
g++ -std=c++11 -o testcode1 code1.cpp
Run Code Online (Sandbox Code Playgroud)
有没有办法默认包含这个标志?
我是 MPI 初学者。我正在尝试在运行 Mac_OSX Mountain Lion 的 macbook 上运行最简单的 MPI“hello world”代码。它只有 1 个处理器,但有 4 个核心。C++代码是这样的
#include <iostream>
#include "mpi.h"
using namespace std;
int main(int argc, char* argv[])
{
int rank, size;
MPI::Init();
rank = MPI::COMM_WORLD.Get_rank();
size = MPI::COMM_WORLD.Get_size();
std::cout << "Hello, world! I am " << rank << " of " << size << std::endl;
cout << "size is " << size << endl;
cout << "rank is " << rank << endl;
MPI::Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我编译并运行代码
$ mpic++ …
Run Code Online (Sandbox Code Playgroud) 我试图比较一个简单代码的计算时间,使用Fortran 90和C++来计算整数的立方总和,因为我听说它们在类似的级别上很快.我使用gfortran和g ++(在Mac OSX上)来编译这些代码.
有人可以指出为什么Fortran 90代码比同等的C++代码(12秒)花费的时间(49秒)要多得多吗?我只知道C++是行专业,而Fortran是专栏专栏,但我认为这与这些代码无关.如何让这个fortran90代码更快?任何提示将不胜感激.谢谢.
Fortran代码和编译 gfortran -o bb1 code15.f90
program code15
implicit none
double precision, dimension(:), allocatable :: a
integer (kind=8) :: n,i
real (kind=16) :: ssum
real :: ts1, ts2
call cpu_time(ts1)
n = 1600000000
allocate(a(n))
ssum=0.0
do i=1,n
a(i)=i
ssum=ssum+a(i)*a(i)*a(i)
end do
print *, 'final sum ', ssum
deallocate(a)
call cpu_time(ts2)
print *,'the time taken is ',ts2-ts1
end program
Run Code Online (Sandbox Code Playgroud)
输出是
final sum 1.63840000204800000399876515667619840E+0036
the time taken is 48.6228256
Run Code Online (Sandbox Code Playgroud)
C++代码和编译 g++ -o bb1 code10.cpp
#include <iostream>
#include …
Run Code Online (Sandbox Code Playgroud) 这可能是一个重复的问题.所以,如果你愿意,请随时将其标记下来.在C++中,我了解到数组维度连续存储在内存中如何将3D数组存储在C中?所以我做了一个小实验,将自然数分配给大小为1600000000x1和1x1600000000的矩阵(请matsize
根据您的记忆将代码更改为较小的值).下面的代码为矩阵a
(其尺寸为1x1600000000)分配1到1600000000的自然数,并计算所有元素的立方体总和.相反的情况只是通过更改xdim
为matsize
和ydim
1 来反转矩阵的维度,并重新编译代码并再次运行它.矩阵是[xdim][ydim]
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
long int matsize, i, j, xdim, ydim;
long double ss;
double** a;
double time1, time2, time3;
clock_t starttime = clock();
matsize=1600000000;
xdim=1;
ydim=matsize;
ss=0.0;
a= new double *[xdim];
for(i=0;i<xdim;i++)
{
a[i]= new double[ydim];
}
time1= (double)( clock() - starttime ) / (double)CLOCKS_PER_SEC;
cout << "allocated. time taken for allocation was " << time1 <<" seconds. …
Run Code Online (Sandbox Code Playgroud) 我是MPI和Fortran 77菜鸟.我有一个fortran 77代码FKRPRO.f
,我想使用OpenMPI并行化.该代码需要大量参数,这些参数在运行时从单独的文件中输入.编译和运行就是这样的
gfortran -o FKRPRO FKRPRO.f
./FKRPRO < Modelfile.txt
Run Code Online (Sandbox Code Playgroud)
代码中的等价行(不是我的代码)是
PARAMETER(LIN=5)
INTEGER ERROR
LOGICAL PRNTA
PRNTA=.FALSE.
READ(LIN,'(L3)') PRNTA
READ(LIN,21) M1,M2
21 FORMAT(11I5)
Run Code Online (Sandbox Code Playgroud)
等等.有人可以向我解释一下是什么READ(LIN,'(L3)') PRNTA
意思.输入文件Modelfile.txt中的输入是这样的
.F.
0 64
and so on..
Run Code Online (Sandbox Code Playgroud)
我在代码中放了必要的MPI语句.
INCLUDE 'MPIF.H'
...
CALL MPI_INIT(ERROR)
CALL MPI_COMM_SIZE(MPI_COMM_WORLD,NPROCS,ERROR)
CALL MPI_COMM_RANK(MPI_COMM_WORLD,PRANK,ERROR)
...
CALL MPI_TYPE_FREE(NEWMATRIX,ERROR)
CALL MPI_FINALIZE(ERROR)
Run Code Online (Sandbox Code Playgroud)
所有进程都无法读取输入文件.我编译并运行这样的代码
mpif77 -o bc3 FKRPROG5.f
mpirun -np 4 bc3 < Modelfile.txt
Run Code Online (Sandbox Code Playgroud)
这不起作用.我收到以下错误.只有第一个进程或等级0才能读取该文件.
At line 50 of file FKRPROG5.f (unit = 5, file = 'stdin')
Fortran runtime error: End of file …
Run Code Online (Sandbox Code Playgroud)