• 大小: 305KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: 其他
  • 标签:

资源简介

高性能云计算 代码+报告 MPIOpenMP混合编程解决N-Body问题 华南理工

资源截图

代码片段和文件信息

#include
#include
#include 
#include
#include
#include
#include
#include


#include “omp.h“

#define NUM_THREADS 4

using namespace std;
//先解决天体运动,即距离超级远 
long double MAX_Basic_Meter = 150000000000;//1.5亿千米为基数,即地球离太阳距离
long double MAX_M = 100000000;//最大重量为1T
long double MAX_V = 100;//最大速度为100m/s
long double MAX_A = 10;//最大加速度为100m/s2
long double MAX_P = 100000;//粒子所处于最大位置为100000
const long double time_beats = 1;//一秒一次
const long MAX_number = 4;//粒子总个数
long double MAX_distance = MAX_Basic_Meter;//待定
const long double G = 6.672;//10^(-11)N*m^2  /(kg^2)


//定义粒子的属性
struct objectParticle
{
//空间位置m
long double px py pz;
//瞬时速度m/s
long double vx vy vz;
//加速度
long double ax ay az;
//质量kg
long double m;
//下一阶段速度加速度增量
long double ax_up ay_up az_up;
};
static objectParticle objectParticless[MAX_number];

static objectParticle *object_Particles = objectParticless;
//通过万有引力修改粒子属性
void change_Particle_aup(objectParticle& objectParticle&);

//更新该粒子的速度
void update_velocity(objectParticle& int);

//更新该粒子的位置
void update_shift(objectParticle& int);

//更新该粒子的加速度增量,为零
void update_acceleration_up(objectParticle& int);


//输出全部粒子的属性
void output_particles(objectParticle *& long int);


//初始化粒子的状态属性
void init_Random_Particles(objectParticle*& int);

int main()
{

long int particle_Number = MAX_number;
long int temp_number = 0;
//初始化数据
init_Random_Particles(object_Particles particle_Number);
int num tid;
char*p;

omp_set_num_threads(NUM_THREADS);              //设置进程数目
#pragma omp parallel private(numtidp)            //多个并行进程开始
{
tid = omp_get_thread_num();
while (true)

#pragma omp master   //主线程记录执行次数
{
temp_number++;
printf(“begin_%d_____________________________________\n“ temp_number);
}
//PP算法
//更新加速度的增量,此处是同时更新相互作用的两个粒子
for (int i = tid; i < particle_Number; i += NUM_THREADS)
for (int j = i + 1; j < particle_Number; j++) 
if (i != j) //叠加粒子的加速度量
change_Particle_aup(object_Particles[i] object_Particles[j]);
#pragma omp barrier  //所有线程同步
{
//更新粒子状态
for (int i = 0; i < particle_Number; i += NUM_THREADS)
{
long double t_tmp = time_beats;
update_velocity(object_Particles[i] t_tmp);//更新速度
update_shift(object_Particles[i] t_tmp);//更新位移
update_acceleration_up(object_Particles[i] t_tmp);//更新加速度增量 
//输出执行的内容,方便查阅
printf(“\nobject: m:%lf      tid:%d\n\tpx:%lfpy%lfpz%lf\n\tvx:%lfvy%lfvz%lf\n“ object_Particles[i].m tid object_Particles[i].px object_Particles[i].py object_Particles[i].pz object_Particles[i].vx object_Particles[i].vy object_Particles[i].vz);
}
}
#pragma omp barrier  //所有线程同步,以执行下一步循环
{
#pragma omp master   //主线程输出执行次数,方便查阅
printf(“__end__%d________________________________________\n“ temp_number);
}
}
}
}


//通过万有引

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     270336  2015-12-21 00:44  实验4 MPIOpenMP混合编程解决N-Body问题.doc

     文件       6525  2015-12-20 22:21  实验4源码\N_body_openMP.cpp

     文件     101888  2015-12-20 22:23  实验4源码\N_body_openMP.exe

     文件       7997  2015-12-20 22:23  实验4源码\N_body_openMP.obj

     文件       8847  2015-12-18 22:23  实验4源码\N_Body_PP_Algrothmn.cpp

     文件       7683  2015-12-20 22:20  实验4源码\N_body_single.cpp

     文件     122368  2015-12-20 22:24  实验4源码\N_body_single.exe

     文件       8541  2015-12-20 22:24  实验4源码\N_body_single.obj

     目录          0  2015-12-20 22:24  实验4源码

----------- ---------  ---------- -----  ----

               534185                    9


评论

共有 条评论

相关资源