Skip to main content
PA2: 模板计算

Size: 512 x 512 x 512

Naive

No OPT Performance

Threads Computation Time (s) Performance (Gflop/s) Speedup / Single Thread
1 267.075484 0.653310 1.
2 135.902281 1.283886 1.96520182
4 70.080111 2.489766 3.81100243
8 36.813651 4.739629 7.25479328
16 25.793147 6.764706 10.35451164
28 17.400062 10.027726 15.34910839

Course WorkIntroduction to High Performance ComputingMPIOMPAbout 11 minAbout 3246 words
PA1: 奇偶排序(odd_even_sort)

Performance

Number of Nodes Number of Tasks Number Count v0 v1 v2 v3 v4
1 1 100000000 xxxxxxxxxx6 1void a_plus_b_intrinsic(float* a, float* b, float* c, int n) {2 for (int i = 0; i < n; i += 8) {3 _mm256_store_ps(4 c + i, _mm256_add_ps(_mm256_load_ps(a + i), _mm256_load_ps(b + i)));5 }6}c++ 1. 1. 1. 1.
1 2 100000000 1.82738226 1.83557525 1.8772568 1.86270894 1.67925379
1 4 100000000 3.05696721 3.17540441 3.37059297 3.39672385 2.3387731
1 8 100000000 5.15212684 5.59405831 6.03427353 6.15270254 3.29768106
1 16 100000000 7.65590815 8.91877194 9.65970998 10.31895407 4.39598177
2 32 100000000 10.63745468 12.91174115 14.70125847 15.67950831 5.01147717

Course WorkIntroduction to High Performance ComputingMPIAbout 15 minAbout 4460 words
exp2: MPI Allreduce

Ring Allreduce 算法

首先将每个结点的数据分为 comm_sz 个数据块, 每个数据块大小为 count = n / comm_szfloat.

第一阶段共 comm_sz - 1 步. 在第 k 步, 第 my_rank 个进程会将自己的第 (my_rank - k) % comm_sz 对应数据块发送给第 succ = my_rank + 1 个进程并累加. 注意到对于 my_rank 进程, 第 k 步的 SendRecv 使用的数据块不同, 但第 k + 1 步的 Send 依赖于第 k 步的 Recv 得到的数据块. 因此 Send 可以是非阻塞的, 但 Recv 必须是阻塞的, 以确保在第 k + 1Send 前, 第 kRecv 已完成.


Course WorkIntroduction to High Performance ComputingMPIAbout 1 minAbout 432 words
exp1: MPI 异步通信

任务一

编号 消息长度 计算量 总耗时
1 16384 0 0.203542 ms
2 32768 0 0.431834 ms
3 65536 0 0.658495 ms
4 131072 0 1.17202 ms
5 262144 0 1.97818 ms
6 524288 0 3.79249 ms
7 1048576 0 7.23377 ms
8 2097152 0 14.1605 ms
9 4194304 0 28.2017 ms
10 8388608 0 56.3029 ms
11 16777216 0 113.967 ms
12 33554432 0 224.596 ms

Course WorkIntroduction to High Performance ComputingMPIAbout 1 minAbout 364 words