我想测量我的C++代码的运行时.执行我的代码大约需要12个小时,我想在执行代码时写下这段时间.我怎么能在我的代码中做到这一点?
操作系统:Linux
我尝试学习用c ++ 11的线程库编写并行代码所以首先我需要一个支持这个库的编译器我的问题是什么编译器可以支持c ++ 11的所有并发特性?
警告:
这个问题是关于c ++ 11的并发特性,而不是最适合C++ 11的编译器.
当我们使用mpi_send/receive函数时会发生什么?我的意思是这个通信是通过我们希望发送和接收的变量的值或地址来完成的(例如,进程0想要发送变量"a"到进程1.进程0究竟发送变量"a"或地址的值"a").当我们使用派生数据类型进行通信时会发生什么?
我有一个巨大的矩阵,我把它分成了一些子矩阵,我对它做了一些计算.在那些计算之后,我必须将该矩阵写入单个文件中以进行后处理.是否可以将结果写入单个文本文件中,我该怎么做?例如,我们有一个在y方向上划分的nx ny矩阵(每个进程都有一个nx秩矩阵),我们想将nx*ny矩阵写入单个文本文件中.
我用C++编写一个简单的代码,然后在linux ubuntu 11.04上用g ++编译它,我没有得到任何错误,但是当我运行可执行文件时,我得到这个错误"分段错误".
我知道我的代码没有问题,并且这个错误与编译器有关.
有人能帮助我吗?
我的代码是:
#include <math.h>
int main()
{
double a[200][200][200],b[200][200][200],c[200][200][200];
int i,j,k;
double const pi=3.14;
for(k=0;k<200;k++)
{
for(j=0;j<200;j++)
{
for(i=0;i<200;i++)
{
a[i][j][k]=sin(1.5*pi*i)*cos(3.5*pi*j)*k;
b[i][j][k]=cos(1.5*pi*i)*cos(2.5*pi*k)*j;
c[i][j][k]=a[i][j][k]-b[i][j][k];
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想在带有核心 i7 cpu 的单台电脑上运行并行代码我可以编译我的代码,但运行它时遇到问题。
我使用 mpicxx 编译代码,当我通过“ mpirun -np 8 ./a.out”运行它时,只有一个进程。我的操作系统是linux ubuntu 11.04。
工作我必须做什么?
例如我想运行这段代码:
#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char **argv)
{
int mynode, totalnodes;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD, &totalnodes);
MPI_Comm_rank(MPI_COMM_WORLD, &mynode);
cout << "Hello world from process " << mynode;
cout << " of " << totalnodes << endl;
MPI_Finalize();
}
Run Code Online (Sandbox Code Playgroud)
我将 mpich2 与 mpirun --version:1.3.1 一起使用
使用Boost.MPI库的目的是什么?它会提高性能吗?它与MPICH库有什么区别?
我尝试使用以下代码在MATLAB中声明一个符号变量:
syms a;
Run Code Online (Sandbox Code Playgroud)
我对这个变量进行计算,一切都很好.但我的问题是,我不知道如何给变量赋一个数字并将结果作为数字.例如,我的代码的答案是
answer=exp(-10*a);
Run Code Online (Sandbox Code Playgroud)
例如,我想给40分"a"并得到答案
answer =
1.9152e-174
Run Code Online (Sandbox Code Playgroud)
我真的很感激任何建议.
我想编写一个在3D矩阵上工作的并行代码,其中每个进程都有自己的子矩阵,但是为了完成他们的工作,他们需要一些关于其相邻进程的子矩阵(只是边界平面)的信息.我通过点对点通信发送这些信息但我知道对于大型矩阵来说这不是一个好主意所以我决定使用派生数据类型进行通信.我有问题mpi_type_vector:例如我有一个NX*NY*NZ矩阵,我想发送常量的平面NY到另一个进程我写这些行来做这个:
MPI_Datatype sub;
MPI_Type_vector(NX, NZ, NY*NZ, MPI_DOUBLE, &sub);
MPI_Type_commit(&sub);
Run Code Online (Sandbox Code Playgroud)
但它不起作用(不能发送我想要的飞机).怎么了?我的测试代码在这里:
#include <mpi.h>
#include <iostream>
using namespace std;
int main(int argc,char ** argv)
{
int const IE=100,JE=25,KE=100;
int size,rank;
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Datatype sub;
MPI_Type_vector(KE,IE,IE+(JE-1)*IE,MPI_DOUBLE,&sub);
MPI_Type_commit(&sub);
if (rank==0){
double*** a=new double**[IE];
for(int i=0;i<IE;i++){
a[i]=new double *[JE];
for(int j=0;j<JE;j++){
a[i][j]=new double [KE];
}
}
for(int i=0;i<IE;i++){
for(int j=0;j<JE;j++){
for(int k=0;k<KE;k++){
a[i][j][k]=2;
}}}
for(int i=0;i<IE;i++){
for(int j=0;j<JE;j++){
a[i][j][0]=2;
}}
MPI_Send(&a[0][0][0],1,sub,1,52,MPI_COMM_WORLD);
}
if (rank==1){
double*** b=new …Run Code Online (Sandbox Code Playgroud) 在我的linux中安装gcc和mpich库后,我可以用mpicxx编译器编译我的代码.是否可以将c ++ 11与mpi库一起使用,只需升级gcc编译器?
我该如何绘制这样的图形:
我的问题不是关于"subplot"功能.我有一个用于x轴的"x"数组和用于y轴的三个"y"数组.我想在上面的图中绘制所有(x,y)图表.
例如,输出是 a = 20我想将数字"20"更改为另一个数字并将结果写在第一个输出的相同位置,而不是在新行中(最早的"a"数量不需要只是最后的结果很重要)我尽量避免这样的事情:
输出:
a=20
a=21
a=70
.
.
.
Run Code Online (Sandbox Code Playgroud)