-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
9 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,7 @@ | |
|
||
负责助教:张齐颢 [email protected] | ||
|
||
在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 OpenMP, CUDA 编程以及 CPU, GPU 体系结构。 | ||
在本实验中,你将通过实现 GPU 加速的稀疏矩阵-矩阵乘法(SpMM)进一步熟悉 CUDA 编程以及 GPU 体系结构。 | ||
|
||
## 实验任务 | ||
|
||
|
@@ -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/ | ||
|
@@ -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$ 的长度; | ||
|
||
* 对于每组测试用例,只有当你获得了正确性基础分后,才能得到性能分。每组测试用例的性能分数相同。 | ||
* 每组测试用例有一个性能线,超过性能线的同学将得到满分。 | ||
|
@@ -122,7 +122,7 @@ srun -N 1 --gres=gpu:1 ./test/unit_tests --dataset toy_graph --len 32 --datadir | |
|
||
#### 性能线 | ||
|
||
为避免针对对于每个数据集进行微调导致不必要的工作量, 发布两种性能线:整体性能线和针对每个数据集的性能线, 达到整体 **或者** 针对单个数据集的性能线, 即可获得全部性能分. | ||
为避免对于每个数据集进行微调导致不必要的工作量,发布两种性能线:整体性能线和针对每个数据集的性能线,达到整体 **或者** 针对单个数据集的性能线,即可获得性能分。 | ||
|
||
* 如果你满足了整体性能线, 则得到当前setting下对应的所有数据点的满分(即使有数据集没达线) | ||
* 如果你满足了某个数据集的性能线, 则得到这个数据集的所有性能分 | ||
|
@@ -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>。 | ||
|
@@ -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> --> |