2
2
3
3
4
4
5
- 在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 OpenMP, CUDA 编程以及 CPU, GPU 体系结构。
5
+ 在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 CUDA 编程以及 GPU 体系结构。
6
6
7
7
## 实验任务
8
8
@@ -83,7 +83,7 @@ make -j4
83
83
# 运行单个数据点
84
84
srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset < datasetname> --len 32 --datadir ~ /PA3/data/ # 所有的数据集在 ~/PA3/data/ 中
85
85
# 运行全部 GPU 数据点
86
- srun -N 1 --gres=gpu:1 ~ /PA3/script/run_all.sh # 在 PA3/scripts 目录下
86
+ srun -N 1 --gres=gpu:1 ~ /PA3/script/run_all.sh # 在 PA3/script 目录下
87
87
# 改变环境变量,仅仅运行单个测试,例如验证正确性(Validation)
88
88
GTEST_FILTER=" SpMMTest.validation" # 运行全部 GPU 数据点
89
89
srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset < datasetname> --len 32 --datadir ~ /PA3/data/
@@ -113,7 +113,7 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir
113
113
114
114
### 性能
115
115
116
- 性能得分共占 $30\% $, 针对 GPU 测试 13 个数据集 (` scripts /run_all.sh` 中指定), 两种 $K$ 的长度;
116
+ 性能得分共占 $30\% $, 针对 GPU 测试 13 个数据集 (` script /run_all.sh` 中指定), 两种 $K$ 的长度;
117
117
118
118
* 对于每组测试用例,只有当你获得了正确性基础分后,才能得到性能分。每组测试用例的性能分数相同。
119
119
* 每组测试用例有一个性能线,超过性能线的同学将得到满分。
@@ -122,7 +122,7 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir
122
122
123
123
#### 性能线
124
124
125
- 为避免针对对于每个数据集进行微调导致不必要的工作量, 发布两种性能线:整体性能线和针对每个数据集的性能线, 达到整体 ** 或者** 针对单个数据集的性能线, 即可获得全部性能分.
125
+ 为避免对于每个数据集进行微调导致不必要的工作量, 发布两种性能线:整体性能线和针对每个数据集的性能线, 达到整体 ** 或者** 针对单个数据集的性能线,即可获得性能分。
126
126
127
127
* 如果你满足了整体性能线, 则得到当前setting下对应的所有数据点的满分(即使有数据集没达线)
128
128
* 如果你满足了某个数据集的性能线, 则得到这个数据集的所有性能分
@@ -188,9 +188,9 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir
188
188
189
189
``` bash
190
190
# 得到程序运行的总结,包括整个程序运行过程中,各个 kernel 以及 CUDA API 的执行时间和次数
191
- srun --gpus 1 nvprof ./test/unit_tests xxxxxxxxxx
191
+ srun -N 1 --gres=gpu: 1 nvprof ./test/unit_tests xxxxxxxxxx
192
192
# profile 单个 kernel 的执行情况,通过 --kernels 指定要 profile 的 kernel 的名称;通过 --metrics 指定要 profile 的是什么 metric,如 dram_read_bytes, achieved_occupancy 等,也可以指定为 all 来得到所有的 metric
193
- srun --gpus 1 nvprof --kernels " KERNEL1|KERNEL2" --metrics " METRIC1|METRIC2" ./test/unit_tests xxxxxxxxxx
193
+ srun -N 1 --gres=gpu: 1 nvprof --kernels " KERNEL1|KERNEL2" --metrics " METRIC1|METRIC2" ./test/unit_tests xxxxxxxxxx
194
194
```
195
195
196
196
关于可以 profile 得到的性能指标以及 ` nvprof ` 更高级的使用方法可以参考 < https://docs.nvidia.com/cuda/profiler-users-guide/index.html > 。
@@ -205,14 +205,14 @@ srun --gpus 1 nvprof --kernels "KERNEL1|KERNEL2" --metrics "METRIC1|METRIC2" ./t
205
205
## 注意事项
206
206
207
207
- 禁止任何欺骗评测程序的手段,包括但不限于直接输出时间、干扰校验程序运行、提前保存结果以在测试时直接输出等。一经发现,将取消本次实验得分。
208
- - 你修改的文件应该仅限于 ` spmm_opt.h ` , ` spmm_opt.cu ` , ` spmm_cpu_opt.h ` , ` spmm_cpu_opt.cpp ` 。即使修改了其他文件(如用于调试等目的),也要确保在 ** 不进行这些修改** 的情况下,程序能够正确编译运行。助教将替换所有其他文件为下发的版本后进行评测,以确保评分的正确性和公平性。
208
+ - 你修改的文件应该仅限于 ` spmm_opt.h ` , ` spmm_opt.cu ` 。即使修改了其他文件(如用于调试等目的),也要确保在 ** 不进行这些修改** 的情况下,程序能够正确编译运行。助教将替换所有其他文件为下发的版本后进行评测,以确保评分的正确性和公平性。
209
209
- 集群的登陆结点与计算结点配备了不同的 GPU,** 最终得分以计算结点为准(NVIDIA Tesla P100),程序在登陆结点的性能或正确性不作为评分依据。**
210
210
211
211
212
212
** 严格查重,如果有任何参考借鉴,请在报告中写出来。**
213
213
214
- ## 意见反馈
214
+ <!-- ## 意见反馈
215
215
216
216
关于本作业的问题可以在共享文档中反馈,助教会 check ,热心的同学也可以帮忙回答,共创良好讨论氛围。
217
217
218
- <!-- 【腾讯文档】高性能作业 PA3 反馈:<https://docs.qq.com/doc/DQURXTEF3dldBV0pC> -->
218
+ 【腾讯文档】高性能作业 PA3 反馈:<https://docs.qq.com/doc/DQURXTEF3dldBV0pC> -->
0 commit comments