-
大小: 305KB文件類型: .rar金幣: 2下載: 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? for?(int?j?=?i?+?1;?j? if?(i?!=?j)?//疊加粒子的加速度量
change_Particle_aup(object_Particles[i]?object_Particles[j]);
#pragma?omp?barrier??//所有線程同步
{
//更新粒子狀態
for?(int?i?=?0;?i? {
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算法
評論
共有 條評論