Hands-on

必要なファイル、データをコピー• 講習会で使うハンズオンコードは以下にあります• /work/gt00/share/20230621_GPU-bootcamp/hands-on.tar.gz• Wisteria にログインした後• $ cd /work/gt00/tXXXXX *tXXXXX はアカウント名• $ cp /work/gt00/share/20230621_GPU-bootcamp/hands-on.tar.gz .
• $ tar xvzf hands-on.tar.gz• コンパイルおよび実⾏のための環境準備• $ module load nvidia/23.3

hands-on/|-- cuda||-- dcdread.h||-- Makefile||-- rdf.cu||-- rdf.f90||-- solution|||-- dcdread.h|||-- Makefile|||-- rdf_malloc.cu|||-- rdf_unified_memory.cu|||-- rdf_unified_memory.f90||`-- submit.sh||-- vector_addition_gpu_block_only.cu||-- vector_addition_gpu_thread_block.cu|`-- vector_addition_gpu_thread_only.cu|-- input|`-- alk.traj.dcd|-- iso||-- dcdread.h||-- Makefile||-- rdf.cpp||-- rdf.f90|`-- solution||-- dcdread.h||-- Makefile||-- rdf.cpp||-- rdf.f90|`-- submit.sh`-- openacc|-- dcdread.h|-- Makefile|-- rdf.cpp|-- rdf.f90`-- solution|-- data||-- dcdread.h||-- Makefile||-- rdf_data_directive.cpp||-- rdf_data_directive.f90|`-- submit.sh|-- kernel||-- dcdread.h||-- Makefile||-- rdf_kernel_directive.cpp||-- rdf_kernel_directive.f90|`-- submit.sh|-- multicore||-- dcdread.h||-- Makefile||-- rdf.cpp||-- rdf.f90|`-- submit.sh`-- parallel|-- dcdread.h|-- Makefile|-- rdf.cpp|-- rdf.f90`-- submit.shハンズオン• C++ or Fortran を選択し、以下の教材に沿ってハンズオンを実施• ISO standard: https://github.com/openhackathonsorg/nways_accelerated_programming/blob/df3d3ceec17bd4b483e10c2ee93ab2a6d57ebbe5/_basic/iso/jupyter_notebook/nw
ays_iso.ipynb• OpenACC: https://github.com/openhackathonsorg/nways_accelerated_programming/blob/df3d3ceec17bd4b483e10c2ee93ab2a6d57ebbe5/_basic/openacc/jupyter_noteboo
k/nways_openacc.ipynb• CUDA: https://github.com/openhackathonsorg/nways_accelerated_programming/blob/df3d3ceec17bd4b483e10c2ee93ab2a6d57ebbe5/_basic/cuda/jupyter_notebook/nways_cuda.ipynb• 教材を読み進める• ハンズオンコードは、上記 jupyter-notebook 中のリンクを開くのではなく、Wisteria 上でコピーしたものを使⽤しビルド、実⾏• 正しい結果を得られるようにコードを修正Nsight Systems のローカル端末へのインストール
Win/Mac ⽤も

https://developer.nvidia.com/nsight-systems

Nsight Systems 101
Quick start• Nsight Systems CLI によるプロファイリング
$ nsys profile [options] <application> [application-arguments]• -t <parameters>: トレースする API を指定。デフォルトは、cuda, opengl nvtx, osrt

• --stats <true|false>: true でプログラム実⾏時の統計情報を標準出⼒に表⽰• -o <filename>: 出⼒ファイル名を指定• --force-overwrite <true|false>: true で出⼒ファイルの上書きを許可。デフォルトは falseなど... 詳細は、nsys --help or nsys [specific command] --help で確認可能• <filename>.nsys-rep が出⼒される• ローカルに <filename>.nsys-rep を転送し、Nsight Systems UI で可視化

Nsight Systems user guide:
https://docs.nvidia.com/nsight-systems/UserGuide/index.html

Nsight Systems 101
Example• 実⾏コマンド例$ nsys profile--stats true --force-overwrite true -o my_report python solution.py
NVTX Range Statistics:• 統計情報が標準出⼒に出⼒されるTime (%)-------87.99.7
2.4

Total Time (ns)--------------1,015,559,769
112,401,039
27,280,924

Instances--------111Avg (ns)--------------1,015,559,769.0
112,401,039.0
27,280,924.0

Med (ns)--------------1,015,559,769.0
112,401,039.0
27,280,924.0

Min (ns)------------1,015,559,769
112,401,039
27,280,924

Max (ns)------------1,015,559,769
112,401,039
27,280,924

StdDev (ns)----------0.0
0.0
0.0

Style
------PushPop
PushPopPushPop

Range------------------------Read_File
CuPy_Pair_gpu_Circulation
Entropy_Calculation...
[5/8] Executing 'cudaapisum' stats report
CUDA API Statistics:
Time (%)-------94.3
5.1
0.4
0.0
0.0
...

Total Time (ns)--------------219,106,094
11,788,845
958,943
106,326
67,470Num Calls--------4
12
11

Avg (ns)-----------54,776,523.5
11,788,845.0
479,471.5
106,326.0
67,470.0

Med (ns)-----------8,807.5
11,788,845.0
479,471.5106,326.0
67,470.0

Min (ns)---------6,97811,788,845
6,294
106,326
67,470Max (ns)----------219,081,501
11,788,845
952,649
106,326
67,470

StdDev (ns)------------109,536,651.7
0.0
669,174.0
0.0
0.0

Med (ns)-----------11,817,865.0

Min (ns)---------11,817,865

Max (ns)---------11,817,865

StdDev (ns)----------0.0

Name---------------------------cudaMalloc
cudaDeviceSynchronize
cudaHostAlloccuModuleLoadData
cuModuleUnload[6/8] Executing 'gpukernsum' stats report
CUDA Kernel Statistics:
Time (%)-------100.0

Total Time (ns)--------------11,817,865

Instances--------1

Avg (ns)-----------11,817,865.0

Name------------cupy_pair_gpu[7/8] Executing 'gpumemtimesum' stats report
CUDA Memory Operation Statistics (by time):
Time (%)-------98.1
1.9

Total Time (ns)--------------143,295
2,784Count----4
1Avg (ns)-------35,823.8
2,784.0

Med (ns)-------46,207.5
2,784.0

Min (ns)-------3,232
2,784

Max (ns)-------47,648
2,784

StdDev (ns)----------21,738.5
0.0Operation-----------------[CUDA memcpy HtoD][CUDA memcpy DtoH][8/8] Executing 'gpumemsizesum' stats report
CUDA Memory Operation Statistics (by size):
Total (MB)---------1.629
0.016

Count
----4
1Avg (MB)-------0.407
0.016

Med (MB)-------0.538
0.016

Min (MB)-------0.016
0.016

Max (MB)-------0.5380.016

StdDev (MB)----------0.261
0.000Operation-----------------[CUDA memcpy HtoD][CUDA memcpy DtoH]

Nsight Systems 101
Example• *.nsys-rep を⼿元の端末に転送• ⼿元の端末で Nsight Systems を起動し、File->Open で *nsys-rep ファイルを選択
マウスオーバーすることで、ブロックサイズ、ブロック数などを確認可能

GPU カーネル
データ転送