Parse Video and Presentation from NVIDIA's GTC Website

In the process of making the recordings and slides available publicly online, NVIDIA changed the URLs which I noted for myself before. So instead of going through every session on my list again manually, there's a Notebook doing it automatically.

requests is used to get the website, BeautifulSoup is used to parse it. The rest is massaging. (It's quite slow, because it does not run in parallel. I heard that there are more apt scrapers out there…)

In [1]:
import requests
from bs4 import BeautifulSoup

Everything on the GTC On Demand website goes through searches (:()

In [69]:
BASEURL = "http://on-demand-gtc.gputechconf.com/gtcnew/on-demand-gtc.php?submit=&searchByKeyword="

Go down the tree to get the links; all the if cases are there in case one of the expected links is not given

In [158]:
def getLinks(soup):
    link = None
    if soup.find(id='pageWide') is not None:
        if soup.find(id='pageWide').find(class_="quick-link-area") is not None:
            if soup.find(id='pageWide').find(class_="quick-link-area").find("a") is not None:
                link = soup.find(id='pageWide').find(class_="quick-link-area").find("a")['href']
    mp4 = None
    pdf = None
    idAllData = soup.find(id="all_data")
    if soup.find(id="all_data") is not None:
        if soup.find(id="all_data").find_all(class_="wmv-text") is not None:
            idAllData = soup.find(id="all_data").find_all(class_="wmv-text")
            for entry in idAllData:
                if entry.find("a") is not None:
                    if entry.find("a")['href'] is not None:
                        if ".mp4" in entry.find("a")["href"].lower():
                            mp4 = entry.find("a")['href']
                        if ".pdf" in entry.find("a")["href"].lower():
                            pdf = entry.find("a")['href']
    return dict({
        "link": link,
        "mp4": mp4,
        "pdf": pdf
    })

Combine requests with the custom BeautifulSoup parsing

In [132]:
def idToLinks(id):
    r = requests.get(BASEURL + str(id))
    return getLinks(BeautifulSoup(r.content, "lxml"))

Following, the list of sessions I have on my list

In [74]:
ids = ["S7824", "S7622", "S7495", "S7122", "S7445", "S7444", "S7362", "S7628", "S7285", "S7764", "S7128", "S7700", "S7628", "S7150", "S7405", "S7438", "S7133", "S7142", "S7356", "S7546", "S7155", "S7344", "S7192", "S7496", "S7626", "S7636", "S7341", "S7640", "S7672", "S7635", "S7478", "S7193", "S7735", "S7382", "S7535", "S7457", "S7515", "S7800", "S7860", "S7666", "S7804", "S7564", "S7332", "S7785", "S7609", "S7590", "S7296", "S7329", "S7482", "S7642"]

This goes through the list of IDs and serially extracts the links for them. It's slow. But it's cached…

In [160]:
allLinks = [idToLinks(id) for id in ids]

DEBUG Have a look at the entries which have a None at the video or presentation positions

In [161]:
for id, links in zip(ids, allLinks):
    if (links["link"] is None) or ((links["mp4"] is None) or (links["pdf"] is None)):
        print("ID {} has Nones: {}  {}  {}".format(id, links["link"], links["mp4"], links["pdf"]))
ID S7362 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/77mBeE  http://on-demand.gputechconf.com/gtc/2017/video/s7362-yifan-sun-frank-zhao-benchmarking-the-new-unified-memory-of-cuda-8.mp4  None
ID S7700 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/iflrAb  http://on-demand.gputechconf.com/gtc/2017/video/s7700-mason-introduction-gpu-memory-model-presented-by-acceleware.mp4  None
ID S7535 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/5g6tCZ  http://on-demand.gputechconf.com/gtc/2017/video/s7535-ronald-caplan-potential-field-solutions-of-the-solar-corona-converting-a-pcg-solver-from-mpi-to-mpi+openacc.mp4  None
ID S7800 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/2w9shU  None  http://on-demand.gputechconf.com/gtc/2017/presentation/s7800-justin-lawyer-machine-learning-service.pdf
ID S7804 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/1EWCvX  http://on-demand.gputechconf.com/gtc/2017/video/s7804-dobson-tensorflow-open-source-machine-learning.PNG.mp4  None
ID SE7142 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/3GkAy  None  None
ID S7590 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/aJxlFb  None  None
ID S7482 has Nones: http://on-demand-gtc.gputechconf.com/gtc-quicklink/nF5CeG  None  None

Put the information into a string (for each ID)

In [162]:
def genString(link):
    compiledString = "("
    compiledString += "[link]({})".format(link["link"])
    if link["mp4"] is not None:
        compiledString += ", [recording]({})".format(link["mp4"])
    if link["pdf"] is not None:
        compiledString += ", [slides]({})".format(link["pdf"])
    compiledString += ")"
    return compiledString

Finally, loop through all the ids

In [168]:
for id, links in zip(ids, allLinks):
    print("ID {} ----".format(id), genString(links))
ID S7824 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/eioXev4), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7824-sanjiv-satoor-developer-tools-update-in-cuda-9.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7824-rafeal-campana-developer-tools-update-in-cuda9.pdf))
ID S7622 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/bekSPc), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7622-perelygin-robust-scalable-cuda-parallel-programming-model.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7622-Kyrylo-perelygin-robust-and-scalable-cuda.pdf))
ID S7495 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/imKh6), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7495-jain-optimizing-application-performance-cuda-profiling.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7495-jain-optimizing-application-performance-cuda-profiling-tools.pdf))
ID S7122 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/a1VWq7), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7122-jones-stephen-cuda_optimization.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7122-stephen-jones-cuda-optimization-tips-tricks-and-techniques.pdf))
ID S7445 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/gOnddw), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7444-angerer-christoph-profiler_is_telling_you.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7444-Cristoph-Angerer-Optimizing-GPU.pdf))
ID S7444 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/e85bHy), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7444-angerer-christoph-profiler_is_telling_you.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7444-Cristoph-Angerer-Optimizing-GPU.pdf))
ID S7362 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/77mBeE), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7362-yifan-sun-frank-zhao-benchmarking-the-new-unified-memory-of-cuda-8.mp4))
ID S7628 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/1WddGI), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7628-michael-wolfe-the-future-of-gpu-data-management.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7628-Michael-Wolfe-GPU.pdf))
ID S7285 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/2M3wE), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7285-sakharnykh-unified-memory-latest-gpu-architectures.PNG.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7285-nikolay-sakharnykh-unified-memory-on-pascal-and-volta.pdf))
ID S7764 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/fla9w8), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7764-john-hubbard-gpus-using-hmm-to-blur-the-lines-between-cpu-and-gpu-programming.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7764_john-hubbardgpus-using-hmm-blur-the-lines-between-cpu-and-gpu.pdf))
ID S7128 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/7aQLN0), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7128-elena-agostini-now-to-enable-nvidia-cuda-stream-synchronous-communications.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7128-davide-rossetti-how-to-enable.pdf))
ID S7700 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/iflrAb), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7700-mason-introduction-gpu-memory-model-presented-by-acceleware.mp4))
ID S7628 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/1WddGI), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7628-michael-wolfe-the-future-of-gpu-data-management.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7628-Michael-Wolfe-GPU.pdf))
ID S7150 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/catHu), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7150-tillet-phillippe-accelerating_cublas.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7150-philippe-tillet-accelerating-cublas-cudnn-using-input-aware.pdf))
ID S7405 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/biOs0Rz), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7405-miles-cranmer-bifrost-a-pythonc++-framework-for-easy-high-throughput-computing.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7405-miles-cranmer-bifrost-a-pythonc-framework-for-easy-high-throughput-computing.pdf))
ID S7438 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/7gGeJo), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7438-maynard-build-systems-combining-cuda-modern-cmake_2.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7438-robert-maynard-build-systems-combining-cuda-and-machine-learning.pdf))
ID S7133 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/cfwe3D), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7133-jiri-kraus-multi-gpu-programming-with-mpi.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7133-jiri-kraus-multi-gpu-programming.PDF))
ID S7142 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/b3GpNDX), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7142-multi-gpu-programming-models_1_.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7142-jiri-kraus-multi-gpu-programming-models.pdf))
ID S7356 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/gjA4UQ), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7356-hari-subramoni-mvapich2-gdr-pushing-the-frontier-of-hpc-and-deep-learning.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7356-khaled-hamidouche-mvapich2-gdr-pushing-the-frontier.pdf))
ID S7546 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/idJGJ), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7546-larkin-multi-gpu-programming-open-acc.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7546-jeff-larkin-multi-gpu-programming-with-openacc.pdf))
ID S7155 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/7nJFB), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7155-jeaugey-optimized-inter-gpu-collective-operations-nccl.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7155-jeaugey-nccl.pdf))
ID S7344 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/b3frkyp), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7344-christian-trott-kokkos-the-c-performance-portability-programming-model.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7344-christian-trott-Kokkos.pdf))
ID S7192 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/8WSE5h), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7192-ozen-ompss-openacc-multi-target-task-based-programming.PNG.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7192-guray-ozen-ompss-openacc-multi-target-task-based-programming-model-exploiting-gpu-kernals.pdf))
ID S7496 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/9y5vid4), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7496-karthik-raghavan-opencl-at-nvidia-best-practices.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7496-opencl-at-nvidia-best-practices.pdf))
ID S7626 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/8Hbn6r), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7626-oteski-simple-guideline-code-optimizations-modern-architectures-openacc-cuda.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7626-oteski-a- simple-guideline for-code-optimizations-on-modern-architectures-with-openacc-and-cuda.pdf))
ID S7636 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/1yMfE5), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7636-tian-tancache-directive-optimization-openacc-programming.PNG.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7636-tian-cache-directive-optimization0openacc-programming-model.pdf))
ID S7341 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/1TDhaRK), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7341-sunita-chandrasekaran-using-openacc-for-ngs-techniques-to-create-a-portable-and-easy-to-use-code-base.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7341-chandrasekaran-using-openacc-for-ngs.pdf))
ID S7640 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/2KrrqK), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7640-lin-porting-c-applications-to-gpus-with-opeanacc-lattice-quantum-chromodymamics.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7640-meifeng-lin-porting-C++-Applications-OpenACC-Lattice-Quantum-Chromodynamics.pdf))
ID S7672 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/aAiQAu), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7672-david-gutzwiller-openacc-best-practices-accelerating-the-c-numeca-fine-open-cfd-solver.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7672-david-gutzweiller-openacc-best-practices.pdf))
ID S7635 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/ddsH7), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7635-tom-papatheodore-comparison-of-openacc-and-openmp45-offloading-speeding-up-simulations-of-stellar-explosions.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7635-tom-papatheodore-comparison-of-openacc.pdf))
ID S7478 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/47QQV), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7478-open-acc-parallelize-irregular-algorithms-gpu.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7478-arnov-sinha-using-openacc-to-parallelize-irregular-computation.pdf))
ID S7193 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/379oqw), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7193-stephen-wang-achieving-portable-performance-for-gtc-p-with-openacc-on-gpu-multi-core-cpu-and-sunway-many-core-processor.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7193-stephen-wang-openacc-on-gpu.pdf))
ID S7735 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/baSTFJ), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7735-jenniffer-estrada-gpu-acceleration-of-the-higrad-computational-fluid-dynamics-code-with-mixed-openacc-and-cuda-fortran.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7735-jennifer-estrada-gpu-acceleration-of-the-higrad-computational-fluid-dynamic.pdf))
ID S7382 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/iJGve), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7382-john-stone-gpus-unleashed-analysis-of-petascale-molecular-simulations-with-vmd.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/S7382-john-stone-gpus-unleashed-petascale-vmd.pdf))
ID S7535 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/5g6tCZ), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7535-ronald-caplan-potential-field-solutions-of-the-solar-corona-converting-a-pcg-solver-from-mpi-to-mpi+openacc.mp4))
ID S7457 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/dDQaxI), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7457-will-ramey-deep-learning-demystified.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7457-william-ramey-deep learning demystified_v24.pdf))
ID S7515 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/8ckSlO), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7515 eliminating-the-regular-expression-with-neural-networks.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7515-tim-delisle-eliminating-the-regular-expression-with-neural-networks.pdf))
ID S7800 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/2w9shU), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7800-justin-lawyer-machine-learning-service.pdf))
ID S7860 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/73bntQ), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7860-bryan-catanzaro-starting-a-deep-learning-project.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7860-bryan-catanzaro-starting-deep-learning-project.pdf))
ID S7666 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/9i4h8), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7666-luke-de-oliveira-learning-partical-physics-by-example.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7666-luke-de-oliveira-particle-physics-generative-adversarial-networks.pdf))
ID S7804 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/1EWCvX), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7804-dobson-tensorflow-open-source-machine-learning.PNG.mp4))
ID SE7142 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/3GkAy))
ID S7564 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/6SZt9eX), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7564-allen-accelerator-programming-ecosystems.PNG.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7564-mark-harris-cuda-9-and-beyond.pdf))
ID S7332 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/dDGnHg), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7332-brant-robertson-accelerated-astrophysics-using-nvidia-dgx-1-to-simulate-and-understand-the-universe.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7332-brant-robertson-accelerated-astrophysics.pdf))
ID S7785 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/4JCLHY), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7785-peter-wang-harnessing_the_power_of_anaconda.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7785-stanley-seibert-harnessing-the-power-of-anaconda.pdf))
ID S7609 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/3DCtvr), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7609-jamie-gjerde-porting-after-effects-to-the-gpu.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7609-scott-carver-porting-after-effects-to-gpu.pdf))
ID S7590 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/aJxlFb))
ID S7296 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/7jvJF), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7296-anne-c-elster-cloudlighting-merging-gpu-based-hpc-with-cloud-services.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7296-elster-cloud-lightning-merging-gpu-based-hpc-with-cloud-services.pdf))
ID S7329 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/4gmFlp), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7329-dakkak-abdul-open-source_tools.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7329-abdul-dakkak-opensource-tools-for-gpu.pdf))
ID S7482 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/nF5CeG))
ID S7642 ---- ([link](http://on-demand-gtc.gputechconf.com/gtc-quicklink/dQ3eIE), [recording](http://on-demand.gputechconf.com/gtc/2017/video/s7642-fernanda-foertter-preparing-gpu-accelerated-applications-for-the-summit-supercomputer.mp4), [slides](http://on-demand.gputechconf.com/gtc/2017/presentation/s7642-fernanda-foertter-preparing-gpu-accelerated-app.pdf))

We're done! 😄