From fa7db8bf559dd78e42f34e5c60443c8c7486f174 Mon Sep 17 00:00:00 2001 From: Mathias Wagner <mathiasw@nvidia.com> Date: Sat, 16 Nov 2019 09:55:34 -0700 Subject: [PATCH] more fixes to master notebook and more CMake --- 4-GPU/HandsOn/.master/CMakeLists.txt | 37 +++++++++++++++++-- .../HandsOnGPUProgramming_master.ipynb | 10 ++++- 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/4-GPU/HandsOn/.master/CMakeLists.txt b/4-GPU/HandsOn/.master/CMakeLists.txt index 9d0cfd4..50d0946 100644 --- a/4-GPU/HandsOn/.master/CMakeLists.txt +++ b/4-GPU/HandsOn/.master/CMakeLists.txt @@ -13,20 +13,51 @@ add_custom_command(OUTPUT HandsOnGPUProgramming.ipynb COMMAND jupyter nbconvert --ClearOutputPreprocessor.enabled=True --inplace HandsOnGPUProgramming.ipynb DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/HandsOnGPUProgramming_master.ipynb) +add_custom_command(OUTPUT HandsOnGPUProgramming.html + COMMAND jupyter nbconvert --to html --output HandsOnGPUProgramming.html HandsOnGPUProgramming.ipynb + DEPENDS HandsOnGPUProgramming.ipynb + ) + +add_custom_command(OUTPUT HandsOnGPUProgramming.pdf + COMMAND jupyter nbconvert --to pdf --output HandsOnGPUProgramming.pdf HandsOnGPUProgramming.ipynb + DEPENDS HandsOnGPUProgramming.ipynb + ) + add_custom_command(OUTPUT HandsOnGPUProgramming_Solution.ipynb COMMAND notebook-splitter --remove "task" ${CMAKE_CURRENT_SOURCE_DIR}/HandsOnGPUProgramming_master.ipynb --output HandsOnGPUProgramming_Solution.ipynb DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/HandsOnGPUProgramming_master.ipynb) +add_custom_command(OUTPUT HandsOnGPUProgramming_Solution.html + COMMAND jupyter nbconvert --to html --output HandsOnGPUProgramming_Solution.html HandsOnGPUProgramming_Solution.ipynb + DEPENDS HandsOnGPUProgramming_Solution.ipynb + ) + +add_custom_command(OUTPUT HandsOnGPUProgramming_Solution.pdf + COMMAND jupyter nbconvert --to pdf --output HandsOnGPUProgramming_Solution.pdf HandsOnGPUProgramming_Solution.ipynb + DEPENDS HandsOnGPUProgramming_Solution.ipynb + ) + add_custom_target(notebook_task DEPENDS HandsOnGPUProgramming.ipynb) +add_custom_target(notebook_task_html DEPENDS HandsOnGPUProgramming.html) +add_custom_target(notebook_task_pdf DEPENDS HandsOnGPUProgramming.pdf) add_custom_target(notebook_solution DEPENDS HandsOnGPUProgramming_Solution.ipynb) -add_custom_target(notebook ALL DEPENDS notebook_solution notebook_task) +add_custom_target(notebook_solution_html DEPENDS HandsOnGPUProgramming_Solution.html) +add_custom_target(notebook_solution_pdf DEPENDS HandsOnGPUProgramming_Solution.pdf) + +add_custom_target(notebook ALL DEPENDS notebook_solution notebook_solution_html notebook_task notebook_task_html) file(RELATIVE_PATH RELPATH ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) set(SOLUTION_DIR ${CMAKE_SOURCE_DIR}/../Solution/${RELPATH}) set(TASK_DIR ${CMAKE_SOURCE_DIR}/../${RELPATH}) -set(TASK_FILES ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming.ipynb) -set(SOLUTION_FILES ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming_Solution.ipynb) +set(TASK_FILES ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming.ipynb + ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming.html + # ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming.pdf +) +set(SOLUTION_FILES ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming_Solution.ipynb + ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming_Solution.html +# ${CMAKE_CURRENT_BINARY_DIR}/HandsOnGPUProgramming_Solution.pdf + ) message(VERBOSE "TASK FILES ${TASK_FILES} GO TO ${TASK_DIR}") message(VERBOSE "SOLUTION FILES ${SOLUTION_FILES} GO TO ${SOLUTION_DIR}") diff --git a/4-GPU/HandsOn/.master/HandsOnGPUProgramming_master.ipynb b/4-GPU/HandsOn/.master/HandsOnGPUProgramming_master.ipynb index 4e5bfe9..51108da 100644 --- a/4-GPU/HandsOn/.master/HandsOnGPUProgramming_master.ipynb +++ b/4-GPU/HandsOn/.master/HandsOnGPUProgramming_master.ipynb @@ -192,6 +192,8 @@ "\n", "* [Task 5](#task5) Put NVSHMEM calls on stream to hide API calls and GPU/CPU synchronization \n", "\n", + "* [Task 6](#task6) Use NVSHMEM to fine-grained also update the halo region of your neighbors \n", + "\n", "\n", "### Survey\n", " \n", @@ -1632,7 +1634,11 @@ "---\n", "# Tasks using NVSHMEM \n", "\n", - "**The following tasks are using NVSHMEM instead of MPI. NVSHMEM is currently available as early access software. Please read the following carefully before starting these tasks.**\n", + "\n", + "**The following tasks are using NVSHMEM instead of MPI**. \n", + "**NVSHMEM is currently available as early access software.** \n", + "**Please read the following carefully before starting these tasks.**\n", + "\n", "\n", "* *NVSHMEM early access 0.3.2* is installed on Ascent. It is provided under the license in [LICENSE_NVSHMEM.md](./LICENSE_NVSHMEM.md).\n", "* If you want to continue using the NVHSMEM early access version beyond this tutorial you need to apply for early access at https://developer.nvidia.com/nvshmem\n", @@ -2402,7 +2408,7 @@ "exercise": "task" }, "source": [ - "## Task 6: <a name=\"task5\"></a>Use direct load/store to remote memory\n", + "## Task 6: <a name=\"task6\"></a>Use direct load/store to remote memory\n", "\n", "NVSHMEM allows you to put communications in the GPU kernels. However, the `nvhsmem_put / nvshmem_get` calls are not easily available in OpenACC kernels. However, for *intranode* communication when all GPUs can use P2P (as in the nodes in Ascent and Summit) you can get a pointer to a remote GPUs memory using `nvshmem_ptr`.\n", "\n", -- GitLab