|
@@ -62,7 +62,14 @@ for (int i = 0; i < steps; ++i) {
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
-
|
|
|
+| 问题规模 | 任务数 | 总运行时间(sec) |
|
|
|
+| -------- | ------------- | --------------- |
|
|
|
+| 4 | 4 | 0.021 |
|
|
|
+| 8 | 8 | 0.025 |
|
|
|
+| 16 | 16 | 0.020 |
|
|
|
+| 32 | 32 | 0.168 |
|
|
|
+| 64 | 64(跨机器) | 0.397 |
|
|
|
+| 128 | 128(跨机器) | 0.447 |
|
|
|
|
|
|
#### 二叉树求和
|
|
|
|
|
@@ -125,8 +132,14 @@ End
|
|
|
*完整代码见附件*
|
|
|
|
|
|
##### 性能结果
|
|
|
-
|
|
|
-
|
|
|
+| 问题规模 | 任务数 | 总运行时间(sec) |
|
|
|
+| -------- | ------------- | --------------- |
|
|
|
+| 4 | 4 | 0.022 |
|
|
|
+| 8 | 8 | 0.013 |
|
|
|
+| 16 | 16 | 0.048 |
|
|
|
+| 32 | 32 | 0.156 |
|
|
|
+| 64 | 64(跨机器) | 0.394 |
|
|
|
+| 128 | 128(跨机器) | 0.466 |
|
|
|
|
|
|
### FOX矩阵乘法
|
|
|
|
|
@@ -261,6 +274,20 @@ void MatMultAdd(const MatWrap& a, const MatWrap& b, MatWrap& c) {
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
+| 问题规模 | 并行数 | 总运行时间(sec) |
|
|
|
+| -------- | ------ | --------------- |
|
|
|
+| 128 | 1 | 0.123 |
|
|
|
+| 256 | 4 | 0.288 |
|
|
|
+| 512 | 16 | 0.784 |
|
|
|
+| 1024 | 64 | 4.856 |
|
|
|
+
|
|
|
+| 问题规模 | 并行数 | 总运行时间(sec) |
|
|
|
+| -------- | ------ | --------------- |
|
|
|
+| 512 | 1 | 2.551 |
|
|
|
+| 512 | 4 | 1.099 |
|
|
|
+| 512 | 16 | 0.784 |
|
|
|
+| 512 | 64 | 1.248 |
|
|
|
+
|
|
|
### 参数服务器系统
|
|
|
|
|
|
##### 并行算法描述
|
|
@@ -336,6 +363,24 @@ end do
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
+| 交换次数 | 服务器数 | 工作进程数 | 总运行时间(sec) |
|
|
|
+| -------- | -------- | ---------- | --------------- |
|
|
|
+| 1024 | 1 | 8 | 0.036 |
|
|
|
+| 1024 | 2 | 16 | 0.087 |
|
|
|
+| 1024 | 4 | 24 | 0.268 |
|
|
|
+| 1024 | 4 | 32 | 0.292 |
|
|
|
+
|
|
|
+| 交换次数 | 服务器数 | 工作进程数 | 总运行时间(sec) |
|
|
|
+| -------- | -------- | ---------- | --------------- |
|
|
|
+| 1024 | 1 | 64 | 0.441 |
|
|
|
+| 1024 | 2 | 64 | 1.496 |
|
|
|
+| 1024 | 4 | 64 | 0.714 |
|
|
|
+| 1024 | 8 | 64 | 0.684 |
|
|
|
+
|
|
|
+从结果上看,当工作进程数增加时,服务器成比例增加也难以保证总运行时间,因为每次运行需要所有服务器间通信一次。
|
|
|
+
|
|
|
+而当工作进程数固定下,增加服务器数并不能使服务时间线性下降,服务器为1时是一个特例,因为服务器间不再需要通信。因而在服务器负载均衡时,尽量减少服务器间的通信,有时不均衡的微服务设计会好于非常均匀的负载均衡。
|
|
|
+
|
|
|
## 个人实验
|
|
|
|
|
|
##### 问题描述
|
|
@@ -499,7 +544,19 @@ void sigmoid(float *x, float *y, int n) {
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
+| 问题规模 | OpenMP线程数 | 总运行时间(sec) |
|
|
|
+| -------- | ------------ | --------------- |
|
|
|
+| 64 | 1 | 0.492 |
|
|
|
+| 128 | 2 | 1.725 |
|
|
|
+| 256 | 4 | 6.681 |
|
|
|
+| 512 | 8 | 46.498 |
|
|
|
|
|
|
+| 问题规模 | OpenMP线程数 | 总运行时间(sec) |
|
|
|
+| -------- | ------------ | --------------- |
|
|
|
+| 256 | 1 | 19.848 |
|
|
|
+| 256 | 2 | 11.068 |
|
|
|
+| 256 | 4 | 7.162 |
|
|
|
+| 256 | 8 | 6.252 |
|
|
|
|
|
|
## 分组实验
|
|
|
|
|
@@ -523,6 +580,8 @@ void sigmoid(float *x, float *y, int n) {
|
|
|
|
|
|
##### 性能结果
|
|
|
|
|
|
+1
|
|
|
+
|
|
|
| 问题规模 | 任务数 | 总运行时间 | 分发数据时间 | 并行计算时间 |
|
|
|
| -------- | ------ | ---------- | ------------ | ------------ |
|
|
|
| 512 | 1 | 0.387903 | 0.112848 | 0.275056 |
|
|
@@ -531,11 +590,24 @@ void sigmoid(float *x, float *y, int n) {
|
|
|
| 4096 | 8 | 19.073884 | 4.172863 | 14.901021 |
|
|
|
| 8192 | 16 | 100.614923 | 16.937205 | 83.677718 |
|
|
|
|
|
|
+2
|
|
|
+| 问题规模 | 任务数 | 总运行时间 | 分发数据时间 | 并行计算时间 |
|
|
|
+| -------- | ------ | ---------- | ------------ | ------------ |
|
|
|
+| 2048 | 1 | 5.461998 | 1.217323 | 4.244675 |
|
|
|
+| 2048 | 2 | 4.983760 | 1.240886 | 3.742874 |
|
|
|
+| 2048 | 4 | 4.045694 | 1.148780 | 2.896914 |
|
|
|
+| 2048 | 8 | 4.017666 | 1.161650 | 2.856016 |
|
|
|
+| 2048 | 16 | 4.135822 | 1.286142 | 2.849679 |
|
|
|
|
|
|
|
|
|
##### 改进
|
|
|
|
|
|
+* 使用Python,numpy生成输入数据
|
|
|
+
|
|
|
+* 重定向输出,使用管道重定向输出
|
|
|
+* 自动化性能测试脚本
|
|
|
|
|
|
+*完整代码见附件*
|
|
|
|
|
|
### fft
|
|
|
|