-
大小: 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
- 上一篇:编译原理 实现TINY+编译器 课程实验报告
- 下一篇:qpso-svm算法
评论
共有 条评论