{"id":13575199,"url":"https://github.com/codeplaysoftware/syclacademy","last_synced_at":"2025-04-12T21:47:33.713Z","repository":{"id":39704213,"uuid":"208274154","full_name":"codeplaysoftware/syclacademy","owner":"codeplaysoftware","description":"SYCL Academy, a set of learning materials for SYCL heterogeneous programming","archived":false,"fork":false,"pushed_at":"2025-01-30T18:11:37.000Z","size":302383,"stargazers_count":483,"open_issues_count":40,"forks_count":104,"subscribers_count":27,"default_branch":"main","last_synced_at":"2025-04-12T21:47:25.342Z","etag":null,"topics":["sycl"],"latest_commit_sha":null,"homepage":"https://codeplaysoftware.github.io/syclacademy/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeplaysoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-13T13:50:13.000Z","updated_at":"2025-04-12T08:34:36.000Z","dependencies_parsed_at":"2024-01-14T04:06:49.833Z","dependency_job_id":"a2b13871-d4fc-483c-b36c-b6a6c36bdc92","html_url":"https://github.com/codeplaysoftware/syclacademy","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeplaysoftware%2Fsyclacademy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeplaysoftware%2Fsyclacademy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeplaysoftware%2Fsyclacademy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeplaysoftware%2Fsyclacademy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeplaysoftware","download_url":"https://codeload.github.com/codeplaysoftware/syclacademy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248637832,"owners_count":21137538,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sycl"],"created_at":"2024-08-01T15:00:58.951Z","updated_at":"2025-04-12T21:47:33.690Z","avatar_url":"https://github.com/codeplaysoftware.png","language":"HTML","funding_links":[],"categories":["Tutorials"],"sub_categories":["Tools and Development"],"readme":"# SYCL Academy\n\n![SYCL Academy](sycl_academy_black.png#gh-light-mode-only \"SYCL Academy\")\n![SYCL Academy](sycl_academy_white.png#gh-dark-mode-only \"SYCL Academy\")\n\nThis repository provides materials that can be used for teaching SYCL. The\nmaterials are provided using the \"Creative Commons Attribution Share Alike 4.0\nInternational\" license.\n\n## What is SYCL?\n\nIf you're not familiar with SYCL or would like some further resources for\nlearning about SYCL below are a list of useful resources:\n\n*  Read a description of SYCL on the [Khronos website SYCL page](https://www.khronos.org/sycl/).\n*  Go to the Khronos website to find [a list of SYCL resources](https://www.khronos.org/sycl/resources).\n*  Check out the [SYCL 2020 reference guide](https://www.khronos.org/registry/SYCL/).\n*  Browse SYCL news, blog posts, videos, projects and more on the [sycl.tech community website](https://sycl.tech/)\n*  Get a list of the [available SYCL implementations](https://sycl.tech/#get-sycl)\n\n### How to use the Materials\n\nTo use these materials simply clone this repository including the required submodules.\n\n```\ngit clone --recursive https://github.com/codeplaysoftware/syclacademy.git\n```\n\nThe lectures are written in reveal.js, and can be found in `Lesson_Materials`,\nin the sub-directory for each topic. To view them simply open the `index.html`\nfile in your browser. Your browser will have a \"Full Screen\" mode that can be\nused to run the presentation, use the right and left cursors to move forward and\nbackward in the presentation.\n\nThe exercises can be found in `Code_Exercises` in the sub-directory for each\ntopic. Each exercise has a markdown document instructing what to do in the\nexercise, a source file to start with and a solution file to provide an\nexample implementation to compare against.\n\n## Contributing to SYCL Academy\n\nContributions to the materials are very gratefully received and this can be done\nby submitting a Pull Request with any changes. If you can, follow the\ninstructions [here](https://revealjs.com/pdf-export/) to generate a pdf file for\nany lecture slides you change. Please limit the scope of each\nPull Request so that they can be reviewed and merged in a timely manner.\n\n### List of Contributors\n\nCodeplay Software Ltd., Heidelberg University, Intel, Xilinx and University of Bristol.\n\n## Supporting Organizations\n\nAbertay University, Universidad de Concepcion, TU Dresden, University of\nEdinburgh, Federal University of Sao Carlos, University of Glasgow, Heriot Watt\nUniversity, Universitat Innsbruck, Universidad de Málaga, University of Salerno\nand University of the West of Scotland.\n\n## Lesson Curriculum\n\nThe SYCL Academy curriculum is divided up into a number of short lessons\nconsisting of slides for presenting the material and a more detailed write-up,\neach accompanied by a tutorial for getting hands on experience with the subject\nmatter.\n\nEach of the lessons are designed to be self contained modules in order to\nsupport both academic and training style teaching environments.\n\nA playlist of video content is [also available][video-playlist]. Though note that these\nslides and exercises may have changed since these videos were created so they\nmay not match completely.\n\n| Lesson | Title | Slides | Exercise | Source | Solution |\n|--------|-------|--------|----------|--------|----------|\n| 01 | What is SYCL | [slides][lesson-1-slides] | [exercise][lesson-1-exercise] | [source][lesson-1-source] | [solution][lesson-1-solution] |\n| 02 | Enqueueing a Kernel | [slides][lesson-2-slides] | [exercise][lesson-2-exercise] | [source][lesson-2-source] | [solution][lesson-2-solution] |\n| 03 | Managing Data | [slides][lesson-3-slides] | [exercise][lesson-3-exercise] | [source][lesson-3-source] | [solution][lesson-3-solution] |\n| 04 | Handling Errors | [slides][lesson-4-slides] | [exercise][lesson-4-exercise] | [source][lesson-4-source] | [solution][lesson-4-solution] |\n| 05 | Device Discovery | [slides][lesson-5-slides] | [exercise][lesson-5-exercise] | [source][lesson-5-source] | [solution][lesson-5-solution] |\n| 06 | Data Parallelism | [slides][lesson-6-slides] | [exercise][lesson-6-exercise] | [source][lesson-6-source] | [solution][lesson-6-solution] |\n| 07 | Introduction to USM | [slides][lesson-7-slides] | [exercise][lesson-7-exercise] | [source][lesson-7-source] | [solution][lesson-7-solution] |\n| 08 | Using USM | [slides][lesson-8-slides] | [exercise][lesson-8-exercise] | [source][lesson-8-source] | [solution][lesson-8-solution] |\n| 09 | Asynchronous Execution | [slides][lesson-9-slides] | [exercise][lesson-9-exercise] | [source][lesson-9-source] | [solution][lesson-9-solution] |\n| 10 | Data and Dependencies | [slides][lesson-10-slides] | [exercise][lesson-10-exercise] | [source][lesson-10-source] | [solution][lesson-10-solution] |\n| 11 | In Order Queue | [slides][lesson-11-slides] | [exercise][lesson-11-exercise] | [source][lesson-11-source] | [solution][lesson-11-solution] |\n| 12 | Advanced Data Flow | [slides][lesson-12-slides] | [exercise][lesson-12-exercise] | [source][lesson-12-source] | [solution][lesson-12-solution] |\n| 13 | Multiple Devices | [slides][lesson-13-slides] | [exercise][lesson-13-exercise] | [source][lesson-13-source] | [solution][lesson-13-solution] |\n| 14 | Image Convolution | [slides][lesson-15-slides] | [exercise][lesson-15-exercise] |  | [solution][lesson-15-solution] |\n| 15 | Coalesced Global Memory | [slides][lesson-16-slides] | [exercise][lesson-16-exercise] | [source][lesson-16-source] | [solution][lesson-16-solution] |\n| 16 | Vectors | [slides][lesson-17-slides] | [exercise][lesson-17-exercise] | [source][lesson-17-source] | [solution][lesson-17-solution] |\n| 17 | Local Memory Tiling | [slides][lesson-18-slides] | [exercise][lesson-18-exercise] | [source][lesson-18-source] | [solution][lesson-18-solution] |\n| 18 | Further Optimisations | [slides][lesson-19-slides] | [exercise][lesson-19-exercise] | [source][lesson-19-source] | [solution][lesson-19-solution] |\n| 19 | Matrix Transpose | [slides][lesson-20-slides] | [exercise][lesson-20-exercise] | [source][lesson-20-source] | [solution][lesson-20-solution] |\n| 20 | More SYCL Features | [slides][lesson-21-slides] | [exercise][lesson-21-exercise] | [source][lesson-21-source] | [solution][lesson-21-solution] |\n| 21 | Functors | [slides][lesson-22-slides] | [exercise][lesson-22-exercise] | [source][lesson-22-source] | [solution][lesson-22-solution] |\n\n### oneMath\n\nThe lessons in this table work with oneAPI, but might not work with other\nSYCL implementations.\n\n| Lesson | Title | Slides | Exercise | Source | Solution |\n|--------|-------|--------|----------|--------|----------|\n| 22 | OneMath GEMM | [slides][lesson-22-slides] | [execise][lesson-22-exercise] | [source][lesson-22-source] | [solution][lesson-22-solution] |\n\n## Building the Exercises\n\nThe exercises can be built for DPC++ and AdaptiveCpp.\n\n### Supported Platforms\n\nBelow is a list of the supported platforms and devices for each SYCL implementations,\nplease check this before deciding which SYCL implementation to use.\nMake sure to also install the specified version to ensure that you can build\nall of the exercises.\n\n| Implementation | Supported Platforms | Supported Devices | Required Version |\n|----------------|---------------------|-------------------|------------------|\n| DPC++ | [Intel DevCloud](#connecting-to-devcloud-via-ssh) \u003cbr\u003e Windows 10 Visual Studio 2019 (64bit) \u003cbr\u003e Red Hat Enterprise Linux 8, CentOS 8\u003cbr\u003e Ubtuntu 18.04 LTS, 20.04 LTS (64bit)\u003cbr\u003e Refer to [System Requirements][oneAPI-system-requirements] for more details | Intel CPU (OpenCL) \u003cbr\u003e Intel GPU (OpenCL) \u003cbr\u003e Intel FPGA (OpenCL) \u003cbr\u003e Nvidia GPU (CUDA)* | 2021.4\t|\n| AdaptiveCpp | Any Linux | CPU (OpenMP) \u003cbr\u003e AMD GPU (ROCm)*** \u003cbr\u003e NVIDIA GPU (CUDA)\u003cbr\u003e Intel GPU (Level Zero)\u003cbr\u003e Intel CPU, GPU (OpenCL) | 23.10.0 from Nov 1, 2023 or newer |\n\n\\* Supported in open source project only\n\n\\*\\* See [here][rocm-gpus] for the official list of GPUs supported by AMD for\nROCm. We do not recommend using GPUs earlier than gfx9 (Vega 10 and Vega 20\nchips).\n\n### Install SYCL implementations\n\nFirst you'll need to install your chosen SYCL implementation and any\ndependencies they require.\n\n#### Installing DPC++\n\nTo set up DPC++ follow the [getting started instructions][dpcpp-getting-started].\n\nYou can also use a [Docker* image][docker-container-oneapi].\n\nIf you are using the [Intel DevCloud][intel-devcloud] then the latest version of DPC++ will\nalready be installed and available in the path.\n\n#### Installing AdaptiveCpp\n\nYou will need a AdaptiveCpp (formerly hipSYCL) build from September 2021 or newer. Refer to the [AdaptiveCpp installation instructions][adaptivecpp-installing] for details on how to install AdaptiveCpp.\n\n### Pre-requisites\n\nBefore building the exercises you'll need:\n\n* One of the platforms in the support matrix above, depending on which SYCL\nimplementation you are wishing to build for.\n* A C++17 or above tool-chain.\n* An appropriate build system for the platform you are targeting (CMake, Ninja,\nMake, Visual Studio).\n\n### Configuring using CMake\n\nClone this repository, there are some additional dependencies configured as git\nsub-modules so make sure to clone those as well. Then simply invoke CMake as\nfollows:\n\n```\nmkdir build\n\ncd build\n\ncmake ../ -G\u003ccmake_generator\u003e -A\u003ccmake_arch\u003e -D\u003csycl_implementation\u003e=ON\n```\n\nFor `\u003ccmake_generator\u003e` / `\u003ccmake_arch\u003e` we recommend:\n\n* Visual Studio 16 2019 / x64 (Windows)\n* Ninja / NA (Windows or Linux)\n* Make / NA (Linux) i.e. \"-GUnix Makefiles\"\n\nFor `sycl_implementation` this can be one of:\n\n* `SYCL_ACADEMY_USE_ADAPTIVECPP`\n* `SYCL_ACADEMY_USE_DPCPP`\n\nYou can also specify the additional optional options:\n\n```\n-DSYCL_ACADEMY_INSTALL_ROOT=\u003cpath_to_sycl_impl_install_root\u003e\n```\n\nFor `\u003cpath_to_sycl_impl_install_root\u003e` we recommend you specify the path to the\nroot directory of your SYCL implementation installation, though this may not\nalways be required.\n\n```\n-DSYCL_ACADEMY_ENABLE_SOLUTIONS=ON\n```\n\nThis will enable building the solutions for each exercise as well as the source\nfiles. This is disabled by default.\n\n```\n-DCMAKE_BUILD_TYPE=Release\n```\n\nThe build configuration for all exercises defaults to a debug build if this option is not specified.\n\n#### Additional cmake arguments for DPC++\n\n```\n-DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx\n```\n\nThis SYCL Academy CMake configuration uses the Intel oneAPI IntelSYCL CMake module package to assist it in its configuration. These command line arguments must be used to initiate this configuration correctly.\n\n`-DSYCL_TRIPLE` can be used to specify a DPC++ compatible SYCL triple. Possible\nvalues include:\n\n* `amdgcn-amd-amdhsa` - For AMD devices\n* `nvptx64-nvidia-cuda` - For CUDA devices\n* `spir64_gen` - For Intel GPUs\n* `native_cpu` - For native CPU SYCL device (dependent on DPCPP version)\n\n`-DSYCL_ARCH` can also be used to specify a device arch. This CMake opt is\nnecessary for AMD. Possible values include:\n\n* `gfx90a` - For AMD MI200\n* `sm_80` - For NVIDIA A100\n* `pvc` - For Intel PVC\n\nIt may also be necessary to manually specify the install location of the CUDA or\nROCM SDK, if this is found in a non-standard location. The flags:\n\n`-DROCM_DIR` and `-DCUDA_DIR` can be used to specify the install dir of the ROCM\nor CUDA SDKs, respectively.\n\n##### DPC++ for AMD CMake example\n\n```\n  cmake .. -GNinja -DSYCL_ACADEMY_USE_DPCPP=ON -DSYCL_ACADEMY_ENABLE_SOLUTIONS=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx _DSYCL_TRIPLE=amdgcn-amd-amdhsa -DSYCL_ARCH=gfx90a -DROCM_DIR=/opt/rocm/5.4.3\n```\n\n##### DPC++ for CUDA CMake example\n\n```\n  cmake .. -GNinja -DSYCL_ACADEMY_USE_DPCPP=ON -DSYCL_ACADEMY_ENABLE_SOLUTIONS=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx _DSYCL_TRIPLE=nvptx64-nvidia-cuda -DSYCL_ARCH=sm_61 -DCUDA_DIR=/usr/local/cuda/11.2/\n```\n\n#### Additional cmake arguments for AdaptiveCpp\n\nSufficiently new (\u003e= 24.02.0), full installations of AdaptiveCpp do not require specifying compilation targets.\nIn this case, targets may still be provided optionally. \n\nFor older AdaptiveCpp versions, CMake will require you to specify the compilation targets using `-DACPP_TARGETS=\u003ctarget specification\u003e`. \n\n`\u003ctarget specification\u003e` is a list of compilation flows to enable and devices to target, for example\n`-DACPP_TARGETS=\"omp;generic\"` compiles for CPUs using OpenMP and GPUs using the generic single-pass compiler.\n\nIf your AdaptiveCpp installation does not force a compilation target to be provided, but it was built with the generic single-pass compiler disabled (it is enabled by default in all AdaptiveCpp installations built against LLVM \u003e= 14), it is compiling for a default set of targets provided at installation time. If you cannot run the binary on the hardware of your choice, this default set may not be the right one for your hardware and you may have to specify the right targets explicitly.\n\nAvailable compilation flows are:\n* `omp` - OpenMP CPU backend\n* `generic` - Generic single-pass compiler. Generates a binary that runs on host CPU, AMD, NVIDIA and Intel GPUs using runtime compilation\n* `cuda` - CUDA backend for NVIDIA GPUs. Requires specification of targets of the form sm_XY, e.g. sm_70 for Volta, sm_60 for Pascal. E.g: `cuda:sm_70`.\n* `hip`  - HIP backend for AMD GPUs. Requires specification of targets of the form gfxXYZ, e.g. gfx906 for Vega 20, gfx900 for Vega 10. E.g.: `hip:gfx906`.\n\nWhen in doubt, use `-DACPP_TARGETS=generic` as it compiles the fastest, usually generates the fastest binaries, and generates portable binaries.\n\n#### CMake usage example\n\nInvoking CMake from the command line example usage:\n```\n  cmake .. \"-GUnix Makefiles\" -DSYCL_ACADEMY_USE_DPCPP=ON -DSYCL_ACADEMY_ENABLE_SOLUTIONS=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx\n```\n\n### Getting started with compiling DPC++\n\nFirst you have to ensure that your environment is configured to use DPC++ (note\nif you are using the Intel DevCloud then you don't need to do this step).\n\nOn Linux simply call the `setvars.sh` which is available in `/opt/intel/oneapi`\nfor sudo or root users and ~/intel/oneapi/ when installed as a normal user.\n\nFor root or sudo installations:\n`source /opt/intel/oneapi/setvars.sh`\n\nFor normal user installations:\n`source ~/intel/oneapi/setvars.sh`\n\nOn Windows the script is located in  `\u003cdpc++_install_root\u003e\\setvars.bat`\n\nWhere `\u003cdpc++_install_root\u003e` is wherever the `oneAPI` directory is installed.\n\nOnce that's done you can invoke the DPC++ compiler as follows:\n\n`icpx -fsycl -o a.out source.cpp`\n\nWhere `\u003csyclacademy_root\u003e` is the path to the root directory of where you cloned\nthis repository. Note that on Windows you need to add the option /EHsc to avoid exception handling error.\n\nThe CMake configuration can also be used to build the exercises, see the section **Configuring using CMake** above.\n\n## Working on the Exercises\nOnce you have a working SYCL compiler, you are ready to start writing some SYCL code. To find the first exercise:\n```\ncd Code_Exercises/Compiling_with_SYCL/\n```\nAnd read the README.md for further instructions.\n\nEach exercise directory contains:\n* ```README.md```, which contains instructions of how to complete a given exercise, as well as directions for compilation.\n* ```source.cpp```, a placeholder file where your code implementation should be written.\n* ```solution.cpp```, where a solution has been implemented in advance.\n\nOnce you have completed any given exercise make sure to compare your implementation against the corresponding ```solution.cpp```.\n\n## Online Interactive Tutorial\n\nHosted by tech.io, this [SYCL Introduction](https://tech.io/playgrounds/48226/introduction-to-sycl/introduction-to-sycl-2) tutorial introduces the concepts of SYCL. The website also provides the ability to compile and execute SYCL code from your web browser.\n\n## Connecting to DevCloud via SSH\n\n* Start by creating an [Intel DevCloud account][intel-devcloud] account if you do not already have one and login in.\n* Initialize the SSH configuration by clicking on [Automated Configuration](https://devcloud.intel.com/oneapi/documentation/connect-with-ssh-linux-macos/) and follow the instructions to setup the SSH configuration file.\n* SSH into DevCloud (```ssh devcloud```)\n\n## Connect to DevCloud via Jupyter Notebooks\n\n* Start by creating an [Intel DevCloud account][intel-devcloud] account if you do not already have one and login in.\n* Go to [training](https://console.cloud.intel.com/training) and click on ```Launch JupyterLab´´´\n* In the ```Jupiter Notebook``` select *File-\u003eNew-\u003eTerminal*\n\nYou are now ready to start with the first [lesson][lesson-1-slides]. Enjoy !\n\n## Building the Exercises for DPC++\n\n* Execute the following command to download SYCLAcademy:\n```sh\ngit clone --recursive https://github.com/codeplaysoftware/syclacademy.git\n\n```\n* If you are using **DevCloud via ssh**, run:\n ```sh\n module load cmake\n ```\n\n* To create the code_exercises directory structure with the Makefiles:\n```sh\ncd syclacademy\nmkdir build\ncd build\ncmake ../ \"-GUnix Makefiles\" -DSYCL_ACADEMY_USE_DPCPP=ON -DSYCL_ACADEMY_ENABLE_SOLUTIONS=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx\n```\n\n\n[dpcpp-getting-started]: https://software.intel.com/content/www/us/en/develop/articles/installation-guide-for-intel-oneapi-toolkits.html\n[intel-devcloud]: https://consumer.intel.com/intelcorpb2c.onmicrosoft.com/B2C_1A_UnifiedLogin_SISU_CML_SAML/generic/login?entityId=www.intel.com\u0026ui_locales=en\n[docker-container-oneapi]: https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-intel-oneapi-base-linux/top/using-containers.html\n[oneAPI-system-requirements]: https://software.intel.com/content/www/us/en/develop/articles/intel-oneapi-base-toolkit-system-requirements.html\n\n[adaptivecpp-installing]: https://github.com/AdaptiveCpp/AdaptiveCpp/blob/develop/doc/installing.md\n[rocm-gpus]: https://github.com/RadeonOpenCompute/ROCm#supported-gpus\n[spack]: https://github.com/spack/spack\n\n[video-playlist]: https://youtube.com/playlist?list=PLCssnq0MpRdM-IUAYtNSPYck6u3oz7OZQ\n\n[lesson-1-slides]: ./Lesson_Materials/What_is_SYCL/\n[lesson-1-exercise]: ./Code_Exercises/What_is_SYCL/README.md\n[lesson-1-source]:   ./Code_Exercises/What_is_SYCL/source.cpp\n[lesson-1-solution]: ./Code_Exercises/What_is_SYCL/solution.cpp\n\n[lesson-2-slides]: ./Lesson_Materials/Enqueueing_a_Kernel/\n[lesson-2-exercise]: ./Code_Exercises/Enqueueing_a_Kernel/README.md\n[lesson-2-source]:   ./Code_Exercises/Enqueueing_a_Kernel/source.cpp\n[lesson-2-solution]: ./Code_Exercises/Enqueueing_a_Kernel/solution.cpp\n\n[lesson-3-slides]: ./Lesson_Materials/Managing_Data/\n[lesson-3-exercise]: ./Code_Exercises/Managing_Data/README.md\n[lesson-3-source]:   ./Code_Exercises/Managing_Data/source.cpp\n[lesson-3-solution]: ./Code_Exercises/Managing_Data/solution.cpp\n\n[lesson-4-slides]: ./Lesson_Materials/Handling_Errors/\n[lesson-4-exercise]: ./Code_Exercises/Handling_Errors/README.md\n[lesson-4-source]:   ./Code_Exercises/Handling_Errors/source.cpp\n[lesson-4-solution]: ./Code_Exercises/Handling_Errors/solution.cpp\n\n[lesson-5-slides]: ./Lesson_Materials/Device_Discovery/\n[lesson-5-exercise]: ./Code_Exercises/Device_Discovery/README.md\n[lesson-5-source]:   ./Code_Exercises/Device_Discovery/source.cpp\n[lesson-5-solution]: ./Code_Exercises/Device_Discovery/solution.cpp\n\n[lesson-6-slides]: ./Lesson_Materials/Data_Parallelism/\n[lesson-6-exercise]: ./Code_Exercises/Data_Parallelism/README.md\n[lesson-6-source]:   ./Code_Exercises/Data_Parallelism/source.cpp\n[lesson-6-solution]: ./Code_Exercises/Data_Parallelism/solution.cpp\n\n[lesson-7-slides]: ./Lesson_Materials/Introduction_to_USM/\n[lesson-7-exercise]: ./Code_Exercises/Introduction_to_USM/README.md\n[lesson-7-source]:   ./Code_Exercises/Introduction_to_USM/source.cpp\n[lesson-7-solution]: ./Code_Exercises/Introduction_to_USM/solution.cpp\n\n[lesson-8-slides]: ./Lesson_Materials/Using_USM/\n[lesson-8-exercise]: ./Code_Exercises/Using_USM/README.md\n[lesson-8-source]:   ./Code_Exercises/Using_USM/source.cpp\n[lesson-8-solution]: ./Code_Exercises/Using_USM/solution.cpp\n\n[lesson-9-slides]: ./Lesson_Materials/Asynchronous_Execution/\n[lesson-9-exercise]: ./Code_Exercises/Asynchronous_Execution/README.md\n[lesson-9-source]:   ./Code_Exercises/Asynchronous_Execution/source.cpp\n[lesson-9-solution]: ./Code_Exercises/Asynchronous_Execution/solution.cpp\n\n[lesson-10-slides]: ./Lesson_Materials/Data_and_Dependencies/\n[lesson-10-exercise]: ./Code_Exercises/Data_and_Dependencies/README.md\n[lesson-10-source]:   ./Code_Exercises/Data_and_Dependencies/source.cpp\n[lesson-10-solution]: ./Code_Exercises/Data_and_Dependencies/solution.cpp\n\n[lesson-11-slides]: ./Lesson_Materials/In_Order_Queue/\n[lesson-11-exercise]: ./Code_Exercises/In_Order_Queue/README.md\n[lesson-11-source]:   ./Code_Exercises/In_Order_Queue/source_vector_add.cpp\n[lesson-11-solution]: ./Code_Exercises/In_Order_Queue/solution_vector_add.cpp\n\n[lesson-12-slides]: ./Lesson_Materials/Advanced_Data_Flow/\n[lesson-12-exercise]: ./Code_Exercises/Advanced_Data_Flow/README.md\n[lesson-12-source]:   ./Code_Exercises/Advanced_Data_Flow/source.cpp\n[lesson-12-solution]: ./Code_Exercises/Advanced_Data_Flow/solution.cpp\n\n[lesson-13-slides]: ./Lesson_Materials/Multiple_Devices/\n[lesson-13-exercise]: ./Code_Exercises/Multiple_Devices/README.md\n[lesson-13-source]:   ./Code_Exercises/Multiple_Devices/source.cpp\n[lesson-13-solution]: ./Code_Exercises/Multiple_Devices/solution.cpp\n\n[lesson-14-slides]: ./Lesson_Materials/Image_Convolution/\n[lesson-14-exercise]: ./Code_Exercises/Image_Convolution/README.md\n[lesson-14-source]:   ./Code_Exercises/Image_Convolution/source.cpp\n[lesson-14-solution]: ./Code_Exercises/Image_Convolution/reference.cpp\n\n[lesson-15-slides]: ./Lesson_Materials/Coalesced_Global_Memory/\n[lesson-15-exercise]: ./Code_Exercises/Coalesced_Global_Memory/README.md\n[lesson-15-source]:   ./Code_Exercises/Coalesced_Global_Memory/source.cpp\n[lesson-15-solution]: ./Code_Exercises/Coalesced_Global_Memory/solution.cpp\n\n[lesson-16-slides]: ./Lesson_Materials/Vectors/\n[lesson-16-exercise]: ./Code_Exercises/Vectors/README.md\n[lesson-16-source]:   ./Code_Exercises/Vectors/source.cpp\n[lesson-16-solution]: ./Code_Exercises/Vectors/solution.cpp\n\n[lesson-17-slides]: ./Lesson_Materials/Local_Memory_Tiling/\n[lesson-17-exercise]: ./Code_Exercises/Local_Memory_Tiling/README.md\n[lesson-17-source]:   ./Code_Exercises/Local_Memory_Tiling/source.cpp\n[lesson-17-solution]: ./Code_Exercises/Local_Memory_Tiling/solution.cpp\n\n[lesson-18-slides]: ./Lesson_Materials/Work_Group_Sizes/\n[lesson-18-exercise]: ./Code_Exercises/Work_Group_Sizes/README.md\n[lesson-18-source]:   ./Code_Exercises/Work_Group_Sizes/source.cpp\n[lesson-18-solution]: ./Code_Exercises/Work_Group_Sizes/solution.cpp\n\n[lesson-19-slides]: ./Lesson_Materials/Matrix_Transpose/\n[lesson-19-exercise]: ./Code_Exercises/Matrix_Transpose/README.md\n[lesson-19-source]:   ./Code_Exercises/Matrix_Transpose/source.cpp\n[lesson-19-solution]: ./Code_Exercises/Matrix_Transpose/solution.cpp\n\n[lesson-20-slides]: ./Lesson_Materials/More_SYCL_Features/\n[lesson-20-exercise]: ./Code_Exercises/More_SYCL_Features/README.md\n[lesson-20-source]:   ./Code_Exercises/More_SYCL_Features/source.cpp\n[lesson-20-solution]: ./Code_Exercises/More_SYCL_Features/solution.cpp\n\n[lesson-21-slides]: ./Lesson_Materials/Fast_Track/\n[lesson-21-exercise]: ./Code_Exercises/Functors/README.md\n[lesson-21-source]:   ./Code_Exercises/Functors/source.cpp\n[lesson-21-solution]: ./Code_Exercises/Functors/solution.cpp\n\n[lesson-22-slides]: ./Lesson_Materials/oneMath_gemm/\n[lesson-22-exercise]: ./Code_Exercises/oneMath_gemm/README.md\n[lesson-22-source]:   ./Code_Exercises/oneMath_gemm/source.cpp\n[lesson-22-solution]: ./Code_Exercises/oneMath_gemm/solution.cpp\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeplaysoftware%2Fsyclacademy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodeplaysoftware%2Fsyclacademy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodeplaysoftware%2Fsyclacademy/lists"}