Skip to content

Commit

Permalink
update exp 3
Browse files Browse the repository at this point in the history
  • Loading branch information
zqh-wz committed May 15, 2024
1 parent 8c431c3 commit 5111ee3
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions docs/exp/3.spmm.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

负责助教:张齐颢 [email protected]

在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 OpenMP, CUDA 编程以及 CPU, GPU 体系结构。
在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 CUDA 编程以及 GPU 体系结构。

## 实验任务

Expand Down Expand Up @@ -83,7 +83,7 @@ make -j4
# 运行单个数据点
srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset <datasetname> --len 32 --datadir ~/PA3/data/ # 所有的数据集在 ~/PA3/data/ 中
# 运行全部 GPU 数据点
srun -N 1 --gres=gpu:1 ~/PA3/script/run_all.sh # 在 PA3/scripts 目录下
srun -N 1 --gres=gpu:1 ~/PA3/script/run_all.sh # 在 PA3/script 目录下
# 改变环境变量,仅仅运行单个测试,例如验证正确性(Validation)
GTEST_FILTER="SpMMTest.validation" # 运行全部 GPU 数据点
srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset <datasetname> --len 32 --datadir ~/PA3/data/
Expand Down Expand Up @@ -113,7 +113,7 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir

### 性能

性能得分共占 $30\%$, 针对 GPU 测试 13 个数据集 (`scripts/run_all.sh`中指定), 两种 $K$ 的长度;
性能得分共占 $30\%$, 针对 GPU 测试 13 个数据集 (`script/run_all.sh`中指定), 两种 $K$ 的长度;

* 对于每组测试用例,只有当你获得了正确性基础分后,才能得到性能分。每组测试用例的性能分数相同。
* 每组测试用例有一个性能线,超过性能线的同学将得到满分。
Expand All @@ -122,7 +122,7 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir

#### 性能线

为避免针对对于每个数据集进行微调导致不必要的工作量, 发布两种性能线:整体性能线和针对每个数据集的性能线, 达到整体 **或者** 针对单个数据集的性能线, 即可获得全部性能分.
为避免对于每个数据集进行微调导致不必要的工作量,发布两种性能线:整体性能线和针对每个数据集的性能线达到整体 **或者** 针对单个数据集的性能线,即可获得性能分。

* 如果你满足了整体性能线, 则得到当前setting下对应的所有数据点的满分(即使有数据集没达线)
* 如果你满足了某个数据集的性能线, 则得到这个数据集的所有性能分
Expand Down Expand Up @@ -188,9 +188,9 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir

```bash
# 得到程序运行的总结,包括整个程序运行过程中,各个 kernel 以及 CUDA API 的执行时间和次数
srun --gpus 1 nvprof ./test/unit_tests xxxxxxxxxx
srun -N 1 --gres=gpu:1 nvprof ./test/unit_tests xxxxxxxxxx
# profile 单个 kernel 的执行情况,通过 --kernels 指定要 profile 的 kernel 的名称;通过 --metrics 指定要 profile 的是什么 metric,如 dram_read_bytes, achieved_occupancy 等,也可以指定为 all 来得到所有的 metric
srun --gpus 1 nvprof --kernels "KERNEL1|KERNEL2" --metrics "METRIC1|METRIC2" ./test/unit_tests xxxxxxxxxx
srun -N 1 --gres=gpu:1 nvprof --kernels "KERNEL1|KERNEL2" --metrics "METRIC1|METRIC2" ./test/unit_tests xxxxxxxxxx
```

关于可以 profile 得到的性能指标以及 `nvprof` 更高级的使用方法可以参考 <https://docs.nvidia.com/cuda/profiler-users-guide/index.html>
Expand All @@ -205,14 +205,14 @@ srun --gpus 1 nvprof --kernels "KERNEL1|KERNEL2" --metrics "METRIC1|METRIC2" ./t
## 注意事项

- 禁止任何欺骗评测程序的手段,包括但不限于直接输出时间、干扰校验程序运行、提前保存结果以在测试时直接输出等。一经发现,将取消本次实验得分。
- 你修改的文件应该仅限于 `spmm_opt.h`, `spmm_opt.cu`, `spmm_cpu_opt.h`, `spmm_cpu_opt.cpp`。即使修改了其他文件(如用于调试等目的),也要确保在 **不进行这些修改** 的情况下,程序能够正确编译运行。助教将替换所有其他文件为下发的版本后进行评测,以确保评分的正确性和公平性。
- 你修改的文件应该仅限于 `spmm_opt.h`, `spmm_opt.cu`。即使修改了其他文件(如用于调试等目的),也要确保在 **不进行这些修改** 的情况下,程序能够正确编译运行。助教将替换所有其他文件为下发的版本后进行评测,以确保评分的正确性和公平性。
- 集群的登陆结点与计算结点配备了不同的 GPU,**最终得分以计算结点为准(NVIDIA Tesla P100),程序在登陆结点的性能或正确性不作为评分依据。**


**严格查重,如果有任何参考借鉴,请在报告中写出来。**

## 意见反馈
<!-- ## 意见反馈
关于本作业的问题可以在共享文档中反馈,助教会 check ,热心的同学也可以帮忙回答,共创良好讨论氛围。
<!-- 【腾讯文档】高性能作业 PA3 反馈:<https://docs.qq.com/doc/DQURXTEF3dldBV0pC> -->
【腾讯文档】高性能作业 PA3 反馈:<https://docs.qq.com/doc/DQURXTEF3dldBV0pC> -->

0 comments on commit 5111ee3

Please sign in to comment.