[
  {
    "path": ".buildkite/pipeline.yml",
    "content": "steps:\n  # Test supported Julia versions\n  - group: \":julia: Julia\"\n    key: \"julia\"\n    steps:\n      - label: \"Julia {{matrix.julia}}\"\n        plugins:\n          - JuliaCI/julia#v1:\n              version: \"{{matrix.julia}}\"\n          - JuliaCI/julia-test#v1:\n              test_args: \"--quickfail\"\n          - JuliaCI/julia-coverage#v1:\n              dirs:\n                - src\n                - lib\n                - examples\n        agents:\n          queue: \"juliagpu\"\n          intel: \"*\"\n        commands: |\n          julia --project=deps deps/build_ci.jl\n        if: build.message !~ /\\[skip tests\\]/\n        timeout_in_minutes: 120\n        matrix:\n          setup:\n            julia:\n              - \"1.10\"\n              - \"1.11\"\n              - \"1.12\"\n              - \"nightly\"\n          adjustments:\n            - with:\n                julia: \"nightly\"\n              soft_fail: true\n\n  # Special tests\n  - group: \":eyes: Special\"\n    depends_on: \"julia\"\n    steps:\n      - label: \"Validation\"\n        plugins:\n          - JuliaCI/julia#v1:\n              version: \"1.11\"\n          - JuliaCI/julia-test#v1:\n              julia_args: \"-g2\"\n          - JuliaCI/julia-coverage#v1:\n              codecov: true\n              dirs:\n                - src\n                - lib\n                - examples\n        command: |\n          julia --project=deps deps/build_ci.jl\n          julia --project -e '\n              # use debug JLLs, for asserts + better backtraces\n              using oneAPI\n              oneAPI.set_debug!(true)'\n        if: build.message !~ /\\[skip tests\\]/\n        env:\n          ZE_ENABLE_VALIDATION_LAYER: '1'\n          ZE_ENABLE_PARAMETER_VALIDATION: '1'\n          EnableDebugBreak: '0'\n        agents:\n          queue: \"juliagpu\"\n          intel: \"*\"\n        if: build.message !~ /\\[skip tests\\]/ && !build.pull_request.draft\n        timeout_in_minutes: 60\n        soft_fail: true\n\nenv:\n  JULIA_PKG_SERVER_REGISTRY_PREFERENCE: \"eager\" # OK to downloading JLLs from GitHub\n  SECRET_CODECOV_TOKEN: \"OYpS8fj3vGhj7iZf9vLAeapyxQNSOEW6mApcSvGboL9AlS+0nfOSFjFrIBNnIU0prxQQy1gR9AwR/JO1m2OFWeRhjYtkQPPhk4xVtSKmv0LLTL0snA8IohUopqfu722i7zLrPcz/A0LFIFsb0ey+oReJs2xnGOshNIJu4FDowUV3wmZvfKWNsSK4cGN+HFQ3387Ow4SsmiUr7oqh0iMBQNqaY8oZ2BY1dFOgPaOegIp70YEFRdJ8DKaLd7WGxFLY9oQEhZZdmx/zx0xo56/NGtDwVYkDPa4qPhJczDBoIn5XvcRiIW0VJ/MaRARxnpenBX5H6gwdcZYUGtjXWIRXBw==;U2FsdGVkX1/bZy1Bp4/dBH5scPpWqLKusXGvSkRGUa+1F7hi4P4Cu5a6GcfNIEvQr+bBj2VlZvqhNW0FAqN3QQ==\"\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates\nversion: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\" # Location of package manifests\n    schedule:\n      interval: \"monthly\"\n"
  },
  {
    "path": ".github/workflows/CompatHelper.yml",
    "content": "name: CompatHelper\n\non:\n  schedule:\n    - cron: '0 0 * * *'\n  workflow_dispatch:\n\njobs:\n  CompatHelper:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n      - name: Get Julia compatibility\n        id: julia_compat\n        # NOTE: this requires a Julia compat lower-bound with minor version!\n        run : |\n          version=$(grep '^julia = ' Project.toml | grep -o '\".*\"' | cut -d '\"' -f2)\n          echo \"::set-output name=version::$version\"\n      - uses: julia-actions/setup-julia@v2\n        with:\n          version: ${{ steps.julia_compat.outputs.version }}\n      - name: Install CompatHelper\n        run: |\n          import Pkg\n          name = \"CompatHelper\"\n          version = \"3\"\n          Pkg.add(; name, version)\n        shell: julia --color=yes {0}\n      - name: Run CompatHelper\n        run: |\n          using CompatHelper\n          CompatHelper.main()\n        shell: julia --color=yes {0}\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/DocsCleanup.yml",
    "content": "name: Doc Preview Cleanup\n\non:\n  pull_request:\n    types: [closed]\n\njobs:\n  doc-preview-cleanup:\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout gh-pages branch\n        uses: actions/checkout@v6\n        with:\n          ref: gh-pages\n\n      - name: Delete preview and history\n        run: |\n            git config user.name \"oneAPI.jl\"\n            git config user.email \"oneapi@juliagpu.github.io\"\n            git rm -rf \"previews/PR$PRNUM\"\n            git commit -m \"delete preview\"\n            git branch gh-pages-new $(echo \"delete history\" | git commit-tree HEAD^{tree})\n        env:\n            PRNUM: ${{ github.event.number }}\n\n      - name: Push changes\n        run: |\n            git push --force origin gh-pages-new:gh-pages"
  },
  {
    "path": ".github/workflows/Format.yml",
    "content": "name: 'Format'\n\non:\n  pull_request_target:\n    paths: ['**/*.jl']\n    types: [opened, synchronize, reopened, ready_for_review]\n\npermissions:\n  contents: read\n  actions: write\n  pull-requests: write\n\njobs:\n  runic:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.draft == false\n    steps:\n      - name: Check out repository\n        uses: actions/checkout@v6\n        with:\n          ref: ${{github.event.pull_request.head.ref}}\n          repository: ${{github.event.pull_request.head.repo.full_name}}\n          fetch-depth: 0\n\n      - name: Add upstream remote\n        run: |\n          git remote add upstream https://github.com/${{ github.repository }}\n          git fetch upstream\n\n      - name: Setup Julia\n        uses: julia-actions/setup-julia@v2\n        with:\n          version: '1'\n          arch: 'x64'\n      - uses: julia-actions/cache@v2\n\n      - name: Install Runic\n        run: |\n          julia --project=@runic -e 'using Pkg; Pkg.add(\"Runic\")'\n          curl -o git-runic https://raw.githubusercontent.com/fredrikekre/Runic.jl/master/bin/git-runic\n          chmod +x git-runic\n          sudo mv git-runic /usr/local/bin\n\n      - name: Run Runic\n        id: runic\n        run: |\n          set +e\n          MERGE_BASE=$(git merge-base upstream/${{ github.base_ref }} HEAD) || exit 1\n          DIFF=$(git runic --diff $MERGE_BASE)\n          EXIT_CODE=$?\n\n          echo \"exit_code=$EXIT_CODE\" >> $GITHUB_OUTPUT\n          echo \"diff<<EOF\" >> $GITHUB_OUTPUT\n          echo \"$DIFF\" >> $GITHUB_OUTPUT\n          echo \"EOF\" >> $GITHUB_OUTPUT\n\n          # if Runic failed, bail out\n          [ $EXIT_CODE -eq 2 ] && exit 1 || exit 0\n\n      - name: Find comment\n        uses: peter-evans/find-comment@v4\n        id: find-comment\n        with:\n          issue-number: ${{ github.event.pull_request.number }}\n          comment-author: 'github-actions[bot]'\n          body-includes: '<!-- runic-format-summary -->'\n\n      - name: Comment formatting suggestions\n        if: steps.runic.outputs.exit_code == 1\n        uses: peter-evans/create-or-update-comment@v5\n        with:\n          comment-id: ${{ steps.find-comment.outputs.comment-id }}\n          issue-number: ${{ github.event.pull_request.number }}\n          body: |\n            <!-- runic-format-summary -->\n\n            Your PR requires formatting changes to meet the project's style guidelines.\n            Please consider running [Runic](https://github.com/fredrikekre/Runic.jl) (`git runic ${{ github.base_ref }}`) to apply these changes.\n\n            <details>\n            <summary>Click here to view the suggested changes.</summary>\n\n            ~~~diff\n            ${{ steps.runic.outputs.diff }}\n            ~~~\n\n            </details>\n          edit-mode: replace\n\n      - name: Update stale comment\n        if: steps.runic.outputs.exit_code == 0 && steps.find-comment.outputs.comment-id\n        uses: peter-evans/create-or-update-comment@v5\n        with:\n          comment-id: ${{ steps.find-comment.outputs.comment-id }}\n          issue-number: ${{ github.event.pull_request.number }}\n          body: |\n            <!-- runic-format-summary -->\n\n            Your PR no longer requires formatting changes. Thank you for your contribution!\n          edit-mode: replace\n\n      # XXX: if Github ever supports allow-failure (actions/runner#2347)\n      #- name: Propagate exit code\n      #  run: |\n      #    exit ${{ steps.runic.outputs.exit_code }}\n"
  },
  {
    "path": ".github/workflows/TagBot.yml",
    "content": "name: TagBot\n\non:\n  issue_comment:\n    types:\n      - created\n  workflow_dispatch:\n\njobs:\n  TagBot:\n    if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot'\n    runs-on: ubuntu-latest\n    steps:\n      - uses: JuliaRegistries/TagBot@v1\n        with:\n          token: ${{ secrets.GITHUB_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  push:\n    branches:\n      - master\n    tags: '*'\n  pull_request:\n    types: [opened, synchronize, reopened]\n  schedule:\n    - cron: '0 0 * * 0'\n\njobs:\n  self-runner:\n    continue-on-error: true\n    env:\n      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n    runs-on: [self-hosted, linux, X64]\n    strategy:\n      matrix:\n        os: [ubuntu-latest]\n        julia-version: ['1']\n        julia-arch: [x64]\n\n    steps:\n      - uses: actions/checkout@v6\n      - uses: julia-actions/setup-julia@latest\n        with:\n          version: ${{ matrix.julia-version }}\n      - uses: julia-actions/cache@v2\n      - uses: julia-actions/julia-buildpkg@latest\n        continue-on-error: true\n      - uses: julia-actions/julia-runtest@latest\n        continue-on-error: true\n"
  },
  {
    "path": ".github/workflows/docs.yml",
    "content": "name: Documentation\n\non:\n  push:\n    branches:\n      - master\n    tags: '*'\n  pull_request:\n    types: [opened, synchronize, reopened]\n  schedule:\n    - cron: '0 0 * * 0'\n\njobs:\n  docs:\n    name: Build documentation\n    env:\n      DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }}\n      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n      JULIA_DEBUG: Documenter\n    runs-on: [self-hosted, linux, X64]\n\n    steps:\n      - uses: actions/checkout@v6\n      - uses: julia-actions/setup-julia@latest\n        with:\n          version: 'lts'\n      - uses: julia-actions/cache@v2\n      - uses: julia-actions/julia-buildpkg@latest\n      - run: julia --project=docs/ docs/make.jl\n"
  },
  {
    "path": ".gitignore",
    "content": "LocalPreferences.toml\nManifest.toml\ndeps/onemkl_blas.cpp\ndeps/onemkl_blas.h\ndeps/onemkl_lapack.cpp\ndeps/onemkl_lapack.h\ndeps/onemkl_sparse.cpp\ndeps/onemkl_sparse.h\ndocs/build\n"
  },
  {
    "path": "CITATION.cff",
    "content": "cff-version: 1.2.0\nmessage: \"If you use this software, please cite it as below.\"\nauthors:\n  - family-names: Besard\n    given-names: Tim\n    orcid: https://orcid.org/0000-0001-7826-8021\ncopyright: \"© 2022 Julia Computing, and other contributors\"\ntitle: \"oneAPI.jl\"\nversion: 0.3.0\ndoi: 10.5281/zenodo.7139359\ndate-released: 2022-10-03\nurl: \"https://github.com/JuliaGPU/oneAPI.jl\"\n"
  },
  {
    "path": "LICENSE.md",
    "content": "The oneAPI.jl package is licensed under the MIT \"Expat\" License:\n\n> Copyright (c) 2020-present: Julia Computing and other contributors\n>\n> All Rights Reserved.\n>\n> Permission is hereby granted, free of charge, to any person obtaining a copy\n> of this software and associated documentation files (the \"Software\"), to deal\n> in the Software without restriction, including without limitation the rights\n> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n> copies of the Software, and to permit persons to whom the Software is\n> furnished to do so, subject to the following conditions:\n>\n> The above copyright notice and this permission notice shall be included in all\n> copies or substantial portions of the Software.\n>\n> THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n> SOFTWARE.\n>\n"
  },
  {
    "path": "Project.toml",
    "content": "name = \"oneAPI\"\nuuid = \"8f75cd03-7ff8-4ecb-9b8f-daf728133b1b\"\nauthors = [\"Tim Besard <tim.besard@gmail.com>\", \"Alexis Montoison\", \"Michel Schanen <michel.schanen@gmail.com>\"]\nversion = \"2.6.1\"\n\n[deps]\nAbstractFFTs = \"621f4979-c628-5d54-868e-fcf4e3e8185c\"\nAcceleratedKernels = \"6a4ca0a5-0e36-4168-a932-d9be78d558f1\"\nAdapt = \"79e6a3ab-5dfb-504d-930d-738a2a938a0e\"\nCEnum = \"fa961155-64e5-5f13-b03f-caf6b980ea82\"\nExprTools = \"e2ba6199-217a-4e67-a87a-7c52f15ade04\"\nGPUArrays = \"0c68f7d7-f131-5f86-a1c3-88cf8149b2d7\"\nGPUCompiler = \"61eb1bfa-7361-4325-ad38-22787b887f55\"\nGPUToolbox = \"096a3bc2-3ced-46d0-87f4-dd12716f4bfc\"\nKernelAbstractions = \"63c18a36-062a-441e-b654-da1e3ab1ce7c\"\nLLVM = \"929cbde3-209d-540e-8aea-75f648917ca0\"\nLibdl = \"8f399da3-3557-5675-b5ff-fb832c97cbdb\"\nLinearAlgebra = \"37e2e46d-f89d-539d-b4ee-838fcccc9c8e\"\nNEO_jll = \"700fe977-ac61-5f37-bbc8-c6c4b2b6a9fd\"\nPreferences = \"21216c6a-2e73-6563-6e65-726566657250\"\nPrintf = \"de0858da-6303-5e67-8744-51eddeeeb8d7\"\nRandom = \"9a3f8284-a2c9-5f02-9a11-845980a1fd5c\"\nSPIRVIntrinsics = \"71d1d633-e7e8-4a92-83a1-de8814b09ba8\"\nSPIRV_LLVM_Translator_jll = \"4a5d46fc-d8cf-5151-a261-86b458210efb\"\nSPIRV_Tools_jll = \"6ac6d60f-d740-5983-97d7-a4482c0689f4\"\nSparseArrays = \"2f01184e-e22b-5df5-ae63-d93ebab69eaf\"\nSpecialFunctions = \"276daf66-3868-5448-9aa4-cd146d93841b\"\nStaticArrays = \"90137ffa-7385-5640-81b9-e52037218182\"\noneAPI_Level_Zero_Headers_jll = \"f4bc562b-d309-54f8-9efb-476e56f0410d\"\noneAPI_Level_Zero_Loader_jll = \"13eca655-d68d-5b81-8367-6d99d727ab01\"\noneAPI_Support_jll = \"b049733a-a71d-5ed3-8eba-7d323ac00b36\"\n\n[compat]\nAbstractFFTs = \"1.5.0\"\nAcceleratedKernels = \"0.3.1, 0.4\"\nAdapt = \"4\"\nCEnum = \"0.4, 0.5\"\nExprTools = \"0.1\"\nGPUArrays = \"11.2.1\"\nGPUCompiler = \"1.6\"\nGPUToolbox = \"0.1, 0.2, 0.3, 1\"\nKernelAbstractions = \"0.9.39\"\nLLVM = \"6, 7, 8, 9\"\nNEO_jll = \"=25.44.36015\"\nPreferences = \"1\"\nSPIRVIntrinsics = \"0.5\"\nSPIRV_LLVM_Translator_jll = \"21\"\nSPIRV_Tools_jll = \"2025.4.0\"\nSpecialFunctions = \"1.3, 2\"\nStaticArrays = \"1\"\njulia = \"1.10\"\noneAPI_Level_Zero_Loader_jll = \"1.25\"\noneAPI_Support_jll = \"0.9.2\"\n\n[extras]\nlibigc_jll = \"94295238-5935-5bd7-bb0f-b00942e9bdd5\"\n"
  },
  {
    "path": "README.md",
    "content": "# oneAPI.jl\n\n*Julia support for the oneAPI programming toolkit.*\n\n[![][doi-img]][doi-url] [![][buildkite-img]][buildkite-url] [![][codecov-img]][codecov-url] [![][docs-stable-img]][docs-stable-url] [![][docs-dev-img]][docs-dev-url]\n\n[doi-img]: https://zenodo.org/badge/252466420.svg\n[doi-url]: https://zenodo.org/badge/latestdoi/252466420\n\n[buildkite-img]: https://badge.buildkite.com/00fff01fd4d6cdd905e61e2ce7ed0f7203ba227df9b575426c.svg?branch=master\n[buildkite-url]: https://buildkite.com/julialang/oneapi-dot-jl\n\n[codecov-img]: https://codecov.io/gh/JuliaGPU/oneAPI.jl/branch/master/graph/badge.svg\n[codecov-url]: https://codecov.io/gh/JuliaGPU/oneAPI.jl\n\n[docs-stable-img]: https://img.shields.io/badge/docs-stable-blue.svg\n[docs-stable-url]: https://juliagpu.github.io/oneAPI.jl/stable\n\n[docs-dev-img]: https://img.shields.io/badge/docs-dev-blue.svg\n[docs-dev-url]: https://juliagpu.github.io/oneAPI.jl/dev\n\noneAPI.jl provides support for working with the [oneAPI unified programming\nmodel](https://software.intel.com/en-us/oneapi). The package is verified to work with the\n(currently) only implementation of this interface [that is part of the Intel Compute\nRuntime](https://github.com/intel/compute-runtime), only available on Linux.\nWindows support is experimental.\n\n\n## Status\n\n**oneAPI.jl is looking for contributors and/or a maintainer. Reach out if you can help!**\n\nThe current version of oneAPI.jl supports most of the oneAPI Level Zero interface, has\ngood kernel programming capabilties, and as a demonstration of that it fully implements\nthe GPUArrays.jl array interfaces. This results in a full-featured GPU array type.\n\nHowever, the package has not been extensively tested, and performance issues might be\npresent. The integration with vendor libraries like oneMKL has been extended with support\nfor sparse linear algebra operations. Some operations may still be unavailable or slow.\n\n\n## Quick start\n\nYou need to use Julia 1.10 or higher, and it is strongly advised to use [the official\nbinaries](https://julialang.org/downloads/). For now, only Linux is supported.\nOn Windows, you need to use the second generation Windows Subsystem for Linux (WSL2).\n**If you're using Intel Arc GPUs (A580, A750, A770, etc), you need to use at least\nLinux 6.2.** For other hardware, any recent Linux distribution should work.\n\nOnce you have installed Julia, proceed by entering the package manager REPL mode by pressing\n`]` and adding the oneAPI package:\n\n```\npkg> add oneAPI\n```\n\nThis installation will take a couple of minutes to download necessary binaries, such as the\noneAPI loader, several SPIR-V tools, etc. For now, the oneAPI.jl package also depends on\n[the Intel implementation](https://github.com/intel/compute-runtime) of the oneAPI spec.\nThat means you need compatible hardware; refer to the Intel documentation for more details.\n\nOnce you have oneAPI.jl installed, perform a smoke test by calling the `versioninfo()` function:\n\n```julia\njulia> using oneAPI\n\njulia> oneAPI.versioninfo()\nBinary dependencies:\n- NEO: 25.35.35096\n- libigc: 1.0.17193+0\n- gmmlib: 22.3.20+0\n- SPIRV_LLVM_Translator: 21\n- SPIRV_Tools: 2025.4.0\n- oneAPI_Support: 0.9.2 (oneMKL v2025.2.0)\n\nToolchain:\n- Julia: 1.11.5\n- LLVM: 16.0.6\n\n1 driver:\n- 00000000-0000-0000-173d-d94201036013 (v1.3.24595, API v1.3.0)\n\n2 devices:\n- Intel(R) Graphics [0x56a0]\n- Intel(R) HD Graphics P630 [0x591d]\n```\n\nIf you have multiple compatible drivers or devices, use the `driver!` and `device!`\nfunctions to configure which one to use in the current task:\n\n```julia\njulia> devices()\nZeDevice iterator for 2 devices:\n1. Intel(R) Graphics [0x56a0]\n2. Intel(R) HD Graphics P630 [0x591d]\n\njulia> device()\nZeDevice(GPU, vendor 0x8086, device 0x56a0): Intel(R) Graphics [0x56a0]\n\njulia> device!(2)\nZeDevice(GPU, vendor 0x8086, device 0x591d): Intel(R) HD Graphics P630 [0x591d]\n```\n\nTo ensure other functionality works as expected, you can run the test suite from the package\nmanager REPL mode. Note that this will pull and run the test suite for\n[GPUArrays](https://github.com/JuliaGPU/GPUArrays.jl), which takes quite some time:\n\n```\npkg> test oneAPI\n...\nTesting finished in 16 minutes, 27 seconds, 506 milliseconds\n\nTest Summary: | Pass  Total  Time\n  Overall     | 4945   4945\n    SUCCESS\n     Testing oneAPI tests passed\n```\n\n\n## Usage\n\nThe functionality of oneAPI.jl is organized as follows:\n\n- low-level wrappers for the Level Zero library\n- kernel programming capabilities\n- abstractions for high-level array programming\n\nThe level zero wrappers are available in the `oneL0` submodule, and expose all flexibility\nof the underlying APIs with user-friendly wrappers:\n\n```julia\njulia> using oneAPI, oneAPI.oneL0\n\njulia> drv = first(drivers());\n\njulia> ctx = ZeContext(drv);\n\njulia> dev = first(devices(drv))\nZeDevice(GPU, vendor 0x8086, device 0x1912): Intel(R) Gen9\n\njulia> compute_properties(dev)\n(maxTotalGroupSize = 256, maxGroupSizeX = 256, maxGroupSizeY = 256, maxGroupSizeZ = 256, maxGroupCountX = 4294967295, maxGroupCountY = 4294967295, maxGroupCountZ = 4294967295, maxSharedLocalMemory = 65536, subGroupSizes = (8, 16, 32))\n\njulia> queue = ZeCommandQueue(ctx, dev);\n\njulia> execute!(queue) do list\n         append_barrier!(list)\n       end\n```\n\nBuilt on top of that, are kernel programming capabilities for executing Julia code on oneAPI\naccelerators. For now, we reuse OpenCL intrinsics, and compile to SPIR-V using [Khronos'\ntranslator](https://github.com/KhronosGroup/SPIRV-LLVM-Translator):\n\n```julia\njulia> function kernel()\n         barrier(0)\n         return\n       end\n\njulia> @oneapi items=1 kernel()\n```\n\nCode reflection macros are available to see the generated code:\n\n```julia\njulia> @device_code_llvm @oneapi items=1 kernel()\n```\n\n```llvm\n;  @ REPL[18]:1 within `kernel'\ndefine dso_local spir_kernel void @_Z17julia_kernel_3053() local_unnamed_addr {\ntop:\n;  @ REPL[18]:2 within `kernel'\n; ┌ @ oneAPI.jl/src/device/opencl/synchronization.jl:9 within `barrier' @ oneAPI.jl/src/device/opencl/synchronization.jl:9\n; │┌ @ oneAPI.jl/src/device/opencl/utils.jl:34 within `macro expansion'\n    call void @_Z7barrierj(i32 0)\n; └└\n;  @ REPL[18]:3 within `kernel'\n  ret void\n}\n```\n\n```julia\njulia> @device_code_spirv @oneapi items=1 kernel()\n```\n\n```spirv\n; SPIR-V\n; Version: 1.0\n; Generator: Khronos LLVM/SPIR-V Translator; 14\n; Bound: 9\n; Schema: 0\n               OpCapability Addresses\n               OpCapability Kernel\n          %1 = OpExtInstImport \"OpenCL.std\"\n               OpMemoryModel Physical64 OpenCL\n               OpEntryPoint Kernel %4 \"_Z17julia_kernel_3067\"\n               OpSource OpenCL_C 200000\n               OpName %top \"top\"\n       %uint = OpTypeInt 32 0\n     %uint_2 = OpConstant %uint 2\n     %uint_0 = OpConstant %uint 0\n       %void = OpTypeVoid\n          %3 = OpTypeFunction %void\n          %4 = OpFunction %void None %3\n        %top = OpLabel\n               OpControlBarrier %uint_2 %uint_2 %uint_0\n               OpReturn\n               OpFunctionEnd\n\n```\n\nFinally, the `oneArray` type makes it possible to use your oneAPI accelerator without the\nneed to write custom kernels, thanks to Julia's high-level array abstractions:\n\n```julia\njulia> a = oneArray(rand(Float32, 2,2))\n2×2 oneArray{Float32,2}:\n 0.592979  0.996154\n 0.874364  0.232854\n\njulia> a .+ 1\n2×2 oneArray{Float32,2}:\n 1.59298  1.99615\n 1.87436  1.23285\n```\n\nThe oneMKL integration provides extended support for linear algebra operations, including sparse\nmatrix operations that integrate with Julia's standard LinearAlgebra interface:\n\n```julia\njulia> using oneAPI, oneAPI.oneMKL, SparseArrays, LinearAlgebra\njulia> A = sprand(100, 100, 0.1)\njulia> dA = oneMKL.oneSparseMatrixCSC(A)\njulia> x = oneArray(rand(100))\njulia> y = dA * x  # Matrix-vector multiplication via LinearAlgebra\n```\n\n### `Float64` support\n\nNot all oneAPI GPUs support Float64 datatypes. You can test if your GPU does using\nthe following code:\n\n```julia\njulia> using oneAPI\njulia> oneL0.module_properties(device()).fp64flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP64 == oneL0.ZE_DEVICE_MODULE_FLAG_FP64\nfalse\n```\n\nIf your GPU doesn't, executing code that relies on Float64 values will result in an error:\n\n```julia\njulia> oneArray([1.]) .+ 1\n┌ Error: Module compilation failed:\n│\n│ error: Double type is not supported on this platform.\n```\n\n\n\n## Development\n\nTo work on oneAPI.jl, you just need to `dev` the package. In addition, you may need to\n**build the binary support library** that's used to interface with oneMKL and other C++\nvendor libraries. This library is normally provided by the oneAPI_Support_jll.jl package,\nhowever, we only guarantee to update this package when releasing oneAPI.jl. You can build\nthis library yourself by simply executing `deps/build_local.jl`.\n\nTo facilitate development, there are other things you may want to configure:\n\n### Enabling the oneAPI validation layer\n\nThe oneAPI Level Zero libraries feature a so-called validation layer, which\nvalidates the arguments to API calls. This can be useful to spot potential\nisssues, and can be enabled by setting the following environment variables:\n\n- `ZE_ENABLE_VALIDATION_LAYER=1`\n- `ZE_ENABLE_PARAMETER_VALIDATION=1`\n- `EnableDebugBreak=0` (this is needed to work around intel/compute-runtime#639)\n\n### Using a debug toolchain\n\nIf you're experiencing an issue with the underlying toolchain (NEO, IGC, etc), you may\nwant to use a debug build of these components, which also perform additional\nvalidation. This can be done simply by calling `oneAPI.set_debug!(true)` and restarting\nyour Julia session. This sets a preference used by the respective JLL packages.\n\n### Using a local toolchain\n\nTo further debug the toolchain, you may need a custom build and point oneAPI.jl towards it.\nThis can also be done using preferences, overriding the paths to resources provided by the\nvarious JLLs that oneAPI.jl uses. A helpful script to automate this is provided in the\n`res` folder of this repository:\n\n```\n$ julia res/local.jl\n\nTrying to find local IGC...\n- found libigc at /usr/local/lib/libigc.so\n- found libiga64 at /usr/local/lib/libiga64.so\n- found libigdfcl at /usr/local/lib/libigdfcl.so\n- found libopencl-clang at /usr/local/lib/libopencl-clang.so.11\n\nTrying to find local gmmlib...\n- found libigdgmm at /usr/local/lib/libigdgmm.so\n\nTrying to find local NEO...\n- found libze_intel_gpu.so.1 at /usr/local/lib/libze_intel_gpu.so.1\n- found libigdrcl at /usr/local/lib/intel-opencl/libigdrcl.so\n\nTrying to find local oneAPI loader...\n- found libze_loader at /lib/x86_64-linux-gnu/libze_loader.so\n- found libze_validation_layer at /lib/x86_64-linux-gnu/libze_validation_layer.so\n\nWriting preferences...\n```\n\nThe discovered paths will be written to a global file with preferences, typically\n`$HOME/.julia/environments/vX.Y/LocalPreferences.toml` (where `vX.Y` refers to the Julia\nversion you are using). You can modify this file, or remove it when you want to revert to\ndefault set of binaries.\n"
  },
  {
    "path": "codecov.yml",
    "content": "coverage:\n  ignore:\n    - \"lib/*/lib*.jl\"\n    - \"src/device\"\n    - \"res/\"\n  status:\n    patch: false\n    project: false\n    changes: false\n"
  },
  {
    "path": "deps/.clang-format",
    "content": "---\nIndentWidth: '4'\nMaxEmptyLinesToKeep: '2'\n...\n"
  },
  {
    "path": "deps/.gitignore",
    "content": "liboneapilib.so\nManifest.toml\n"
  },
  {
    "path": "deps/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.13)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n\nproject(oneAPISupport)\n\nadd_library(oneapi_support SHARED\n  src/sycl.h\n  src/sycl.hpp\n  src/sycl.cpp\n  src/onemkl.h\n  src/onemkl.cpp\n  src/onemkl_dft.h\n  src/onemkl_dft.cpp\n)\n\ntarget_link_libraries(oneapi_support\n  mkl_sycl\n  # DFT component libraries needed for oneMKL DFT template instantiations\n  mkl_sycl_dft\n  mkl_cdft_core\n  mkl_intel_ilp64\n  mkl_sequential\n  mkl_core\n  sycl\n  OpenCL\n\n  # XXX: we don't want to link against this plugin, but otherwise the run-time\n  #      loader doesn't find it (since it's located in the non-global Conda\n  #      library directory, and we can't set LD_LIBRARY_PATH from within Julia).\n  ur_adapter_level_zero\n)\n\ninstall(TARGETS oneapi_support\n        LIBRARY DESTINATION lib)\n"
  },
  {
    "path": "deps/Project.toml",
    "content": "[deps]\nCMake_jll = \"3f4e10e2-61f2-5801-8945-23b9d642d0e6\"\nConda = \"8f4d0f93-b110-5947-807f-2305c1781a2d\"\nDates = \"ade2ca70-3891-5945-98fb-dc099432e06a\"\nGit = \"d7ba0133-e1db-5d97-8f8c-041e4b3a1eb2\"\nLibdl = \"8f399da3-3557-5675-b5ff-fb832c97cbdb\"\nNinja_jll = \"76642167-d241-5cee-8c94-7a494e8cb7b7\"\nPkg = \"44cfe95a-1eb2-52ea-b672-e2afdf69b78f\"\nPreferences = \"21216c6a-2e73-6563-6e65-726566657250\"\nScratch = \"6c6a2e73-6563-6170-7368-637461726353\"\noneAPI_Level_Zero_Headers_jll = \"f4bc562b-d309-54f8-9efb-476e56f0410d\"\noneAPI_Support_Headers_jll = \"24f86df5-245d-5634-a4cc-32433d9800b3\"\n\n[compat]\noneAPI_Support_Headers_jll = \"=2025.2.0\"\n"
  },
  {
    "path": "deps/build_ci.jl",
    "content": "using Pkg\nPkg.activate(@__DIR__)\nPkg.instantiate()\n\nusing Git, Scratch, Dates\n\noneAPI = Base.UUID(\"8f75cd03-7ff8-4ecb-9b8f-daf728133b1b\")\n\n# get scratch directories\nsupport_dir = get_scratch!(oneAPI, \"support\")\n\n# is this a full-fledged check-out?\nif isdir(joinpath(@__DIR__), \"..\", \".git\")\n    # determine latest change to the wrappers\n    deps_timestamp = parse(Int, read(`$(git()) -C $(@__DIR__) log -1 --format=%ct src`, String))\n    @info \"Latest change to the wrappers: $(unix2datetime(deps_timestamp))\"\n\n    # find out which version of oneAPI_Support_jll we are using\n    Pkg.activate(joinpath(@__DIR__, \"..\"))\n    Pkg.instantiate()\n    deps = collect(values(Pkg.dependencies()))\n    filter!(deps) do dep\n        dep.name == \"oneAPI_Support_jll\"\n    end\n    library_version = only(deps).version\n    @info \"oneAPI_Support_jll version: $(library_version)\"\n\n    # compare to the JLL's tags\n    jll_tags = mktempdir() do dir\n        if !isdir(joinpath(support_dir, \".git\"))\n            run(`$(git()) clone -q https://github.com/JuliaBinaryWrappers/oneAPI_Support_jll.jl $dir`)\n        else\n            run(`$(git()) -C $dir fetch -q`)\n        end\n        tags = Dict{String,Int}()\n        for line in eachline(`$(git()) -C $dir tag --format \"%(refname:short) %(creatordate:unix)\"`)\n            tag, timestamp = split(line)\n            tags[tag] = parse(Int, timestamp)\n        end\n        tags\n    end\n    jll_timestamp = jll_tags[\"oneAPI_Support-v$(library_version)\"]\n    @info \"oneAPI_Support_jll timestamp: $(unix2datetime(jll_timestamp))\"\n\n    if deps_timestamp > jll_timestamp\n        @info \"Wrappers have changed since the last JLL build. Building the support library locally.\"\n        include(joinpath(@__DIR__, \"build_local.jl\"))\n    else\n        @info \"Wrappers have not changed since the last JLL build. Using the JLL's support library.\"\n    end\nelse\n    @warn \"\"\"oneAPI.jl source code is not checked-out from Git.\n             This means we cannot check for changes, and need to unconditionally build the support library.\"\"\"\n    include(joinpath(@__DIR__, \"build_local.jl\"))\nend\n"
  },
  {
    "path": "deps/build_local.jl",
    "content": "# build liboneapi_support with C wrappers for C++ APIs\n\nusing Pkg\nPkg.activate(@__DIR__)\nPkg.instantiate()\n\nif haskey(ENV, \"BUILDKITE\")\n    run(`buildkite-agent annotate 'Using a locally-built support library; A bump of oneAPI_Support_jll is required before releasing this packages.' --style 'warning' --context 'ctx-deps'`)\nend\n\nusing Scratch, Preferences, CMake_jll, Ninja_jll, oneAPI_Level_Zero_Headers_jll\n\noneAPI = Base.UUID(\"8f75cd03-7ff8-4ecb-9b8f-daf728133b1b\")\n\n# get scratch directories\nconda_dir = get_scratch!(oneAPI, \"conda\")\ninstall_dir = get_scratch!(oneAPI, \"deps\")\nrm(install_dir; recursive=true)\n\n# get build directory\nbuild_dir = if isempty(ARGS)\n    mktempdir()\nelse\n    ARGS[1]\nend\nmkpath(build_dir)\n\n# install the toolchain\ntry\n    using Conda\ncatch err\n    # Sometimes, Conda fails to import because its environment is missing.\n    # That's probably caused by a missing build, but Pkg should do that...\n    Pkg.build(\"Conda\")\n    using Conda\nend\nif !isdir(Conda.ROOTENV)\n    # Same as above\n    Pkg.build(\"Conda\")\nend\nif !isfile(joinpath(conda_dir, \"condarc-julia.yml\"))\n    Conda.create(conda_dir)\n    # conda#8850\n    mkpath(joinpath(conda_dir, \"conda-meta\"))\n    touch(joinpath(conda_dir, \"conda-meta\", \"history\"))\nend\nConda.add_channel(\"https://software.repos.intel.com/python/conda/\", conda_dir)\nConda.add([\"dpcpp_linux-64=2025.2.0\", \"mkl-devel-dpcpp=2025.2.0\"], conda_dir)\n\nConda.list(conda_dir)\n\n# XXX: isn't there a Conda package providing ze_api.hpp?\ninclude_dir = joinpath(oneAPI_Level_Zero_Headers_jll.artifact_dir, \"include\")\n\n# build and install\nwithenv(\"PATH\"=>\"$(ENV[\"PATH\"]):$(Conda.bin_dir(conda_dir))\",\n        \"LD_LIBRARY_PATH\"=>Conda.lib_dir(conda_dir)) do\n    cmake() do cmake_path\n    ninja() do ninja_path\n        run(```$cmake_path -DCMAKE_CXX_COMPILER=\"icpx\"\n                           -DCMAKE_CXX_FLAGS=\"-fsycl -isystem $(conda_dir)/include -isystem $include_dir -fdiagnostics-color=always\"\n                           -DCMAKE_INSTALL_RPATH=$(Conda.lib_dir(conda_dir))\n                           -DCMAKE_INSTALL_PREFIX=$install_dir\n                           -GNinja -S $(@__DIR__) -B $build_dir```)\n        run(`$cmake_path --build $(build_dir) --target install`)\n    end\n    end\nend\n\n# TODO: adapt when we support more platforms\nlib_path = joinpath(install_dir, \"lib\", \"liboneapi_support.so\")\n@assert ispath(lib_path)\n\n# tell oneAPI_Support_jll to load our library instead of the default artifact one\nset_preferences!(\n    joinpath(dirname(@__DIR__), \"LocalPreferences.toml\"),\n    \"oneAPI_Support_jll\",\n    \"liboneapi_support_path\" => lib_path;\n    force=true,\n)\n\n# copy the preferences to `test/` as well to work around Pkg.jl#2500\ncp(joinpath(dirname(@__DIR__), \"LocalPreferences.toml\"),\n   joinpath(dirname(@__DIR__), \"test\", \"LocalPreferences.toml\"); force=true)\n"
  },
  {
    "path": "deps/generate_helpers.jl",
    "content": "non_parametric_routines = [\"init_matrix_handle\", \"release_matrix_handle\", \"set_matrix_property\",\n\"init_matmat_descr\", \"release_matmat_descr\", \"set_matmat_data\", \"get_matmat_data\", \"matmat\",\n\"omatcopy\", \"sort_matrix\", \"optimize_gemv\", \"optimize_gemm\", \"optimize_trmv\", \"optimize_trsv\", \"optimize_trsm\",\n\"init_omatconvert_descr\", \"release_omatconvert_descr\", \"init_omatadd_descr\", \"release_omatadd_descr\",\n\"omatconvert_buffer_size\", \"omatconvert_analyze\", \"omatconvert_get_nnz\", \"omatconvert\",\n\"omatadd_buffer_size\", \"omatadd_analyze\", \"omatadd_get_nnz\"]\n\nfunction analyzer_template(library::String, cpp_headers::String, name_routine::String)\n  list_parameters = Vector{String}[]\n  list_types = Vector{String}[]\n  list_versions = String[]\n  list_suffix = String[]\n\n  if (library == \"blas\") || (library == \"sparse\" && !(name_routine ∈ non_parametric_routines))\n    prefix = (library == \"sparse\") ? \"SPARSE_\" : \"BUF_\"\n\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T)\", cpp_headers) && (list_parameters = [\"T\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(FpType)\", cpp_headers) && (list_parameters = [\"FpType\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(Tf, Ti)\", cpp_headers) && (list_parameters = [\"Tf\", \"Ti\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T, Ts)\", cpp_headers) && (list_parameters = [\"T\", \"Ts\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(IntType, FpType)\", cpp_headers) && (list_parameters = [\"IntType\", \"FpType\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(Ta, Tb, Tc, Ts)\", cpp_headers) && (list_parameters = [\"Ta\", \"Tb\", \"Tc\", \"Ts\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T, Tres)\", cpp_headers) && (list_parameters = [\"T\", \"Tres\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T, Treal)\", cpp_headers) && (list_parameters = [\"T\", \"Treal\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T, Tc, Ts)\", cpp_headers) && (list_parameters = [\"T\", \"Tc\", \"Ts\"])\n    occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))(T, Tc)\", cpp_headers) && (list_parameters = [\"T\", \"Tc\"])\n    \n    (list_parameters == []) && @warn(\"Unable to determine the parametric parameters of $(name_routine).\")\n    \n    for (type, version, suffix) in [([\"sycl::half\"], \"H\", \"\"),\n                                    ([\"float\"], \"S\", \"\"),\n                                    ([\"double\"], \"D\", \"\"),\n                                    ([\"std::complex<float>\"], \"C\", \"\"),\n                                    ([\"std::complex<double>\"], \"Z\", \"\")]\n      if occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))($(type[1]))\", cpp_headers)\n        push!(list_types, type)\n        push!(list_versions, version)\n        push!(list_suffix, suffix)\n      end\n    end\n    \n    for (type, version, suffix) in [([\"int32_t\",\"float\"], \"S\", \"\"),\n                                    ([\"int64_t\",\"float\"], \"S\", \"_64\"),\n                                    ([\"int32_t\",\"double\"], \"D\", \"\"),\n                                    ([\"int64_t\",\"double\"], \"D\", \"_64\"),\n                                    ([\"int32_t\",\"std::complex<float>\"], \"C\", \"\"),\n                                    ([\"int64_t\",\"std::complex<float>\"], \"C\", \"_64\"),\n                                    ([\"int32_t\",\"std::complex<double>\"], \"Z\", \"\"),\n                                    ([\"int64_t\",\"std::complex<double>\"], \"Z\", \"_64\"),\n                                    ([\"float\",\"int32_t\"], \"S\", \"\"),\n                                    ([\"float\",\"int64_t\"], \"S\", \"_64\"),\n                                    ([\"double\",\"int32_t\"], \"D\", \"\"),\n                                    ([\"double\",\"int64_t\"], \"D\", \"_64\"),\n                                    ([\"std::complex<float>\",\"int32_t\"], \"C\", \"\"),\n                                    ([\"std::complex<float>\",\"int64_t\"], \"C\", \"_64\"),\n                                    ([\"std::complex<double>\",\"int32_t\"], \"Z\", \"\"),\n                                    ([\"std::complex<double>\",\"int64_t\"], \"Z\", \"_64\"),\n                                    ([\"sycl::half\",\"sycl::half\"], \"H\", \"\"),\n                                    ([\"float\",\"float\"], \"S\", \"\"),\n                                    ([\"double\",\"double\"], \"D\", \"\"),\n                                    ([\"std::complex<float>\",\"float\"], \"CS\", \"\"),\n                                    ([\"std::complex<double>\",\"double\"], \"ZD\", \"\"),\n                                    ([\"std::complex<float>\",\"std::complex<float>\"], \"C\", \"\"),\n                                    ([\"std::complex<double>\",\"std::complex<double>\"], \"Z\", \"\")]\n      if occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))($(type[1]), $(type[2]))\", cpp_headers)\n        push!(list_types, type)\n        push!(list_versions, version)\n        push!(list_suffix, suffix)\n      end\n    end\n    \n    for (type, version, suffix) in [([\"sycl::half\",\"sycl::half\",\"sycl::half\"], \"H\", \"\"),\n                                    ([\"float\",\"float\",\"float\"], \"S\", \"\"),\n                                    ([\"double\",\"double\",\"double\"], \"D\", \"\"),\n                                    ([\"std::complex<float>\",\"float\",\"float\"], \"CS\", \"\"),\n                                    ([\"std::complex<float>\",\"float\", \"std::complex<float>\"], \"C\", \"\"),\n                                    ([\"std::complex<double>\",\"double\",\"double\"], \"ZD\", \"\"),\n                                    ([\"std::complex<double>\",\"double\",\"std::complex<double>\"], \"Z\", \"\")]\n      if occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))($(type[1]), $(type[2]), $(type[3]))\", cpp_headers)\n        push!(list_types, type)\n        push!(list_versions, version)\n        push!(list_suffix, suffix)\n      end\n    end\n    \n    for (type, version, suffix) in [([\"sycl::half\",\"sycl::half\",\"sycl::half\",\"sycl::half\"], \"H\", \"\"),\n                                    ([\"float\",\"float\",\"float\",\"float\"], \"S\", \"\"),\n                                    ([\"double\",\"double\",\"double\",\"double\"], \"D\", \"\"),\n                                    ([\"std::complex<float>\",\"std::complex<float>\",\"std::complex<float>\",\"std::complex<float>\"], \"C\", \"\"),\n                                    ([\"std::complex<double>\",\"std::complex<double>\",\"std::complex<double>\",\"std::complex<double>\"], \"Z\", \"\")]\n      if occursin(\"ONEMKL_DECLARE_$(prefix)$(uppercase(name_routine))($(type[1]), $(type[2]), $(type[3]), $(type[4]))\", cpp_headers)\n        push!(list_types, type)\n        push!(list_versions, version)\n        push!(list_suffix, suffix)\n      end\n    end\n  end\n\n  return list_parameters, list_types, list_versions, list_suffix\nend\n"
  },
  {
    "path": "deps/generate_interfaces.jl",
    "content": "using oneAPI_Support_Headers_jll\n\ninclude(\"generate_helpers.jl\")\n\ninclude_dir = joinpath(oneAPI_Support_Headers_jll.artifact_dir, \"include\")\nblas = [joinpath(include_dir, \"oneapi\", \"mkl\", \"blas\", \"buffer_decls.hpp\")]\nlapack = [joinpath(include_dir, \"oneapi\", \"mkl\", \"lapack\", \"lapack.hpp\"),\n          joinpath(include_dir, \"oneapi\", \"mkl\", \"lapack\", \"scratchpad.hpp\")]\nsparse = [joinpath(include_dir, \"oneapi\", \"mkl\", \"spblas\", \"sparse_structures.hpp\"),\n          joinpath(include_dir, \"oneapi\", \"mkl\", \"spblas\", \"sparse_auxiliary.hpp\"),\n          joinpath(include_dir, \"oneapi\", \"mkl\", \"spblas\", \"sparse_operations.hpp\")]\n\ndict_version = Dict{Int, Char}(1 => 'S', 2 => 'D', 3 => 'C', 4 => 'Z')\n\nversion_types = Dict{Char, String}('S' => \"float\",\n                                   'D' => \"double\",\n                                   'C' => \"std::complex<float>\",\n                                   'Z' => \"std::complex<double>\")\n\nversion_types_header = Dict{Char, String}('S' => \"float\",\n                                          'D' => \"double\",\n                                          'C' => \"float _Complex\",\n                                          'Z' => \"double _Complex\")\n\ncomments = [\"namespace\", \"#\", \"}\", \"/*\", \"*\", \"//\", \"[[\", \"ONEMKL_DECLARE_\", \"ONEMKL_INLINE_DECLARE\"]\n\nvoid_output = [\"init_matrix_handle\", \"init_matmat_descr\", \"release_matmat_descr\", \"set_matmat_data\",\n               \"get_matmat_data\", \"init_omatadd_descr\", \"init_omatconvert_descr\"]\n\nfunction generate_headers(library::String, filename::Vector{String}, output::String; pattern::String=\"\")\n  routines = Dict{String,Int}()\n  signatures = []\n  signatures2 = []\n  cpp_headers = \"\"\n  for file in filename\n    cpp_headers = cpp_headers * read(file, String)\n  end\n  cpp_headers = replace(cpp_headers, \"std::int32_t\" => \"int32_t\")\n  cpp_headers = replace(cpp_headers, \"std::int64_t\" => \"int64_t\")\n  cpp_headers = replace(cpp_headers, \"; \\\\\" => \";\")\n  cpp_headers = replace(cpp_headers, \")\\n\\n\" => \");\\n\\n\")\n  cpp_headers = replace(cpp_headers, \"\\\\\\n\" => \"\\n\")\n  cpp_headers = replace(cpp_headers, \"sycl::event\\n\" => \"sycl::event \")\n  headers = \"\"\n\n  # Remove comments\n  for header in split(cpp_headers, '\\n')\n    mapreduce(x -> !startswith(strip(header), x) && !occursin(\"\\\"\", header), &, comments) && (headers *= header)\n  end\n\n  # Analyse each header\n  headers = split(headers, ';')\n  for (i, header) in enumerate(headers)\n    # We only generate C interfaces for exported symbols\n    !occursin(\"DLL_EXPORT\", header) && !occursin(\"_scratchpad_size\", header) && continue\n\n    # We don't want to interface routines with the following types, parameters or names\n    occursin(\"class\", header) && continue\n    occursin(\"span\", header) && continue\n    occursin(\"bfloat16\", header) && continue\n    occursin(\"::int8_t\", header) && continue\n    (library == \"lapack\") && occursin(\"void\", header) && continue # We only want USM routines\n    (library == \"sparse\") && occursin(\"trsv\", header) && !occursin(\"optimize_trsv\", header) && !occursin(\"alpha\", header) && continue  # SPARSE routine\n    occursin(\"(matrix_handle_t SpMat\", header) && continue  # SPARSE routine\n    occursin(\"set_csr_data(matrix_handle_t\", header) && continue  # SPARSE routine\n    occursin(\"release_matrix_handle(matrix_handle_t\", header) && continue  # SPARSE routine\n    occursin(\"get_matmat_data\", header) && continue  # SPARSE routine\n    occursin(\"matmat(\", header) && continue  # SPARSE routine\n    bool = occursin(\"release\", header) || occursin(\"init\", header)\n    (library == \"sparse\") && occursin(\"omatconvert\", header) && !bool && continue  # SPARSE routine\n    (library == \"sparse\") && occursin(\"omatadd\", header) && !bool && continue  # SPARSE routine\n    occursin(\"gemm_bias\", header) && continue  # BLAS routine\n    occursin(\"getri_batch\", header) && occursin(\"ldainv\", header) && continue  # LAPACK routine\n\n    # Check if the routine is a template\n    template = occursin(\"template\", header)\n    if template\n      header = replace(header, \"template <typename fp, oneapi::mkl::lapack::internal::is_floating_point<fp> = nullptr>         \" => \"\")\n      header = replace(header, \"template <typename fp, oneapi::mkl::lapack::internal::is_real_floating_point<fp> = nullptr>    \" => \"\")\n      header = replace(header, \"template <typename fp, oneapi::mkl::lapack::internal::is_complex_floating_point<fp> = nullptr> \" => \"\")\n\n      header = replace(header, \"template <typename data_t, oneapi::mkl::lapack::internal::is_floating_point<data_t> = nullptr>\" => \"\")\n      header = replace(header, \"template <typename data_t, oneapi::mkl::lapack::internal::is_real_floating_point<data_t> = nullptr>\" => \"\")\n      header = replace(header, \"template <typename data_t, oneapi::mkl::lapack::internal::is_complex_floating_point<data_t> = nullptr>\" => \"\")\n      header = replace(header, \"template <typename fp_type, internal::is_floating_point<fp_type> = nullptr>\" => \"\")\n      header = replace(header, \"template <typename fp_type, internal::is_real_floating_point<fp_type> = nullptr>\" => \"\")\n      header = replace(header, \"template <typename fp_type, internal::is_complex_floating_point<fp_type> = nullptr>\" => \"\")\n    end\n\n    type_routine = \"\"\n    if occursin(\"_scratchpad_size\", header)\n      type_routine = \"scratchpad_size\"\n    elseif occursin(\"sycl::event\", header)\n      header = replace(header, \"const std::vector<sycl::event> &events = {}\" => \"\")\n      header = replace(header, \"const std::vector<sycl::event> &events = {}\" => \"\")\n      header = replace(header, \"const std::vector<sycl::event> &event_list = {}\" => \"\")\n      header = replace(header, \"std::vector<sycl::event> &dependencies = {}\" => \"\")\n      header = replace(header, \"std::vector<sycl::event> &dependencies\" => \"\")  # typo in \"onemkl_sparse.cpp\"\n      type_routine = \"usm\"\n    else\n      type_routine = \"buffer\"\n    end\n\n    # Add a space for the returned argument\n    header = replace(header, \"sycl::event\" => \"sycl::event \")\n    header = replace(header, \"void\" => \"void \")\n\n    # Replace the types\n    header = replace(header, \"sycl::queue &queue\" => \"syclQueue_t device_queue\")\n    header = replace(header, \"sycl::queue& queue\" => \"syclQueue_t device_queue\")\n\n    if library ∈ (\"blas\", \"sparse\")\n      header = replace(header, \"compute_mode mode = MKL_BLAS_COMPUTE_MODE\" => \"\")\n      header = replace(header, \"index_base base=index_base::zero\" => \"onemklIndex base\")\n\n      header = replace(header, \"sycl::buffer<Ta> &\" => \"Ta *\")\n      header = replace(header, \"sycl::buffer<Tb> &\" => \"Tb *\")\n      header = replace(header, \"sycl::buffer<Tc> &\" => \"Tc *\")\n      header = replace(header, \"sycl::buffer<Td> &\" => \"Td *\")\n      header = replace(header, \"sycl::buffer<Treal> &\" => \"Treal *\")\n      header = replace(header, \"sycl::buffer<Tres> &\" => \"Tres *\")\n      header = replace(header, \"sycl::buffer<T> &\" => \"T *\")\n\n      header = replace(header, \"sycl::buffer<Ta, 1> &\" => \"Ta *\")\n      header = replace(header, \"sycl::buffer<Tb, 1> &\" => \"Tb *\")\n      header = replace(header, \"sycl::buffer<Tc, 1> &\" => \"Tc *\")\n      header = replace(header, \"sycl::buffer<Td, 1> &\" => \"Td *\")\n      header = replace(header, \"sycl::buffer<Ti, 1> &\" => \"Ti *\")\n      header = replace(header, \"sycl::buffer<Tf, 1> &\" => \"Tf *\")\n      header = replace(header, \"sycl::buffer<Treal, 1> &\" => \"Treal *\")\n      header = replace(header, \"sycl::buffer<Tres, 1> &\" => \"Tres *\")\n      header = replace(header, \"sycl::buffer<T,1> &\" => \"T *\")\n      header = replace(header, \"sycl::buffer<T, 1> &\" => \"T *\")\n      header = replace(header, \"sycl::buffer<FpType, 1> &\" => \"FpType *\")\n      header = replace(header, \"sycl::buffer<IntType, 1> &\" => \"IntType *\")\n    end\n\n    header = replace(header, \"sycl::buffer<float> &\" => \"float *\")\n    header = replace(header, \"sycl::buffer<float>  &\" => \"float *\")\n    header = replace(header, \"sycl::buffer<double> &\" => \"double *\")\n    header = replace(header, \"sycl::buffer<std::complex<float>> &\" => \"float _Complex *\")\n    header = replace(header, \"sycl::buffer<std::complex<float>>  &\" => \"float _Complex *\")\n    header = replace(header, \"sycl::buffer<std::complex<double>> &\" => \"double _Complex *\")\n    header = replace(header, \"sycl::buffer<int32_t> &\" => \"int32_t *\")\n    header = replace(header, \"sycl::buffer<int64_t> &\" => \"int64_t *\")\n\n    header = replace(header, \"sycl::buffer<float, 1> &\" => \"float *\")\n    header = replace(header, \"sycl::buffer<double, 1> &\" => \"double *\")\n    header = replace(header, \"sycl::buffer<std::complex<float>, 1> &\" => \"float _Complex *\")\n    header = replace(header, \"sycl::buffer<std::complex<double>, 1> &\" => \"double _Complex *\")\n    header = replace(header, \"sycl::buffer<std::uint8_t, 1> *\" => \"uint8_t *\")\n    header = replace(header, \"sycl::buffer<int32_t, 1> &\" => \"int32_t *\")\n    header = replace(header, \"sycl::buffer<int64_t, 1> &\" => \"int64_t *\")\n    header = replace(header, \"sycl::buffer<int64_t, 1> *\" => \"int64_t *\")\n\n    header = replace(header, \"std::complex<float>  *\" => \"float _Complex *\")\n    header = replace(header, \"std::complex<float> *\" => \"float _Complex *\")\n    header = replace(header, \"std::complex<double> *\" => \"double _Complex *\")\n\n    header = replace(header, \"template <>\\n\" => \"\")\n    header = replace(header, \"<std::complex<float>>\" => \"\")\n    header = replace(header, \"<std::complex<double>>\" => \"\")\n    header = replace(header, \"<float>\" => \"\")\n    header = replace(header, \"<double>\" => \"\")\n\n    header = replace(header, \"oneapi::mkl::transpose\" => \"onemklTranspose\")\n    header = replace(header, \"oneapi::mkl::uplo\" => \"onemklUplo\")\n    header = replace(header, \"oneapi::mkl::diag\" => \"onemklDiag\")\n    header = replace(header, \"oneapi::mkl::side\" => \"onemklSide\")\n    header = replace(header, \"oneapi::mkl::offset\" => \"onemklOffset\")\n    header = replace(header, \"oneapi::mkl::job\" => \"onemklJob\")\n    header = replace(header, \"oneapi::mkl::generate\" => \"onemklGenerate\")\n    header = replace(header, \"oneapi::mkl::compz\" => \"onemklCompz\")\n    header = replace(header, \"oneapi::mkl::direct\" => \"onemklDirect\")\n    header = replace(header, \"oneapi::mkl::storev\" => \"onemklStorev\")\n    header = replace(header, \"oneapi::mkl::rangev\" => \"onemklRangev\")\n    header = replace(header, \"oneapi::mkl::order\" => \"onemklOrder\")\n    header = replace(header, \"oneapi::mkl::jobsvd\" => \"onemklJobsvd\")\n    header = replace(header, \"oneapi::mkl::layout\" => \"onemklLayout\")\n    header = replace(header, \"oneapi::mkl::index\" => \"onemklIndex\")\n    header = replace(header, \"oneapi::mkl::property\" => \"onemklProperty\")\n    header = replace(header, \"sparse::matmat_descr_t\" => \"matmat_descr_t\")\n\n    # Sanitize the header\n    header = replace(header, \" \\\\\" => \"\")\n    header = replace(header, \"\\n\" => \"\")\n    header = replace(header, \"DLL_EXPORT \" => \"\")\n    header = replace(header, \"const \" => \"\")\n    for i = 1:20\n      header = replace(header, \"  \" => \" \")\n    end\n    header = replace(header, \"( \" => \"(\")\n    header = replace(header, \", )\" => \")\")\n    header = replace(header, \",)\" => \")\")\n    header = replace(header, \" void\" => \"void\")\n    header = replace(header, \" sycl::event\" => \"sycl::event\")\n    header = replace(header, \"* const* \" => \"**\")\n    header = replace(header, \"int64_t**\" => \"int64_t **\")\n\n    ind1 = findfirst(' ', header)\n    ind2 = findfirst('(', header)\n    name_routine = header[ind1+1:ind2-1]\n    !haskey(routines, name_routine * type_routine) && (routines[name_routine * type_routine] = 0)\n    (name_routine == \"gesvd_scratchpad_size\") && (routines[name_routine * type_routine] > 1) && continue\n    routines[name_routine * type_routine] += 1\n\n    # They use template for BLAS and SPARSE routines\n    list_parameters, list_types, list_versions, list_suffix = analyzer_template(library, cpp_headers, name_routine)\n    !isempty(list_parameters) && (type_routine == \"buffer\") && (library == \"sparse\") && continue  # Only wrap the USM version of sparse routines\n\n    version = 'X'\n    version = occursin(\"double\", header) ? 'D' : version\n    version = occursin(\"float\", header) ? 'S' : version\n    version = occursin(\"float _Complex\", header) ? 'C' : version\n    version = occursin(\"double _Complex\", header) ? 'Z' : version\n    version = occursin(\"_scratchpad_size\", header) ? 'W' : version\n\n    if version == 'W'\n      # The version 'W' is used for routines with suffix \"_scratchpad_size\"\n      versions = ('S', 'D', 'C', 'Z')\n      mapreduce(x -> startswith(name_routine, x), |, [\"or\", \"sy\"]) && !startswith(name_routine, \"sytrf\") && (versions = ('S', 'D'))\n      mapreduce(x -> startswith(name_routine, x), |, [\"un\", \"he\"]) && (versions = ('C', 'Z'))\n      routines[name_routine * type_routine] = routines[name_routine * type_routine] - 1 + length(versions)\n      for blas_version in versions\n        copy_header = header\n        copy_header = replace(copy_header, \"typename fp_type::value_type\" => version_types_header[blas_version])\n        copy_header = replace(copy_header, \"fp_type\" => version_types_header[blas_version])\n        copy_header = replace(copy_header, \"fp\" => version_types_header[blas_version])\n        copy_header = replace(copy_header, name_routine => \"onemkl$(blas_version)$(name_routine)\")\n        if name_routine ∈ (\"heevx_scratchpad_size\", \"hegvx_scratchpad_size\")\n          copy_header = replace(copy_header, \"typename float _Complex::value_type\" => \"float\")\n          copy_header = replace(copy_header, \"typename double _Complex::value_type\" => \"double\")\n        end\n        if occursin(\"batch\", name_routine) && !occursin(\"*\", header)\n          copy_header = replace(copy_header, \"_batch\" => \"_batch_strided\")\n        end\n        push!(signatures, (copy_header, name_routine, blas_version, type_routine, template))\n      end\n    else\n      if isempty(list_versions)\n        # The routine \"optimize_trsm\" has two versions.\n        suffix = \"\"\n        (name_routine == \"optimize_trsm\") && occursin(\"columns\", header) && (suffix = \"_advanced\")\n        (name_routine == \"optimize_gemm\") && occursin(\"columns\", header) && (suffix = \"_advanced\")\n        name_routine ∈ (\"set_csr_data\", \"set_coo_data\") && occursin(\"int64_t\", header) && (suffix = \"_64\")\n        occursin(\"batch\", name_routine) && !occursin(\"**\", header) && (suffix = \"_strided\")\n\n        header = replace(header, \"$(name_routine)(\" => \"onemkl$(version)$(name_routine)$(suffix)(\")\n        header = replace(header, \"void onemkl\" => \"int onemkl\")\n        header = replace(header, \"sycl::event onemkl\" => \"int onemkl\")\n        if library == \"sparse\"\n          if occursin(\"std::complex\", header)\n            (version == 'C') && (header = replace(header, \"std::complex \" => \"float _Complex \"))\n            (version == 'Z') && (header = replace(header, \"std::complex \" => \"double _Complex \"))\n          end\n          header = replace(header, \"transpose \" => \"onemklTranspose \")\n          header = replace(header, \"uplo \" => \"onemklUplo \")\n          header = replace(header, \"diag \" => \"onemklDiag \")\n          header = replace(header, \"side \" => \"onemklSide \")\n          header = replace(header, \"layout \" => \"onemklLayout \")\n          header = replace(header, \"index_base \" => \"onemklIndex \")\n          header = replace(header, \"property \" => \"onemklProperty \")\n          header = replace(header, \"sparse::matrix_view_descr \" => \"onemklMatrixView \")\n          header = replace(header, \"matrix_view_descr \" => \"onemklMatrixView \")\n          header = replace(header, \"sparse::matmat_request \" => \"onemklMatmatRequest \")\n          header = replace(header, \"omatconvert_alg \" => \"onemklOmatconvertAlg \")\n          header = replace(header, \"omatadd_alg \" => \"onemklOmataddAlg \")\n          header = replace(header, name_routine => \"sparse_\" * name_routine)\n        end\n        push!(signatures, (header, name_routine, version, type_routine, template))\n      else\n        n = length(list_parameters)\n        for (i, type) in enumerate(list_types)\n          version = list_versions[i]\n          suffix = list_suffix[i]\n          version = (name_routine ∈ (\"her\", \"herk\", \"her2k\", \"rotg\", \"nrm2\", \"asum\", \"hpr\")) && (version == \"CS\") ? \"C\" : version\n          version = (name_routine ∈ (\"her\", \"herk\", \"her2k\", \"rotg\", \"nrm2\", \"asum\", \"hpr\")) && (version == \"ZD\") ? \"Z\" : version\n\n          copy_header = header\n          for (j, parameter) in enumerate(reverse(list_parameters))\n            k = n-j+1\n            copy_header = replace(copy_header, parameter => type[k])\n          end\n          copy_header = replace(copy_header, \"transpose \" => \"onemklTranspose \")\n          copy_header = replace(copy_header, \"uplo \" => \"onemklUplo \")\n          copy_header = replace(copy_header, \"diag \" => \"onemklDiag \")\n          copy_header = replace(copy_header, \"side \" => \"onemklSide \")\n          copy_header = replace(copy_header, \"layout \" => \"onemklLayout \")\n          copy_header = replace(copy_header, \"index_base \" => \"onemklIndex \")\n          copy_header = replace(copy_header, \"std::complex<float>\" => \"float _Complex\")\n          copy_header = replace(copy_header, \"std::complex<double>\" => \"double _Complex\")\n          copy_header = replace(copy_header, \"sycl::half\" => \"short\")\n          copy_header = replace(copy_header, name_routine => \"onemkl$(version)$(name_routine)$(suffix)\")\n          copy_header = replace(copy_header, \"sycl::event onemkl\" => \"int onemkl\")\n          copy_header = replace(copy_header, \"void onemkl\" => \"int onemkl\")\n          if library == \"sparse\"\n            copy_header = replace(copy_header, name_routine => \"sparse_\" * name_routine)\n          end\n          if occursin(\"batch\", name_routine) && !occursin(\"**\", header)\n            copy_header = replace(copy_header, \"_batch\" => \"_batch_strided\")\n          end\n          if library == \"blas\"\n            # Out-of-place variants of trsm and trmm\n            if occursin(\"trsm\", header) && occursin(\"ldc\", header)\n              copy_header = replace(copy_header, \"trsm\" => \"trsm_variant\")\n            end\n            if occursin(\"trmm\", header) && occursin(\"ldc\", header)\n              copy_header = replace(copy_header, \"trmm\" => \"trmm_variant\")\n            end\n            copy_header = replace(copy_header, \"compute_mode mode,\" => \"\")\n            copy_header = replace(copy_header, \", compute_mode mode)\" => \")\")\n            copy_header = replace(copy_header, \"value_or_pointer<float _Complex>\" => \"float _Complex\")\n            copy_header = replace(copy_header, \"value_or_pointer<double _Complex>\" => \"double _Complex\")\n            copy_header = replace(copy_header, \"value_or_pointer<short>\" => \"short\")\n            copy_header = replace(copy_header, \"value_or_pointer<float>\" => \"float\")\n            copy_header = replace(copy_header, \"value_or_pointer<double>\" => \"double\")\n          end\n          push!(signatures, (copy_header, name_routine, version, type_routine, template))\n        end\n      end\n    end\n  end\n\n  # Check the number of methods\n  blacklist = String[]\n  for name_routine in keys(routines)\n    if (routines[name_routine] > 4)\n      if occursin(\"set_csr_data\", name_routine) || occursin(\"set_coo_data\", name_routine) || occursin(\"_batch\", name_routine)\n        if (routines[name_routine] > 8)\n          @warn \"The routine $(name_routine) has $(routines[name_routine]) and will not be interfaced.\"\n          push!(blacklist, name_routine)\n        end\n      else\n        @warn \"The routine $(name_routine) has $(routines[name_routine]) and will not be interfaced.\"\n        push!(blacklist, name_routine)\n      end\n    end\n  end\n\n  path_oneapi_headers = joinpath(@__DIR__, output)\n  oneapi_headers = open(path_oneapi_headers, \"w\")\n\n  for (header, name_routine, version, type_routine, template) in signatures\n    # Blacklist\n    (name_routine in blacklist) && continue\n\n    # Pass scalars (e.g. alpha/beta inputs) as references instead of values\n    for type in (\"short\", \"float\", \"double\", \"float _Complex\", \"double _Complex\")\n      header = replace(header, Regex(\"$type ([A-Za-z0-9]+(?![^,]*[_*]))[^,]*,\") => SubstitutionString(\"$type $pattern\\\\1,\"))\n      header = replace(header, Regex(\", $type ([A-Za-z0-9)]+(?![^,]*[_*]))[^,]*\") => SubstitutionString(\", $type $pattern\\\\1\"))\n    end\n\n    push!(signatures2, (header, name_routine, version, type_routine, template))\n\n    pos = findfirst('(', header)\n    fun = split(header, \" \")\n    len = 0\n    for (i, part) in enumerate(fun)\n      len += length(part)\n      if len ≤ 90\n        (i ≠ 1) && write(oneapi_headers, \" \")\n        write(oneapi_headers, part)\n      else\n        write(oneapi_headers, \"\\n\")\n        for i = 1:pos\n          write(oneapi_headers, \" \")\n        end\n        write(oneapi_headers, part)\n        len = pos + length(part)\n      end\n    end\n    write(oneapi_headers, \";\\n\\n\")\n  end\n  close(oneapi_headers)\n  return signatures2\nend\n\nfunction generate_cpp(library::String, filename::Vector{String}, output::String; pattern::String=\"\")\n  signatures = generate_headers(library, filename, output; pattern)\n  path_oneapi_cpp = joinpath(@__DIR__, output)\n  oneapi_cpp = open(path_oneapi_cpp, \"w\")\n  for (header, name, version, type_routine, template) in signatures\n    parameters = split(header, \"(\")[2]\n    parameters = split(parameters, \")\")[1]\n    parameters = replace(parameters, \"syclQueue_t device_queue\" => \"device_queue->val\")\n    parameters = replace(parameters, \"int32_t* \" => \"\")\n    parameters = replace(parameters, \"int32_t \" => \"\")\n    parameters = replace(parameters, \"int64_t* \" => \"\")\n    parameters = replace(parameters, \"int64_t \" => \"\")\n    parameters = replace(parameters, \"matrix_handle_t *\" => \"(oneapi::mkl::sparse::matrix_handle_t*) \")\n    parameters = replace(parameters, \"matrix_handle_t \" => \"(oneapi::mkl::sparse::matrix_handle_t) \")\n    parameters = replace(parameters, \"matmat_descr_t *\" => \"(oneapi::mkl::sparse::matmat_descr_t*) \")\n    parameters = replace(parameters, \"matmat_descr_t \" => \"(oneapi::mkl::sparse::matmat_descr_t) \")\n    parameters = replace(parameters, \"omatadd_descr_t *\" => \"(oneapi::mkl::sparse::omatadd_descr_t*) \")\n    parameters = replace(parameters, \"omatadd_descr_t \" => \"(oneapi::mkl::sparse::omatadd_descr_t) \")\n    parameters = replace(parameters, \"omatconvert_descr_t *\" => \"(oneapi::mkl::sparse::omatconvert_descr_t*) \")\n    parameters = replace(parameters, \"omatconvert_descr_t \" => \"(oneapi::mkl::sparse::omatconvert_descr_t) \")\n    parameters = replace(parameters, \"short **\" => \"reinterpret_cast<sycl::half **>\")\n    parameters = replace(parameters, \"float _Complex **\" => \"reinterpret_cast<std::complex<float> **>\")\n    parameters = replace(parameters, \"double _Complex **\" => \"reinterpret_cast<std::complex<double> **>\")\n    parameters = replace(parameters, \"short *\" => \"reinterpret_cast<sycl::half *>\")\n    parameters = replace(parameters, \"float _Complex *\" => \"reinterpret_cast<std::complex<float> *>\")\n    parameters = replace(parameters, \"double _Complex *\" => \"reinterpret_cast<std::complex<double> *>\")\n    parameters = replace(parameters, \"short \" => \"sycl::bit_cast<sycl::half>\")\n    parameters = replace(parameters, \"float _Complex \" => \"static_cast<std::complex<float> >\")\n    parameters = replace(parameters, \"double _Complex \" => \"static_cast<std::complex<double> >\")\n    parameters = replace(parameters, \", float *\" => \", \")\n    parameters = replace(parameters, \", double *\" => \", \")\n    parameters = replace(parameters, \", float \" => \", \")\n    parameters = replace(parameters, \", double \" => \", \")\n    parameters = replace(parameters, \", **\" => \", \")\n    parameters = replace(parameters, \", *\" => \", \")\n    parameters = replace(parameters, \"onemklTranspose *trans,\" => \"convert(trans, group_count),\")\n    parameters = replace(parameters, \"onemklTranspose* trans,\" => \"convert(trans, group_count),\")\n    parameters = replace(parameters, \"onemklUplo *uplo,\" => \"convert(uplo, group_count),\")\n    parameters = replace(parameters, \"onemklUplo* uplo,\" => \"convert(uplo, group_count),\")\n    parameters = replace(parameters, \"onemklDiag *diag,\" => \"convert(diag, group_count),\")\n    parameters = replace(parameters, \"onemklDiag* diag,\" => \"convert(diag, group_count),\")\n    parameters = replace(parameters, \"onemklSide *side,\" => \"convert(side, group_count),\")\n    parameters = replace(parameters, \"onemklSide* side,\" => \"convert(side, group_count),\")\n\n    for type in (\"onemklTranspose\", \"onemklSide\", \"onemklUplo\", \"onemklDiag\", \"onemklGenerate\",\n                 \"onemklLayout\", \"onemklJob\", \"onemklJobsvd\", \"onemklCompz\", \"onemklRangev\",\n                 \"onemklIndex\", \"onemklProperty\", \"onemklMatrixView\", \"onemklMatmatRequest\",\n                 \"onemklOmatconvertAlg\", \"onemklOmataddAlg\")\n      parameters = replace(parameters, Regex(\"$type ([A-Za-z0-9_]+),\") => SubstitutionString(\"convert(\\\\1),\"))\n      parameters = replace(parameters, Regex(\", $type ([A-Za-z0-9_]+)\") => SubstitutionString(\", convert(\\\\1)\"))\n    end\n\n    # Pass scalars (e.g. alpha/beta inputs) as references instead of values\n    header = replace(header, \"§\" => \"*\")\n    parameters = replace(parameters, \", §\" => \", *\")\n    parameters = replace(parameters, \", sycl::bit_cast<sycl::half>§\" => \", *reinterpret_cast<sycl::half *>\")\n    parameters = replace(parameters, \", static_cast<std::complex<float> >§\" => \", *reinterpret_cast<std::complex<float> *>\")\n    parameters = replace(parameters, \", static_cast<std::complex<double> >§\" => \", *reinterpret_cast<std::complex<double> *>\")\n\n    parameters = replace(parameters, r\"half>([A-Za-z0-9_]+)\" => s\"half>(\\1)\")\n    parameters = replace(parameters, r\" >([A-Za-z0-9_]+)\" => s\" >(\\1)\")\n    parameters = replace(parameters, r\" \\*>([A-Za-z0-9_]+)\" => s\"*>(\\1)\")\n    parameters = replace(parameters, r\" \\*\\*>([A-Za-z0-9_]+)\" => s\"**>(\\1)\")\n\n    variant = \"\"\n    if library == \"blas\"\n      variant = \"column_major::\"\n    end\n\n    # Build catch clause: LAPACK functions also catch computation_error for info\n    lapack_catch = \"catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\"\n    sycl_catch = \"catch (const sycl::exception& e) { return -1; }\"\n\n    write(oneapi_cpp, \"extern \\\"C\\\" $header {\\n\")\n    if template\n      type = version_types[version]\n      if !occursin(\"scratchpad_size\", name)\n        catch_clause = library == \"lapack\" ? lapack_catch : sycl_catch\n        write(oneapi_cpp, \"   try {\\n\")\n        write(oneapi_cpp, \"      auto status = oneapi::mkl::$library::$variant$name<$type>($parameters, {});\\n\")\n        write(oneapi_cpp, \"      device_queue->val.wait_and_throw();\\n\")\n        write(oneapi_cpp, \"   } $catch_clause\\n\")\n      end\n      if occursin(\"scratchpad_size\", name)\n        write(oneapi_cpp, \"   int64_t scratchpad_size = oneapi::mkl::$library::$variant$name<$type>($parameters);\\n   device_queue->val.wait_and_throw();\\n\")\n      end\n    else\n      if !(name ∈ void_output)\n        has_queue = occursin(\"device_queue\", parameters)\n        is_scratchpad = occursin(\"scratchpad_size\", name)\n        if has_queue && !is_scratchpad\n          catch_clause = library == \"lapack\" ? lapack_catch : sycl_catch\n          write(oneapi_cpp, \"   try {\\n\")\n          write(oneapi_cpp, \"      auto status = oneapi::mkl::$library::$variant$name($parameters, {});\\n\")\n          write(oneapi_cpp, \"      device_queue->val.wait_and_throw();\\n\")\n          write(oneapi_cpp, \"   } $catch_clause\\n\")\n        else\n          write(oneapi_cpp, \"   auto status = oneapi::mkl::$library::$variant$name($parameters, {});\\n\")\n          if has_queue\n            write(oneapi_cpp, \"   device_queue->val.wait_and_throw();\\n\")\n          end\n        end\n      else\n        if occursin(\"device_queue\", parameters)\n          write(oneapi_cpp, \"   try {\\n\")\n          write(oneapi_cpp, \"      oneapi::mkl::$library::$variant$name($parameters);\\n\")\n          write(oneapi_cpp, \"      device_queue->val.wait_and_throw();\\n\")\n          write(oneapi_cpp, \"   } $sycl_catch\\n\")\n        else\n          write(oneapi_cpp, \"   oneapi::mkl::$library::$variant$name($parameters);\\n\")\n        end\n      end\n    end\n    if occursin(\"scratchpad_size\", name)\n      write(oneapi_cpp, \"   return scratchpad_size;\\n\")\n    else\n      write(oneapi_cpp, \"   return 0;\\n\")\n    end\n    write(oneapi_cpp, \"}\")\n    write(oneapi_cpp, \"\\n\\n\")\n  end\n  close(oneapi_cpp)\nend\n\n# Generate \"src/onemkl.h\"\ngenerate_headers(\"blas\", blas, \"onemkl_blas.h\", pattern=\"*\")\ngenerate_headers(\"lapack\", lapack, \"onemkl_lapack.h\", pattern=\"*\")\ngenerate_headers(\"sparse\", sparse, \"onemkl_sparse.h\", pattern=\"*\")\n\nio = open(\"src/onemkl.h\", \"w\")\nheaders_prologue = read(\"onemkl_prologue.h\", String)\nwrite(io, headers_prologue)\nheaders_blas = read(\"onemkl_blas.h\", String)\nwrite(io, \"// BLAS\\n\")\nwrite(io, headers_blas)\nheaders_lapack = read(\"onemkl_lapack.h\", String)\nwrite(io, \"// LAPACK\\n\")\nwrite(io, headers_lapack)\nheaders_sparse = read(\"onemkl_sparse.h\", String)\nwrite(io, \"// SPARSE\\n\")\nwrite(io, headers_sparse)\nheaders_epilogue = read(\"onemkl_epilogue.h\", String)\nwrite(io, headers_epilogue)\nclose(io)\n\n# Add the version of oneMKL in src/onemkl.h\nheaders_onemkl = read(\"src/onemkl.h\", String)\nversion_onemkl = pkgversion(oneAPI_Support_Headers_jll)\nheaders_onemkl = replace(headers_onemkl, \"void onemkl_version\" => \"const int64_t ONEMKL_VERSION_MAJOR = $(version_onemkl.major);\\nconst int64_t ONEMKL_VERSION_MINOR = $(version_onemkl.minor);\\nconst int64_t ONEMKL_VERSION_PATCH = $(version_onemkl.patch);\\nvoid onemkl_version\")\nwrite(\"src/onemkl.h\", headers_onemkl)\n\n# Generate \"src/onemkl.cpp\"\ngenerate_cpp(\"blas\", blas, \"onemkl_blas.cpp\", pattern=\"§\")\ngenerate_cpp(\"lapack\", lapack, \"onemkl_lapack.cpp\", pattern=\"§\")\ngenerate_cpp(\"sparse\", sparse, \"onemkl_sparse.cpp\", pattern=\"§\")\n\nio = open(\"src/onemkl.cpp\", \"w\")\ncpp_prologue = read(\"onemkl_prologue.cpp\", String)\nwrite(io, cpp_prologue)\ncpp_blas = read(\"onemkl_blas.cpp\", String)\nwrite(io, \"// BLAS\\n\")\nwrite(io, cpp_blas)\ncpp_lapack = read(\"onemkl_lapack.cpp\", String)\nwrite(io, \"// LAPACK\\n\")\nwrite(io, cpp_lapack)\ncpp_sparse = read(\"onemkl_sparse.cpp\", String)\nwrite(io, \"// SPARSE\\n\")\nwrite(io, cpp_sparse)\ncpp_epilogue = read(\"onemkl_epilogue.cpp\", String)\nwrite(io, cpp_epilogue)\nclose(io)\n"
  },
  {
    "path": "deps/onemkl_epilogue.cpp",
    "content": "extern \"C\" int onemklXsparse_matmat(syclQueue_t device_queue, matrix_handle_t A, matrix_handle_t B, matrix_handle_t C, onemklMatmatRequest req, matmat_descr_t descr, int64_t *sizeTempBuffer, void *tempBuffer) {\n   auto status = oneapi::mkl::sparse::matmat(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, (oneapi::mkl::sparse::matrix_handle_t) C, convert(req), (oneapi::mkl::sparse::matmat_descr_t) descr, sizeTempBuffer, tempBuffer, {});\n   device_queue->val.wait_and_throw();\n   return 0;\n}\n\n// other\n\n// oneMKL keeps a cache of SYCL queues and tries to destroy them when unloading the library.\n// that is incompatible with oneAPI.jl destroying queues before that, so call mkl_free_buffers\n// to manually wipe the device cache when we're destroying queues.\n\nextern \"C\" int onemklDestroy() {\n    mkl_free_buffers();\n    return 0;\n}\n"
  },
  {
    "path": "deps/onemkl_epilogue.h",
    "content": "int onemklXsparse_matmat(syclQueue_t device_queue, matrix_handle_t A, matrix_handle_t B,\n                         matrix_handle_t C, onemklMatmatRequest req, matmat_descr_t\n                         descr, int64_t *sizeTempBuffer, void *tempBuffer);\n\nint onemklDestroy(void);\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "deps/onemkl_prologue.cpp",
    "content": "#include \"onemkl.h\"\n#include \"sycl.hpp\"\n#include <iostream>\n#include <exception>\n#include <memory>\n#include <oneapi/mkl.hpp>\n\noneapi::mkl::transpose convert(onemklTranspose val) {\n    switch (val) {\n    case ONEMKL_TRANSPOSE_NONTRANS:\n        return oneapi::mkl::transpose::nontrans;\n    case ONEMKL_TRANSPOSE_TRANS:\n        return oneapi::mkl::transpose::trans;\n    case ONEMLK_TRANSPOSE_CONJTRANS:\n        return oneapi::mkl::transpose::conjtrans;\n    }\n}\n\noneapi::mkl::transpose* convert(const onemklTranspose* vals, int64_t size) {\n    oneapi::mkl::transpose* result = new oneapi::mkl::transpose[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_TRANSPOSE_NONTRANS:\n                result[i] = oneapi::mkl::transpose::nontrans;\n                break;\n            case ONEMKL_TRANSPOSE_TRANS:\n                result[i] = oneapi::mkl::transpose::trans;\n                break;\n            case ONEMLK_TRANSPOSE_CONJTRANS:\n                result[i] = oneapi::mkl::transpose::conjtrans;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::uplo convert(onemklUplo val) {\n    switch(val) {\n        case ONEMKL_UPLO_UPPER:\n            return oneapi::mkl::uplo::upper;\n        case ONEMKL_UPLO_LOWER:\n            return oneapi::mkl::uplo::lower;\n    }\n}\n\noneapi::mkl::uplo* convert(const onemklUplo* vals, int64_t size) {\n    oneapi::mkl::uplo* result = new oneapi::mkl::uplo[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_UPLO_UPPER:\n                result[i] = oneapi::mkl::uplo::upper;\n                break;\n            case ONEMKL_UPLO_LOWER:\n                result[i] = oneapi::mkl::uplo::lower;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::diag convert(onemklDiag val) {\n    switch(val) {\n        case ONEMKL_DIAG_NONUNIT:\n            return oneapi::mkl::diag::nonunit;\n        case ONEMKL_DIAG_UNIT:\n            return oneapi::mkl::diag::unit;\n    }\n}\n\noneapi::mkl::diag* convert(const onemklDiag* vals, int64_t size) {\n    oneapi::mkl::diag* result = new oneapi::mkl::diag[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_DIAG_NONUNIT:\n                result[i] = oneapi::mkl::diag::nonunit;\n                break;\n            case ONEMKL_DIAG_UNIT:\n                result[i] = oneapi::mkl::diag::unit;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::side convert(onemklSide val) {\n    switch (val) {\n    case ONEMKL_SIDE_LEFT:\n        return oneapi::mkl::side::left;\n    case ONEMKL_SIDE_RIGHT:\n        return oneapi::mkl::side::right;\n    }\n}\n\noneapi::mkl::side* convert(const onemklSide* vals, int64_t size) {\n    oneapi::mkl::side* result = new oneapi::mkl::side[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_SIDE_LEFT:\n                result[i] = oneapi::mkl::side::left;\n                break;\n            case ONEMKL_SIDE_RIGHT:\n                result[i] = oneapi::mkl::side::right;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::offset convert(onemklOffset val) {\n    switch (val) {\n    case ONEMKL_OFFSET_ROW:\n        return oneapi::mkl::offset::row;\n    case ONEMKL_OFFSET_COL:\n        return oneapi::mkl::offset::column;\n    case ONEMKL_OFFSET_FIX:\n        return oneapi::mkl::offset::fix;\n    }\n}\n\noneapi::mkl::job convert(onemklJob val) {\n    switch (val) {\n    case ONEMKL_JOB_N:\n        return oneapi::mkl::job::N;\n    case ONEMKL_JOB_V:\n        return oneapi::mkl::job::V;\n    case ONEMKL_JOB_U:\n        return oneapi::mkl::job::U;\n    case ONEMKL_JOB_A:\n        return oneapi::mkl::job::A;\n    case ONEMKL_JOB_S:\n        return oneapi::mkl::job::S;\n    case ONEMKL_JOB_O:\n        return oneapi::mkl::job::O;\n    }\n}\n\noneapi::mkl::generate convert(onemklGenerate val) {\n    switch (val) {\n    case ONEMKL_GENERATE_Q:\n        return oneapi::mkl::generate::Q;\n    case ONEMKL_GENERATE_P:\n        return oneapi::mkl::generate::P;\n    case ONEMKL_GENERATE_N:\n        return oneapi::mkl::generate::N;\n    case ONEMKL_GENERATE_V:\n        return oneapi::mkl::generate::V;\n    }\n}\n\noneapi::mkl::compz convert(onemklCompz val) {\n    switch (val) {\n    case ONEMKL_COMPZ_N:\n        return oneapi::mkl::compz::N;\n    case ONEMKL_COMPZ_V:\n        return oneapi::mkl::compz::V;\n    case ONEMKL_COMPZ_I:\n        return oneapi::mkl::compz::I;\n    }\n}\n\noneapi::mkl::direct convert(onemklDirect val) {\n    switch (val) {\n    case ONEMKL_DIRECT_F:\n        return oneapi::mkl::direct::F;\n    case ONEMKL_DIRECT_B:\n        return oneapi::mkl::direct::B;\n    }\n}\n\noneapi::mkl::storev convert(onemklStorev val) {\n    switch (val) {\n    case ONEMKL_STOREV_C:\n        return oneapi::mkl::storev::C;\n    case ONEMKL_STOREV_R:\n        return oneapi::mkl::storev::R;\n    }\n}\n\noneapi::mkl::rangev convert(onemklRangev val) {\n    switch (val) {\n    case ONEMKL_RANGEV_A:\n        return oneapi::mkl::rangev::A;\n    case ONEMKL_RANGEV_V:\n        return oneapi::mkl::rangev::V;\n    case ONEMKL_RANGEV_I:\n        return oneapi::mkl::rangev::I;\n    }\n}\n\noneapi::mkl::order convert(onemklOrder val) {\n    switch (val) {\n    case ONEMKL_ORDER_B:\n        return oneapi::mkl::order::B;\n    case ONEMKL_ORDER_E:\n        return oneapi::mkl::order::E;\n    }\n}\n\noneapi::mkl::jobsvd convert(onemklJobsvd val) {\n    switch (val) {\n    case ONEMKL_JOBSVD_N:\n        return oneapi::mkl::jobsvd::N;\n    case ONEMKL_JOBSVD_A:\n        return oneapi::mkl::jobsvd::A;\n    case ONEMKL_JOBSVD_O:\n        return oneapi::mkl::jobsvd::O;\n    case ONEMKL_JOBSVD_S:\n        return oneapi::mkl::jobsvd::S;\n    }\n}\n\noneapi::mkl::layout convert(onemklLayout val) {\n    switch (val) {\n    case ONEMKL_LAYOUT_ROW:\n        return oneapi::mkl::layout::row_major;\n    case ONEMKL_LAYOUT_COL:\n        return oneapi::mkl::layout::col_major;\n    }\n}\n\noneapi::mkl::index_base convert(onemklIndex val) {\n    switch (val) {\n    case ONEMKL_INDEX_ZERO:\n        return oneapi::mkl::index_base::zero;\n    case ONEMKL_INDEX_ONE:\n        return oneapi::mkl::index_base::one;\n    }\n}\n\noneapi::mkl::sparse::property convert(onemklProperty val) {\n    switch (val) {\n    case ONEMKL_PROPERTY_SYMMETRIC:\n        return oneapi::mkl::sparse::property::symmetric;\n    case ONEMKL_PROPERTY_SORTED:\n        return oneapi::mkl::sparse::property::sorted;\n    }\n}\n\noneapi::mkl::sparse::matrix_view_descr convert(onemklMatrixView val) {\n    switch (val) {\n    case ONEMKL_MATRIX_VIEW_GENERAL:\n        return oneapi::mkl::sparse::matrix_view_descr::general;\n    }\n}\n\noneapi::mkl::sparse::matmat_request convert(onemklMatmatRequest val) {\n    switch (val) {\n    case ONEMKL_MATMAT_REQUEST_GET_WORK_ESTIMATION_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_work_estimation_buf_size;\n    case ONEMKL_MATMAT_REQUEST_WORK_ESTIMATION:\n        return oneapi::mkl::sparse::matmat_request::work_estimation;\n    case ONEMKL_MATMAT_REQUEST_GET_COMPUTE_STRUCTURE_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_compute_structure_buf_size;\n    case ONEMKL_MATMAT_REQUEST_COMPUTE_STRUCTURE:\n        return oneapi::mkl::sparse::matmat_request::compute_structure;\n    case ONEMKL_MATMAT_REQUEST_FINALIZE_STRUCTURE:\n        return oneapi::mkl::sparse::matmat_request::finalize_structure;\n    case ONEMKL_MATMAT_REQUEST_GET_COMPUTE_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_compute_buf_size;\n    case ONEMKL_MATMAT_REQUEST_COMPUTE:\n        return oneapi::mkl::sparse::matmat_request::compute;\n    case ONEMKL_MATMAT_REQUEST_GET_NNZ:\n        return oneapi::mkl::sparse::matmat_request::get_nnz;\n    case ONEMKL_MATMAT_REQUEST_FINALIZE:\n        return oneapi::mkl::sparse::matmat_request::finalize;\n    }\n}\n\noneapi::mkl::sparse::omatconvert_alg convert(onemklOmatconvertAlg val) {\n    switch (val) {\n    case ONEMKL_OMATCONVERT_DEFAULT_ALG:\n        return oneapi::mkl::sparse::omatconvert_alg::default_alg;\n    }\n}\n\noneapi::mkl::sparse::omatadd_alg convert(onemklOmataddAlg val) {\n    switch (val) {\n    case ONEMKL_OMATADD_DEFAULT_ALG:\n        return oneapi::mkl::sparse::omatadd_alg::default_alg;\n    }\n}\n\n// version\nextern \"C\" void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch) {\n    *major = ONEMKL_VERSION_MAJOR;\n    *minor = ONEMKL_VERSION_MINOR;\n    *patch = ONEMKL_VERSION_PATCH;\n    return;\n}\n\n// gemm\n// https://spec.oneapi.io/versions/1.0-rev-1/elements/oneMKL/source/domains/blas/gemm.html\nclass gemmBatchInfo {\n    public:\n        oneapi::mkl::transpose *m_transa = nullptr;\n        oneapi::mkl::transpose *m_transb = nullptr;\n        sycl::device m_device;\n        sycl::context m_context;\n        oneapi::mkl::transpose m_ta;\n        oneapi::mkl::transpose m_tb;\n        // Constructor\n        gemmBatchInfo(syclQueue_t device_queue,\n                    int64_t group_count,\n                    onemklTranspose transa,\n                    onemklTranspose transb) {\n            // Get device and context info from device_queue\n            auto main_queue = device_queue->val;\n            m_device = main_queue.get_device();\n            m_context = main_queue.get_context();\n\n            // Allocate transpose shared buffers\n            try {\n                m_transa = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_transb = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_ta = convert(transa);\n                m_tb = convert(transb);\n            } catch(const std::bad_alloc& e) {\n                std::cerr << \"Error: \" << e.what() << std::endl;\n            }\n\n            // Initialize\n            for (int i = 0; i < group_count; i++) {\n                m_transa[i] = m_ta;\n                m_transb[i] = m_tb;\n            }\n        };\n\n        // Destructor\n        ~gemmBatchInfo() {\n            free(m_transa, m_context);\n            free(m_transb, m_context);\n        }\n};\n\nclass trsmBatchInfo {\n    public:\n        oneapi::mkl::transpose *m_transa = nullptr;\n        oneapi::mkl::side *m_leftright = nullptr;\n        oneapi::mkl::uplo *m_upperlower = nullptr;\n        oneapi::mkl::diag *m_unitdiag = nullptr;\n        sycl::device m_device;\n        sycl::context m_context;\n        oneapi::mkl::transpose m_ta;\n        oneapi::mkl::side m_side;\n        oneapi::mkl::uplo m_uplo;\n        oneapi::mkl::diag m_diag;\n\n        // Constructor\n        trsmBatchInfo(syclQueue_t device_queue,\n                    onemklSide left_right,\n                    onemklUplo upper_lower,\n                    onemklTranspose transa,\n                    onemklDiag unit_diag,\n                    int64_t group_count) {\n            // Get device and context info from device_queue\n            auto main_queue = device_queue->val;\n            m_device = main_queue.get_device();\n            m_context = main_queue.get_context();\n            try {\n                // Allocate uniform arrays of group_size and transpose_a, transpose_b supporting oneMKL\n                // gemm_batch API\n                m_transa = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_leftright = (oneapi::mkl::side *) malloc_shared(group_count * sizeof(oneapi::mkl::side),\n                                                                m_device, m_context);\n                m_upperlower = (oneapi::mkl::uplo *) malloc_shared(group_count * sizeof(oneapi::mkl::uplo),\n                                                                m_device, m_context);\n                m_unitdiag = (oneapi::mkl::diag *) malloc_shared(group_count * sizeof(oneapi::mkl::diag),\n                                                                m_device, m_context);\n                m_ta = convert(transa);\n                m_side = convert(left_right);\n                m_uplo = convert(upper_lower);\n                m_diag = convert(unit_diag);\n            } catch(const std::bad_alloc& e) {\n                std::cerr << \"Error: \" << e.what() << std::endl;\n            }\n            // Initialize\n            for (int i = 0; i < group_count; i++) {\n                m_transa[i] = m_ta;\n                m_leftright[i] = m_side;\n                m_upperlower[i] = m_uplo;\n                m_unitdiag[i] = m_diag;\n            }\n        };\n\n        // Destructor\n        ~trsmBatchInfo() {\n            free(m_transa, m_context);\n            free(m_upperlower, m_context);\n            free(m_unitdiag, m_context);\n            free(m_leftright, m_context);\n        }\n};\n\nextern \"C\" int onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, uint16_t *alpha,\n                                 const short **a, int64_t *lda, const short **b,\n                                 int64_t *ldb, uint16_t *beta, short **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<sycl::half *>(alpha),\n                        reinterpret_cast<const sycl::half **>(&a[0]), lda,\n                        reinterpret_cast<const sycl::half **>(&b[0]), ldb,\n                        reinterpret_cast<sycl::half *>(beta), reinterpret_cast<sycl::half **>(&c[0]),\n                        ldc, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklSgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, float *alpha,\n                                 const float **a, int64_t *lda, const float **b,\n                                 int64_t *ldb, float *beta, float **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, alpha,\n                        (const float **)&a[0], lda,\n                        (const float **)&b[0], ldb,\n                        beta, &c[0], ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklDgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, double *alpha,\n                                 const double **a, int64_t *lda, const double **b,\n                                 int64_t *ldb, double *beta, double **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, alpha,\n                        (const double **)&a[0], lda,\n                        (const double **)&b[0], ldb,\n                        beta, &c[0], ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklCgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, float _Complex *alpha,\n                                 const float _Complex **a, int64_t *lda,\n                                 const float _Complex **b,\n                                 int64_t *ldb, float _Complex *beta, float _Complex **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<std::complex<float> *>(alpha),\n                        reinterpret_cast<const std::complex<float> **>(&a[0]),\n                        lda,\n                        reinterpret_cast<const std::complex<float> **>(&b[0]),\n                        ldb,\n                        reinterpret_cast<std::complex<float> *>(beta),\n                        reinterpret_cast<std::complex<float> **>(&c[0]), ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklZgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, double _Complex *alpha,\n                                 const double _Complex **a, int64_t *lda,\n                                 const double _Complex **b,\n                                 int64_t *ldb, double _Complex *beta,\n                                 double _Complex **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<std::complex<double> *>(alpha),\n                        reinterpret_cast<const std::complex<double> **>(&a[0]),\n                        lda,\n                        reinterpret_cast<const std::complex<double> **>(&b[0]),\n                        ldb,\n                        reinterpret_cast<std::complex<double> *>(beta),\n                        reinterpret_cast<std::complex<double> **>(&c[0]), ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklStrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n, float *alpha,\n                                 const float **a, int64_t *lda, float **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                           unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, alpha, (const float **)&a[0], lda,\n                        &b[0], ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklDtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 double *alpha, const double **a, int64_t *lda,\n                                 double **b, int64_t *ldb, int64_t group_count,\n                                 int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                                unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, alpha, (const double **)&a[0], lda, &b[0],\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklCtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 float _Complex *alpha, const float _Complex **a,\n                                 int64_t *lda, float _Complex **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                                unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, reinterpret_cast<std::complex<float> *>(alpha),\n                        reinterpret_cast<const std::complex<float> **>(&a[0]),\n                        lda, reinterpret_cast<std::complex<float> **>(&b[0]),\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklZtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 double _Complex *alpha, const double _Complex **a,\n                                 int64_t *lda, double _Complex **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right,\n                                upper_lower, transa, unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, reinterpret_cast<std::complex<double> *>(alpha),\n                        reinterpret_cast<const std::complex<double> **>(&a[0]),\n                        lda, reinterpret_cast<std::complex<double> **>(&b[0]),\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n"
  },
  {
    "path": "deps/onemkl_prologue.h",
    "content": "#pragma once\n\n#include \"sycl.h\"\n\n#include <stddef.h>\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// BLAS types\ntypedef enum {\n    ONEMKL_TRANSPOSE_NONTRANS,\n    ONEMKL_TRANSPOSE_TRANS,\n    ONEMLK_TRANSPOSE_CONJTRANS\n} onemklTranspose;\n\ntypedef enum {\n    ONEMKL_UPLO_UPPER,\n    ONEMKL_UPLO_LOWER\n} onemklUplo;\n\ntypedef enum {\n    ONEMKL_DIAG_NONUNIT,\n    ONEMKL_DIAG_UNIT\n } onemklDiag;\n\ntypedef enum {\n    ONEMKL_SIDE_LEFT,\n    ONEMKL_SIDE_RIGHT\n} onemklSide;\n\ntypedef enum {\n    ONEMKL_OFFSET_ROW,\n    ONEMKL_OFFSET_COL,\n    ONEMKL_OFFSET_FIX,\n} onemklOffset;\n\n// LAPACK types\ntypedef enum {\n    ONEMKL_JOB_N,\n    ONEMKL_JOB_V,\n    ONEMKL_JOB_U,\n    ONEMKL_JOB_A,\n    ONEMKL_JOB_S,\n    ONEMKL_JOB_O\n} onemklJob;\n\ntypedef enum {\n    ONEMKL_GENERATE_Q,\n    ONEMKL_GENERATE_P,\n    ONEMKL_GENERATE_N,\n    ONEMKL_GENERATE_V\n} onemklGenerate;\n\ntypedef enum {\n    ONEMKL_COMPZ_N,\n    ONEMKL_COMPZ_V,\n    ONEMKL_COMPZ_I\n} onemklCompz;\n\ntypedef enum {\n    ONEMKL_DIRECT_F,\n    ONEMKL_DIRECT_B\n} onemklDirect;\n\ntypedef enum {\n    ONEMKL_STOREV_C,\n    ONEMKL_STOREV_R\n} onemklStorev;\n\ntypedef enum {\n    ONEMKL_RANGEV_A,\n    ONEMKL_RANGEV_V,\n    ONEMKL_RANGEV_I\n} onemklRangev;\n\ntypedef enum {\n    ONEMKL_ORDER_B,\n    ONEMKL_ORDER_E\n} onemklOrder;\n\ntypedef enum {\n    ONEMKL_JOBSVD_N,\n    ONEMKL_JOBSVD_A,\n    ONEMKL_JOBSVD_O,\n    ONEMKL_JOBSVD_S\n} onemklJobsvd;\n\ntypedef enum {\n    ONEMKL_LAYOUT_ROW,\n    ONEMKL_LAYOUT_COL,\n} onemklLayout;\n\ntypedef enum {\n    ONEMKL_INDEX_ZERO,\n    ONEMKL_INDEX_ONE,\n} onemklIndex;\n\n// SPARSE types\ntypedef enum {\n    ONEMKL_PROPERTY_SYMMETRIC,\n    ONEMKL_PROPERTY_SORTED,\n} onemklProperty;\n\ntypedef enum {\n    ONEMKL_MATRIX_VIEW_GENERAL,\n} onemklMatrixView;\n\ntypedef enum {\n    ONEMKL_MATMAT_REQUEST_GET_WORK_ESTIMATION_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_WORK_ESTIMATION,\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_STRUCTURE_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_COMPUTE_STRUCTURE,\n    ONEMKL_MATMAT_REQUEST_FINALIZE_STRUCTURE,\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_COMPUTE,\n    ONEMKL_MATMAT_REQUEST_GET_NNZ,\n    ONEMKL_MATMAT_REQUEST_FINALIZE,\n} onemklMatmatRequest;\n\ntypedef enum {\n    ONEMKL_OMATCONVERT_DEFAULT_ALG,\n} onemklOmatconvertAlg;\n\ntypedef enum {\n    ONEMKL_OMATADD_DEFAULT_ALG,\n} onemklOmataddAlg;\n\nstruct matrix_handle;\ntypedef struct matrix_handle *matrix_handle_t;\n\nstruct matmat_descr;\ntypedef struct matmat_descr *matmat_descr_t;\n\nstruct omatconvert_descr;\ntypedef struct omatconvert_descr *omatconvert_descr_t;\n\nstruct omatadd_descr;\ntypedef struct omatadd_descr *omatadd_descr_t;\n\nvoid onemkl_version(int64_t *major, int64_t *minor, int64_t *patch);\n\nint onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, uint16_t *alpha,\n                      const short **a, int64_t *lda, const short **b,\n                      int64_t *ldb, uint16_t *beta, short **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklSgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, float *alpha,\n                      const float **a, int64_t *lda, const float **b,\n                      int64_t *ldb, float *beta, float **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklDgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, double *alpha,\n                      const double **a, int64_t *lda, const double **b,\n                      int64_t *ldb, double *beta, double **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklCgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, float _Complex *alpha,\n                      const float _Complex **a, int64_t *lda,\n                      const float _Complex **b,\n                      int64_t *ldb, float _Complex *beta,\n                      float _Complex **c, int64_t *ldc,\n                      int64_t group_count, int64_t *group_size);\n\nint onemklZgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, double _Complex *alpha,\n                      const double _Complex **a, int64_t *lda,\n                      const double _Complex **b,\n                      int64_t *ldb, double _Complex *beta,\n                      double _Complex **c, int64_t *ldc,\n                      int64_t group_count, int64_t *group_size);\n\nint onemklStrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      float *alpha, const float **a, int64_t *lda,\n                      float **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklDtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      double *alpha, const double **a, int64_t *lda,\n                      double **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklCtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      float _Complex *alpha, const float _Complex **a, int64_t *lda,\n                      float _Complex **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklZtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      double _Complex *alpha, const double _Complex **a, int64_t *lda,\n                      double _Complex **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n"
  },
  {
    "path": "deps/src/onemkl.cpp",
    "content": "#include \"onemkl.h\"\n#include \"sycl.hpp\"\n#include <iostream>\n#include <exception>\n#include <memory>\n#include <oneapi/mkl.hpp>\n\noneapi::mkl::transpose convert(onemklTranspose val) {\n    switch (val) {\n    case ONEMKL_TRANSPOSE_NONTRANS:\n        return oneapi::mkl::transpose::nontrans;\n    case ONEMKL_TRANSPOSE_TRANS:\n        return oneapi::mkl::transpose::trans;\n    case ONEMLK_TRANSPOSE_CONJTRANS:\n        return oneapi::mkl::transpose::conjtrans;\n    }\n}\n\noneapi::mkl::transpose* convert(const onemklTranspose* vals, int64_t size) {\n    oneapi::mkl::transpose* result = new oneapi::mkl::transpose[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_TRANSPOSE_NONTRANS:\n                result[i] = oneapi::mkl::transpose::nontrans;\n                break;\n            case ONEMKL_TRANSPOSE_TRANS:\n                result[i] = oneapi::mkl::transpose::trans;\n                break;\n            case ONEMLK_TRANSPOSE_CONJTRANS:\n                result[i] = oneapi::mkl::transpose::conjtrans;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::uplo convert(onemklUplo val) {\n    switch(val) {\n        case ONEMKL_UPLO_UPPER:\n            return oneapi::mkl::uplo::upper;\n        case ONEMKL_UPLO_LOWER:\n            return oneapi::mkl::uplo::lower;\n    }\n}\n\noneapi::mkl::uplo* convert(const onemklUplo* vals, int64_t size) {\n    oneapi::mkl::uplo* result = new oneapi::mkl::uplo[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_UPLO_UPPER:\n                result[i] = oneapi::mkl::uplo::upper;\n                break;\n            case ONEMKL_UPLO_LOWER:\n                result[i] = oneapi::mkl::uplo::lower;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::diag convert(onemklDiag val) {\n    switch(val) {\n        case ONEMKL_DIAG_NONUNIT:\n            return oneapi::mkl::diag::nonunit;\n        case ONEMKL_DIAG_UNIT:\n            return oneapi::mkl::diag::unit;\n    }\n}\n\noneapi::mkl::diag* convert(const onemklDiag* vals, int64_t size) {\n    oneapi::mkl::diag* result = new oneapi::mkl::diag[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_DIAG_NONUNIT:\n                result[i] = oneapi::mkl::diag::nonunit;\n                break;\n            case ONEMKL_DIAG_UNIT:\n                result[i] = oneapi::mkl::diag::unit;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::side convert(onemklSide val) {\n    switch (val) {\n    case ONEMKL_SIDE_LEFT:\n        return oneapi::mkl::side::left;\n    case ONEMKL_SIDE_RIGHT:\n        return oneapi::mkl::side::right;\n    }\n}\n\noneapi::mkl::side* convert(const onemklSide* vals, int64_t size) {\n    oneapi::mkl::side* result = new oneapi::mkl::side[size];\n    for (int64_t i = 0; i < size; ++i) {\n        switch (vals[i]) {\n            case ONEMKL_SIDE_LEFT:\n                result[i] = oneapi::mkl::side::left;\n                break;\n            case ONEMKL_SIDE_RIGHT:\n                result[i] = oneapi::mkl::side::right;\n                break;\n        }\n    }\n    return result;\n}\n\noneapi::mkl::offset convert(onemklOffset val) {\n    switch (val) {\n    case ONEMKL_OFFSET_ROW:\n        return oneapi::mkl::offset::row;\n    case ONEMKL_OFFSET_COL:\n        return oneapi::mkl::offset::column;\n    case ONEMKL_OFFSET_FIX:\n        return oneapi::mkl::offset::fix;\n    }\n}\n\noneapi::mkl::job convert(onemklJob val) {\n    switch (val) {\n    case ONEMKL_JOB_N:\n        return oneapi::mkl::job::N;\n    case ONEMKL_JOB_V:\n        return oneapi::mkl::job::V;\n    case ONEMKL_JOB_U:\n        return oneapi::mkl::job::U;\n    case ONEMKL_JOB_A:\n        return oneapi::mkl::job::A;\n    case ONEMKL_JOB_S:\n        return oneapi::mkl::job::S;\n    case ONEMKL_JOB_O:\n        return oneapi::mkl::job::O;\n    }\n}\n\noneapi::mkl::generate convert(onemklGenerate val) {\n    switch (val) {\n    case ONEMKL_GENERATE_Q:\n        return oneapi::mkl::generate::Q;\n    case ONEMKL_GENERATE_P:\n        return oneapi::mkl::generate::P;\n    case ONEMKL_GENERATE_N:\n        return oneapi::mkl::generate::N;\n    case ONEMKL_GENERATE_V:\n        return oneapi::mkl::generate::V;\n    }\n}\n\noneapi::mkl::compz convert(onemklCompz val) {\n    switch (val) {\n    case ONEMKL_COMPZ_N:\n        return oneapi::mkl::compz::N;\n    case ONEMKL_COMPZ_V:\n        return oneapi::mkl::compz::V;\n    case ONEMKL_COMPZ_I:\n        return oneapi::mkl::compz::I;\n    }\n}\n\noneapi::mkl::direct convert(onemklDirect val) {\n    switch (val) {\n    case ONEMKL_DIRECT_F:\n        return oneapi::mkl::direct::F;\n    case ONEMKL_DIRECT_B:\n        return oneapi::mkl::direct::B;\n    }\n}\n\noneapi::mkl::storev convert(onemklStorev val) {\n    switch (val) {\n    case ONEMKL_STOREV_C:\n        return oneapi::mkl::storev::C;\n    case ONEMKL_STOREV_R:\n        return oneapi::mkl::storev::R;\n    }\n}\n\noneapi::mkl::rangev convert(onemklRangev val) {\n    switch (val) {\n    case ONEMKL_RANGEV_A:\n        return oneapi::mkl::rangev::A;\n    case ONEMKL_RANGEV_V:\n        return oneapi::mkl::rangev::V;\n    case ONEMKL_RANGEV_I:\n        return oneapi::mkl::rangev::I;\n    }\n}\n\noneapi::mkl::order convert(onemklOrder val) {\n    switch (val) {\n    case ONEMKL_ORDER_B:\n        return oneapi::mkl::order::B;\n    case ONEMKL_ORDER_E:\n        return oneapi::mkl::order::E;\n    }\n}\n\noneapi::mkl::jobsvd convert(onemklJobsvd val) {\n    switch (val) {\n    case ONEMKL_JOBSVD_N:\n        return oneapi::mkl::jobsvd::N;\n    case ONEMKL_JOBSVD_A:\n        return oneapi::mkl::jobsvd::A;\n    case ONEMKL_JOBSVD_O:\n        return oneapi::mkl::jobsvd::O;\n    case ONEMKL_JOBSVD_S:\n        return oneapi::mkl::jobsvd::S;\n    }\n}\n\noneapi::mkl::layout convert(onemklLayout val) {\n    switch (val) {\n    case ONEMKL_LAYOUT_ROW:\n        return oneapi::mkl::layout::row_major;\n    case ONEMKL_LAYOUT_COL:\n        return oneapi::mkl::layout::col_major;\n    }\n}\n\noneapi::mkl::index_base convert(onemklIndex val) {\n    switch (val) {\n    case ONEMKL_INDEX_ZERO:\n        return oneapi::mkl::index_base::zero;\n    case ONEMKL_INDEX_ONE:\n        return oneapi::mkl::index_base::one;\n    }\n}\n\noneapi::mkl::sparse::property convert(onemklProperty val) {\n    switch (val) {\n    case ONEMKL_PROPERTY_SYMMETRIC:\n        return oneapi::mkl::sparse::property::symmetric;\n    case ONEMKL_PROPERTY_SORTED:\n        return oneapi::mkl::sparse::property::sorted;\n    }\n}\n\noneapi::mkl::sparse::matrix_view_descr convert(onemklMatrixView val) {\n    switch (val) {\n    case ONEMKL_MATRIX_VIEW_GENERAL:\n        return oneapi::mkl::sparse::matrix_view_descr::general;\n    }\n}\n\noneapi::mkl::sparse::matmat_request convert(onemklMatmatRequest val) {\n    switch (val) {\n    case ONEMKL_MATMAT_REQUEST_GET_WORK_ESTIMATION_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_work_estimation_buf_size;\n    case ONEMKL_MATMAT_REQUEST_WORK_ESTIMATION:\n        return oneapi::mkl::sparse::matmat_request::work_estimation;\n    case ONEMKL_MATMAT_REQUEST_GET_COMPUTE_STRUCTURE_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_compute_structure_buf_size;\n    case ONEMKL_MATMAT_REQUEST_COMPUTE_STRUCTURE:\n        return oneapi::mkl::sparse::matmat_request::compute_structure;\n    case ONEMKL_MATMAT_REQUEST_FINALIZE_STRUCTURE:\n        return oneapi::mkl::sparse::matmat_request::finalize_structure;\n    case ONEMKL_MATMAT_REQUEST_GET_COMPUTE_BUF_SIZE:\n        return oneapi::mkl::sparse::matmat_request::get_compute_buf_size;\n    case ONEMKL_MATMAT_REQUEST_COMPUTE:\n        return oneapi::mkl::sparse::matmat_request::compute;\n    case ONEMKL_MATMAT_REQUEST_GET_NNZ:\n        return oneapi::mkl::sparse::matmat_request::get_nnz;\n    case ONEMKL_MATMAT_REQUEST_FINALIZE:\n        return oneapi::mkl::sparse::matmat_request::finalize;\n    }\n}\n\noneapi::mkl::sparse::omatconvert_alg convert(onemklOmatconvertAlg val) {\n    switch (val) {\n    case ONEMKL_OMATCONVERT_DEFAULT_ALG:\n        return oneapi::mkl::sparse::omatconvert_alg::default_alg;\n    }\n}\n\noneapi::mkl::sparse::omatadd_alg convert(onemklOmataddAlg val) {\n    switch (val) {\n    case ONEMKL_OMATADD_DEFAULT_ALG:\n        return oneapi::mkl::sparse::omatadd_alg::default_alg;\n    }\n}\n\n// version\nextern \"C\" void onemkl_version(int64_t *major, int64_t *minor, int64_t *patch) {\n    *major = ONEMKL_VERSION_MAJOR;\n    *minor = ONEMKL_VERSION_MINOR;\n    *patch = ONEMKL_VERSION_PATCH;\n    return;\n}\n\n// gemm\n// https://spec.oneapi.io/versions/1.0-rev-1/elements/oneMKL/source/domains/blas/gemm.html\nclass gemmBatchInfo {\n    public:\n        oneapi::mkl::transpose *m_transa = nullptr;\n        oneapi::mkl::transpose *m_transb = nullptr;\n        sycl::device m_device;\n        sycl::context m_context;\n        oneapi::mkl::transpose m_ta;\n        oneapi::mkl::transpose m_tb;\n        // Constructor\n        gemmBatchInfo(syclQueue_t device_queue,\n                    int64_t group_count,\n                    onemklTranspose transa,\n                    onemklTranspose transb) {\n            // Get device and context info from device_queue\n            auto main_queue = device_queue->val;\n            m_device = main_queue.get_device();\n            m_context = main_queue.get_context();\n\n            // Allocate transpose shared buffers\n            try {\n                m_transa = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_transb = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_ta = convert(transa);\n                m_tb = convert(transb);\n            } catch(const std::bad_alloc& e) {\n                std::cerr << \"Error: \" << e.what() << std::endl;\n            }\n\n            // Initialize\n            for (int i = 0; i < group_count; i++) {\n                m_transa[i] = m_ta;\n                m_transb[i] = m_tb;\n            }\n        };\n\n        // Destructor\n        ~gemmBatchInfo() {\n            free(m_transa, m_context);\n            free(m_transb, m_context);\n        }\n};\n\nclass trsmBatchInfo {\n    public:\n        oneapi::mkl::transpose *m_transa = nullptr;\n        oneapi::mkl::side *m_leftright = nullptr;\n        oneapi::mkl::uplo *m_upperlower = nullptr;\n        oneapi::mkl::diag *m_unitdiag = nullptr;\n        sycl::device m_device;\n        sycl::context m_context;\n        oneapi::mkl::transpose m_ta;\n        oneapi::mkl::side m_side;\n        oneapi::mkl::uplo m_uplo;\n        oneapi::mkl::diag m_diag;\n\n        // Constructor\n        trsmBatchInfo(syclQueue_t device_queue,\n                    onemklSide left_right,\n                    onemklUplo upper_lower,\n                    onemklTranspose transa,\n                    onemklDiag unit_diag,\n                    int64_t group_count) {\n            // Get device and context info from device_queue\n            auto main_queue = device_queue->val;\n            m_device = main_queue.get_device();\n            m_context = main_queue.get_context();\n            try {\n                // Allocate uniform arrays of group_size and transpose_a, transpose_b supporting oneMKL\n                // gemm_batch API\n                m_transa = (oneapi::mkl::transpose *) malloc_shared(group_count * sizeof(oneapi::mkl::transpose),\n                                                                    m_device, m_context);\n                m_leftright = (oneapi::mkl::side *) malloc_shared(group_count * sizeof(oneapi::mkl::side),\n                                                                m_device, m_context);\n                m_upperlower = (oneapi::mkl::uplo *) malloc_shared(group_count * sizeof(oneapi::mkl::uplo),\n                                                                m_device, m_context);\n                m_unitdiag = (oneapi::mkl::diag *) malloc_shared(group_count * sizeof(oneapi::mkl::diag),\n                                                                m_device, m_context);\n                m_ta = convert(transa);\n                m_side = convert(left_right);\n                m_uplo = convert(upper_lower);\n                m_diag = convert(unit_diag);\n            } catch(const std::bad_alloc& e) {\n                std::cerr << \"Error: \" << e.what() << std::endl;\n            }\n            // Initialize\n            for (int i = 0; i < group_count; i++) {\n                m_transa[i] = m_ta;\n                m_leftright[i] = m_side;\n                m_upperlower[i] = m_uplo;\n                m_unitdiag[i] = m_diag;\n            }\n        };\n\n        // Destructor\n        ~trsmBatchInfo() {\n            free(m_transa, m_context);\n            free(m_upperlower, m_context);\n            free(m_unitdiag, m_context);\n            free(m_leftright, m_context);\n        }\n};\n\nextern \"C\" int onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, uint16_t *alpha,\n                                 const short **a, int64_t *lda, const short **b,\n                                 int64_t *ldb, uint16_t *beta, short **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<sycl::half *>(alpha),\n                        reinterpret_cast<const sycl::half **>(&a[0]), lda,\n                        reinterpret_cast<const sycl::half **>(&b[0]), ldb,\n                        reinterpret_cast<sycl::half *>(beta), reinterpret_cast<sycl::half **>(&c[0]),\n                        ldc, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklSgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, float *alpha,\n                                 const float **a, int64_t *lda, const float **b,\n                                 int64_t *ldb, float *beta, float **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, alpha,\n                        (const float **)&a[0], lda,\n                        (const float **)&b[0], ldb,\n                        beta, &c[0], ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklDgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, double *alpha,\n                                 const double **a, int64_t *lda, const double **b,\n                                 int64_t *ldb, double *beta, double **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, alpha,\n                        (const double **)&a[0], lda,\n                        (const double **)&b[0], ldb,\n                        beta, &c[0], ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklCgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, float _Complex *alpha,\n                                 const float _Complex **a, int64_t *lda,\n                                 const float _Complex **b,\n                                 int64_t *ldb, float _Complex *beta, float _Complex **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<std::complex<float> *>(alpha),\n                        reinterpret_cast<const std::complex<float> **>(&a[0]),\n                        lda,\n                        reinterpret_cast<const std::complex<float> **>(&b[0]),\n                        ldb,\n                        reinterpret_cast<std::complex<float> *>(beta),\n                        reinterpret_cast<std::complex<float> **>(&c[0]), ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklZgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t *m,\n                                 int64_t *n, int64_t *k, double _Complex *alpha,\n                                 const double _Complex **a, int64_t *lda,\n                                 const double _Complex **b,\n                                 int64_t *ldb, double _Complex *beta,\n                                 double _Complex **c,\n                                 int64_t *ldc, int64_t group_count, int64_t *group_size) {\n    gemmBatchInfo gemmInfo(device_queue, group_count, transa, transb);\n    device_queue->val.wait_and_throw();\n    auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val,\n                        &gemmInfo.m_transa[0], &gemmInfo.m_transb[0],\n                        m, n, k, reinterpret_cast<std::complex<double> *>(alpha),\n                        reinterpret_cast<const std::complex<double> **>(&a[0]),\n                        lda,\n                        reinterpret_cast<const std::complex<double> **>(&b[0]),\n                        ldb,\n                        reinterpret_cast<std::complex<double> *>(beta),\n                        reinterpret_cast<std::complex<double> **>(&c[0]), ldc,\n                        group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklStrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n, float *alpha,\n                                 const float **a, int64_t *lda, float **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                           unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, alpha, (const float **)&a[0], lda,\n                        &b[0], ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklDtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 double *alpha, const double **a, int64_t *lda,\n                                 double **b, int64_t *ldb, int64_t group_count,\n                                 int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                                unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, alpha, (const double **)&a[0], lda, &b[0],\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklCtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 float _Complex *alpha, const float _Complex **a,\n                                 int64_t *lda, float _Complex **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right, upper_lower, transa,\n                                unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, reinterpret_cast<std::complex<float> *>(alpha),\n                        reinterpret_cast<const std::complex<float> **>(&a[0]),\n                        lda, reinterpret_cast<std::complex<float> **>(&b[0]),\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n\nextern \"C\" int onemklZtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                                 onemklUplo upper_lower, onemklTranspose transa,\n                                 onemklDiag unit_diag, int64_t *m, int64_t *n,\n                                 double _Complex *alpha, const double _Complex **a,\n                                 int64_t *lda, double _Complex **b, int64_t *ldb,\n                                 int64_t group_count, int64_t *group_size) {\n    trsmBatchInfo trsmInfo(device_queue, left_right,\n                                upper_lower, transa, unit_diag, group_count);\n    device_queue->val.wait_and_throw();\n\n    auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val,\n                        &trsmInfo.m_leftright[0], &trsmInfo.m_upperlower[0],\n                        &trsmInfo.m_transa[0], &trsmInfo.m_unitdiag[0],\n                        m, n, reinterpret_cast<std::complex<double> *>(alpha),\n                        reinterpret_cast<const std::complex<double> **>(&a[0]),\n                        lda, reinterpret_cast<std::complex<double> **>(&b[0]),\n                        ldb, group_count, group_size, {});\n    device_queue->val.wait_and_throw();\n    return 0;\n}\n// BLAS\nextern \"C\" int onemklHgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, short *alpha, short *a, int64_t lda, short *b, int64_t ldb, short *beta, short *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<sycl::half*>(alpha), reinterpret_cast<sycl::half*>(a), lda, reinterpret_cast<sycl::half*>(b), ldb, *reinterpret_cast<sycl::half*>(beta), reinterpret_cast<sycl::half*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm(device_queue->val, convert(transa), convert(transb), m, n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm(device_queue->val, convert(transa), convert(transb), m, n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChemm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hemm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhemm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hemm(device_queue->val, convert(left_right), convert(upper_lower), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCherk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float *alpha, float _Complex *a, int64_t lda, float *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::herk(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, reinterpret_cast<std::complex<float>*>(a), lda, *beta, reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZherk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double *alpha, double _Complex *a, int64_t lda, double *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::herk(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, reinterpret_cast<std::complex<double>*>(a), lda, *beta, reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCher2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *beta, reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZher2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her2k(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *beta, reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float *a, int64_t lda, float *x, int64_t incx, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm(device_queue->val, convert(left_right), m, n, a, lda, x, incx, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double *a, int64_t lda, double *x, int64_t incx, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm(device_queue->val, convert(left_right), m, n, a, lda, x, incx, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm(device_queue->val, convert(left_right), m, n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm(device_queue->val, convert(left_right), m, n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv(device_queue->val, convert(trans), m, n, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv(device_queue->val, convert(trans), m, n, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl, int64_t ku, float *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gbmv(device_queue->val, convert(trans), m, n, kl, ku, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl, int64_t ku, double *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gbmv(device_queue->val, convert(trans), m, n, kl, ku, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl, int64_t ku, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gbmv(device_queue->val, convert(trans), m, n, kl, ku, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl, int64_t ku, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gbmv(device_queue->val, convert(trans), m, n, kl, ku, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSger(syclQueue_t device_queue, int64_t m, int64_t n, float *alpha, float *x, int64_t incx, float *y, int64_t incy, float *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::ger(device_queue->val, m, n, *alpha, x, incx, y, incy, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDger(syclQueue_t device_queue, int64_t m, int64_t n, double *alpha, double *x, int64_t incx, double *y, int64_t incy, double *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::ger(device_queue->val, m, n, *alpha, x, incx, y, incy, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgerc(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gerc(device_queue->val, m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgerc(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gerc(device_queue->val, m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgeru(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::geru(device_queue->val, m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgeru(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::geru(device_queue->val, m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hbmv(device_queue->val, convert(upper_lower), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hbmv(device_queue->val, convert(upper_lower), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChemv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hemv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhemv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hemv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCher(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float _Complex *x, int64_t incx, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her(device_queue->val, convert(upper_lower), n, *alpha, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZher(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double _Complex *x, int64_t incx, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her(device_queue->val, convert(upper_lower), n, *alpha, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCher2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZher2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::her2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChpmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *a, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpmv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhpmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *a, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpmv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChpr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float _Complex *x, int64_t incx, float _Complex *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpr(device_queue->val, convert(upper_lower), n, *alpha, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(a), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhpr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double _Complex *x, int64_t incx, double _Complex *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpr(device_queue->val, convert(upper_lower), n, *alpha, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(a), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChpr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpr2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(a), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhpr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::hpr2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(a), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::sbmv(device_queue->val, convert(upper_lower), n, k, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::sbmv(device_queue->val, convert(upper_lower), n, k, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symv(device_queue->val, convert(upper_lower), n, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symv(device_queue->val, convert(upper_lower), n, *alpha, a, lda, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::symv(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x, int64_t incx, float *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr(device_queue->val, convert(upper_lower), n, *alpha, x, incx, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *x, int64_t incx, double *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr(device_queue->val, convert(upper_lower), n, *alpha, x, incx, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x, int64_t incx, float *y, int64_t incy, float *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2(device_queue->val, convert(upper_lower), n, *alpha, x, incx, y, incy, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *x, int64_t incx, double *y, int64_t incy, double *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2(device_queue->val, convert(upper_lower), n, *alpha, x, incx, y, incy, a, lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a, int64_t lda) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syr2(device_queue->val, convert(upper_lower), n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(a), lda, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSspmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *a, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spmv(device_queue->val, convert(upper_lower), n, *alpha, a, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDspmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *a, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spmv(device_queue->val, convert(upper_lower), n, *alpha, a, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSspr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x, int64_t incx, float *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spr(device_queue->val, convert(upper_lower), n, *alpha, x, incx, a, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDspr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *x, int64_t incx, double *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spr(device_queue->val, convert(upper_lower), n, *alpha, x, incx, a, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSspr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x, int64_t incx, float *y, int64_t incy, float *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spr2(device_queue->val, convert(upper_lower), n, *alpha, x, incx, y, incy, a, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDspr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double *x, int64_t incx, double *y, int64_t incy, double *a) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::spr2(device_queue->val, convert(upper_lower), n, *alpha, x, incx, y, incy, a, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, float *a, int64_t lda, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, double *a, int64_t lda, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, float *a, int64_t lda, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, double *a, int64_t lda, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tbsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float *a, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double *a, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float _Complex *a, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<float>*>(a), reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double _Complex *a, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<double>*>(a), reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float *a, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double *a, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float _Complex *a, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<float>*>(a), reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double _Complex *a, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::tpsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<double>*>(a), reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float *a, int64_t lda, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double *a, int64_t lda, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trmv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float *a, int64_t lda, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double *a, int64_t lda, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, a, lda, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t n, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsv(device_queue->val, convert(upper_lower), convert(trans), convert(unit_diag), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCdotc(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dotc(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZdotc(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dotc(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCdotu(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dotu(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, reinterpret_cast<std::complex<float>*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZdotu(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dotu(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, reinterpret_cast<std::complex<double>*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSiamax(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSiamax_64(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDiamax(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDiamax_64(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCiamax(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCiamax_64(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZiamax(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZiamax_64(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamax(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSiamin(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSiamin_64(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDiamin(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDiamin_64(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, x, incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCiamin(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCiamin_64(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZiamin(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int32_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZiamin_64(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int64_t *result, onemklIndex base) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::iamin(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, convert(base), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSasum(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::asum(device_queue->val, n, x, incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDasum(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::asum(device_queue->val, n, x, incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCasum(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::asum(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZasum(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::asum(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHaxpy(syclQueue_t device_queue, int64_t n, short *alpha, short *x, int64_t incx, short *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy(device_queue->val, n, *reinterpret_cast<sycl::half*>(alpha), reinterpret_cast<sycl::half*>(x), incx, reinterpret_cast<sycl::half*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSaxpy(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy(device_queue->val, n, *alpha, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDaxpy(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy(device_queue->val, n, *alpha, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCaxpy(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy(device_queue->val, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZaxpy(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy(device_queue->val, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSaxpby(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx, float *beta, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpby(device_queue->val, n, *alpha, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDaxpby(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx, double *beta, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpby(device_queue->val, n, *alpha, x, incx, *beta, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCaxpby(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpby(device_queue->val, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZaxpby(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpby(device_queue->val, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklScopy(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy(device_queue->val, n, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDcopy(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy(device_queue->val, n, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCcopy(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZcopy(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHdot(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *y, int64_t incy, short *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dot(device_queue->val, n, reinterpret_cast<sycl::half*>(x), incx, reinterpret_cast<sycl::half*>(y), incy, reinterpret_cast<sycl::half*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSdot(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dot(device_queue->val, n, x, incx, y, incy, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDdot(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy, double *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dot(device_queue->val, n, x, incx, y, incy, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsdsdot(syclQueue_t device_queue, int64_t n, float *sb, float *x, int64_t incx, float *y, int64_t incy, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::sdsdot(device_queue->val, n, *sb, x, incx, y, incy, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHnrm2(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::nrm2(device_queue->val, n, reinterpret_cast<sycl::half*>(x), incx, reinterpret_cast<sycl::half*>(result), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSnrm2(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::nrm2(device_queue->val, n, x, incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDnrm2(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::nrm2(device_queue->val, n, x, incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCnrm2(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::nrm2(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZnrm2(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double *result) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::nrm2(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, result, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHrot(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *y, int64_t incy, short *c, short *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, reinterpret_cast<sycl::half*>(x), incx, reinterpret_cast<sycl::half*>(y), incy, *reinterpret_cast<sycl::half*>(c), *reinterpret_cast<sycl::half*>(s), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSrot(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy, float *c, float *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, x, incx, y, incy, *c, *s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDrot(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy, double *c, double *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, x, incx, y, incy, *c, *s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCSrot(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float *c, float *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, *c, *s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCrot(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float *c, float _Complex *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, *c, *reinterpret_cast<std::complex<float>*>(s), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZDrot(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double *c, double *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, *c, *s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZrot(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double *c, double _Complex *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rot(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, *c, *reinterpret_cast<std::complex<double>*>(s), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSrotg(syclQueue_t device_queue, float *a, float *b, float *c, float *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotg(device_queue->val, a, b, c, s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDrotg(syclQueue_t device_queue, double *a, double *b, double *c, double *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotg(device_queue->val, a, b, c, s, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCrotg(syclQueue_t device_queue, float _Complex *a, float _Complex *b, float *c, float _Complex *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotg(device_queue->val, reinterpret_cast<std::complex<float>*>(a), reinterpret_cast<std::complex<float>*>(b), c, reinterpret_cast<std::complex<float>*>(s), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZrotg(syclQueue_t device_queue, double _Complex *a, double _Complex *b, double *c, double _Complex *s) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotg(device_queue->val, reinterpret_cast<std::complex<double>*>(a), reinterpret_cast<std::complex<double>*>(b), c, reinterpret_cast<std::complex<double>*>(s), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSrotm(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy, float *param) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotm(device_queue->val, n, x, incx, y, incy, param, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDrotm(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy, double *param) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotm(device_queue->val, n, x, incx, y, incy, param, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSrotmg(syclQueue_t device_queue, float *d1, float *d2, float *x1, float *y1, float *param) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotmg(device_queue->val, d1, d2, x1, *y1, param, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDrotmg(syclQueue_t device_queue, double *d1, double *d2, double *x1, double *y1, double *param) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::rotmg(device_queue->val, d1, d2, x1, *y1, param, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHscal(syclQueue_t device_queue, int64_t n, short *alpha, short *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *reinterpret_cast<sycl::half*>(alpha), reinterpret_cast<sycl::half*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSscal(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *alpha, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDscal(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *alpha, x, incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCSscal(syclQueue_t device_queue, int64_t n, float *alpha, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *alpha, reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZDscal(syclQueue_t device_queue, int64_t n, double *alpha, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *alpha, reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCscal(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZscal(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::scal(device_queue->val, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSswap(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::swap(device_queue->val, n, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDswap(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::swap(device_queue->val, n, x, incx, y, incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCswap(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::swap(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, reinterpret_cast<std::complex<float>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZswap(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::swap(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, reinterpret_cast<std::complex<double>*>(y), incy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklHgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, short *alpha, short *a, int64_t lda, int64_t stride_a, short *b, int64_t ldb, int64_t stride_b, short *beta, short *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<sycl::half*>(alpha), reinterpret_cast<sycl::half*>(a), lda, stride_a, reinterpret_cast<sycl::half*>(b), ldb, stride_b, *reinterpret_cast<sycl::half*>(beta), reinterpret_cast<sycl::half*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t stride_b, float *beta, float *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val, convert(transa), convert(transb), m, n, k, *alpha, a, lda, stride_a, b, ldb, stride_b, *beta, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t stride_b, double *beta, double *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val, convert(transa), convert(transb), m, n, k, *alpha, a, lda, stride_a, b, ldb, stride_b, *beta, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b, float _Complex *beta, float _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b, double _Complex *beta, double _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemm_batch(device_queue->val, convert(transa), convert(transb), m, n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, int64_t stride_a, float *beta, float *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk_batch(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, stride_a, *beta, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, int64_t stride_a, double *beta, double *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk_batch(device_queue->val, convert(upper_lower), convert(trans), n, k, *alpha, a, lda, stride_a, *beta, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *beta, float _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk_batch(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stride_a, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *beta, double _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::syrk_batch(device_queue->val, convert(upper_lower), convert(trans), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stride_a, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, stride_a, b, ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *alpha, a, lda, stride_a, b, ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::trsm_batch(device_queue->val, convert(left_right), convert(upper_lower), convert(trans), convert(unit_diag), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, int64_t stridea, float *x, int64_t incx, int64_t stridex, float *beta, float *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv_batch(device_queue->val, convert(trans), m, n, *alpha, a, lda, stridea, x, incx, stridex, *beta, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, int64_t stridea, double *x, int64_t incx, int64_t stridex, double *beta, double *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv_batch(device_queue->val, convert(trans), m, n, *alpha, a, lda, stridea, x, incx, stridex, *beta, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stridea, float _Complex *x, int64_t incx, int64_t stridex, float _Complex *beta, float _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stridea, reinterpret_cast<std::complex<float>*>(x), incx, stridex, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stridea, double _Complex *x, int64_t incx, int64_t stridex, double _Complex *beta, double _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemv_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stridea, reinterpret_cast<std::complex<double>*>(x), incx, stridex, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float *a, int64_t lda, int64_t stridea, float *x, int64_t incx, int64_t stridex, float *c, int64_t ldc, int64_t stridec, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm_batch(device_queue->val, convert(left_right), m, n, a, lda, stridea, x, incx, stridex, c, ldc, stridec, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double *a, int64_t lda, int64_t stridea, double *x, int64_t incx, int64_t stridex, double *c, int64_t ldc, int64_t stridec, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm_batch(device_queue->val, convert(left_right), m, n, a, lda, stridea, x, incx, stridex, c, ldc, stridec, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t stridea, float _Complex *x, int64_t incx, int64_t stridex, float _Complex *c, int64_t ldc, int64_t stridec, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm_batch(device_queue->val, convert(left_right), m, n, reinterpret_cast<std::complex<float>*>(a), lda, stridea, reinterpret_cast<std::complex<float>*>(x), incx, stridex, reinterpret_cast<std::complex<float>*>(c), ldc, stridec, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t stridea, double _Complex *x, int64_t incx, int64_t stridex, double _Complex *c, int64_t ldc, int64_t stridec, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::dgmm_batch(device_queue->val, convert(left_right), m, n, reinterpret_cast<std::complex<double>*>(a), lda, stridea, reinterpret_cast<std::complex<double>*>(x), incx, stridex, reinterpret_cast<std::complex<double>*>(c), ldc, stridec, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSaxpy_batch_strided(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx, int64_t stridex, float *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy_batch(device_queue->val, n, *alpha, x, incx, stridex, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDaxpy_batch_strided(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx, int64_t stridex, double *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy_batch(device_queue->val, n, *alpha, x, incx, stridex, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCaxpy_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x, int64_t incx, int64_t stridex, float _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy_batch(device_queue->val, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(x), incx, stridex, reinterpret_cast<std::complex<float>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZaxpy_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x, int64_t incx, int64_t stridex, double _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::axpy_batch(device_queue->val, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(x), incx, stridex, reinterpret_cast<std::complex<double>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklScopy_batch_strided(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t stridex, float *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy_batch(device_queue->val, n, x, incx, stridex, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDcopy_batch_strided(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t stridex, double *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy_batch(device_queue->val, n, x, incx, stridex, y, incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCcopy_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int64_t stridex, float _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy_batch(device_queue->val, n, reinterpret_cast<std::complex<float>*>(x), incx, stridex, reinterpret_cast<std::complex<float>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZcopy_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int64_t stridex, double _Complex *y, int64_t incy, int64_t stridey, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::copy_batch(device_queue->val, n, reinterpret_cast<std::complex<double>*>(x), incx, stridex, reinterpret_cast<std::complex<double>*>(y), incy, stridey, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa, onemklTranspose transb, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemmt(device_queue->val, convert(upper_lower), convert(transa), convert(transb), n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa, onemklTranspose transb, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemmt(device_queue->val, convert(upper_lower), convert(transa), convert(transb), n, k, *alpha, a, lda, b, ldb, *beta, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa, onemklTranspose transb, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemmt(device_queue->val, convert(upper_lower), convert(transa), convert(transb), n, k, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa, onemklTranspose transb, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::gemmt(device_queue->val, convert(upper_lower), convert(transa), convert(transb), n, k, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *ab, int64_t lda, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy(device_queue->val, convert(trans), m, n, *alpha, ab, lda, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *ab, int64_t lda, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy(device_queue->val, convert(trans), m, n, *alpha, ab, lda, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *ab, int64_t lda, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(ab), lda, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *ab, int64_t lda, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(ab), lda, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy(device_queue->val, convert(trans), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy(device_queue->val, convert(trans), m, n, *alpha, a, lda, b, ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklComatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *beta, float *b, int64_t ldb, float *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd(device_queue->val, convert(transa), convert(transb), m, n, *alpha, a, lda, *beta, b, ldb, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *beta, double *b, int64_t ldb, double *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd(device_queue->val, convert(transa), convert(transb), m, n, *alpha, a, lda, *beta, b, ldb, c, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklComatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *beta, float _Complex *b, int64_t ldb, float _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd(device_queue->val, convert(transa), convert(transb), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *beta, double _Complex *b, int64_t ldb, double _Complex *c, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd(device_queue->val, convert(transa), convert(transb), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(c), ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *ab, int64_t lda, int64_t ldb, int64_t stride, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy_batch(device_queue->val, convert(trans), m, n, *alpha, ab, lda, ldb, stride, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *ab, int64_t lda, int64_t ldb, int64_t stride, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy_batch(device_queue->val, convert(trans), m, n, *alpha, ab, lda, ldb, stride, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *ab, int64_t lda, int64_t ldb, int64_t stride, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(ab), lda, ldb, stride, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *ab, int64_t lda, int64_t ldb, int64_t stride, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::imatcopy_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(ab), lda, ldb, stride, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy_batch(device_queue->val, convert(trans), m, n, *alpha, a, lda, stride_a, b, ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy_batch(device_queue->val, convert(trans), m, n, *alpha, a, lda, stride_a, b, ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklComatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatcopy_batch(device_queue->val, convert(trans), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, float *alpha, float *a, int64_t lda, int64_t stride_a, float *beta, float *b, int64_t ldb, int64_t stride_b, float *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd_batch(device_queue->val, convert(transa), convert(transb), m, n, *alpha, a, lda, stride_a, *beta, b, ldb, stride_b, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, double *alpha, double *a, int64_t lda, int64_t stride_a, double *beta, double *b, int64_t ldb, int64_t stride_b, double *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd_batch(device_queue->val, convert(transa), convert(transb), m, n, *alpha, a, lda, stride_a, *beta, b, ldb, stride_b, c, ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklComatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *beta, float _Complex *b, int64_t ldb, int64_t stride_b, float _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd_batch(device_queue->val, convert(transa), convert(transb), m, n, *reinterpret_cast<std::complex<float>*>(alpha), reinterpret_cast<std::complex<float>*>(a), lda, stride_a, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, reinterpret_cast<std::complex<float>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *beta, double _Complex *b, int64_t ldb, int64_t stride_b, double _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size) {\n   try {\n      auto status = oneapi::mkl::blas::column_major::omatadd_batch(device_queue->val, convert(transa), convert(transb), m, n, *reinterpret_cast<std::complex<double>*>(alpha), reinterpret_cast<std::complex<double>*>(a), lda, stride_a, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, reinterpret_cast<std::complex<double>*>(c), ldc, stride_c, batch_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\n// LAPACK\nextern \"C\" int onemklSpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf(device_queue->val, convert(uplo), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf(device_queue->val, convert(uplo), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float *a, int64_t lda, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs(device_queue->val, convert(uplo), n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double *a, int64_t lda, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs(device_queue->val, convert(uplo), n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs(device_queue->val, convert(uplo), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs(device_queue->val, convert(uplo), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potri(device_queue->val, convert(uplo), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potri(device_queue->val, convert(uplo), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potri(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potri(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, float *a, int64_t lda, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtri(device_queue->val, convert(uplo), convert(diag), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, double *a, int64_t lda, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtri(device_queue->val, convert(uplo), convert(diag), n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, float _Complex *a, int64_t lda, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtri(device_queue->val, convert(uplo), convert(diag), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, double _Complex *a, int64_t lda, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtri(device_queue->val, convert(uplo), convert(diag), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t *ipiv, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesv(device_queue->val, n, nrhs, a, lda, ipiv, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t *ipiv, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesv(device_queue->val, n, nrhs, a, lda, ipiv, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesv(device_queue->val, n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesv(device_queue->val, n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgebrd(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float *d, float *e, float _Complex *tauq, float _Complex *taup, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gebrd(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, d, e, reinterpret_cast<std::complex<float>*>(tauq), reinterpret_cast<std::complex<float>*>(taup), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgebrd(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *d, double *e, double *tauq, double *taup, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gebrd(device_queue->val, m, n, a, lda, d, e, tauq, taup, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgebrd(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *d, float *e, float *tauq, float *taup, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gebrd(device_queue->val, m, n, a, lda, d, e, tauq, taup, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgebrd(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, double *d, double *e, double _Complex *tauq, double _Complex *taup, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gebrd(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, d, e, reinterpret_cast<std::complex<double>*>(tauq), reinterpret_cast<std::complex<double>*>(taup), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf(device_queue->val, m, n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf(device_queue->val, m, n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, float _Complex *a, int64_t lda, float *s, float _Complex *u, int64_t ldu, float _Complex *vt, int64_t ldvt, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvd(device_queue->val, convert(jobu), convert(jobvt), m, n, reinterpret_cast<std::complex<float>*>(a), lda, s, reinterpret_cast<std::complex<float>*>(u), ldu, reinterpret_cast<std::complex<float>*>(vt), ldvt, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, double _Complex *a, int64_t lda, double *s, double _Complex *u, int64_t ldu, double _Complex *vt, int64_t ldvt, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvd(device_queue->val, convert(jobu), convert(jobvt), m, n, reinterpret_cast<std::complex<double>*>(a), lda, s, reinterpret_cast<std::complex<double>*>(u), ldu, reinterpret_cast<std::complex<double>*>(vt), ldvt, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, double *a, int64_t lda, double *s, double *u, int64_t ldu, double *vt, int64_t ldvt, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvd(device_queue->val, convert(jobu), convert(jobvt), m, n, a, lda, s, u, ldu, vt, ldvt, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, float *a, int64_t lda, float *s, float *u, int64_t ldu, float *vt, int64_t ldvt, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvd(device_queue->val, convert(jobu), convert(jobvt), m, n, a, lda, s, u, ldu, vt, ldvt, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, float *s, int64_t stride_s, float _Complex *u, int64_t ldu, int64_t stride_u, float _Complex *vt, int64_t ldvt, int64_t stride_vt, float *tolerance, float *residual, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvda_batch(device_queue->val, iparm, irank, m, n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, s, stride_s, reinterpret_cast<std::complex<float>*>(u), ldu, stride_u, reinterpret_cast<std::complex<float>*>(vt), ldvt, stride_vt, *tolerance, residual, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t m, int64_t n, double *a, int64_t lda, int64_t stride_a, double *s, int64_t stride_s, double *u, int64_t ldu, int64_t stride_u, double *vt, int64_t ldvt, int64_t stride_vt, double *tolerance, double *residual, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvda_batch(device_queue->val, iparm, irank, m, n, a, lda, stride_a, s, stride_s, u, ldu, stride_u, vt, ldvt, stride_vt, *tolerance, residual, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t m, int64_t n, float *a, int64_t lda, int64_t stride_a, float *s, int64_t stride_s, float *u, int64_t ldu, int64_t stride_u, float *vt, int64_t ldvt, int64_t stride_vt, float *tolerance, float *residual, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvda_batch(device_queue->val, iparm, irank, m, n, a, lda, stride_a, s, stride_s, u, ldu, stride_u, vt, ldvt, stride_vt, *tolerance, residual, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, double *s, int64_t stride_s, double _Complex *u, int64_t ldu, int64_t stride_u, double _Complex *vt, int64_t ldvt, int64_t stride_vt, double *tolerance, double *residual, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gesvda_batch(device_queue->val, iparm, irank, m, n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, s, stride_s, reinterpret_cast<std::complex<double>*>(u), ldu, stride_u, reinterpret_cast<std::complex<double>*>(vt), ldvt, stride_vt, *tolerance, residual, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, int64_t *ipiv, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf(device_queue->val, m, n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, int64_t *ipiv, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf(device_queue->val, m, n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>**>(a), lda, ipiv, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, a, lda, ipiv, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, a, lda, ipiv, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>**>(a), lda, ipiv, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, ipiv, stride_ipiv, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, a, lda, stride_a, ipiv, stride_ipiv, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, a, lda, stride_a, ipiv, stride_ipiv, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, ipiv, stride_ipiv, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp(device_queue->val, m, n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp(device_queue->val, m, n, a, lda, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, int64_t stride_a, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, a, lda, stride_a, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, int64_t stride_a, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, a, lda, stride_a, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrfnp_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetri(syclQueue_t device_queue, int64_t n, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri(device_queue->val, n, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetri(syclQueue_t device_queue, int64_t n, double *a, int64_t lda, int64_t *ipiv, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri(device_queue->val, n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetri(syclQueue_t device_queue, int64_t n, float *a, int64_t lda, int64_t *ipiv, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri(device_queue->val, n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetri(syclQueue_t device_queue, int64_t n, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri(device_queue->val, n, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t *ipiv, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs(device_queue->val, convert(trans), n, nrhs, a, lda, ipiv, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t *ipiv, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs(device_queue->val, convert(trans), n, nrhs, a, lda, ipiv, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, float _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, ipiv, stride_ipiv, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, double *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans), n, nrhs, a, lda, stride_a, ipiv, stride_ipiv, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, float *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans), n, nrhs, a, lda, stride_a, ipiv, stride_ipiv, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, double _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, ipiv, stride_ipiv, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrsnp_batch(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrsnp_batch(device_queue->val, convert(trans), n, nrhs, a, lda, stride_a, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrsnp_batch(device_queue->val, convert(trans), n, nrhs, a, lda, stride_a, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrsnp_batch(device_queue->val, convert(trans), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCheev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float *w, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heev(device_queue->val, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, w, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZheev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double *w, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heev(device_queue->val, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, w, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCheevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float *w, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heevd(device_queue->val, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, w, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZheevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double *w, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heevd(device_queue->val, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, w, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCheevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m, float *w, float _Complex *z, int64_t ldz, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heevx(device_queue->val, convert(jobz), convert(range), convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, *vl, *vu, il, iu, *abstol, m, w, reinterpret_cast<std::complex<float>*>(z), ldz, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZheevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t *m, double *w, double _Complex *z, int64_t ldz, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::heevx(device_queue->val, convert(jobz), convert(range), convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, *vl, *vu, il, iu, *abstol, m, w, reinterpret_cast<std::complex<double>*>(z), ldz, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChegvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float *w, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hegvd(device_queue->val, itype, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, w, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhegvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double *w, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hegvd(device_queue->val, itype, convert(jobz), convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, w, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChegvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m, float *w, float _Complex *z, int64_t ldz, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hegvx(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, *vl, *vu, il, iu, *abstol, m, w, reinterpret_cast<std::complex<float>*>(z), ldz, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhegvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t *m, double *w, double _Complex *z, int64_t ldz, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hegvx(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, *vl, *vu, il, iu, *abstol, m, w, reinterpret_cast<std::complex<double>*>(z), ldz, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChetrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float *d, float *e, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hetrd(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, d, e, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhetrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double *d, double *e, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hetrd(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, d, e, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklChetrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hetrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZhetrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::hetrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSorgbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgbr(device_queue->val, convert(vec), m, n, k, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDorgbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgbr(device_queue->val, convert(vec), m, n, k, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDorgqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr(device_queue->val, m, n, k, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSorgqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr(device_queue->val, m, n, k, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDormqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *c, int64_t ldc, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormqr(device_queue->val, convert(side), convert(trans), m, n, k, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSormqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *c, int64_t ldc, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormqr(device_queue->val, convert(side), convert(trans), m, n, k, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, float *d, float *e, float _Complex *z, int64_t ldz, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::steqr(device_queue->val, convert(compz), n, d, e, reinterpret_cast<std::complex<float>*>(z), ldz, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, double *d, double *e, double *z, int64_t ldz, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::steqr(device_queue->val, convert(compz), n, d, e, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, float *d, float *e, float *z, int64_t ldz, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::steqr(device_queue->val, convert(compz), n, d, e, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, double *d, double *e, double _Complex *z, int64_t ldz, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::steqr(device_queue->val, convert(compz), n, d, e, reinterpret_cast<std::complex<double>*>(z), ldz, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *w, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syev(device_queue->val, convert(jobz), convert(uplo), n, a, lda, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *w, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syev(device_queue->val, convert(jobz), convert(uplo), n, a, lda, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *w, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syevd(device_queue->val, convert(jobz), convert(uplo), n, a, lda, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *w, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syevd(device_queue->val, convert(jobz), convert(uplo), n, a, lda, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsyevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t *m, double *w, double *z, int64_t ldz, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syevx(device_queue->val, convert(jobz), convert(range), convert(uplo), n, a, lda, *vl, *vu, il, iu, *abstol, m, w, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsyevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m, float *w, float *z, int64_t ldz, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::syevx(device_queue->val, convert(jobz), convert(range), convert(uplo), n, a, lda, *vl, *vu, il, iu, *abstol, m, w, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsygvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *b, int64_t ldb, double *w, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sygvd(device_queue->val, itype, convert(jobz), convert(uplo), n, a, lda, b, ldb, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsygvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *b, int64_t ldb, float *w, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sygvd(device_queue->val, itype, convert(jobz), convert(uplo), n, a, lda, b, ldb, w, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsygvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *b, int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t *m, double *w, double *z, int64_t ldz, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sygvx(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, a, lda, b, ldb, *vl, *vu, il, iu, *abstol, m, w, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsygvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *b, int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m, float *w, float *z, int64_t ldz, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sygvx(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, a, lda, b, ldb, *vl, *vu, il, iu, *abstol, m, w, z, ldz, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsytrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *d, double *e, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrd(device_queue->val, convert(uplo), n, a, lda, d, e, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsytrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *d, float *e, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrd(device_queue->val, convert(uplo), n, a, lda, d, e, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, double *a, int64_t lda, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, float *a, int64_t lda, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCungbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungbr(device_queue->val, convert(vec), m, n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZungbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungbr(device_queue->val, convert(vec), m, n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCungqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr(device_queue->val, m, n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZungqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr(device_queue->val, m, n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCunmqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmqr(device_queue->val, convert(side), convert(trans), m, n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(c), ldc, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZunmqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmqr(device_queue->val, convert(side), convert(trans), m, n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(c), ldc, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgerqf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gerqf(device_queue->val, m, n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgerqf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gerqf(device_queue->val, m, n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgerqf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gerqf(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgerqf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gerqf(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSormrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *c, int64_t ldc, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormrq(device_queue->val, convert(side), convert(trans), m, n, k, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDormrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *c, int64_t ldc, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormrq(device_queue->val, convert(side), convert(trans), m, n, k, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCunmrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmrq(device_queue->val, convert(side), convert(trans), m, n, k, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(c), ldc, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZunmrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmrq(device_queue->val, convert(side), convert(trans), m, n, k, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(c), ldc, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, int64_t *ipiv, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrf(device_queue->val, convert(uplo), n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, int64_t *ipiv, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrf(device_queue->val, convert(uplo), n, a, lda, ipiv, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, ipiv, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::sytrf(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, ipiv, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSorgtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgtr(device_queue->val, convert(uplo), n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDorgtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgtr(device_queue->val, convert(uplo), n, a, lda, tau, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCungtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungtr(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZungtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungtr(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSormtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, float *a, int64_t lda, float *tau, float *c, int64_t ldc, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormtr(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDormtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, double *a, int64_t lda, double *tau, double *c, int64_t ldc, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormtr(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, a, lda, tau, c, ldc, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCunmtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *tau, float _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmtr(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(tau), reinterpret_cast<std::complex<float>*>(c), ldc, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZunmtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmtr(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(tau), reinterpret_cast<std::complex<double>*>(c), ldc, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, float *a, int64_t lda, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels(device_queue->val, convert(trans), m, n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, double *a, int64_t lda, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels(device_queue->val, convert(trans), m, n, nrhs, a, lda, b, ldb, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels(device_queue->val, convert(trans), m, n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, reinterpret_cast<std::complex<float>*>(b), ldb, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels(device_queue->val, convert(trans), m, n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, reinterpret_cast<std::complex<double>*>(b), ldb, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, float **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo, group_count), n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, double **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo, group_count), n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, float _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo, group_count), n, reinterpret_cast<std::complex<float>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, double _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo, group_count), n, reinterpret_cast<std::complex<double>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, float **a, int64_t *lda, float **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo, group_count), n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, double **a, int64_t *lda, double **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo, group_count), n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, float _Complex **a, int64_t *lda, float _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo, group_count), n, nrhs, reinterpret_cast<std::complex<float>**>(a), lda, reinterpret_cast<std::complex<float>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, double _Complex **a, int64_t *lda, double _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo, group_count), n, nrhs, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgeinv_batch(syclQueue_t device_queue, int64_t *n, float **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geinv_batch(device_queue->val, n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgeinv_batch(syclQueue_t device_queue, int64_t *n, double **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geinv_batch(device_queue->val, n, a, lda, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgeinv_batch(syclQueue_t device_queue, int64_t *n, float _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geinv_batch(device_queue->val, n, reinterpret_cast<std::complex<float>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgeinv_batch(syclQueue_t device_queue, int64_t *n, double _Complex **a, int64_t *lda, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geinv_batch(device_queue->val, n, reinterpret_cast<std::complex<double>**>(a), lda, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t *nrhs, float **a, int64_t *lda, int64_t **ipiv, float **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans, group_count), n, nrhs, a, lda, ipiv, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t *nrhs, double **a, int64_t *lda, int64_t **ipiv, double **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans, group_count), n, nrhs, a, lda, ipiv, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t *nrhs, float _Complex **a, int64_t *lda, int64_t **ipiv, float _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans, group_count), n, nrhs, reinterpret_cast<std::complex<float>**>(a), lda, ipiv, reinterpret_cast<std::complex<float>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t *nrhs, double _Complex **a, int64_t *lda, int64_t **ipiv, double _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getrs_batch(device_queue->val, convert(trans, group_count), n, nrhs, reinterpret_cast<std::complex<double>**>(a), lda, ipiv, reinterpret_cast<std::complex<double>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetri_batch(syclQueue_t device_queue, int64_t *n, float **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, a, lda, ipiv, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetri_batch(syclQueue_t device_queue, int64_t *n, double **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, a, lda, ipiv, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetri_batch(syclQueue_t device_queue, int64_t *n, float _Complex **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, reinterpret_cast<std::complex<float>**>(a), lda, ipiv, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetri_batch(syclQueue_t device_queue, int64_t *n, double _Complex **a, int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, reinterpret_cast<std::complex<double>**>(a), lda, ipiv, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda, float **tau, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, a, lda, tau, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda, double **tau, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, a, lda, tau, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a, int64_t *lda, float _Complex **tau, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>**>(a), lda, reinterpret_cast<std::complex<float>**>(tau), group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a, int64_t *lda, double _Complex **tau, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(tau), group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSorgqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, float **a, int64_t *lda, float **tau, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr_batch(device_queue->val, m, n, k, a, lda, tau, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDorgqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, double **a, int64_t *lda, double **tau, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr_batch(device_queue->val, m, n, k, a, lda, tau, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCungqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, float _Complex **a, int64_t *lda, float _Complex **tau, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr_batch(device_queue->val, m, n, k, reinterpret_cast<std::complex<float>**>(a), lda, reinterpret_cast<std::complex<float>**>(tau), group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZungqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, double _Complex **a, int64_t *lda, double _Complex **tau, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr_batch(device_queue->val, m, n, k, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(tau), group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSormqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *k, float **a, int64_t *lda, float **tau, float **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormqr_batch(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, a, lda, tau, c, ldc, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDormqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *k, double **a, int64_t *lda, double **tau, double **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ormqr_batch(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, a, lda, tau, c, ldc, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCunmqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *k, float _Complex **a, int64_t *lda, float _Complex **tau, float _Complex **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmqr_batch(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, reinterpret_cast<std::complex<float>**>(a), lda, reinterpret_cast<std::complex<float>**>(tau), reinterpret_cast<std::complex<float>**>(c), ldc, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZunmqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *k, double _Complex **a, int64_t *lda, double _Complex **tau, double _Complex **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::unmqr_batch(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(tau), reinterpret_cast<std::complex<double>**>(c), ldc, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklStrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans, onemklDiag *diag, int64_t *n, int64_t *nrhs, float **a, int64_t *lda, float **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs_batch(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans, onemklDiag *diag, int64_t *n, int64_t *nrhs, double **a, int64_t *lda, double **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs_batch(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans, onemklDiag *diag, int64_t *n, int64_t *nrhs, float _Complex **a, int64_t *lda, float _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs_batch(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, reinterpret_cast<std::complex<float>**>(a), lda, reinterpret_cast<std::complex<float>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans, onemklDiag *diag, int64_t *n, int64_t *nrhs, double _Complex **a, int64_t *lda, double _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::trtrs_batch(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *nrhs, float **a, int64_t *lda, float **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans, group_count), m, n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *nrhs, double **a, int64_t *lda, double **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans, group_count), m, n, nrhs, a, lda, b, ldb, group_count, group_sizes, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *nrhs, float _Complex **a, int64_t *lda,float _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans, group_count), m, n, nrhs, reinterpret_cast<std::complex<float>**>(a), lda,reinterpret_cast<std::complex<float>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n, int64_t *nrhs, double _Complex **a, int64_t *lda, double _Complex **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans, group_count), m, n, nrhs, reinterpret_cast<std::complex<double>**>(a), lda, reinterpret_cast<std::complex<double>**>(b), ldb, group_count, group_sizes, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, int64_t stride_a, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo), n, a, lda, stride_a, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, int64_t stride_a, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo), n, a, lda, stride_a, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrf_batch(device_queue->val, convert(uplo), n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo), n, nrhs, a, lda, stride_a, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo), n, nrhs, a, lda, stride_a, b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo), n, nrhs, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::potrs_batch(device_queue->val, convert(uplo), n, nrhs, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, int64_t stride_a, float *tau, int64_t stride_tau, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, a, lda, stride_a, tau, stride_tau, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, int64_t stride_a, double *tau, int64_t stride_tau, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, a, lda, stride_a, tau, stride_tau, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *tau, int64_t stride_tau, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(tau), stride_tau, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *tau, int64_t stride_tau, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::geqrf_batch(device_queue->val, m, n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(tau), stride_tau, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSorgqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float *a, int64_t lda, int64_t stride_a, float *tau, int64_t stride_tau, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr_batch(device_queue->val, m, n, k, a, lda, stride_a, tau, stride_tau, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDorgqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double *a, int64_t lda, int64_t stride_a, double *tau, int64_t stride_tau, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::orgqr_batch(device_queue->val, m, n, k, a, lda, stride_a, tau, stride_tau, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCungqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *tau, int64_t stride_tau, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr_batch(device_queue->val, m, n, k, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, reinterpret_cast<std::complex<float>*>(tau), stride_tau, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZungqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double _Complex *a, int64_t lda, int64_t stride_a, double _Complex *tau, int64_t stride_tau, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::ungqr_batch(device_queue->val, m, n, k, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, reinterpret_cast<std::complex<double>*>(tau), stride_tau, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgetri_batch_strided(syclQueue_t device_queue, int64_t n, float *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, a, lda, stride_a, ipiv, stride_ipiv, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgetri_batch_strided(syclQueue_t device_queue, int64_t n, double *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, a, lda, stride_a, ipiv, stride_ipiv, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgetri_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, reinterpret_cast<std::complex<float>*>(a), lda, stride_a, ipiv, stride_ipiv, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgetri_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::getri_batch(device_queue->val, n, reinterpret_cast<std::complex<double>*>(a), lda, stride_a, ipiv, stride_ipiv, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, float *_a, int64_t lda, int64_t stride_a, float *_b, int64_t ldb, int64_t stride_b, int64_t batch_size, float *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans), m, n, nrhs, _a, lda, stride_a, _b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, double *_a, int64_t lda, int64_t stride_a, double *_b, int64_t ldb, int64_t stride_b, int64_t batch_size, double *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans), m, n, nrhs, _a, lda, stride_a, _b, ldb, stride_b, batch_size, scratchpad, scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, float _Complex *_a, int64_t lda, int64_t stride_a, float _Complex *_b, int64_t ldb, int64_t stride_b, int64_t batch_size, float _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans), m, n, nrhs, reinterpret_cast<std::complex<float>*>(_a), lda, stride_a, reinterpret_cast<std::complex<float>*>(_b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<float>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, double _Complex *_a, int64_t lda, int64_t stride_a, double _Complex *_b, int64_t ldb, int64_t stride_b, int64_t batch_size, double _Complex *scratchpad, int64_t scratchpad_size) {\n   try {\n      auto status = oneapi::mkl::lapack::gels_batch(device_queue->val, convert(trans), m, n, nrhs, reinterpret_cast<std::complex<double>*>(_a), lda, stride_a, reinterpret_cast<std::complex<double>*>(_b), ldb, stride_b, batch_size, reinterpret_cast<std::complex<double>*>(scratchpad), scratchpad_size, {});\n      device_queue->val.wait_and_throw();\n   } catch (const oneapi::mkl::lapack::computation_error& e) { return e.info(); } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int64_t onemklSgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gebrd_scratchpad_size<float>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gebrd_scratchpad_size<double>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gebrd_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gebrd_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_scratchpad_size<float>(device_queue->val, convert(trans), m, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_scratchpad_size<double>(device_queue->val, convert(trans), m, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans), m, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans), m, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_scratchpad_size<float>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_scratchpad_size<double>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gerqf_scratchpad_size<float>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gerqf_scratchpad_size<double>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gerqf_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gerqf_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesv_scratchpad_size<float>(device_queue->val, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesv_scratchpad_size<double>(device_queue->val, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesv_scratchpad_size<std::complex<float>>(device_queue->val, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesv_scratchpad_size<std::complex<double>>(device_queue->val, n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t ldvt) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvd_scratchpad_size<float>(device_queue->val, convert(jobu), convert(jobvt), m, n, lda, ldu, ldvt);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t ldvt) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvd_scratchpad_size<double>(device_queue->val, convert(jobu), convert(jobvt), m, n, lda, ldu, ldvt);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t ldvt) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvd_scratchpad_size<std::complex<float>>(device_queue->val, convert(jobu), convert(jobvt), m, n, lda, ldu, ldvt);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t ldvt) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvd_scratchpad_size<std::complex<double>>(device_queue->val, convert(jobu), convert(jobvt), m, n, lda, ldu, ldvt);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_scratchpad_size<float>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_scratchpad_size<double>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_scratchpad_size<float>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_scratchpad_size<double>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_scratchpad_size<float>(device_queue->val, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_scratchpad_size<double>(device_queue->val, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_scratchpad_size<std::complex<float>>(device_queue->val, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_scratchpad_size<std::complex<double>>(device_queue->val, n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_scratchpad_size<float>(device_queue->val, convert(trans), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_scratchpad_size<double>(device_queue->val, convert(trans), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCheev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heev_scratchpad_size<std::complex<float>>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZheev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heev_scratchpad_size<std::complex<double>>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCheevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heevd_scratchpad_size<std::complex<float>>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZheevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heevd_scratchpad_size<std::complex<double>>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCheevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heevx_scratchpad_size<std::complex<float>>(device_queue->val, convert(jobz), convert(range), convert(uplo), n, lda, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZheevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::heevx_scratchpad_size<std::complex<double>>(device_queue->val, convert(jobz), convert(range), convert(uplo), n, lda, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklChegvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hegvd_scratchpad_size<std::complex<float>>(device_queue->val, itype, convert(jobz), convert(uplo), n, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZhegvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hegvd_scratchpad_size<std::complex<double>>(device_queue->val, itype, convert(jobz), convert(uplo), n, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklChegvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hegvx_scratchpad_size<std::complex<float>>(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, lda, ldb, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZhegvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hegvx_scratchpad_size<std::complex<double>>(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, lda, ldb, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklChetrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hetrd_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZhetrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hetrd_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklChetrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hetrf_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZhetrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::hetrf_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSorgbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgbr_scratchpad_size<float>(device_queue->val, convert(vect), m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDorgbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgbr_scratchpad_size<double>(device_queue->val, convert(vect), m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSorgqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_scratchpad_size<float>(device_queue->val, m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDorgqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_scratchpad_size<double>(device_queue->val, m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSorgtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgtr_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDorgtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgtr_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSormqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormqr_scratchpad_size<float>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDormqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormqr_scratchpad_size<double>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSormrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormrq_scratchpad_size<float>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDormrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormrq_scratchpad_size<double>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSormtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormtr_scratchpad_size<float>(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDormtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormtr_scratchpad_size<double>(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potri_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potri_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potri_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potri_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_scratchpad_size<float>(device_queue->val, convert(uplo), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_scratchpad_size<double>(device_queue->val, convert(uplo), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::steqr_scratchpad_size<float>(device_queue->val, convert(compz), n, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::steqr_scratchpad_size<double>(device_queue->val, convert(compz), n, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::steqr_scratchpad_size<std::complex<float>>(device_queue->val, convert(compz), n, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::steqr_scratchpad_size<std::complex<double>>(device_queue->val, convert(compz), n, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsyev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syev_scratchpad_size<float>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsyev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syev_scratchpad_size<double>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsyevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syevd_scratchpad_size<float>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsyevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syevd_scratchpad_size<double>(device_queue->val, convert(jobz), convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsyevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syevx_scratchpad_size<float>(device_queue->val, convert(jobz), convert(range), convert(uplo), n, lda, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsyevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::syevx_scratchpad_size<double>(device_queue->val, convert(jobz), convert(range), convert(uplo), n, lda, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsygvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sygvd_scratchpad_size<float>(device_queue->val, itype, convert(jobz), convert(uplo), n, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsygvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sygvd_scratchpad_size<double>(device_queue->val, itype, convert(jobz), convert(uplo), n, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsygvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sygvx_scratchpad_size<float>(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, lda, ldb, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsygvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t ldz) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sygvx_scratchpad_size<double>(device_queue->val, itype, convert(jobz), convert(range), convert(uplo), n, lda, ldb, *vl, *vu, il, iu, *abstol, ldz);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsytrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrd_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsytrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrd_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrf_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrf_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrf_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::sytrf_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklStrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtri_scratchpad_size<float>(device_queue->val, convert(uplo), convert(diag), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtri_scratchpad_size<double>(device_queue->val, convert(uplo), convert(diag), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtri_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), convert(diag), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtri_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), convert(diag), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklStrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_scratchpad_size<float>(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_scratchpad_size<double>(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda, int64_t ldb) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), convert(trans), convert(diag), n, nrhs, lda, ldb);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCungbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungbr_scratchpad_size<std::complex<float>>(device_queue->val, convert(vect), m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZungbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungbr_scratchpad_size<std::complex<double>>(device_queue->val, convert(vect), m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCungqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_scratchpad_size<std::complex<float>>(device_queue->val, m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZungqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_scratchpad_size<std::complex<double>>(device_queue->val, m, n, k, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCungtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungtr_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZungtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungtr_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCunmqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmqr_scratchpad_size<std::complex<float>>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZunmqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmqr_scratchpad_size<std::complex<double>>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCunmrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmrq_scratchpad_size<std::complex<float>>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZunmrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmrq_scratchpad_size<std::complex<double>>(device_queue->val, convert(side), convert(trans), m, n, k, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCunmtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmtr_scratchpad_size<std::complex<float>>(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZunmtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose trans, int64_t m, int64_t n, int64_t lda, int64_t ldc) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmtr_scratchpad_size<std::complex<double>>(device_queue->val, convert(side), convert(uplo), convert(trans), m, n, lda, ldc);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geinv_batch_scratchpad_size<float>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geinv_batch_scratchpad_size<double>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geinv_batch_scratchpad_size<std::complex<float>>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geinv_batch_scratchpad_size<std::complex<double>>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<float>(device_queue->val, convert(trans, group_count), m, n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<double>(device_queue->val, convert(trans, group_count), m, n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans, group_count), m, n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans, group_count), m, n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<float>(device_queue->val, convert(trans), m, n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<double>(device_queue->val, convert(trans), m, n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans), m, n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gels_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans), m, n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<float>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<double>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<float>(device_queue->val, m, n, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<double>(device_queue->val, m, n, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::geqrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_s, int64_t ldu, int64_t stride_u, int64_t ldvt, int64_t stride_vt, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvda_batch_scratchpad_size<float>(device_queue->val, m, n, lda, stride_a, stride_s, ldu, stride_u, ldvt, stride_vt, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_s, int64_t ldu, int64_t stride_u, int64_t ldvt, int64_t stride_vt, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvda_batch_scratchpad_size<double>(device_queue->val, m, n, lda, stride_a, stride_s, ldu, stride_u, ldvt, stride_vt, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_s, int64_t ldu, int64_t stride_u, int64_t ldvt, int64_t stride_vt, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvda_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, stride_a, stride_s, ldu, stride_u, ldvt, stride_vt, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_s, int64_t ldu, int64_t stride_u, int64_t ldvt, int64_t stride_vt, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::gesvda_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, stride_a, stride_s, ldu, stride_u, ldvt, stride_vt, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<float>(device_queue->val, m, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<double>(device_queue->val, m, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<float>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<double>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<float>(device_queue->val, m, n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<double>(device_queue->val, m, n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<float>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<double>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrfnp_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<float>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<double>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<std::complex<float>>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<std::complex<double>>(device_queue->val, n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<float>(device_queue->val, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<double>(device_queue->val, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<std::complex<float>>(device_queue->val, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getri_batch_scratchpad_size<std::complex<double>>(device_queue->val, n, lda, stride_a, stride_ipiv, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<float>(device_queue->val, convert(trans, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<double>(device_queue->val, convert(trans, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<float>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, stride_ipiv, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<double>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, stride_ipiv, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, stride_ipiv, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t stride_ipiv, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrs_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, stride_ipiv, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrsnp_batch_scratchpad_size<float>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrsnp_batch_scratchpad_size<double>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrsnp_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::getrsnp_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(trans), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSorgqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_batch_scratchpad_size<float>(device_queue->val, m, n, k, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDorgqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_batch_scratchpad_size<double>(device_queue->val, m, n, k, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSorgqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_batch_scratchpad_size<float>(device_queue->val, m, n, k, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDorgqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::orgqr_batch_scratchpad_size<double>(device_queue->val, m, n, k, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSormqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t* ldc, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormqr_batch_scratchpad_size<float>(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, lda, ldc, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDormqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t* ldc, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ormqr_batch_scratchpad_size<double>(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, lda, ldc, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<float>(device_queue->val, convert(uplo, group_count), n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<double>(device_queue->val, convert(uplo, group_count), n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo, group_count), n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo, group_count), n, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<float>(device_queue->val, convert(uplo), n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<double>(device_queue->val, convert(uplo), n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t lda, int64_t stride_a, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrf_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, lda, stride_a, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<float>(device_queue->val, convert(uplo, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<double>(device_queue->val, convert(uplo, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklSpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<float>(device_queue->val, convert(uplo), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<double>(device_queue->val, convert(uplo), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, int64_t lda, int64_t stride_a, int64_t ldb, int64_t stride_b, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::potrs_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo), n, nrhs, lda, stride_a, ldb, stride_b, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklStrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, onemklTranspose* trans, onemklDiag* diag, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_batch_scratchpad_size<float>(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklDtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, onemklTranspose* trans, onemklDiag* diag, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_batch_scratchpad_size<double>(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, onemklTranspose* trans, onemklDiag* diag, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, onemklTranspose* trans, onemklDiag* diag, int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::trtrs_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(uplo, group_count), convert(trans, group_count), convert(diag, group_count), n, nrhs, lda, ldb, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCungqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, k, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZungqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, k, lda, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCungqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_batch_scratchpad_size<std::complex<float>>(device_queue->val, m, n, k, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZungqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t stride_a, int64_t stride_tau, int64_t batch_size) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::ungqr_batch_scratchpad_size<std::complex<double>>(device_queue->val, m, n, k, lda, stride_a, stride_tau, batch_size);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklCunmqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t* ldc, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmqr_batch_scratchpad_size<std::complex<float>>(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, lda, ldc, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\nextern \"C\" int64_t onemklZunmqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side, onemklTranspose* trans, int64_t* m, int64_t* n, int64_t* k, int64_t* lda, int64_t* ldc, int64_t group_count, int64_t* group_sizes) {\n   int64_t scratchpad_size = oneapi::mkl::lapack::unmqr_batch_scratchpad_size<std::complex<double>>(device_queue->val, convert(side, group_count), convert(trans, group_count), m, n, k, lda, ldc, group_count, group_sizes);\n   device_queue->val.wait_and_throw();\n   return scratchpad_size;\n}\n\n// SPARSE\nextern \"C\" int onemklXsparse_init_matrix_handle(matrix_handle_t *p_spMat) {\n   oneapi::mkl::sparse::init_matrix_handle((oneapi::mkl::sparse::matrix_handle_t*) p_spMat);\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_release_matrix_handle(syclQueue_t device_queue, matrix_handle_t *p_spMat) {\n   try {\n      auto status = oneapi::mkl::sparse::release_matrix_handle(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t*) p_spMat, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t *col_ind, float *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr, int64_t *col_ind, float *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t *col_ind, double *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr, int64_t *col_ind, double *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t *col_ind, float _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, reinterpret_cast<std::complex<float>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr, int64_t *col_ind, float _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, reinterpret_cast<std::complex<float>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t *col_ind, double _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, reinterpret_cast<std::complex<double>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr, int64_t *col_ind, double _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_csr_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, convert(index), row_ptr, col_ind, reinterpret_cast<std::complex<double>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind, int32_t *col_ind, float *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t *row_ind, int64_t *col_ind, float *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind, int32_t *col_ind, double *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t *row_ind, int64_t *col_ind, double *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind, int32_t *col_ind, float _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, reinterpret_cast<std::complex<float>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t *row_ind, int64_t *col_ind, float _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, reinterpret_cast<std::complex<float>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows, int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind, int32_t *col_ind, double _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, reinterpret_cast<std::complex<double>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t *row_ind, int64_t *col_ind, double _Complex *values) {\n   try {\n      auto status = oneapi::mkl::sparse::set_coo_data(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, nrows, ncols, nnz, convert(index), row_ind, col_ind, reinterpret_cast<std::complex<double>*>(values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_init_matmat_descr(matmat_descr_t *p_desc) {\n   oneapi::mkl::sparse::init_matmat_descr((oneapi::mkl::sparse::matmat_descr_t*) p_desc);\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_release_matmat_descr(matmat_descr_t *p_desc) {\n   oneapi::mkl::sparse::release_matmat_descr((oneapi::mkl::sparse::matmat_descr_t*) p_desc);\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_init_omatconvert_descr(syclQueue_t device_queue, omatconvert_descr_t *p_descr) {\n   try {\n      oneapi::mkl::sparse::init_omatconvert_descr(device_queue->val, (oneapi::mkl::sparse::omatconvert_descr_t*) p_descr);\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_release_omatconvert_descr(syclQueue_t device_queue, omatconvert_descr_t descr) {\n   try {\n      auto status = oneapi::mkl::sparse::release_omatconvert_descr(device_queue->val, (oneapi::mkl::sparse::omatconvert_descr_t) descr, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_init_omatadd_descr(syclQueue_t device_queue, omatadd_descr_t *p_omatadd_desc) {\n   try {\n      oneapi::mkl::sparse::init_omatadd_descr(device_queue->val, (oneapi::mkl::sparse::omatadd_descr_t*) p_omatadd_desc);\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_release_omatadd_descr(syclQueue_t device_queue, omatadd_descr_t omatadd_desc) {\n   try {\n      auto status = oneapi::mkl::sparse::release_omatadd_descr(device_queue->val, (oneapi::mkl::sparse::omatadd_descr_t) omatadd_desc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_omatcopy(syclQueue_t device_queue, onemklTranspose transpose_val, matrix_handle_t spMat_in, matrix_handle_t spMat_out) {\n   try {\n      auto status = oneapi::mkl::sparse::omatcopy(device_queue->val, convert(transpose_val), (oneapi::mkl::sparse::matrix_handle_t) spMat_in, (oneapi::mkl::sparse::matrix_handle_t) spMat_out, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_sort_matrix(syclQueue_t device_queue, matrix_handle_t spMat) {\n   try {\n      auto status = oneapi::mkl::sparse::sort_matrix(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat, int64_t length, float *new_diag_values) {\n   try {\n      auto status = oneapi::mkl::sparse::update_diagonal_values(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, length, new_diag_values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat, int64_t length, double *new_diag_values) {\n   try {\n      auto status = oneapi::mkl::sparse::update_diagonal_values(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, length, new_diag_values, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat, int64_t length, float _Complex *new_diag_values) {\n   try {\n      auto status = oneapi::mkl::sparse::update_diagonal_values(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, length, reinterpret_cast<std::complex<float>*>(new_diag_values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat, int64_t length, double _Complex *new_diag_values) {\n   try {\n      auto status = oneapi::mkl::sparse::update_diagonal_values(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) spMat, length, reinterpret_cast<std::complex<double>*>(new_diag_values), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_gemv(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t A) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_gemv(device_queue->val, convert(opA), (oneapi::mkl::sparse::matrix_handle_t) A, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_trmv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_gemm(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t A) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_gemm(device_queue->val, convert(opA), (oneapi::mkl::sparse::matrix_handle_t) A, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_gemm_advanced(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opB, matrix_handle_t A, int64_t columns) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_gemm(device_queue->val, convert(layout_val), convert(opA), convert(opB), (oneapi::mkl::sparse::matrix_handle_t) A, columns, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_trsm(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_trsm(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_optimize_trsm_advanced(syclQueue_t device_queue, onemklLayout layout_val, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, matrix_handle_t A, int64_t columns) {\n   try {\n      auto status = oneapi::mkl::sparse::optimize_trsm(device_queue->val, convert(layout_val), convert(uplo_val), convert(opA), convert(diag_val), (oneapi::mkl::sparse::matrix_handle_t) A, columns, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float *alpha, matrix_handle_t A, float *x, float *beta, float *y) {\n   try {\n      auto status = oneapi::mkl::sparse::gemv(device_queue->val, convert(opA), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, double *alpha, matrix_handle_t A, double *x, double *beta, double *y) {\n   try {\n      auto status = oneapi::mkl::sparse::gemv(device_queue->val, convert(opA), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float _Complex *alpha, matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::gemv(device_queue->val, convert(opA), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(x), *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, double _Complex *alpha, matrix_handle_t A, double _Complex *x, double _Complex *beta, double _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::gemv(device_queue->val, convert(opA), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(x), *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, float *alpha, matrix_handle_t A, float *x, float *beta, float *y, float *d) {\n   try {\n      auto status = oneapi::mkl::sparse::gemvdot(device_queue->val, convert(opA), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, d, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, double *alpha, matrix_handle_t A, double *x, double *beta, double *y, double *d) {\n   try {\n      auto status = oneapi::mkl::sparse::gemvdot(device_queue->val, convert(opA), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, d, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, float _Complex *alpha, matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex *y, float _Complex *d) {\n   try {\n      auto status = oneapi::mkl::sparse::gemvdot(device_queue->val, convert(opA), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(x), *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), reinterpret_cast<std::complex<float>*>(d), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, double _Complex *alpha, matrix_handle_t A, double _Complex *x, double _Complex *beta, double _Complex *y, double _Complex *d) {\n   try {\n      auto status = oneapi::mkl::sparse::gemvdot(device_queue->val, convert(opA), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(x), *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), reinterpret_cast<std::complex<double>*>(d), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, float *alpha, matrix_handle_t A, float *x, float *beta, float *y) {\n   try {\n      auto status = oneapi::mkl::sparse::symv(device_queue->val, convert(uplo_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, double *alpha, matrix_handle_t A, double *x, double *beta, double *y) {\n   try {\n      auto status = oneapi::mkl::sparse::symv(device_queue->val, convert(uplo_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, float _Complex *alpha, matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::symv(device_queue->val, convert(uplo_val), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(x), *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, double _Complex *alpha, matrix_handle_t A, double _Complex *x, double _Complex *beta, double _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::symv(device_queue->val, convert(uplo_val), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(x), *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, float *alpha, matrix_handle_t A, float *x, float *beta, float *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trmv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, double *alpha, matrix_handle_t A, double *x, double *beta, double *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trmv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, *beta, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, float _Complex *alpha, matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trmv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(x), *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, double _Complex *alpha, matrix_handle_t A, double _Complex *x, double _Complex *beta, double _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trmv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(x), *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, float *alpha, matrix_handle_t A, float *x, float *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, double *alpha, matrix_handle_t A, double *x, double *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, x, y, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, float _Complex *alpha, matrix_handle_t A, float _Complex *x, float _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(x), reinterpret_cast<std::complex<float>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA, onemklDiag diag_val, double _Complex *alpha, matrix_handle_t A, double _Complex *x, double _Complex *y) {\n   try {\n      auto status = oneapi::mkl::sparse::trsv(device_queue->val, convert(uplo_val), convert(opA), convert(diag_val), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(x), reinterpret_cast<std::complex<double>*>(y), {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, float *alpha, matrix_handle_t A, float *X, int64_t columns, int64_t ldx, float *beta, float *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::gemm(device_queue->val, convert(layout_val), convert(opA), convert(opX), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, X, columns, ldx, *beta, Y, ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, double *alpha, matrix_handle_t A, double *X, int64_t columns, int64_t ldx, double *beta, double *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::gemm(device_queue->val, convert(layout_val), convert(opA), convert(opX), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, X, columns, ldx, *beta, Y, ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, float _Complex *alpha, matrix_handle_t A, float _Complex *X, int64_t columns, int64_t ldx, float _Complex *beta, float _Complex *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::gemm(device_queue->val, convert(layout_val), convert(opA), convert(opX), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(X), columns, ldx, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(Y), ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, double _Complex *alpha, matrix_handle_t A, double _Complex *X, int64_t columns, int64_t ldx, double _Complex *beta, double _Complex *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::gemm(device_queue->val, convert(layout_val), convert(opA), convert(opX), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(X), columns, ldx, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(Y), ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, float *alpha, matrix_handle_t A, float *X, int64_t columns, int64_t ldx, float *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::trsm(device_queue->val, convert(layout_val), convert(opA), convert(opX), convert(uplo_val), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, X, columns, ldx, Y, ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, double *alpha, matrix_handle_t A, double *X, int64_t columns, int64_t ldx, double *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::trsm(device_queue->val, convert(layout_val), convert(opA), convert(opX), convert(uplo_val), convert(diag_val), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, X, columns, ldx, Y, ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, float _Complex *alpha, matrix_handle_t A, float _Complex *X, int64_t columns, int64_t ldx, float _Complex *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::trsm(device_queue->val, convert(layout_val), convert(opA), convert(opX), convert(uplo_val), convert(diag_val), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<float>*>(X), columns, ldx, reinterpret_cast<std::complex<float>*>(Y), ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA, onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, double _Complex *alpha, matrix_handle_t A, double _Complex *X, int64_t columns, int64_t ldx, double _Complex *Y, int64_t ldy) {\n   try {\n      auto status = oneapi::mkl::sparse::trsm(device_queue->val, convert(layout_val), convert(opA), convert(opX), convert(uplo_val), convert(diag_val), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, reinterpret_cast<std::complex<double>*>(X), columns, ldx, reinterpret_cast<std::complex<double>*>(Y), ldy, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_set_matmat_data(matmat_descr_t descr, onemklMatrixView viewA, onemklTranspose opA, onemklMatrixView viewB, onemklTranspose opB, onemklMatrixView viewC) {\n   oneapi::mkl::sparse::set_matmat_data((oneapi::mkl::sparse::matmat_descr_t) descr, convert(viewA), convert(opA), convert(viewB), convert(opB), convert(viewC));\n   return 0;\n}\n\nextern \"C\" int onemklSsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA, onemklTranspose opB, float *alpha, matrix_handle_t A, matrix_handle_t B, float *beta, float *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::sparse::matmatd(device_queue->val, convert(c_layout), convert(opA), convert(opB), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, *beta, C, c_nrows, c_ncols, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklDsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA, onemklTranspose opB, double *alpha, matrix_handle_t A, matrix_handle_t B, double *beta, double *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::sparse::matmatd(device_queue->val, convert(c_layout), convert(opA), convert(opB), *alpha, (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, *beta, C, c_nrows, c_ncols, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklCsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA, onemklTranspose opB, float _Complex *alpha, matrix_handle_t A, matrix_handle_t B, float _Complex *beta, float _Complex *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::sparse::matmatd(device_queue->val, convert(c_layout), convert(opA), convert(opB), *reinterpret_cast<std::complex<float>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, *reinterpret_cast<std::complex<float>*>(beta), reinterpret_cast<std::complex<float>*>(C), c_nrows, c_ncols, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklZsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA, onemklTranspose opB, double _Complex *alpha, matrix_handle_t A, matrix_handle_t B, double _Complex *beta, double _Complex *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc) {\n   try {\n      auto status = oneapi::mkl::sparse::matmatd(device_queue->val, convert(c_layout), convert(opA), convert(opB), *reinterpret_cast<std::complex<double>*>(alpha), (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, *reinterpret_cast<std::complex<double>*>(beta), reinterpret_cast<std::complex<double>*>(C), c_nrows, c_ncols, ldc, {});\n      device_queue->val.wait_and_throw();\n   } catch (const sycl::exception& e) { return -1; }\n   return 0;\n}\n\nextern \"C\" int onemklXsparse_matmat(syclQueue_t device_queue, matrix_handle_t A, matrix_handle_t B, matrix_handle_t C, onemklMatmatRequest req, matmat_descr_t descr, int64_t *sizeTempBuffer, void *tempBuffer) {\n   auto status = oneapi::mkl::sparse::matmat(device_queue->val, (oneapi::mkl::sparse::matrix_handle_t) A, (oneapi::mkl::sparse::matrix_handle_t) B, (oneapi::mkl::sparse::matrix_handle_t) C, convert(req), (oneapi::mkl::sparse::matmat_descr_t) descr, sizeTempBuffer, tempBuffer, {});\n   device_queue->val.wait_and_throw();\n   return 0;\n}\n\n// other\n\n// oneMKL keeps a cache of SYCL queues and tries to destroy them when unloading the library.\n// that is incompatible with oneAPI.jl destroying queues before that, so call mkl_free_buffers\n// to manually wipe the device cache when we're destroying queues.\n\nextern \"C\" int onemklDestroy() {\n    mkl_free_buffers();\n    return 0;\n}\n"
  },
  {
    "path": "deps/src/onemkl.h",
    "content": "#pragma once\n\n#include \"sycl.h\"\n\n#include <stddef.h>\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// BLAS types\ntypedef enum {\n    ONEMKL_TRANSPOSE_NONTRANS,\n    ONEMKL_TRANSPOSE_TRANS,\n    ONEMLK_TRANSPOSE_CONJTRANS\n} onemklTranspose;\n\ntypedef enum {\n    ONEMKL_UPLO_UPPER,\n    ONEMKL_UPLO_LOWER\n} onemklUplo;\n\ntypedef enum {\n    ONEMKL_DIAG_NONUNIT,\n    ONEMKL_DIAG_UNIT\n } onemklDiag;\n\ntypedef enum {\n    ONEMKL_SIDE_LEFT,\n    ONEMKL_SIDE_RIGHT\n} onemklSide;\n\ntypedef enum {\n    ONEMKL_OFFSET_ROW,\n    ONEMKL_OFFSET_COL,\n    ONEMKL_OFFSET_FIX,\n} onemklOffset;\n\n// LAPACK types\ntypedef enum {\n    ONEMKL_JOB_N,\n    ONEMKL_JOB_V,\n    ONEMKL_JOB_U,\n    ONEMKL_JOB_A,\n    ONEMKL_JOB_S,\n    ONEMKL_JOB_O\n} onemklJob;\n\ntypedef enum {\n    ONEMKL_GENERATE_Q,\n    ONEMKL_GENERATE_P,\n    ONEMKL_GENERATE_N,\n    ONEMKL_GENERATE_V\n} onemklGenerate;\n\ntypedef enum {\n    ONEMKL_COMPZ_N,\n    ONEMKL_COMPZ_V,\n    ONEMKL_COMPZ_I\n} onemklCompz;\n\ntypedef enum {\n    ONEMKL_DIRECT_F,\n    ONEMKL_DIRECT_B\n} onemklDirect;\n\ntypedef enum {\n    ONEMKL_STOREV_C,\n    ONEMKL_STOREV_R\n} onemklStorev;\n\ntypedef enum {\n    ONEMKL_RANGEV_A,\n    ONEMKL_RANGEV_V,\n    ONEMKL_RANGEV_I\n} onemklRangev;\n\ntypedef enum {\n    ONEMKL_ORDER_B,\n    ONEMKL_ORDER_E\n} onemklOrder;\n\ntypedef enum {\n    ONEMKL_JOBSVD_N,\n    ONEMKL_JOBSVD_A,\n    ONEMKL_JOBSVD_O,\n    ONEMKL_JOBSVD_S\n} onemklJobsvd;\n\ntypedef enum {\n    ONEMKL_LAYOUT_ROW,\n    ONEMKL_LAYOUT_COL,\n} onemklLayout;\n\ntypedef enum {\n    ONEMKL_INDEX_ZERO,\n    ONEMKL_INDEX_ONE,\n} onemklIndex;\n\n// SPARSE types\ntypedef enum {\n    ONEMKL_PROPERTY_SYMMETRIC,\n    ONEMKL_PROPERTY_SORTED,\n} onemklProperty;\n\ntypedef enum {\n    ONEMKL_MATRIX_VIEW_GENERAL,\n} onemklMatrixView;\n\ntypedef enum {\n    ONEMKL_MATMAT_REQUEST_GET_WORK_ESTIMATION_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_WORK_ESTIMATION,\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_STRUCTURE_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_COMPUTE_STRUCTURE,\n    ONEMKL_MATMAT_REQUEST_FINALIZE_STRUCTURE,\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_BUF_SIZE,\n    ONEMKL_MATMAT_REQUEST_COMPUTE,\n    ONEMKL_MATMAT_REQUEST_GET_NNZ,\n    ONEMKL_MATMAT_REQUEST_FINALIZE,\n} onemklMatmatRequest;\n\ntypedef enum {\n    ONEMKL_OMATCONVERT_DEFAULT_ALG,\n} onemklOmatconvertAlg;\n\ntypedef enum {\n    ONEMKL_OMATADD_DEFAULT_ALG,\n} onemklOmataddAlg;\n\nstruct matrix_handle;\ntypedef struct matrix_handle *matrix_handle_t;\n\nstruct matmat_descr;\ntypedef struct matmat_descr *matmat_descr_t;\n\nstruct omatconvert_descr;\ntypedef struct omatconvert_descr *omatconvert_descr_t;\n\nstruct omatadd_descr;\ntypedef struct omatadd_descr *omatadd_descr_t;\n\nconst int64_t ONEMKL_VERSION_MAJOR = 2025;\nconst int64_t ONEMKL_VERSION_MINOR = 2;\nconst int64_t ONEMKL_VERSION_PATCH = 0;\nvoid onemkl_version(int64_t *major, int64_t *minor, int64_t *patch);\n\nint onemklHgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, uint16_t *alpha,\n                      const short **a, int64_t *lda, const short **b,\n                      int64_t *ldb, uint16_t *beta, short **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklSgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, float *alpha,\n                      const float **a, int64_t *lda, const float **b,\n                      int64_t *ldb, float *beta, float **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklDgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, double *alpha,\n                      const double **a, int64_t *lda, const double **b,\n                      int64_t *ldb, double *beta, double **c,\n                      int64_t *ldc, int64_t group_count, int64_t *group_size);\n\nint onemklCgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, float _Complex *alpha,\n                      const float _Complex **a, int64_t *lda,\n                      const float _Complex **b,\n                      int64_t *ldb, float _Complex *beta,\n                      float _Complex **c, int64_t *ldc,\n                      int64_t group_count, int64_t *group_size);\n\nint onemklZgemm_batch(syclQueue_t device_queue, onemklTranspose transa,\n                      onemklTranspose transb, int64_t *m,\n                      int64_t *n, int64_t *k, double _Complex *alpha,\n                      const double _Complex **a, int64_t *lda,\n                      const double _Complex **b,\n                      int64_t *ldb, double _Complex *beta,\n                      double _Complex **c, int64_t *ldc,\n                      int64_t group_count, int64_t *group_size);\n\nint onemklStrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      float *alpha, const float **a, int64_t *lda,\n                      float **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklDtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      double *alpha, const double **a, int64_t *lda,\n                      double **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklCtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      float _Complex *alpha, const float _Complex **a, int64_t *lda,\n                      float _Complex **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n\nint onemklZtrsm_batch(syclQueue_t device_queue, onemklSide left_right,\n                      onemklUplo upper_lower, onemklTranspose transa,\n                      onemklDiag unit_diag, int64_t *m, int64_t *n,\n                      double _Complex *alpha, const double _Complex **a, int64_t *lda,\n                      double _Complex **b, int64_t *ldb, int64_t group_count,\n                      int64_t *group_size);\n// BLAS\nint onemklHgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t\n                m, int64_t n, int64_t k, short *alpha, short *a, int64_t lda, short *b, int64_t ldb,\n                short *beta, short *c, int64_t ldc);\n\nint onemklSgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t\n                m, int64_t n, int64_t k, float *alpha, float *a, int64_t lda, float *b, int64_t ldb,\n                float *beta, float *c, int64_t ldc);\n\nint onemklDgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t\n                m, int64_t n, int64_t k, double *alpha, double *a, int64_t lda, double *b, int64_t ldb,\n                double *beta, double *c, int64_t ldc);\n\nint onemklCgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t\n                m, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float\n                _Complex *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZgemm(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb, int64_t\n                m, int64_t n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda,\n                double _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t\n                ldc);\n\nint onemklSsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta,\n                float *c, int64_t ldc);\n\nint onemklDsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double\n                *beta, double *c, int64_t ldc);\n\nint onemklCsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b,\n                int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZsymm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex\n                *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc);\n\nint onemklChemm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b,\n                int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZhemm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower, int64_t\n                m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex\n                *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc);\n\nint onemklSsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, float *alpha, float *a, int64_t lda, float *beta, float *c, int64_t ldc);\n\nint onemklDsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, double *alpha, double *a, int64_t lda, double *beta, double *c, int64_t\n                ldc);\n\nint onemklCsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex\n                *beta, float _Complex *c, int64_t ldc);\n\nint onemklZsyrk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex\n                *beta, double _Complex *c, int64_t ldc);\n\nint onemklCherk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, float *alpha, float _Complex *a, int64_t lda, float *beta, float _Complex\n                *c, int64_t ldc);\n\nint onemklZherk(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                n, int64_t k, double *alpha, double _Complex *a, int64_t lda, double *beta, double\n                _Complex *c, int64_t ldc);\n\nint onemklSsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, float *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta,\n                 float *c, int64_t ldc);\n\nint onemklDsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, double *alpha, double *a, int64_t lda, double *b, int64_t ldb, double\n                 *beta, double *c, int64_t ldc);\n\nint onemklCsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex\n                 *b, int64_t ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZsyr2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double\n                 _Complex *b, int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc);\n\nint onemklCher2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex\n                 *b, int64_t ldb, float *beta, float _Complex *c, int64_t ldc);\n\nint onemklZher2k(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans, int64_t\n                 n, int64_t k, double _Complex *alpha, double _Complex *a, int64_t lda, double\n                 _Complex *b, int64_t ldb, double *beta, double _Complex *c, int64_t ldc);\n\nint onemklStrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha,\n                float *a, int64_t lda, float *b, int64_t ldb);\n\nint onemklDtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha,\n                double *a, int64_t lda, double *b, int64_t ldb);\n\nint onemklCtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex\n                *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb);\n\nint onemklZtrmm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex\n                *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb);\n\nint onemklStrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float\n                        *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c,\n                        int64_t ldc);\n\nint onemklDtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double\n                        *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double\n                        *c, int64_t ldc);\n\nint onemklCtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float\n                        _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t\n                        ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZtrmm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double\n                        _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b,\n                        int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc);\n\nint onemklStrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float *alpha,\n                float *a, int64_t lda, float *b, int64_t ldb);\n\nint onemklDtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double *alpha,\n                double *a, int64_t lda, double *b, int64_t ldb);\n\nint onemklCtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float _Complex\n                *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb);\n\nint onemklZtrsm(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double _Complex\n                *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb);\n\nint onemklStrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float\n                        *alpha, float *a, int64_t lda, float *b, int64_t ldb, float *beta, float *c,\n                        int64_t ldc);\n\nint onemklDtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double\n                        *alpha, double *a, int64_t lda, double *b, int64_t ldb, double *beta, double\n                        *c, int64_t ldc);\n\nint onemklCtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, float\n                        _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t\n                        ldb, float _Complex *beta, float _Complex *c, int64_t ldc);\n\nint onemklZtrsm_variant(syclQueue_t device_queue, onemklSide left_right, onemklUplo upper_lower,\n                        onemklTranspose trans, onemklDiag unit_diag, int64_t m, int64_t n, double\n                        _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b,\n                        int64_t ldb, double _Complex *beta, double _Complex *c, int64_t ldc);\n\nint onemklSdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float *a,\n                int64_t lda, float *x, int64_t incx, float *c, int64_t ldc);\n\nint onemklDdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double *a,\n                int64_t lda, double *x, int64_t incx, double *c, int64_t ldc);\n\nint onemklCdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, float\n                _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *c, int64_t\n                ldc);\n\nint onemklZdgmm(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t n, double\n                _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double _Complex *c,\n                int64_t ldc);\n\nint onemklSgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float *alpha,\n                float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy);\n\nint onemklDgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y,\n                int64_t incy);\n\nint onemklCgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float\n                _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx,\n                float _Complex *beta, float _Complex *y, int64_t incy);\n\nint onemklZgemv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx,\n                double _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklSgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl,\n                int64_t ku, float *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta,\n                float *y, int64_t incy);\n\nint onemklDgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl,\n                int64_t ku, double *alpha, double *a, int64_t lda, double *x, int64_t incx, double\n                *beta, double *y, int64_t incy);\n\nint onemklCgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl,\n                int64_t ku, float _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x,\n                int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy);\n\nint onemklZgbmv(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t kl,\n                int64_t ku, double _Complex *alpha, double _Complex *a, int64_t lda, double _Complex\n                *x, int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklSger(syclQueue_t device_queue, int64_t m, int64_t n, float *alpha, float *x, int64_t incx,\n               float *y, int64_t incy, float *a, int64_t lda);\n\nint onemklDger(syclQueue_t device_queue, int64_t m, int64_t n, double *alpha, double *x, int64_t incx,\n               double *y, int64_t incy, double *a, int64_t lda);\n\nint onemklCgerc(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *alpha, float _Complex\n                *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda);\n\nint onemklZgerc(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *alpha, double\n                _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a,\n                int64_t lda);\n\nint onemklCgeru(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *alpha, float _Complex\n                *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a, int64_t lda);\n\nint onemklZgeru(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *alpha, double\n                _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double _Complex *a,\n                int64_t lda);\n\nint onemklChbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, float\n                _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *x, int64_t incx,\n                float _Complex *beta, float _Complex *y, int64_t incy);\n\nint onemklZhbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, double\n                _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx,\n                double _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklChemv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta,\n                float _Complex *y, int64_t incy);\n\nint onemklZhemv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double\n                _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklCher(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float\n               _Complex *x, int64_t incx, float _Complex *a, int64_t lda);\n\nint onemklZher(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n               _Complex *x, int64_t incx, double _Complex *a, int64_t lda);\n\nint onemklCher2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a,\n                int64_t lda);\n\nint onemklZher2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double\n                _Complex *a, int64_t lda);\n\nint onemklChpmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *a, float _Complex *x, int64_t incx, float _Complex *beta, float\n                _Complex *y, int64_t incy);\n\nint onemklZhpmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *a, double _Complex *x, int64_t incx, double _Complex *beta,\n                double _Complex *y, int64_t incy);\n\nint onemklChpr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float\n               _Complex *x, int64_t incx, float _Complex *a);\n\nint onemklZhpr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n               _Complex *x, int64_t incx, double _Complex *a);\n\nint onemklChpr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a);\n\nint onemklZhpr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double\n                _Complex *a);\n\nint onemklSsbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, float\n                *alpha, float *a, int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t\n                incy);\n\nint onemklDsbmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, int64_t k, double\n                *alpha, double *a, int64_t lda, double *x, int64_t incx, double *beta, double *y,\n                int64_t incy);\n\nint onemklSsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *a,\n                int64_t lda, float *x, int64_t incx, float *beta, float *y, int64_t incy);\n\nint onemklDsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n                *a, int64_t lda, double *x, int64_t incx, double *beta, double *y, int64_t incy);\n\nint onemklCsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *a, int64_t lda, float _Complex *x, int64_t incx, float _Complex *beta,\n                float _Complex *y, int64_t incy);\n\nint onemklZsymv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *a, int64_t lda, double _Complex *x, int64_t incx, double\n                _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklSsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x,\n               int64_t incx, float *a, int64_t lda);\n\nint onemklDsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n               *x, int64_t incx, double *a, int64_t lda);\n\nint onemklCsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n               float _Complex *x, int64_t incx, float _Complex *a, int64_t lda);\n\nint onemklZsyr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex *alpha,\n               double _Complex *x, int64_t incx, double _Complex *a, int64_t lda);\n\nint onemklSsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x,\n                int64_t incx, float *y, int64_t incy, float *a, int64_t lda);\n\nint onemklDsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n                *x, int64_t incx, double *y, int64_t incy, double *a, int64_t lda);\n\nint onemklCsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float _Complex *alpha,\n                float _Complex *x, int64_t incx, float _Complex *y, int64_t incy, float _Complex *a,\n                int64_t lda);\n\nint onemklZsyr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double _Complex\n                *alpha, double _Complex *x, int64_t incx, double _Complex *y, int64_t incy, double\n                _Complex *a, int64_t lda);\n\nint onemklSspmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *a,\n                float *x, int64_t incx, float *beta, float *y, int64_t incy);\n\nint onemklDspmv(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n                *a, double *x, int64_t incx, double *beta, double *y, int64_t incy);\n\nint onemklSspr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x,\n               int64_t incx, float *a);\n\nint onemklDspr(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n               *x, int64_t incx, double *a);\n\nint onemklSspr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, float *alpha, float *x,\n                int64_t incx, float *y, int64_t incy, float *a);\n\nint onemklDspr2(syclQueue_t device_queue, onemklUplo upper_lower, int64_t n, double *alpha, double\n                *x, int64_t incx, double *y, int64_t incy, double *a);\n\nint onemklStbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, float *a, int64_t lda, float *x, int64_t\n                incx);\n\nint onemklDtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, double *a, int64_t lda, double *x, int64_t\n                incx);\n\nint onemklCtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, float _Complex *a, int64_t lda, float\n                _Complex *x, int64_t incx);\n\nint onemklZtbmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, double _Complex *a, int64_t lda, double\n                _Complex *x, int64_t incx);\n\nint onemklStbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, float *a, int64_t lda, float *x, int64_t\n                incx);\n\nint onemklDtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, double *a, int64_t lda, double *x, int64_t\n                incx);\n\nint onemklCtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, float _Complex *a, int64_t lda, float\n                _Complex *x, int64_t incx);\n\nint onemklZtbsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, int64_t k, double _Complex *a, int64_t lda, double\n                _Complex *x, int64_t incx);\n\nint onemklStpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float *a, float *x, int64_t incx);\n\nint onemklDtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double *a, double *x, int64_t incx);\n\nint onemklCtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float _Complex *a, float _Complex *x, int64_t incx);\n\nint onemklZtpmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double _Complex *a, double _Complex *x, int64_t\n                incx);\n\nint onemklStpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float *a, float *x, int64_t incx);\n\nint onemklDtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double *a, double *x, int64_t incx);\n\nint onemklCtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float _Complex *a, float _Complex *x, int64_t incx);\n\nint onemklZtpsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double _Complex *a, double _Complex *x, int64_t\n                incx);\n\nint onemklStrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float *a, int64_t lda, float *x, int64_t incx);\n\nint onemklDtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double *a, int64_t lda, double *x, int64_t incx);\n\nint onemklCtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float _Complex *a, int64_t lda, float _Complex *x,\n                int64_t incx);\n\nint onemklZtrmv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double _Complex *a, int64_t lda, double _Complex *x,\n                int64_t incx);\n\nint onemklStrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float *a, int64_t lda, float *x, int64_t incx);\n\nint onemklDtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double *a, int64_t lda, double *x, int64_t incx);\n\nint onemklCtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, float _Complex *a, int64_t lda, float _Complex *x,\n                int64_t incx);\n\nint onemklZtrsv(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose trans,\n                onemklDiag unit_diag, int64_t n, double _Complex *a, int64_t lda, double _Complex *x,\n                int64_t incx);\n\nint onemklCdotc(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n                *y, int64_t incy, float _Complex *result);\n\nint onemklZdotc(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                _Complex *y, int64_t incy, double _Complex *result);\n\nint onemklCdotu(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n                *y, int64_t incy, float _Complex *result);\n\nint onemklZdotu(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                _Complex *y, int64_t incy, double _Complex *result);\n\nint onemklSiamax(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int32_t *result,\n                 onemklIndex base);\n\nint onemklSiamax_64(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t *result,\n                    onemklIndex base);\n\nint onemklDiamax(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int32_t *result,\n                 onemklIndex base);\n\nint onemklDiamax_64(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t *result,\n                    onemklIndex base);\n\nint onemklCiamax(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int32_t\n                 *result, onemklIndex base);\n\nint onemklCiamax_64(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int64_t\n                    *result, onemklIndex base);\n\nint onemklZiamax(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int32_t\n                 *result, onemklIndex base);\n\nint onemklZiamax_64(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int64_t\n                    *result, onemklIndex base);\n\nint onemklSiamin(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int32_t *result,\n                 onemklIndex base);\n\nint onemklSiamin_64(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t *result,\n                    onemklIndex base);\n\nint onemklDiamin(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int32_t *result,\n                 onemklIndex base);\n\nint onemklDiamin_64(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t *result,\n                    onemklIndex base);\n\nint onemklCiamin(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int32_t\n                 *result, onemklIndex base);\n\nint onemklCiamin_64(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, int64_t\n                    *result, onemklIndex base);\n\nint onemklZiamin(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int32_t\n                 *result, onemklIndex base);\n\nint onemklZiamin_64(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, int64_t\n                    *result, onemklIndex base);\n\nint onemklSasum(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *result);\n\nint onemklDasum(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *result);\n\nint onemklCasum(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float *result);\n\nint onemklZasum(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                *result);\n\nint onemklHaxpy(syclQueue_t device_queue, int64_t n, short *alpha, short *x, int64_t incx, short *y,\n                int64_t incy);\n\nint onemklSaxpy(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx, float *y,\n                int64_t incy);\n\nint onemklDaxpy(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx, double\n                *y, int64_t incy);\n\nint onemklCaxpy(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x,\n                int64_t incx, float _Complex *y, int64_t incy);\n\nint onemklZaxpy(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x,\n                int64_t incx, double _Complex *y, int64_t incy);\n\nint onemklSaxpby(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx, float\n                 *beta, float *y, int64_t incy);\n\nint onemklDaxpby(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx, double\n                 *beta, double *y, int64_t incy);\n\nint onemklCaxpby(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x,\n                 int64_t incx, float _Complex *beta, float _Complex *y, int64_t incy);\n\nint onemklZaxpby(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x,\n                 int64_t incx, double _Complex *beta, double _Complex *y, int64_t incy);\n\nint onemklScopy(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy);\n\nint onemklDcopy(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy);\n\nint onemklCcopy(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n                *y, int64_t incy);\n\nint onemklZcopy(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                _Complex *y, int64_t incy);\n\nint onemklHdot(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *y, int64_t incy,\n               short *result);\n\nint onemklSdot(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy,\n               float *result);\n\nint onemklDdot(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy,\n               double *result);\n\nint onemklSsdsdot(syclQueue_t device_queue, int64_t n, float *sb, float *x, int64_t incx, float *y,\n                  int64_t incy, float *result);\n\nint onemklHnrm2(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *result);\n\nint onemklSnrm2(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *result);\n\nint onemklDnrm2(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *result);\n\nint onemklCnrm2(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float *result);\n\nint onemklZnrm2(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                *result);\n\nint onemklHrot(syclQueue_t device_queue, int64_t n, short *x, int64_t incx, short *y, int64_t incy,\n               short *c, short *s);\n\nint onemklSrot(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy,\n               float *c, float *s);\n\nint onemklDrot(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy,\n               double *c, double *s);\n\nint onemklCSrot(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n                *y, int64_t incy, float *c, float *s);\n\nint onemklCrot(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n               *y, int64_t incy, float *c, float _Complex *s);\n\nint onemklZDrot(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                _Complex *y, int64_t incy, double *c, double *s);\n\nint onemklZrot(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double _Complex\n               *y, int64_t incy, double *c, double _Complex *s);\n\nint onemklSrotg(syclQueue_t device_queue, float *a, float *b, float *c, float *s);\n\nint onemklDrotg(syclQueue_t device_queue, double *a, double *b, double *c, double *s);\n\nint onemklCrotg(syclQueue_t device_queue, float _Complex *a, float _Complex *b, float *c, float\n                _Complex *s);\n\nint onemklZrotg(syclQueue_t device_queue, double _Complex *a, double _Complex *b, double *c, double\n                _Complex *s);\n\nint onemklSrotm(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy,\n                float *param);\n\nint onemklDrotm(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy,\n                double *param);\n\nint onemklSrotmg(syclQueue_t device_queue, float *d1, float *d2, float *x1, float *y1, float *param);\n\nint onemklDrotmg(syclQueue_t device_queue, double *d1, double *d2, double *x1, double *y1, double\n                 *param);\n\nint onemklHscal(syclQueue_t device_queue, int64_t n, short *alpha, short *x, int64_t incx);\n\nint onemklSscal(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t incx);\n\nint onemklDscal(syclQueue_t device_queue, int64_t n, double *alpha, double *x, int64_t incx);\n\nint onemklCSscal(syclQueue_t device_queue, int64_t n, float *alpha, float _Complex *x, int64_t incx);\n\nint onemklZDscal(syclQueue_t device_queue, int64_t n, double *alpha, double _Complex *x, int64_t\n                 incx);\n\nint onemklCscal(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float _Complex *x,\n                int64_t incx);\n\nint onemklZscal(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double _Complex *x,\n                int64_t incx);\n\nint onemklSswap(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, float *y, int64_t incy);\n\nint onemklDswap(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, double *y, int64_t incy);\n\nint onemklCswap(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx, float _Complex\n                *y, int64_t incy);\n\nint onemklZswap(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t incx, double\n                _Complex *y, int64_t incy);\n\nint onemklHgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose\n                              transb, int64_t m, int64_t n, int64_t k, short *alpha, short *a,\n                              int64_t lda, int64_t stride_a, short *b, int64_t ldb, int64_t\n                              stride_b, short *beta, short *c, int64_t ldc, int64_t stride_c,\n                              int64_t batch_size);\n\nint onemklSgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose\n                              transb, int64_t m, int64_t n, int64_t k, float *alpha, float *a,\n                              int64_t lda, int64_t stride_a, float *b, int64_t ldb, int64_t\n                              stride_b, float *beta, float *c, int64_t ldc, int64_t stride_c,\n                              int64_t batch_size);\n\nint onemklDgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose\n                              transb, int64_t m, int64_t n, int64_t k, double *alpha, double *a,\n                              int64_t lda, int64_t stride_a, double *b, int64_t ldb, int64_t\n                              stride_b, double *beta, double *c, int64_t ldc, int64_t stride_c,\n                              int64_t batch_size);\n\nint onemklCgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose\n                              transb, int64_t m, int64_t n, int64_t k, float _Complex *alpha, float\n                              _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b,\n                              int64_t ldb, int64_t stride_b, float _Complex *beta, float _Complex\n                              *c, int64_t ldc, int64_t stride_c, int64_t batch_size);\n\nint onemklZgemm_batch_strided(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose\n                              transb, int64_t m, int64_t n, int64_t k, double _Complex *alpha,\n                              double _Complex *a, int64_t lda, int64_t stride_a, double _Complex\n                              *b, int64_t ldb, int64_t stride_b, double _Complex *beta, double\n                              _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size);\n\nint onemklSsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose\n                              trans, int64_t n, int64_t k, float *alpha, float *a, int64_t lda,\n                              int64_t stride_a, float *beta, float *c, int64_t ldc, int64_t\n                              stride_c, int64_t batch_size);\n\nint onemklDsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose\n                              trans, int64_t n, int64_t k, double *alpha, double *a, int64_t lda,\n                              int64_t stride_a, double *beta, double *c, int64_t ldc, int64_t\n                              stride_c, int64_t batch_size);\n\nint onemklCsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose\n                              trans, int64_t n, int64_t k, float _Complex *alpha, float _Complex *a,\n                              int64_t lda, int64_t stride_a, float _Complex *beta, float _Complex\n                              *c, int64_t ldc, int64_t stride_c, int64_t batch_size);\n\nint onemklZsyrk_batch_strided(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose\n                              trans, int64_t n, int64_t k, double _Complex *alpha, double _Complex\n                              *a, int64_t lda, int64_t stride_a, double _Complex *beta, double\n                              _Complex *c, int64_t ldc, int64_t stride_c, int64_t batch_size);\n\nint onemklStrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo\n                              upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t\n                              m, int64_t n, float *alpha, float *a, int64_t lda, int64_t stride_a,\n                              float *b, int64_t ldb, int64_t stride_b, int64_t batch_size);\n\nint onemklDtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo\n                              upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t\n                              m, int64_t n, double *alpha, double *a, int64_t lda, int64_t stride_a,\n                              double *b, int64_t ldb, int64_t stride_b, int64_t batch_size);\n\nint onemklCtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo\n                              upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t\n                              m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda,\n                              int64_t stride_a, float _Complex *b, int64_t ldb, int64_t stride_b,\n                              int64_t batch_size);\n\nint onemklZtrsm_batch_strided(syclQueue_t device_queue, onemklSide left_right, onemklUplo\n                              upper_lower, onemklTranspose trans, onemklDiag unit_diag, int64_t\n                              m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda,\n                              int64_t stride_a, double _Complex *b, int64_t ldb, int64_t stride_b,\n                              int64_t batch_size);\n\nint onemklSgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, float *alpha, float *a, int64_t lda, int64_t stridea, float *x,\n                              int64_t incx, int64_t stridex, float *beta, float *y, int64_t incy,\n                              int64_t stridey, int64_t batch_size);\n\nint onemklDgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, double *alpha, double *a, int64_t lda, int64_t stridea, double *x,\n                              int64_t incx, int64_t stridex, double *beta, double *y, int64_t incy,\n                              int64_t stridey, int64_t batch_size);\n\nint onemklCgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, float _Complex *alpha, float _Complex *a, int64_t lda, int64_t\n                              stridea, float _Complex *x, int64_t incx, int64_t stridex, float\n                              _Complex *beta, float _Complex *y, int64_t incy, int64_t stridey,\n                              int64_t batch_size);\n\nint onemklZgemv_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, double _Complex *alpha, double _Complex *a, int64_t lda, int64_t\n                              stridea, double _Complex *x, int64_t incx, int64_t stridex, double\n                              _Complex *beta, double _Complex *y, int64_t incy, int64_t stridey,\n                              int64_t batch_size);\n\nint onemklSdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t\n                              n, float *a, int64_t lda, int64_t stridea, float *x, int64_t incx,\n                              int64_t stridex, float *c, int64_t ldc, int64_t stridec, int64_t\n                              batch_size);\n\nint onemklDdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t\n                              n, double *a, int64_t lda, int64_t stridea, double *x, int64_t incx,\n                              int64_t stridex, double *c, int64_t ldc, int64_t stridec, int64_t\n                              batch_size);\n\nint onemklCdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t\n                              n, float _Complex *a, int64_t lda, int64_t stridea, float _Complex *x,\n                              int64_t incx, int64_t stridex, float _Complex *c, int64_t ldc,\n                              int64_t stridec, int64_t batch_size);\n\nint onemklZdgmm_batch_strided(syclQueue_t device_queue, onemklSide left_right, int64_t m, int64_t\n                              n, double _Complex *a, int64_t lda, int64_t stridea, double _Complex\n                              *x, int64_t incx, int64_t stridex, double _Complex *c, int64_t ldc,\n                              int64_t stridec, int64_t batch_size);\n\nint onemklSaxpy_batch_strided(syclQueue_t device_queue, int64_t n, float *alpha, float *x, int64_t\n                              incx, int64_t stridex, float *y, int64_t incy, int64_t stridey,\n                              int64_t batch_size);\n\nint onemklDaxpy_batch_strided(syclQueue_t device_queue, int64_t n, double *alpha, double *x,\n                              int64_t incx, int64_t stridex, double *y, int64_t incy, int64_t\n                              stridey, int64_t batch_size);\n\nint onemklCaxpy_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *alpha, float\n                              _Complex *x, int64_t incx, int64_t stridex, float _Complex *y,\n                              int64_t incy, int64_t stridey, int64_t batch_size);\n\nint onemklZaxpy_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *alpha, double\n                              _Complex *x, int64_t incx, int64_t stridex, double _Complex *y,\n                              int64_t incy, int64_t stridey, int64_t batch_size);\n\nint onemklScopy_batch_strided(syclQueue_t device_queue, int64_t n, float *x, int64_t incx, int64_t\n                              stridex, float *y, int64_t incy, int64_t stridey, int64_t\n                              batch_size);\n\nint onemklDcopy_batch_strided(syclQueue_t device_queue, int64_t n, double *x, int64_t incx, int64_t\n                              stridex, double *y, int64_t incy, int64_t stridey, int64_t\n                              batch_size);\n\nint onemklCcopy_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *x, int64_t incx,\n                              int64_t stridex, float _Complex *y, int64_t incy, int64_t stridey,\n                              int64_t batch_size);\n\nint onemklZcopy_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *x, int64_t\n                              incx, int64_t stridex, double _Complex *y, int64_t incy, int64_t\n                              stridey, int64_t batch_size);\n\nint onemklSgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa,\n                 onemklTranspose transb, int64_t n, int64_t k, float *alpha, float *a, int64_t lda,\n                 float *b, int64_t ldb, float *beta, float *c, int64_t ldc);\n\nint onemklDgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa,\n                 onemklTranspose transb, int64_t n, int64_t k, double *alpha, double *a, int64_t lda,\n                 double *b, int64_t ldb, double *beta, double *c, int64_t ldc);\n\nint onemklCgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa,\n                 onemklTranspose transb, int64_t n, int64_t k, float _Complex *alpha, float _Complex\n                 *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *beta, float _Complex\n                 *c, int64_t ldc);\n\nint onemklZgemmt(syclQueue_t device_queue, onemklUplo upper_lower, onemklTranspose transa,\n                 onemklTranspose transb, int64_t n, int64_t k, double _Complex *alpha, double\n                 _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *beta,\n                 double _Complex *c, int64_t ldc);\n\nint onemklSimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float\n                    *alpha, float *ab, int64_t lda, int64_t ldb);\n\nint onemklDimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                    *alpha, double *ab, int64_t lda, int64_t ldb);\n\nint onemklCimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float\n                    _Complex *alpha, float _Complex *ab, int64_t lda, int64_t ldb);\n\nint onemklZimatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                    _Complex *alpha, double _Complex *ab, int64_t lda, int64_t ldb);\n\nint onemklSomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float\n                    *alpha, float *a, int64_t lda, float *b, int64_t ldb);\n\nint onemklDomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                    *alpha, double *a, int64_t lda, double *b, int64_t ldb);\n\nint onemklComatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, float\n                    _Complex *alpha, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb);\n\nint onemklZomatcopy(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, double\n                    _Complex *alpha, double _Complex *a, int64_t lda, double _Complex *b, int64_t\n                    ldb);\n\nint onemklSomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb,\n                   int64_t m, int64_t n, float *alpha, float *a, int64_t lda, float *beta, float *b,\n                   int64_t ldb, float *c, int64_t ldc);\n\nint onemklDomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb,\n                   int64_t m, int64_t n, double *alpha, double *a, int64_t lda, double *beta, double\n                   *b, int64_t ldb, double *c, int64_t ldc);\n\nint onemklComatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb,\n                   int64_t m, int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda, float\n                   _Complex *beta, float _Complex *b, int64_t ldb, float _Complex *c, int64_t ldc);\n\nint onemklZomatadd(syclQueue_t device_queue, onemklTranspose transa, onemklTranspose transb,\n                   int64_t m, int64_t n, double _Complex *alpha, double _Complex *a, int64_t lda,\n                   double _Complex *beta, double _Complex *b, int64_t ldb, double _Complex *c,\n                   int64_t ldc);\n\nint onemklSimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, float *alpha, float *ab, int64_t lda, int64_t ldb,\n                                  int64_t stride, int64_t batch_size);\n\nint onemklDimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, double *alpha, double *ab, int64_t lda, int64_t ldb,\n                                  int64_t stride, int64_t batch_size);\n\nint onemklCimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, float _Complex *alpha, float _Complex *ab, int64_t\n                                  lda, int64_t ldb, int64_t stride, int64_t batch_size);\n\nint onemklZimatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, double _Complex *alpha, double _Complex *ab, int64_t\n                                  lda, int64_t ldb, int64_t stride, int64_t batch_size);\n\nint onemklSomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, float *alpha, float *a, int64_t lda, int64_t stride_a,\n                                  float *b, int64_t ldb, int64_t stride_b, int64_t batch_size);\n\nint onemklDomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, double *alpha, double *a, int64_t lda, int64_t\n                                  stride_a, double *b, int64_t ldb, int64_t stride_b, int64_t\n                                  batch_size);\n\nint onemklComatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, float _Complex *alpha, float _Complex *a, int64_t lda,\n                                  int64_t stride_a, float _Complex *b, int64_t ldb, int64_t\n                                  stride_b, int64_t batch_size);\n\nint onemklZomatcopy_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                  int64_t n, double _Complex *alpha, double _Complex *a, int64_t\n                                  lda, int64_t stride_a, double _Complex *b, int64_t ldb, int64_t\n                                  stride_b, int64_t batch_size);\n\nint onemklSomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t m, int64_t n, float *alpha, float\n                                 *a, int64_t lda, int64_t stride_a, float *beta, float *b, int64_t\n                                 ldb, int64_t stride_b, float *c, int64_t ldc, int64_t stride_c,\n                                 int64_t batch_size);\n\nint onemklDomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t m, int64_t n, double *alpha,\n                                 double *a, int64_t lda, int64_t stride_a, double *beta, double *b,\n                                 int64_t ldb, int64_t stride_b, double *c, int64_t ldc, int64_t\n                                 stride_c, int64_t batch_size);\n\nint onemklComatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t m, int64_t n, float _Complex\n                                 *alpha, float _Complex *a, int64_t lda, int64_t stride_a, float\n                                 _Complex *beta, float _Complex *b, int64_t ldb, int64_t stride_b,\n                                 float _Complex *c, int64_t ldc, int64_t stride_c, int64_t\n                                 batch_size);\n\nint onemklZomatadd_batch_strided(syclQueue_t device_queue, onemklTranspose transa,\n                                 onemklTranspose transb, int64_t m, int64_t n, double _Complex\n                                 *alpha, double _Complex *a, int64_t lda, int64_t stride_a, double\n                                 _Complex *beta, double _Complex *b, int64_t ldb, int64_t\n                                 stride_b, double _Complex *c, int64_t ldc, int64_t stride_c,\n                                 int64_t batch_size);\n\n// LAPACK\nint onemklSpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklDpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklCpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZpotrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float *a,\n                 int64_t lda, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double *a,\n                 int64_t lda, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, float _Complex\n                 *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZpotrs(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs, double _Complex\n                 *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex *scratchpad,\n                 int64_t scratchpad_size);\n\nint onemklSpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklDpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklCpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZpotri(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklStrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, float *a,\n                 int64_t lda, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, double *a,\n                 int64_t lda, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, float\n                 _Complex *a, int64_t lda, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZtrtri(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag, int64_t n, double\n                 _Complex *a, int64_t lda, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, float *a, int64_t lda, int64_t\n                *ipiv, float *b, int64_t ldb, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, double *a, int64_t lda, int64_t\n                *ipiv, double *b, int64_t ldb, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda,\n                int64_t *ipiv, float _Complex *b, int64_t ldb, float _Complex *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklZgesv(syclQueue_t device_queue, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda,\n                int64_t *ipiv, double _Complex *b, int64_t ldb, double _Complex *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklCgebrd(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float\n                 *d, float *e, float _Complex *tauq, float _Complex *taup, float _Complex\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklDgebrd(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *d,\n                 double *e, double *tauq, double *taup, double *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklSgebrd(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *d, float\n                 *e, float *tauq, float *taup, float *scratchpad, int64_t scratchpad_size);\n\nint onemklZgebrd(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda,\n                 double *d, double *e, double _Complex *tauq, double _Complex *taup, double _Complex\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklCgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float\n                 _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *tau,\n                 double *scratchpad, int64_t scratchpad_size);\n\nint onemklSgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *tau,\n                 float *scratchpad, int64_t scratchpad_size);\n\nint onemklZgeqrf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda,\n                 double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m,\n                 int64_t n, float _Complex *a, int64_t lda, float *s, float _Complex *u, int64_t ldu,\n                 float _Complex *vt, int64_t ldvt, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m,\n                 int64_t n, double _Complex *a, int64_t lda, double *s, double _Complex *u, int64_t\n                 ldu, double _Complex *vt, int64_t ldvt, double _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklDgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m,\n                 int64_t n, double *a, int64_t lda, double *s, double *u, int64_t ldu, double *vt,\n                 int64_t ldvt, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSgesvd(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd jobvt, int64_t m,\n                 int64_t n, float *a, int64_t lda, float *s, float *u, int64_t ldu, float *vt, int64_t\n                 ldvt, float *scratchpad, int64_t scratchpad_size);\n\nint onemklCgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t\n                                m, int64_t n, float _Complex *a, int64_t lda, int64_t stride_a,\n                                float *s, int64_t stride_s, float _Complex *u, int64_t ldu, int64_t\n                                stride_u, float _Complex *vt, int64_t ldvt, int64_t stride_vt,\n                                float *tolerance, float *residual, int64_t batch_size, float\n                                _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t\n                                m, int64_t n, double *a, int64_t lda, int64_t stride_a, double *s,\n                                int64_t stride_s, double *u, int64_t ldu, int64_t stride_u, double\n                                *vt, int64_t ldvt, int64_t stride_vt, double *tolerance, double\n                                *residual, int64_t batch_size, double *scratchpad, int64_t\n                                scratchpad_size);\n\nint onemklSgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t\n                                m, int64_t n, float *a, int64_t lda, int64_t stride_a, float *s,\n                                int64_t stride_s, float *u, int64_t ldu, int64_t stride_u, float\n                                *vt, int64_t ldvt, int64_t stride_vt, float *tolerance, float\n                                *residual, int64_t batch_size, float *scratchpad, int64_t\n                                scratchpad_size);\n\nint onemklZgesvda_batch_strided(syclQueue_t device_queue, int64_t *iparm, int64_t *irank, int64_t\n                                m, int64_t n, double _Complex *a, int64_t lda, int64_t stride_a,\n                                double *s, int64_t stride_s, double _Complex *u, int64_t ldu,\n                                int64_t stride_u, double _Complex *vt, int64_t ldvt, int64_t\n                                stride_vt, double *tolerance, double *residual, int64_t\n                                batch_size, double _Complex *scratchpad, int64_t\n                                scratchpad_size);\n\nint onemklCgetrf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda,\n                 int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, int64_t\n                 *ipiv, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetrf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, int64_t *ipiv,\n                 float *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda,\n                 int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a, int64_t\n                       *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float\n                       _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda,\n                       int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda,\n                       int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a,\n                       int64_t *lda, int64_t **ipiv, int64_t group_count, int64_t *group_sizes,\n                       double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a,\n                               int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv,\n                               int64_t batch_size, float _Complex *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklDgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t\n                               lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t\n                               batch_size, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t\n                               lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t\n                               batch_size, float *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a,\n                               int64_t lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv,\n                               int64_t batch_size, double _Complex *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklCgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda,\n                   float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double\n                   *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float\n                   *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrfnp(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda,\n                   double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a,\n                         int64_t *lda, int64_t group_count, int64_t *group_sizes, float _Complex\n                         *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda,\n                         int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t\n                         scratchpad_size);\n\nint onemklSgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda,\n                         int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t\n                         scratchpad_size);\n\nint onemklZgetrfnp_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a,\n                         int64_t *lda, int64_t group_count, int64_t *group_sizes, double _Complex\n                         *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a,\n                                 int64_t lda, int64_t stride_a, int64_t batch_size, float\n                                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t\n                                 lda, int64_t stride_a, int64_t batch_size, double *scratchpad,\n                                 int64_t scratchpad_size);\n\nint onemklSgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t\n                                 lda, int64_t stride_a, int64_t batch_size, float *scratchpad,\n                                 int64_t scratchpad_size);\n\nint onemklZgetrfnp_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex\n                                 *a, int64_t lda, int64_t stride_a, int64_t batch_size, double\n                                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetri(syclQueue_t device_queue, int64_t n, float _Complex *a, int64_t lda, int64_t *ipiv,\n                 float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetri(syclQueue_t device_queue, int64_t n, double *a, int64_t lda, int64_t *ipiv, double\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetri(syclQueue_t device_queue, int64_t n, float *a, int64_t lda, int64_t *ipiv, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetri(syclQueue_t device_queue, int64_t n, double _Complex *a, int64_t lda, int64_t *ipiv,\n                 double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float\n                 _Complex *a, int64_t lda, int64_t *ipiv, float _Complex *b, int64_t ldb, float\n                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double\n                 *a, int64_t lda, int64_t *ipiv, double *b, int64_t ldb, double *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklSgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, float *a,\n                 int64_t lda, int64_t *ipiv, float *b, int64_t ldb, float *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZgetrs(syclQueue_t device_queue, onemklTranspose trans, int64_t n, int64_t nrhs, double\n                 _Complex *a, int64_t lda, int64_t *ipiv, double _Complex *b, int64_t ldb, double\n                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                               int64_t nrhs, float _Complex *a, int64_t lda, int64_t stride_a,\n                               int64_t *ipiv, int64_t stride_ipiv, float _Complex *b, int64_t ldb,\n                               int64_t stride_b, int64_t batch_size, float _Complex *scratchpad,\n                               int64_t scratchpad_size);\n\nint onemklDgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                               int64_t nrhs, double *a, int64_t lda, int64_t stride_a, int64_t\n                               *ipiv, int64_t stride_ipiv, double *b, int64_t ldb, int64_t\n                               stride_b, int64_t batch_size, double *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklSgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                               int64_t nrhs, float *a, int64_t lda, int64_t stride_a, int64_t\n                               *ipiv, int64_t stride_ipiv, float *b, int64_t ldb, int64_t\n                               stride_b, int64_t batch_size, float *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklZgetrs_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                               int64_t nrhs, double _Complex *a, int64_t lda, int64_t stride_a,\n                               int64_t *ipiv, int64_t stride_ipiv, double _Complex *b, int64_t\n                               ldb, int64_t stride_b, int64_t batch_size, double _Complex\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                 int64_t nrhs, float _Complex *a, int64_t lda, int64_t stride_a,\n                                 float _Complex *b, int64_t ldb, int64_t stride_b, int64_t\n                                 batch_size, float _Complex *scratchpad, int64_t\n                                 scratchpad_size);\n\nint onemklDgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                 int64_t nrhs, double *a, int64_t lda, int64_t stride_a, double *b,\n                                 int64_t ldb, int64_t stride_b, int64_t batch_size, double\n                                 *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                 int64_t nrhs, float *a, int64_t lda, int64_t stride_a, float *b,\n                                 int64_t ldb, int64_t stride_b, int64_t batch_size, float\n                                 *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrsnp_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                 int64_t nrhs, double _Complex *a, int64_t lda, int64_t stride_a,\n                                 double _Complex *b, int64_t ldb, int64_t stride_b, int64_t\n                                 batch_size, double _Complex *scratchpad, int64_t\n                                 scratchpad_size);\n\nint onemklCheev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, float\n                _Complex *a, int64_t lda, float *w, float _Complex *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklZheev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, double\n                _Complex *a, int64_t lda, double *w, double _Complex *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklCheevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, float\n                 _Complex *a, int64_t lda, float *w, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZheevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, double\n                 _Complex *a, int64_t lda, double *w, double _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklCheevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo,\n                 int64_t n, float _Complex *a, int64_t lda, float *vl, float *vu, int64_t il, int64_t\n                 iu, float *abstol, int64_t *m, float *w, float _Complex *z, int64_t ldz, float\n                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZheevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo,\n                 int64_t n, double _Complex *a, int64_t lda, double *vl, double *vu, int64_t il,\n                 int64_t iu, double *abstol, int64_t *m, double *w, double _Complex *z, int64_t ldz,\n                 double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklChegvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t\n                 n, float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float *w, float\n                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZhegvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t\n                 n, double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double *w, double\n                 _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklChegvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range,\n                 onemklUplo uplo, int64_t n, float _Complex *a, int64_t lda, float _Complex *b,\n                 int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m,\n                 float *w, float _Complex *z, int64_t ldz, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZhegvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range,\n                 onemklUplo uplo, int64_t n, double _Complex *a, int64_t lda, double _Complex *b,\n                 int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t\n                 *m, double *w, double _Complex *z, int64_t ldz, double _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklChetrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, float *d, float *e, float _Complex *tau, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZhetrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, double *d, double *e, double _Complex *tau, double _Complex *scratchpad,\n                 int64_t scratchpad_size);\n\nint onemklChetrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZhetrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSorgbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, float\n                 *a, int64_t lda, float *tau, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDorgbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k,\n                 double *a, int64_t lda, double *tau, double *scratchpad, int64_t scratchpad_size);\n\nint onemklDorgqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double *a, int64_t lda,\n                 double *tau, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSorgqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float *a, int64_t lda,\n                 float *tau, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDormqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *c, int64_t ldc,\n                 double *scratchpad, int64_t scratchpad_size);\n\nint onemklSormqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *c, int64_t ldc, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklCsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, float *d, float *e, float\n                 _Complex *z, int64_t ldz, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, double *d, double *e, double\n                 *z, int64_t ldz, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, float *d, float *e, float *z,\n                 int64_t ldz, float *scratchpad, int64_t scratchpad_size);\n\nint onemklZsteqr(syclQueue_t device_queue, onemklCompz compz, int64_t n, double *d, double *e, double\n                 _Complex *z, int64_t ldz, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDsyev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, double *a,\n                int64_t lda, double *w, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSsyev(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo, int64_t n, float *a,\n                int64_t lda, float *w, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDsyevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, double *a,\n                 int64_t lda, double *w, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSsyevd(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo, int64_t n, float *a,\n                 int64_t lda, float *w, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDsyevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo,\n                 int64_t n, double *a, int64_t lda, double *vl, double *vu, int64_t il, int64_t iu,\n                 double *abstol, int64_t *m, double *w, double *z, int64_t ldz, double *scratchpad,\n                 int64_t scratchpad_size);\n\nint onemklSsyevx(syclQueue_t device_queue, onemklCompz jobz, onemklRangev range, onemklUplo uplo,\n                 int64_t n, float *a, int64_t lda, float *vl, float *vu, int64_t il, int64_t iu, float\n                 *abstol, int64_t *m, float *w, float *z, int64_t ldz, float *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklDsygvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t\n                 n, double *a, int64_t lda, double *b, int64_t ldb, double *w, double *scratchpad,\n                 int64_t scratchpad_size);\n\nint onemklSsygvd(syclQueue_t device_queue, int64_t itype, onemklJob jobz, onemklUplo uplo, int64_t\n                 n, float *a, int64_t lda, float *b, int64_t ldb, float *w, float *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklDsygvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range,\n                 onemklUplo uplo, int64_t n, double *a, int64_t lda, double *b, int64_t ldb, double\n                 *vl, double *vu, int64_t il, int64_t iu, double *abstol, int64_t *m, double *w, double\n                 *z, int64_t ldz, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSsygvx(syclQueue_t device_queue, int64_t itype, onemklCompz jobz, onemklRangev range,\n                 onemklUplo uplo, int64_t n, float *a, int64_t lda, float *b, int64_t ldb, float *vl,\n                 float *vu, int64_t il, int64_t iu, float *abstol, int64_t *m, float *w, float *z,\n                 int64_t ldz, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDsytrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double\n                 *d, double *e, double *tau, double *scratchpad, int64_t scratchpad_size);\n\nint onemklSsytrd(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float\n                 *d, float *e, float *tau, float *scratchpad, int64_t scratchpad_size);\n\nint onemklCtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag\n                 diag, int64_t n, int64_t nrhs, float _Complex *a, int64_t lda, float _Complex *b,\n                 int64_t ldb, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklDtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag\n                 diag, int64_t n, int64_t nrhs, double *a, int64_t lda, double *b, int64_t ldb, double\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklStrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag\n                 diag, int64_t n, int64_t nrhs, float *a, int64_t lda, float *b, int64_t ldb, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklZtrtrs(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose trans, onemklDiag\n                 diag, int64_t n, int64_t nrhs, double _Complex *a, int64_t lda, double _Complex *b,\n                 int64_t ldb, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklCungbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k, float\n                 _Complex *a, int64_t lda, float _Complex *tau, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZungbr(syclQueue_t device_queue, onemklGenerate vec, int64_t m, int64_t n, int64_t k,\n                 double _Complex *a, int64_t lda, double _Complex *tau, double _Complex *scratchpad,\n                 int64_t scratchpad_size);\n\nint onemklCungqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float _Complex *a, int64_t\n                 lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZungqr(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double _Complex *a,\n                 int64_t lda, double _Complex *tau, double _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklCunmqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float\n                 _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZunmqr(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double\n                 _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSgerqf(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t lda, float *tau,\n                 float *scratchpad, int64_t scratchpad_size);\n\nint onemklDgerqf(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t lda, double *tau,\n                 double *scratchpad, int64_t scratchpad_size);\n\nint onemklCgerqf(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a, int64_t lda, float\n                 _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZgerqf(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a, int64_t lda,\n                 double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSormrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, float *a, int64_t lda, float *tau, float *c, int64_t ldc, float\n                 *scratchpad, int64_t scratchpad_size);\n\nint onemklDormrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, double *a, int64_t lda, double *tau, double *c, int64_t ldc,\n                 double *scratchpad, int64_t scratchpad_size);\n\nint onemklCunmrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, float _Complex *a, int64_t lda, float _Complex *tau, float\n                 _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZunmrq(syclQueue_t device_queue, onemklSide side, onemklTranspose trans, int64_t m,\n                 int64_t n, int64_t k, double _Complex *a, int64_t lda, double _Complex *tau, double\n                 _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, int64_t\n                 *ipiv, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda,\n                 int64_t *ipiv, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, int64_t *ipiv, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZsytrf(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, int64_t *ipiv, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSorgtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a, int64_t lda, float\n                 *tau, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDorgtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a, int64_t lda, double\n                 *tau, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCungtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float _Complex *a, int64_t\n                 lda, float _Complex *tau, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZungtr(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double _Complex *a, int64_t\n                 lda, double _Complex *tau, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSormtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose\n                 trans, int64_t m, int64_t n, float *a, int64_t lda, float *tau, float *c, int64_t ldc,\n                 float *scratchpad, int64_t scratchpad_size);\n\nint onemklDormtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose\n                 trans, int64_t m, int64_t n, double *a, int64_t lda, double *tau, double *c, int64_t\n                 ldc, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCunmtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose\n                 trans, int64_t m, int64_t n, float _Complex *a, int64_t lda, float _Complex *tau,\n                 float _Complex *c, int64_t ldc, float _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklZunmtr(syclQueue_t device_queue, onemklSide side, onemklUplo uplo, onemklTranspose\n                 trans, int64_t m, int64_t n, double _Complex *a, int64_t lda, double _Complex *tau,\n                 double _Complex *c, int64_t ldc, double _Complex *scratchpad, int64_t\n                 scratchpad_size);\n\nint onemklSgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs,\n                float *a, int64_t lda, float *b, int64_t ldb, float *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklDgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs,\n                double *a, int64_t lda, double *b, int64_t ldb, double *scratchpad, int64_t\n                scratchpad_size);\n\nint onemklCgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs,\n                float _Complex *a, int64_t lda, float _Complex *b, int64_t ldb, float _Complex\n                *scratchpad, int64_t scratchpad_size);\n\nint onemklZgels(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t n, int64_t nrhs,\n                double _Complex *a, int64_t lda, double _Complex *b, int64_t ldb, double _Complex\n                *scratchpad, int64_t scratchpad_size);\n\nint onemklSpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, float **a, int64_t\n                       *lda, int64_t group_count, int64_t *group_sizes, float *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklDpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, double **a, int64_t\n                       *lda, int64_t group_count, int64_t *group_sizes, double *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklCpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, float _Complex **a,\n                       int64_t *lda, int64_t group_count, int64_t *group_sizes, float _Complex\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklZpotrf_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, double _Complex **a,\n                       int64_t *lda, int64_t group_count, int64_t *group_sizes, double _Complex\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklSpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, float\n                       **a, int64_t *lda, float **b, int64_t *ldb, int64_t group_count, int64_t\n                       *group_sizes, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs,\n                       double **a, int64_t *lda, double **b, int64_t *ldb, int64_t group_count,\n                       int64_t *group_sizes, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs, float\n                       _Complex **a, int64_t *lda, float _Complex **b, int64_t *ldb, int64_t\n                       group_count, int64_t *group_sizes, float _Complex *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklZpotrs_batch(syclQueue_t device_queue, onemklUplo *uplo, int64_t *n, int64_t *nrhs,\n                       double _Complex **a, int64_t *lda, double _Complex **b, int64_t *ldb, int64_t\n                       group_count, int64_t *group_sizes, double _Complex *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklSgeinv_batch(syclQueue_t device_queue, int64_t *n, float **a, int64_t *lda, int64_t\n                       group_count, int64_t *group_sizes, float *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklDgeinv_batch(syclQueue_t device_queue, int64_t *n, double **a, int64_t *lda, int64_t\n                       group_count, int64_t *group_sizes, double *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklCgeinv_batch(syclQueue_t device_queue, int64_t *n, float _Complex **a, int64_t *lda,\n                       int64_t group_count, int64_t *group_sizes, float _Complex *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklZgeinv_batch(syclQueue_t device_queue, int64_t *n, double _Complex **a, int64_t *lda,\n                       int64_t group_count, int64_t *group_sizes, double _Complex *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklSgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t\n                       *nrhs, float **a, int64_t *lda, int64_t **ipiv, float **b, int64_t *ldb,\n                       int64_t group_count, int64_t *group_sizes, float *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklDgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t\n                       *nrhs, double **a, int64_t *lda, int64_t **ipiv, double **b, int64_t *ldb,\n                       int64_t group_count, int64_t *group_sizes, double *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklCgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t\n                       *nrhs, float _Complex **a, int64_t *lda, int64_t **ipiv, float _Complex **b,\n                       int64_t *ldb, int64_t group_count, int64_t *group_sizes, float _Complex\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetrs_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *n, int64_t\n                       *nrhs, double _Complex **a, int64_t *lda, int64_t **ipiv, double _Complex\n                       **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double\n                       _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetri_batch(syclQueue_t device_queue, int64_t *n, float **a, int64_t *lda, int64_t\n                       **ipiv, int64_t group_count, int64_t *group_sizes, float *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklDgetri_batch(syclQueue_t device_queue, int64_t *n, double **a, int64_t *lda, int64_t\n                       **ipiv, int64_t group_count, int64_t *group_sizes, double *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklCgetri_batch(syclQueue_t device_queue, int64_t *n, float _Complex **a, int64_t *lda,\n                       int64_t **ipiv, int64_t group_count, int64_t *group_sizes, float _Complex\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetri_batch(syclQueue_t device_queue, int64_t *n, double _Complex **a, int64_t *lda,\n                       int64_t **ipiv, int64_t group_count, int64_t *group_sizes, double _Complex\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklSgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float **a, int64_t *lda,\n                       float **tau, int64_t group_count, int64_t *group_sizes, float *scratchpad,\n                       int64_t scratchpad_size);\n\nint onemklDgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double **a, int64_t *lda,\n                       double **tau, int64_t group_count, int64_t *group_sizes, double\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklCgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, float _Complex **a, int64_t\n                       *lda, float _Complex **tau, int64_t group_count, int64_t *group_sizes,\n                       float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZgeqrf_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, double _Complex **a,\n                       int64_t *lda, double _Complex **tau, int64_t group_count, int64_t\n                       *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSorgqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, float **a,\n                       int64_t *lda, float **tau, int64_t group_count, int64_t *group_sizes, float\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklDorgqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, double **a,\n                       int64_t *lda, double **tau, int64_t group_count, int64_t *group_sizes,\n                       double *scratchpad, int64_t scratchpad_size);\n\nint onemklCungqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, float _Complex\n                       **a, int64_t *lda, float _Complex **tau, int64_t group_count, int64_t\n                       *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZungqr_batch(syclQueue_t device_queue, int64_t *m, int64_t *n, int64_t *k, double _Complex\n                       **a, int64_t *lda, double _Complex **tau, int64_t group_count, int64_t\n                       *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSormqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans,\n                       int64_t *m, int64_t *n, int64_t *k, float **a, int64_t *lda, float **tau, float\n                       **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, float\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklDormqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans,\n                       int64_t *m, int64_t *n, int64_t *k, double **a, int64_t *lda, double **tau,\n                       double **c, int64_t *ldc, int64_t group_count, int64_t *group_sizes, double\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklCunmqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans,\n                       int64_t *m, int64_t *n, int64_t *k, float _Complex **a, int64_t *lda, float\n                       _Complex **tau, float _Complex **c, int64_t *ldc, int64_t group_count,\n                       int64_t *group_sizes, float _Complex *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklZunmqr_batch(syclQueue_t device_queue, onemklSide *side, onemklTranspose *trans,\n                       int64_t *m, int64_t *n, int64_t *k, double _Complex **a, int64_t *lda, double\n                       _Complex **tau, double _Complex **c, int64_t *ldc, int64_t group_count,\n                       int64_t *group_sizes, double _Complex *scratchpad, int64_t\n                       scratchpad_size);\n\nint onemklStrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans,\n                       onemklDiag *diag, int64_t *n, int64_t *nrhs, float **a, int64_t *lda, float\n                       **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, float\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklDtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans,\n                       onemklDiag *diag, int64_t *n, int64_t *nrhs, double **a, int64_t *lda, double\n                       **b, int64_t *ldb, int64_t group_count, int64_t *group_sizes, double\n                       *scratchpad, int64_t scratchpad_size);\n\nint onemklCtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans,\n                       onemklDiag *diag, int64_t *n, int64_t *nrhs, float _Complex **a, int64_t\n                       *lda, float _Complex **b, int64_t *ldb, int64_t group_count, int64_t\n                       *group_sizes, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZtrtrs_batch(syclQueue_t device_queue, onemklUplo *uplo, onemklTranspose *trans,\n                       onemklDiag *diag, int64_t *n, int64_t *nrhs, double _Complex **a, int64_t\n                       *lda, double _Complex **b, int64_t *ldb, int64_t group_count, int64_t\n                       *group_sizes, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n,\n                      int64_t *nrhs, float **a, int64_t *lda, float **b, int64_t *ldb, int64_t\n                      group_count, int64_t *group_sizes, float *scratchpad, int64_t\n                      scratchpad_size);\n\nint onemklDgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n,\n                      int64_t *nrhs, double **a, int64_t *lda, double **b, int64_t *ldb, int64_t\n                      group_count, int64_t *group_sizes, double *scratchpad, int64_t\n                      scratchpad_size);\n\nint onemklCgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n,\n                      int64_t *nrhs, float _Complex **a, int64_t *lda,float _Complex **b, int64_t\n                      *ldb, int64_t group_count, int64_t *group_sizes, float _Complex\n                      *scratchpad, int64_t scratchpad_size);\n\nint onemklZgels_batch(syclQueue_t device_queue, onemklTranspose *trans, int64_t *m, int64_t *n,\n                      int64_t *nrhs, double _Complex **a, int64_t *lda, double _Complex **b, int64_t\n                      *ldb, int64_t group_count, int64_t *group_sizes, double _Complex\n                      *scratchpad, int64_t scratchpad_size);\n\nint onemklSpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float *a,\n                               int64_t lda, int64_t stride_a, int64_t batch_size, float\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklDpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double *a,\n                               int64_t lda, int64_t stride_a, int64_t batch_size, double\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklCpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, float\n                               _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size,\n                               float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZpotrf_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, double\n                               _Complex *a, int64_t lda, int64_t stride_a, int64_t batch_size,\n                               double _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs,\n                               float *a, int64_t lda, int64_t stride_a, float *b, int64_t ldb,\n                               int64_t stride_b, int64_t batch_size, float *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklDpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs,\n                               double *a, int64_t lda, int64_t stride_a, double *b, int64_t ldb,\n                               int64_t stride_b, int64_t batch_size, double *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklCpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs,\n                               float _Complex *a, int64_t lda, int64_t stride_a, float _Complex *b,\n                               int64_t ldb, int64_t stride_b, int64_t batch_size, float _Complex\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklZpotrs_batch_strided(syclQueue_t device_queue, onemklUplo uplo, int64_t n, int64_t nrhs,\n                               double _Complex *a, int64_t lda, int64_t stride_a, double _Complex\n                               *b, int64_t ldb, int64_t stride_b, int64_t batch_size, double\n                               _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklSgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float *a, int64_t\n                               lda, int64_t stride_a, float *tau, int64_t stride_tau, int64_t\n                               batch_size, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double *a, int64_t\n                               lda, int64_t stride_a, double *tau, int64_t stride_tau, int64_t\n                               batch_size, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, float _Complex *a,\n                               int64_t lda, int64_t stride_a, float _Complex *tau, int64_t\n                               stride_tau, int64_t batch_size, float _Complex *scratchpad,\n                               int64_t scratchpad_size);\n\nint onemklZgeqrf_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, double _Complex *a,\n                               int64_t lda, int64_t stride_a, double _Complex *tau, int64_t\n                               stride_tau, int64_t batch_size, double _Complex *scratchpad,\n                               int64_t scratchpad_size);\n\nint onemklSorgqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float *a,\n                               int64_t lda, int64_t stride_a, float *tau, int64_t stride_tau,\n                               int64_t batch_size, float *scratchpad, int64_t scratchpad_size);\n\nint onemklDorgqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double *a,\n                               int64_t lda, int64_t stride_a, double *tau, int64_t stride_tau,\n                               int64_t batch_size, double *scratchpad, int64_t scratchpad_size);\n\nint onemklCungqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, float\n                               _Complex *a, int64_t lda, int64_t stride_a, float _Complex *tau,\n                               int64_t stride_tau, int64_t batch_size, float _Complex\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklZungqr_batch_strided(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k, double\n                               _Complex *a, int64_t lda, int64_t stride_a, double _Complex *tau,\n                               int64_t stride_tau, int64_t batch_size, double _Complex\n                               *scratchpad, int64_t scratchpad_size);\n\nint onemklSgetri_batch_strided(syclQueue_t device_queue, int64_t n, float *a, int64_t lda, int64_t\n                               stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size,\n                               float *scratchpad, int64_t scratchpad_size);\n\nint onemklDgetri_batch_strided(syclQueue_t device_queue, int64_t n, double *a, int64_t lda, int64_t\n                               stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t batch_size,\n                               double *scratchpad, int64_t scratchpad_size);\n\nint onemklCgetri_batch_strided(syclQueue_t device_queue, int64_t n, float _Complex *a, int64_t lda,\n                               int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t\n                               batch_size, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZgetri_batch_strided(syclQueue_t device_queue, int64_t n, double _Complex *a, int64_t\n                               lda, int64_t stride_a, int64_t *ipiv, int64_t stride_ipiv, int64_t\n                               batch_size, double _Complex *scratchpad, int64_t\n                               scratchpad_size);\n\nint onemklSgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, int64_t nrhs, float *_a, int64_t lda, int64_t stride_a, float *_b,\n                              int64_t ldb, int64_t stride_b, int64_t batch_size, float\n                              *scratchpad, int64_t scratchpad_size);\n\nint onemklDgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, int64_t nrhs, double *_a, int64_t lda, int64_t stride_a, double\n                              *_b, int64_t ldb, int64_t stride_b, int64_t batch_size, double\n                              *scratchpad, int64_t scratchpad_size);\n\nint onemklCgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, int64_t nrhs, float _Complex *_a, int64_t lda, int64_t stride_a,\n                              float _Complex *_b, int64_t ldb, int64_t stride_b, int64_t\n                              batch_size, float _Complex *scratchpad, int64_t scratchpad_size);\n\nint onemklZgels_batch_strided(syclQueue_t device_queue, onemklTranspose trans, int64_t m, int64_t\n                              n, int64_t nrhs, double _Complex *_a, int64_t lda, int64_t stride_a,\n                              double _Complex *_b, int64_t ldb, int64_t stride_b, int64_t\n                              batch_size, double _Complex *scratchpad, int64_t scratchpad_size);\n\nint64_t onemklSgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklDgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklCgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklZgebrd_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklSgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                    int64_t n, int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklDgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                    int64_t n, int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklCgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                    int64_t n, int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklZgels_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t m,\n                                    int64_t n, int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklSgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklDgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklCgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklZgeqrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklSgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklDgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklCgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklZgerqf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklSgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t\n                                    lda, int64_t ldb);\n\nint64_t onemklDgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t\n                                    lda, int64_t ldb);\n\nint64_t onemklCgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t\n                                    lda, int64_t ldb);\n\nint64_t onemklZgesv_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t nrhs, int64_t\n                                    lda, int64_t ldb);\n\nint64_t onemklSgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd\n                                     jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t\n                                     ldvt);\n\nint64_t onemklDgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd\n                                     jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t\n                                     ldvt);\n\nint64_t onemklCgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd\n                                     jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t\n                                     ldvt);\n\nint64_t onemklZgesvd_scratchpad_size(syclQueue_t device_queue, onemklJobsvd jobu, onemklJobsvd\n                                     jobvt, int64_t m, int64_t n, int64_t lda, int64_t ldu, int64_t\n                                     ldvt);\n\nint64_t onemklSgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklDgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklCgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklZgetrf_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t lda);\n\nint64_t onemklSgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t\n                                       lda);\n\nint64_t onemklDgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t\n                                       lda);\n\nint64_t onemklCgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t\n                                       lda);\n\nint64_t onemklZgetrfnp_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t\n                                       lda);\n\nint64_t onemklSgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda);\n\nint64_t onemklDgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda);\n\nint64_t onemklCgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda);\n\nint64_t onemklZgetri_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t lda);\n\nint64_t onemklSgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklDgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklCgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklZgetrs_scratchpad_size(syclQueue_t device_queue, onemklTranspose trans, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklCheev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo,\n                                    int64_t n, int64_t lda);\n\nint64_t onemklZheev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo,\n                                    int64_t n, int64_t lda);\n\nint64_t onemklCheevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklZheevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklCheevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev\n                                     range, onemklUplo uplo, int64_t n, int64_t lda, float *vl,\n                                     float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz);\n\nint64_t onemklZheevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev\n                                     range, onemklUplo uplo, int64_t n, int64_t lda, double *vl,\n                                     double *vu, int64_t il, int64_t iu, double *abstol, int64_t\n                                     ldz);\n\nint64_t onemklChegvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz,\n                                     onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb);\n\nint64_t onemklZhegvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz,\n                                     onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb);\n\nint64_t onemklChegvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz,\n                                     onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda,\n                                     int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu,\n                                     float *abstol, int64_t ldz);\n\nint64_t onemklZhegvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz,\n                                     onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda,\n                                     int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu,\n                                     double *abstol, int64_t ldz);\n\nint64_t onemklChetrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZhetrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklChetrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZhetrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklSorgbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m,\n                                     int64_t n, int64_t k, int64_t lda);\n\nint64_t onemklDorgbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m,\n                                     int64_t n, int64_t k, int64_t lda);\n\nint64_t onemklSorgqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k,\n                                     int64_t lda);\n\nint64_t onemklDorgqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k,\n                                     int64_t lda);\n\nint64_t onemklSorgtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklDorgtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklSormqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklDormqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklSormrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklDormrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklSormtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo,\n                                     onemklTranspose trans, int64_t m, int64_t n, int64_t lda,\n                                     int64_t ldc);\n\nint64_t onemklDormtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo,\n                                     onemklTranspose trans, int64_t m, int64_t n, int64_t lda,\n                                     int64_t ldc);\n\nint64_t onemklSpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklDpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklCpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZpotrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklSpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklDpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklCpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZpotri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklSpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklDpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklCpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklZpotrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t nrhs, int64_t lda, int64_t ldb);\n\nint64_t onemklSsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n,\n                                     int64_t ldz);\n\nint64_t onemklDsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n,\n                                     int64_t ldz);\n\nint64_t onemklCsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n,\n                                     int64_t ldz);\n\nint64_t onemklZsteqr_scratchpad_size(syclQueue_t device_queue, onemklCompz compz, int64_t n,\n                                     int64_t ldz);\n\nint64_t onemklSsyev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo,\n                                    int64_t n, int64_t lda);\n\nint64_t onemklDsyev_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklUplo uplo,\n                                    int64_t n, int64_t lda);\n\nint64_t onemklSsyevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklDsyevd_scratchpad_size(syclQueue_t device_queue, onemklJob jobz, onemklUplo uplo,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklSsyevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev\n                                     range, onemklUplo uplo, int64_t n, int64_t lda, float *vl,\n                                     float *vu, int64_t il, int64_t iu, float *abstol, int64_t ldz);\n\nint64_t onemklDsyevx_scratchpad_size(syclQueue_t device_queue, onemklCompz jobz, onemklRangev\n                                     range, onemklUplo uplo, int64_t n, int64_t lda, double *vl,\n                                     double *vu, int64_t il, int64_t iu, double *abstol, int64_t\n                                     ldz);\n\nint64_t onemklSsygvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz,\n                                     onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb);\n\nint64_t onemklDsygvd_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklJob jobz,\n                                     onemklUplo uplo, int64_t n, int64_t lda, int64_t ldb);\n\nint64_t onemklSsygvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz,\n                                     onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda,\n                                     int64_t ldb, float *vl, float *vu, int64_t il, int64_t iu,\n                                     float *abstol, int64_t ldz);\n\nint64_t onemklDsygvx_scratchpad_size(syclQueue_t device_queue, int64_t itype, onemklCompz jobz,\n                                     onemklRangev range, onemklUplo uplo, int64_t n, int64_t lda,\n                                     int64_t ldb, double *vl, double *vu, int64_t il, int64_t iu,\n                                     double *abstol, int64_t ldz);\n\nint64_t onemklSsytrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklDsytrd_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklSsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklDsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklCsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZsytrf_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklStrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklDtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklCtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklZtrtri_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklDiag diag,\n                                     int64_t n, int64_t lda);\n\nint64_t onemklStrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose\n                                     trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda,\n                                     int64_t ldb);\n\nint64_t onemklDtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose\n                                     trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda,\n                                     int64_t ldb);\n\nint64_t onemklCtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose\n                                     trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda,\n                                     int64_t ldb);\n\nint64_t onemklZtrtrs_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, onemklTranspose\n                                     trans, onemklDiag diag, int64_t n, int64_t nrhs, int64_t lda,\n                                     int64_t ldb);\n\nint64_t onemklCungbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m,\n                                     int64_t n, int64_t k, int64_t lda);\n\nint64_t onemklZungbr_scratchpad_size(syclQueue_t device_queue, onemklGenerate vect, int64_t m,\n                                     int64_t n, int64_t k, int64_t lda);\n\nint64_t onemklCungqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k,\n                                     int64_t lda);\n\nint64_t onemklZungqr_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t n, int64_t k,\n                                     int64_t lda);\n\nint64_t onemklCungtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklZungtr_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo, int64_t n,\n                                     int64_t lda);\n\nint64_t onemklCunmqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklZunmqr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklCunmrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklZunmrq_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklTranspose\n                                     trans, int64_t m, int64_t n, int64_t k, int64_t lda, int64_t\n                                     ldc);\n\nint64_t onemklCunmtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo,\n                                     onemklTranspose trans, int64_t m, int64_t n, int64_t lda,\n                                     int64_t ldc);\n\nint64_t onemklZunmtr_scratchpad_size(syclQueue_t device_queue, onemklSide side, onemklUplo uplo,\n                                     onemklTranspose trans, int64_t m, int64_t n, int64_t lda,\n                                     int64_t ldc);\n\nint64_t onemklSgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklDgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklCgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklZgeinv_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklSgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                          int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda,\n                                          int64_t* ldb, int64_t group_count, int64_t*\n                                          group_sizes);\n\nint64_t onemklDgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                          int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda,\n                                          int64_t* ldb, int64_t group_count, int64_t*\n                                          group_sizes);\n\nint64_t onemklCgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                          int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda,\n                                          int64_t* ldb, int64_t group_count, int64_t*\n                                          group_sizes);\n\nint64_t onemklZgels_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                          int64_t* m, int64_t* n, int64_t* nrhs, int64_t* lda,\n                                          int64_t* ldb, int64_t group_count, int64_t*\n                                          group_sizes);\n\nint64_t onemklSgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                  trans, int64_t m, int64_t n, int64_t nrhs,\n                                                  int64_t lda, int64_t stride_a, int64_t ldb,\n                                                  int64_t stride_b, int64_t batch_size);\n\nint64_t onemklDgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                  trans, int64_t m, int64_t n, int64_t nrhs,\n                                                  int64_t lda, int64_t stride_a, int64_t ldb,\n                                                  int64_t stride_b, int64_t batch_size);\n\nint64_t onemklCgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                  trans, int64_t m, int64_t n, int64_t nrhs,\n                                                  int64_t lda, int64_t stride_a, int64_t ldb,\n                                                  int64_t stride_b, int64_t batch_size);\n\nint64_t onemklZgels_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                  trans, int64_t m, int64_t n, int64_t nrhs,\n                                                  int64_t lda, int64_t stride_a, int64_t ldb,\n                                                  int64_t stride_b, int64_t batch_size);\n\nint64_t onemklSgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklDgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklCgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklZgeqrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklSgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_tau, int64_t batch_size);\n\nint64_t onemklDgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_tau, int64_t batch_size);\n\nint64_t onemklCgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_tau, int64_t batch_size);\n\nint64_t onemklZgeqrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_tau, int64_t batch_size);\n\nint64_t onemklSgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                    int64_t n, int64_t lda, int64_t stride_a,\n                                                    int64_t stride_s, int64_t ldu, int64_t\n                                                    stride_u, int64_t ldvt, int64_t stride_vt,\n                                                    int64_t batch_size);\n\nint64_t onemklDgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                    int64_t n, int64_t lda, int64_t stride_a,\n                                                    int64_t stride_s, int64_t ldu, int64_t\n                                                    stride_u, int64_t ldvt, int64_t stride_vt,\n                                                    int64_t batch_size);\n\nint64_t onemklCgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                    int64_t n, int64_t lda, int64_t stride_a,\n                                                    int64_t stride_s, int64_t ldu, int64_t\n                                                    stride_u, int64_t ldvt, int64_t stride_vt,\n                                                    int64_t batch_size);\n\nint64_t onemklZgesvda_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                    int64_t n, int64_t lda, int64_t stride_a,\n                                                    int64_t stride_s, int64_t ldu, int64_t\n                                                    stride_u, int64_t ldvt, int64_t stride_vt,\n                                                    int64_t batch_size);\n\nint64_t onemklSgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_ipiv, int64_t batch_size);\n\nint64_t onemklDgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_ipiv, int64_t batch_size);\n\nint64_t onemklCgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_ipiv, int64_t batch_size);\n\nint64_t onemklZgetrf_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t lda, int64_t stride_a, int64_t\n                                                   stride_ipiv, int64_t batch_size);\n\nint64_t onemklSgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklDgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklCgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklZgetrf_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklSgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                     int64_t n, int64_t lda, int64_t stride_a,\n                                                     int64_t batch_size);\n\nint64_t onemklDgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                     int64_t n, int64_t lda, int64_t stride_a,\n                                                     int64_t batch_size);\n\nint64_t onemklCgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                     int64_t n, int64_t lda, int64_t stride_a,\n                                                     int64_t batch_size);\n\nint64_t onemklZgetrfnp_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m,\n                                                     int64_t n, int64_t lda, int64_t stride_a,\n                                                     int64_t batch_size);\n\nint64_t onemklSgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                             int64_t* lda, int64_t group_count, int64_t*\n                                             group_sizes);\n\nint64_t onemklDgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                             int64_t* lda, int64_t group_count, int64_t*\n                                             group_sizes);\n\nint64_t onemklCgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                             int64_t* lda, int64_t group_count, int64_t*\n                                             group_sizes);\n\nint64_t onemklZgetrfnp_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                             int64_t* lda, int64_t group_count, int64_t*\n                                             group_sizes);\n\nint64_t onemklSgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklDgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklCgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklZgetri_batch_scratchpad_size(syclQueue_t device_queue, int64_t* n, int64_t* lda,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklSgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t\n                                                   lda, int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t batch_size);\n\nint64_t onemklDgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t\n                                                   lda, int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t batch_size);\n\nint64_t onemklCgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t\n                                                   lda, int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t batch_size);\n\nint64_t onemklZgetri_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t n, int64_t\n                                                   lda, int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t batch_size);\n\nint64_t onemklSgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                           int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklDgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                           int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklCgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                           int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklZgetrs_batch_scratchpad_size(syclQueue_t device_queue, onemklTranspose* trans,\n                                           int64_t* n, int64_t* nrhs, int64_t* lda, int64_t* ldb,\n                                           int64_t group_count, int64_t* group_sizes);\n\nint64_t onemklSgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                   trans, int64_t n, int64_t nrhs, int64_t lda,\n                                                   int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t ldb, int64_t stride_b, int64_t\n                                                   batch_size);\n\nint64_t onemklDgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                   trans, int64_t n, int64_t nrhs, int64_t lda,\n                                                   int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t ldb, int64_t stride_b, int64_t\n                                                   batch_size);\n\nint64_t onemklCgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                   trans, int64_t n, int64_t nrhs, int64_t lda,\n                                                   int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t ldb, int64_t stride_b, int64_t\n                                                   batch_size);\n\nint64_t onemklZgetrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklTranspose\n                                                   trans, int64_t n, int64_t nrhs, int64_t lda,\n                                                   int64_t stride_a, int64_t stride_ipiv,\n                                                   int64_t ldb, int64_t stride_b, int64_t\n                                                   batch_size);\n\nint64_t onemklSgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue,\n                                                     onemklTranspose trans, int64_t n, int64_t\n                                                     nrhs, int64_t lda, int64_t stride_a,\n                                                     int64_t ldb, int64_t stride_b, int64_t\n                                                     batch_size);\n\nint64_t onemklDgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue,\n                                                     onemklTranspose trans, int64_t n, int64_t\n                                                     nrhs, int64_t lda, int64_t stride_a,\n                                                     int64_t ldb, int64_t stride_b, int64_t\n                                                     batch_size);\n\nint64_t onemklCgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue,\n                                                     onemklTranspose trans, int64_t n, int64_t\n                                                     nrhs, int64_t lda, int64_t stride_a,\n                                                     int64_t ldb, int64_t stride_b, int64_t\n                                                     batch_size);\n\nint64_t onemklZgetrsnp_batch_strided_scratchpad_size(syclQueue_t device_queue,\n                                                     onemklTranspose trans, int64_t n, int64_t\n                                                     nrhs, int64_t lda, int64_t stride_a,\n                                                     int64_t ldb, int64_t stride_b, int64_t\n                                                     batch_size);\n\nint64_t onemklSorgqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t group_count,\n                                           int64_t* group_sizes);\n\nint64_t onemklDorgqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t group_count,\n                                           int64_t* group_sizes);\n\nint64_t onemklSorgqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t k, int64_t lda, int64_t stride_a,\n                                                   int64_t stride_tau, int64_t batch_size);\n\nint64_t onemklDorgqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t k, int64_t lda, int64_t stride_a,\n                                                   int64_t stride_tau, int64_t batch_size);\n\nint64_t onemklSormqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side,\n                                           onemklTranspose* trans, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t* ldc, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklDormqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side,\n                                           onemklTranspose* trans, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t* ldc, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklSpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklDpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklCpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklZpotrf_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* lda, int64_t group_count, int64_t*\n                                           group_sizes);\n\nint64_t onemklSpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t lda, int64_t stride_a,\n                                                   int64_t batch_size);\n\nint64_t onemklDpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t lda, int64_t stride_a,\n                                                   int64_t batch_size);\n\nint64_t onemklCpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t lda, int64_t stride_a,\n                                                   int64_t batch_size);\n\nint64_t onemklZpotrf_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t lda, int64_t stride_a,\n                                                   int64_t batch_size);\n\nint64_t onemklSpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklDpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklCpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklZpotrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklSpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t nrhs, int64_t lda, int64_t\n                                                   stride_a, int64_t ldb, int64_t stride_b,\n                                                   int64_t batch_size);\n\nint64_t onemklDpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t nrhs, int64_t lda, int64_t\n                                                   stride_a, int64_t ldb, int64_t stride_b,\n                                                   int64_t batch_size);\n\nint64_t onemklCpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t nrhs, int64_t lda, int64_t\n                                                   stride_a, int64_t ldb, int64_t stride_b,\n                                                   int64_t batch_size);\n\nint64_t onemklZpotrs_batch_strided_scratchpad_size(syclQueue_t device_queue, onemklUplo uplo,\n                                                   int64_t n, int64_t nrhs, int64_t lda, int64_t\n                                                   stride_a, int64_t ldb, int64_t stride_b,\n                                                   int64_t batch_size);\n\nint64_t onemklStrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo,\n                                           onemklTranspose* trans, onemklDiag* diag, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklDtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo,\n                                           onemklTranspose* trans, onemklDiag* diag, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklCtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo,\n                                           onemklTranspose* trans, onemklDiag* diag, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklZtrtrs_batch_scratchpad_size(syclQueue_t device_queue, onemklUplo* uplo,\n                                           onemklTranspose* trans, onemklDiag* diag, int64_t*\n                                           n, int64_t* nrhs, int64_t* lda, int64_t* ldb, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklCungqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t group_count,\n                                           int64_t* group_sizes);\n\nint64_t onemklZungqr_batch_scratchpad_size(syclQueue_t device_queue, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t group_count,\n                                           int64_t* group_sizes);\n\nint64_t onemklCungqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t k, int64_t lda, int64_t stride_a,\n                                                   int64_t stride_tau, int64_t batch_size);\n\nint64_t onemklZungqr_batch_strided_scratchpad_size(syclQueue_t device_queue, int64_t m, int64_t\n                                                   n, int64_t k, int64_t lda, int64_t stride_a,\n                                                   int64_t stride_tau, int64_t batch_size);\n\nint64_t onemklCunmqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side,\n                                           onemklTranspose* trans, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t* ldc, int64_t\n                                           group_count, int64_t* group_sizes);\n\nint64_t onemklZunmqr_batch_scratchpad_size(syclQueue_t device_queue, onemklSide* side,\n                                           onemklTranspose* trans, int64_t* m, int64_t* n,\n                                           int64_t* k, int64_t* lda, int64_t* ldc, int64_t\n                                           group_count, int64_t* group_sizes);\n\n// SPARSE\nint onemklXsparse_init_matrix_handle(matrix_handle_t *p_spMat);\n\nint onemklXsparse_release_matrix_handle(syclQueue_t device_queue, matrix_handle_t *p_spMat);\n\nint onemklSsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t\n                               *col_ind, float *values);\n\nint onemklSsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr,\n                                  int64_t *col_ind, float *values);\n\nint onemklDsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t\n                               *col_ind, double *values);\n\nint onemklDsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr,\n                                  int64_t *col_ind, double *values);\n\nint onemklCsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t\n                               *col_ind, float _Complex *values);\n\nint onemklCsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr,\n                                  int64_t *col_ind, float _Complex *values);\n\nint onemklZsparse_set_csr_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, onemklIndex index, int32_t *row_ptr, int32_t\n                               *col_ind, double _Complex *values);\n\nint onemklZsparse_set_csr_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, onemklIndex index, int64_t *row_ptr,\n                                  int64_t *col_ind, double _Complex *values);\n\nint onemklSsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind,\n                               int32_t *col_ind, float *values);\n\nint onemklSsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t\n                                  *row_ind, int64_t *col_ind, float *values);\n\nint onemklDsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind,\n                               int32_t *col_ind, double *values);\n\nint onemklDsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t\n                                  *row_ind, int64_t *col_ind, double *values);\n\nint onemklCsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind,\n                               int32_t *col_ind, float _Complex *values);\n\nint onemklCsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t\n                                  *row_ind, int64_t *col_ind, float _Complex *values);\n\nint onemklZsparse_set_coo_data(syclQueue_t device_queue, matrix_handle_t spMat, int32_t nrows,\n                               int32_t ncols, int32_t nnz, onemklIndex index, int32_t *row_ind,\n                               int32_t *col_ind, double _Complex *values);\n\nint onemklZsparse_set_coo_data_64(syclQueue_t device_queue, matrix_handle_t spMat, int64_t\n                                  nrows, int64_t ncols, int64_t nnz, onemklIndex index, int64_t\n                                  *row_ind, int64_t *col_ind, double _Complex *values);\n\nint onemklXsparse_init_matmat_descr(matmat_descr_t *p_desc);\n\nint onemklXsparse_release_matmat_descr(matmat_descr_t *p_desc);\n\nint onemklXsparse_init_omatconvert_descr(syclQueue_t device_queue, omatconvert_descr_t\n                                         *p_descr);\n\nint onemklXsparse_release_omatconvert_descr(syclQueue_t device_queue, omatconvert_descr_t\n                                            descr);\n\nint onemklXsparse_init_omatadd_descr(syclQueue_t device_queue, omatadd_descr_t\n                                     *p_omatadd_desc);\n\nint onemklXsparse_release_omatadd_descr(syclQueue_t device_queue, omatadd_descr_t\n                                        omatadd_desc);\n\nint onemklXsparse_omatcopy(syclQueue_t device_queue, onemklTranspose transpose_val,\n                           matrix_handle_t spMat_in, matrix_handle_t spMat_out);\n\nint onemklXsparse_sort_matrix(syclQueue_t device_queue, matrix_handle_t spMat);\n\nint onemklSsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat,\n                                         int64_t length, float *new_diag_values);\n\nint onemklDsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat,\n                                         int64_t length, double *new_diag_values);\n\nint onemklCsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat,\n                                         int64_t length, float _Complex *new_diag_values);\n\nint onemklZsparse_update_diagonal_values(syclQueue_t device_queue, matrix_handle_t spMat,\n                                         int64_t length, double _Complex *new_diag_values);\n\nint onemklXsparse_optimize_gemv(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t\n                                A);\n\nint onemklXsparse_optimize_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose\n                                opA, onemklDiag diag_val, matrix_handle_t A);\n\nint onemklXsparse_optimize_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose\n                                opA, onemklDiag diag_val, matrix_handle_t A);\n\nint onemklXsparse_optimize_gemm(syclQueue_t device_queue, onemklTranspose opA, matrix_handle_t\n                                A);\n\nint onemklXsparse_optimize_gemm_advanced(syclQueue_t device_queue, onemklLayout layout_val,\n                                         onemklTranspose opA, onemklTranspose opB,\n                                         matrix_handle_t A, int64_t columns);\n\nint onemklXsparse_optimize_trsm(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose\n                                opA, onemklDiag diag_val, matrix_handle_t A);\n\nint onemklXsparse_optimize_trsm_advanced(syclQueue_t device_queue, onemklLayout layout_val,\n                                         onemklUplo uplo_val, onemklTranspose opA, onemklDiag\n                                         diag_val, matrix_handle_t A, int64_t columns);\n\nint onemklSsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float *alpha,\n                       matrix_handle_t A, float *x, float *beta, float *y);\n\nint onemklDsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, double *alpha,\n                       matrix_handle_t A, double *x, double *beta, double *y);\n\nint onemklCsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, float _Complex *alpha,\n                       matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex\n                       *y);\n\nint onemklZsparse_gemv(syclQueue_t device_queue, onemklTranspose opA, double _Complex *alpha,\n                       matrix_handle_t A, double _Complex *x, double _Complex *beta, double\n                       _Complex *y);\n\nint onemklSsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, float *alpha,\n                          matrix_handle_t A, float *x, float *beta, float *y, float *d);\n\nint onemklDsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, double *alpha,\n                          matrix_handle_t A, double *x, double *beta, double *y, double *d);\n\nint onemklCsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, float _Complex *alpha,\n                          matrix_handle_t A, float _Complex *x, float _Complex *beta, float\n                          _Complex *y, float _Complex *d);\n\nint onemklZsparse_gemvdot(syclQueue_t device_queue, onemklTranspose opA, double _Complex *alpha,\n                          matrix_handle_t A, double _Complex *x, double _Complex *beta, double\n                          _Complex *y, double _Complex *d);\n\nint onemklSsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, float *alpha,\n                       matrix_handle_t A, float *x, float *beta, float *y);\n\nint onemklDsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, double *alpha,\n                       matrix_handle_t A, double *x, double *beta, double *y);\n\nint onemklCsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, float _Complex *alpha,\n                       matrix_handle_t A, float _Complex *x, float _Complex *beta, float _Complex\n                       *y);\n\nint onemklZsparse_symv(syclQueue_t device_queue, onemklUplo uplo_val, double _Complex *alpha,\n                       matrix_handle_t A, double _Complex *x, double _Complex *beta, double\n                       _Complex *y);\n\nint onemklSsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, float *alpha, matrix_handle_t A, float *x, float *beta,\n                       float *y);\n\nint onemklDsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, double *alpha, matrix_handle_t A, double *x, double\n                       *beta, double *y);\n\nint onemklCsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, float _Complex *alpha, matrix_handle_t A, float\n                       _Complex *x, float _Complex *beta, float _Complex *y);\n\nint onemklZsparse_trmv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, double _Complex *alpha, matrix_handle_t A, double\n                       _Complex *x, double _Complex *beta, double _Complex *y);\n\nint onemklSsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, float *alpha, matrix_handle_t A, float *x, float *y);\n\nint onemklDsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, double *alpha, matrix_handle_t A, double *x, double *y);\n\nint onemklCsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, float _Complex *alpha, matrix_handle_t A, float\n                       _Complex *x, float _Complex *y);\n\nint onemklZsparse_trsv(syclQueue_t device_queue, onemklUplo uplo_val, onemklTranspose opA,\n                       onemklDiag diag_val, double _Complex *alpha, matrix_handle_t A, double\n                       _Complex *x, double _Complex *y);\n\nint onemklSsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, float *alpha, matrix_handle_t A, float *X, int64_t\n                       columns, int64_t ldx, float *beta, float *Y, int64_t ldy);\n\nint onemklDsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, double *alpha, matrix_handle_t A, double *X, int64_t\n                       columns, int64_t ldx, double *beta, double *Y, int64_t ldy);\n\nint onemklCsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, float _Complex *alpha, matrix_handle_t A, float\n                       _Complex *X, int64_t columns, int64_t ldx, float _Complex *beta, float\n                       _Complex *Y, int64_t ldy);\n\nint onemklZsparse_gemm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, double _Complex *alpha, matrix_handle_t A, double\n                       _Complex *X, int64_t columns, int64_t ldx, double _Complex *beta, double\n                       _Complex *Y, int64_t ldy);\n\nint onemklSsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, float\n                       *alpha, matrix_handle_t A, float *X, int64_t columns, int64_t ldx, float *Y,\n                       int64_t ldy);\n\nint onemklDsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, double\n                       *alpha, matrix_handle_t A, double *X, int64_t columns, int64_t ldx, double\n                       *Y, int64_t ldy);\n\nint onemklCsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, float\n                       _Complex *alpha, matrix_handle_t A, float _Complex *X, int64_t columns,\n                       int64_t ldx, float _Complex *Y, int64_t ldy);\n\nint onemklZsparse_trsm(syclQueue_t device_queue, onemklLayout layout_val, onemklTranspose opA,\n                       onemklTranspose opX, onemklUplo uplo_val, onemklDiag diag_val, double\n                       _Complex *alpha, matrix_handle_t A, double _Complex *X, int64_t columns,\n                       int64_t ldx, double _Complex *Y, int64_t ldy);\n\nint onemklXsparse_set_matmat_data(matmat_descr_t descr, onemklMatrixView viewA, onemklTranspose\n                                  opA, onemklMatrixView viewB, onemklTranspose opB,\n                                  onemklMatrixView viewC);\n\nint onemklSsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA,\n                          onemklTranspose opB, float *alpha, matrix_handle_t A, matrix_handle_t\n                          B, float *beta, float *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc);\n\nint onemklDsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA,\n                          onemklTranspose opB, double *alpha, matrix_handle_t A, matrix_handle_t\n                          B, double *beta, double *C, int64_t c_nrows, int64_t c_ncols, int64_t ldc);\n\nint onemklCsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA,\n                          onemklTranspose opB, float _Complex *alpha, matrix_handle_t A,\n                          matrix_handle_t B, float _Complex *beta, float _Complex *C, int64_t\n                          c_nrows, int64_t c_ncols, int64_t ldc);\n\nint onemklZsparse_matmatd(syclQueue_t device_queue, onemklLayout c_layout, onemklTranspose opA,\n                          onemklTranspose opB, double _Complex *alpha, matrix_handle_t A,\n                          matrix_handle_t B, double _Complex *beta, double _Complex *C, int64_t\n                          c_nrows, int64_t c_ncols, int64_t ldc);\n\nint onemklXsparse_matmat(syclQueue_t device_queue, matrix_handle_t A, matrix_handle_t B,\n                         matrix_handle_t C, onemklMatmatRequest req, matmat_descr_t\n                         descr, int64_t *sizeTempBuffer, void *tempBuffer);\n\nint onemklDestroy(void);\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "deps/src/onemkl_dft.cpp",
    "content": "#include \"onemkl_dft.h\"\n#include \"sycl.hpp\"  // internal struct definitions\n\n#include <oneapi/mkl/dft.hpp>\n#include <vector>\n#include <complex>\n#include <new>\n#include <exception>\n#include <cstring>\n\nusing namespace oneapi::mkl::dft;\n\nstruct onemklDftDescriptor_st {\n    precision prec;\n    domain dom;\n    void *ptr; // pointer to concrete descriptor<prec, dom>\n};\n\nstatic inline precision to_prec(onemklDftPrecision p) {\n    return (p == ONEMKL_DFT_PRECISION_DOUBLE) ? precision::DOUBLE : precision::SINGLE;\n}\n\nstatic inline domain to_dom(onemklDftDomain d) {\n    return (d == ONEMKL_DFT_DOMAIN_COMPLEX) ? domain::COMPLEX : domain::REAL;\n}\n\n// Helper to allocate descriptor depending on precision/domain\nstatic int allocate_descriptor(onemklDftDescriptor_t *out, precision p, domain d, const std::vector<int64_t> &lengths) {\n    try {\n        auto *desc = new onemklDftDescriptor_st();\n        desc->prec = p;\n        desc->dom = d;\n        if (p == precision::SINGLE && d == domain::REAL) {\n            desc->ptr = new descriptor<precision::SINGLE, domain::REAL>(lengths);\n        } else if (p == precision::SINGLE && d == domain::COMPLEX) {\n            desc->ptr = new descriptor<precision::SINGLE, domain::COMPLEX>(lengths);\n        } else if (p == precision::DOUBLE && d == domain::REAL) {\n            desc->ptr = new descriptor<precision::DOUBLE, domain::REAL>(lengths);\n        } else { // DOUBLE COMPLEX\n            desc->ptr = new descriptor<precision::DOUBLE, domain::COMPLEX>(lengths);\n        }\n        *out = desc;\n        return 0;\n    } catch (...) {\n        return -1;\n    }\n}\n\nint onemklDftCreate1D(onemklDftDescriptor_t *desc,\n                      onemklDftPrecision precision,\n                      onemklDftDomain domain,\n                      int64_t length) {\n    std::vector<int64_t> dims{length};\n    return allocate_descriptor(desc, to_prec(precision), to_dom(domain), dims);\n}\n\nint onemklDftCreateND(onemklDftDescriptor_t *desc,\n                      onemklDftPrecision precision,\n                      onemklDftDomain domain,\n                      int64_t dim,\n                      const int64_t *lengths) {\n    if (dim <= 0 || lengths == nullptr) return -2;\n    std::vector<int64_t> dims(lengths, lengths + dim);\n    return allocate_descriptor(desc, to_prec(precision), to_dom(domain), dims);\n}\n\nint onemklDftDestroy(onemklDftDescriptor_t desc) {\n    if (!desc) return 0;\n    try {\n        if (desc->prec == precision::SINGLE && desc->dom == domain::REAL) {\n            delete static_cast< descriptor<precision::SINGLE, domain::REAL>* >(desc->ptr);\n        } else if (desc->prec == precision::SINGLE && desc->dom == domain::COMPLEX) {\n            delete static_cast< descriptor<precision::SINGLE, domain::COMPLEX>* >(desc->ptr);\n        } else if (desc->prec == precision::DOUBLE && desc->dom == domain::REAL) {\n            delete static_cast< descriptor<precision::DOUBLE, domain::REAL>* >(desc->ptr);\n        } else {\n            delete static_cast< descriptor<precision::DOUBLE, domain::COMPLEX>* >(desc->ptr);\n        }\n        delete desc;\n        return 0;\n    } catch (...) {\n        return -1;\n    }\n}\n\nint onemklDftCommit(onemklDftDescriptor_t desc, syclQueue_t queue) {\n    if (!desc || !queue) return -2;\n    try {\n        if (desc->prec == precision::SINGLE && desc->dom == domain::REAL) {\n            static_cast< descriptor<precision::SINGLE, domain::REAL>* >(desc->ptr)->commit(queue->val);\n        } else if (desc->prec == precision::SINGLE && desc->dom == domain::COMPLEX) {\n            static_cast< descriptor<precision::SINGLE, domain::COMPLEX>* >(desc->ptr)->commit(queue->val);\n        } else if (desc->prec == precision::DOUBLE && desc->dom == domain::REAL) {\n            static_cast< descriptor<precision::DOUBLE, domain::REAL>* >(desc->ptr)->commit(queue->val);\n        } else {\n            static_cast< descriptor<precision::DOUBLE, domain::COMPLEX>* >(desc->ptr)->commit(queue->val);\n        }\n        return 0;\n    } catch (...) {\n        return -1;\n    }\n}\n\n// Internal mapping helpers. We cannot rely on numeric equality between our\n// exported onemklDftConfigParam enumeration values (which are compact and\n// stable for Julia) and oneMKL's internal sparse enum values. Provide an\n// explicit translation layer.\nstatic inline config_param to_param(onemklDftConfigParam p) {\n    switch(p) {\n        case ONEMKL_DFT_PARAM_FORWARD_DOMAIN: return config_param::FORWARD_DOMAIN;\n        case ONEMKL_DFT_PARAM_DIMENSION: return config_param::DIMENSION;\n        case ONEMKL_DFT_PARAM_LENGTHS: return config_param::LENGTHS;\n        case ONEMKL_DFT_PARAM_PRECISION: return config_param::PRECISION;\n        case ONEMKL_DFT_PARAM_FORWARD_SCALE: return config_param::FORWARD_SCALE;\n        case ONEMKL_DFT_PARAM_BACKWARD_SCALE: return config_param::BACKWARD_SCALE;\n        case ONEMKL_DFT_PARAM_NUMBER_OF_TRANSFORMS: return config_param::NUMBER_OF_TRANSFORMS;\n        case ONEMKL_DFT_PARAM_COMPLEX_STORAGE: return config_param::COMPLEX_STORAGE;\n        case ONEMKL_DFT_PARAM_PLACEMENT: return config_param::PLACEMENT;\n        case ONEMKL_DFT_PARAM_INPUT_STRIDES: return config_param::INPUT_STRIDES;\n        case ONEMKL_DFT_PARAM_OUTPUT_STRIDES: return config_param::OUTPUT_STRIDES;\n        case ONEMKL_DFT_PARAM_FWD_DISTANCE: return config_param::FWD_DISTANCE;\n        case ONEMKL_DFT_PARAM_BWD_DISTANCE: return config_param::BWD_DISTANCE;\n        case ONEMKL_DFT_PARAM_WORKSPACE: return config_param::WORKSPACE;\n        case ONEMKL_DFT_PARAM_WORKSPACE_ESTIMATE_BYTES: return config_param::WORKSPACE_ESTIMATE_BYTES;\n        case ONEMKL_DFT_PARAM_WORKSPACE_BYTES: return config_param::WORKSPACE_BYTES;\n        case ONEMKL_DFT_PARAM_FWD_STRIDES: return config_param::FWD_STRIDES;\n        case ONEMKL_DFT_PARAM_BWD_STRIDES: return config_param::BWD_STRIDES;\n        case ONEMKL_DFT_PARAM_WORKSPACE_PLACEMENT: return config_param::WORKSPACE_PLACEMENT;\n        case ONEMKL_DFT_PARAM_WORKSPACE_EXTERNAL_BYTES: return config_param::WORKSPACE_EXTERNAL_BYTES;\n        default: return config_param::FORWARD_DOMAIN; // defensive; shouldn't happen\n    }\n}\n// Explicit value mapping (avoid relying on underlying enum integral values)\nstatic inline config_value to_cvalue(onemklDftConfigValue v) {\n    switch (v) {\n        case ONEMKL_DFT_VALUE_COMMITTED: return config_value::COMMITTED;\n        case ONEMKL_DFT_VALUE_UNCOMMITTED: return config_value::UNCOMMITTED;\n        case ONEMKL_DFT_VALUE_COMPLEX_COMPLEX: return config_value::COMPLEX_COMPLEX;\n        case ONEMKL_DFT_VALUE_REAL_REAL: return config_value::REAL_REAL;\n        case ONEMKL_DFT_VALUE_INPLACE: return config_value::INPLACE;\n        case ONEMKL_DFT_VALUE_NOT_INPLACE: return config_value::NOT_INPLACE;\n        case ONEMKL_DFT_VALUE_WORKSPACE_AUTOMATIC: return config_value::WORKSPACE_AUTOMATIC;\n        case ONEMKL_DFT_VALUE_ALLOW: return config_value::ALLOW;\n        case ONEMKL_DFT_VALUE_AVOID: return config_value::AVOID;\n        case ONEMKL_DFT_VALUE_WORKSPACE_INTERNAL: return config_value::WORKSPACE_INTERNAL;\n        case ONEMKL_DFT_VALUE_WORKSPACE_EXTERNAL: return config_value::WORKSPACE_EXTERNAL;\n        default: return config_value::UNCOMMITTED; // defensive fallback\n    }\n}\n\nstatic inline onemklDftConfigValue from_cvalue(config_value cv) {\n    switch (cv) {\n        case config_value::COMMITTED: return ONEMKL_DFT_VALUE_COMMITTED;\n        case config_value::UNCOMMITTED: return ONEMKL_DFT_VALUE_UNCOMMITTED;\n        case config_value::COMPLEX_COMPLEX: return ONEMKL_DFT_VALUE_COMPLEX_COMPLEX;\n        case config_value::REAL_REAL: return ONEMKL_DFT_VALUE_REAL_REAL;\n        case config_value::INPLACE: return ONEMKL_DFT_VALUE_INPLACE;\n        case config_value::NOT_INPLACE: return ONEMKL_DFT_VALUE_NOT_INPLACE;\n        case config_value::WORKSPACE_AUTOMATIC: return ONEMKL_DFT_VALUE_WORKSPACE_AUTOMATIC;\n        case config_value::ALLOW: return ONEMKL_DFT_VALUE_ALLOW;\n        case config_value::AVOID: return ONEMKL_DFT_VALUE_AVOID;\n        case config_value::WORKSPACE_INTERNAL: return ONEMKL_DFT_VALUE_WORKSPACE_INTERNAL;\n        case config_value::WORKSPACE_EXTERNAL: return ONEMKL_DFT_VALUE_WORKSPACE_EXTERNAL;\n        default: return ONEMKL_DFT_VALUE_UNCOMMITTED; // unknown / unsupported -> safe default\n    }\n}\n\n// Dispatch macro re-used for configuration\n#define ONEMKL_DFT_DISPATCH_CFG(desc_expr, CALL) \\\n    do { \\\n        if (desc->prec == precision::SINGLE && desc->dom == domain::REAL) { \\\n            auto *d = static_cast< descriptor<precision::SINGLE, domain::REAL>* >(desc_expr); \\\n            CALL; \\\n        } else if (desc->prec == precision::SINGLE && desc->dom == domain::COMPLEX) { \\\n            auto *d = static_cast< descriptor<precision::SINGLE, domain::COMPLEX>* >(desc_expr); \\\n            CALL; \\\n        } else if (desc->prec == precision::DOUBLE && desc->dom == domain::REAL) { \\\n            auto *d = static_cast< descriptor<precision::DOUBLE, domain::REAL>* >(desc_expr); \\\n            CALL; \\\n        } else { \\\n            auto *d = static_cast< descriptor<precision::DOUBLE, domain::COMPLEX>* >(desc_expr); \\\n            CALL; \\\n        } \\\n    } while (0)\n\nint onemklDftSetValueInt64(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t value) {\n    if (!desc) return -2; if (!desc->ptr) return -3;\n    try { ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->set_value(to_param(param), value)); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftSetValueDouble(onemklDftDescriptor_t desc, onemklDftConfigParam param, double value) {\n    if (!desc) return -2; if (!desc->ptr) return -3;\n    try { ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->set_value(to_param(param), value)); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftSetValueInt64Array(onemklDftDescriptor_t desc, onemklDftConfigParam param, const int64_t *values, int64_t n) {\n    if (!desc || !values || n < 0) return -2; if (!desc->ptr) return -3;\n    try { std::vector<int64_t> v(values, values + n); ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->set_value(to_param(param), v)); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftSetValueConfigValue(onemklDftDescriptor_t desc, onemklDftConfigParam param, onemklDftConfigValue value) {\n    if (!desc) return -2; if (!desc->ptr) return -3;\n    try { ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->set_value(to_param(param), to_cvalue(value))); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftGetValueInt64(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t *value) {\n    if (!desc || !value) return -2; if (!desc->ptr) return -3;\n    try { ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->get_value(to_param(param), value)); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftGetValueDouble(onemklDftDescriptor_t desc, onemklDftConfigParam param, double *value) {\n    if (!desc || !value) return -2; if (!desc->ptr) return -3;\n    try { ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->get_value(to_param(param), value)); return 0; } catch (...) { return -1; }\n}\n\nint onemklDftGetValueInt64Array(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t *values, int64_t *n) {\n    if (!desc || !values || !n || *n <= 0) return -2; if (!desc->ptr) return -3;\n    try {\n        std::vector<int64_t> v; ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->get_value(to_param(param), &v));\n        int64_t to_copy = (*n < (int64_t)v.size()) ? *n : (int64_t)v.size();\n        std::memcpy(values, v.data(), sizeof(int64_t)*to_copy);\n        *n = to_copy; return 0;\n    } catch (...) { return -1; }\n}\n\nint onemklDftGetValueConfigValue(onemklDftDescriptor_t desc, onemklDftConfigParam param, onemklDftConfigValue *value) {\n    if (!desc || !value) return -2; if (!desc->ptr) return -3;\n    try { config_value cv; ONEMKL_DFT_DISPATCH_CFG(desc->ptr, d->get_value(to_param(param), &cv)); *value = from_cvalue(cv); return 0; } catch (...) { return -1; }\n}\n\n// Helper macro to dispatch compute operations\n#define ONEMKL_DFT_DISPATCH(desc_expr, CALL) \\\n    do { \\\n        if (desc->prec == precision::SINGLE && desc->dom == domain::REAL) { \\\n            auto *d = static_cast< descriptor<precision::SINGLE, domain::REAL>* >(desc_expr); \\\n            CALL; \\\n        } else if (desc->prec == precision::SINGLE && desc->dom == domain::COMPLEX) { \\\n            auto *d = static_cast< descriptor<precision::SINGLE, domain::COMPLEX>* >(desc_expr); \\\n            CALL; \\\n        } else if (desc->prec == precision::DOUBLE && desc->dom == domain::REAL) { \\\n            auto *d = static_cast< descriptor<precision::DOUBLE, domain::REAL>* >(desc_expr); \\\n            CALL; \\\n        } else { \\\n            auto *d = static_cast< descriptor<precision::DOUBLE, domain::COMPLEX>* >(desc_expr); \\\n            CALL; \\\n        } \\\n    } while (0)\n\n// Pointer (USM) dispatch with proper element typing rather than using void* directly.\n// Using void* caused instantiation of compute_forward/backward with <void> template\n// parameters on some oneMKL versions, leading to unresolved symbols at runtime.\nint onemklDftComputeForward(onemklDftDescriptor_t desc, void *inout) {\n    if (!desc || !inout) return -2; if (!desc->ptr) return -3;\n    try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) {\n                auto *p = static_cast<float*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, p).wait());\n            } else {\n                auto *p = static_cast<double*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, p).wait());\n            }\n        } else { // COMPLEX\n            if (desc->prec == precision::SINGLE) {\n                auto *p = static_cast<std::complex<float>*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, p).wait());\n            } else {\n                auto *p = static_cast<std::complex<double>*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, p).wait());\n            }\n        }\n        return 0;\n    } catch (...) { return -1; }\n}\n\nint onemklDftComputeForwardOutOfPlace(onemklDftDescriptor_t desc, void *in, void *out) {\n    if (!desc || !in || !out) return -2; if (!desc->ptr) return -3;\n    try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) {\n                // Real-domain forward transform: real input -> complex output\n                auto *pi = static_cast<float*>(in);\n                auto *po = static_cast<std::complex<float>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, pi, po).wait());\n            } else {\n                auto *pi = static_cast<double*>(in);\n                auto *po = static_cast<std::complex<double>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, pi, po).wait());\n            }\n        } else { // COMPLEX\n            if (desc->prec == precision::SINGLE) {\n                auto *pi = static_cast<std::complex<float>*>(in);\n                auto *po = static_cast<std::complex<float>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, pi, po).wait());\n            } else {\n                auto *pi = static_cast<std::complex<double>*>(in);\n                auto *po = static_cast<std::complex<double>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, pi, po).wait());\n            }\n        }\n        return 0;\n    } catch (...) { return -1; }\n}\n\nint onemklDftComputeBackward(onemklDftDescriptor_t desc, void *inout) {\n    if (!desc || !inout) return -2; if (!desc->ptr) return -3;\n    try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) {\n                auto *p = static_cast<float*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, p).wait());\n            } else {\n                auto *p = static_cast<double*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, p).wait());\n            }\n        } else { // COMPLEX\n            if (desc->prec == precision::SINGLE) {\n                auto *p = static_cast<std::complex<float>*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, p).wait());\n            } else {\n                auto *p = static_cast<std::complex<double>*>(inout);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, p).wait());\n            }\n        }\n        return 0;\n    } catch (...) { return -1; }\n}\n\nint onemklDftComputeBackwardOutOfPlace(onemklDftDescriptor_t desc, void *in, void *out) {\n    if (!desc || !in || !out) return -2; if (!desc->ptr) return -3;\n    try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) {\n                // Real-domain backward transform: complex input -> real output\n                auto *pi = static_cast<std::complex<float>*>(in);\n                auto *po = static_cast<float*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, pi, po).wait());\n            } else {\n                auto *pi = static_cast<std::complex<double>*>(in);\n                auto *po = static_cast<double*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, pi, po).wait());\n            }\n        } else { // COMPLEX\n            if (desc->prec == precision::SINGLE) {\n                auto *pi = static_cast<std::complex<float>*>(in);\n                auto *po = static_cast<std::complex<float>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, pi, po).wait());\n            } else {\n                auto *pi = static_cast<std::complex<double>*>(in);\n                auto *po = static_cast<std::complex<double>*>(out);\n                ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, pi, po).wait());\n            }\n        }\n        return 0;\n    } catch (...) { return -1; }\n}\n\n// Keep dispatch macros defined for buffer variants below; undef at end of file.\n\n// Buffer API helpers: create temporary buffers referencing host memory.\n// NOTE: This assumes the memory is accessible and sized appropriately.\ntemplate <typename T>\nstatic inline sycl::buffer<T,1> make_buffer(T *ptr, int64_t n) {\n    return sycl::buffer<T,1>(ptr, sycl::range<1>(static_cast<size_t>(n)));\n}\n\n// Query total element count from LENGTHS config (product of lengths).\nstatic int64_t get_element_count(onemklDftDescriptor_t desc) {\n    int64_t n = 0; int64_t dims = 0; if (onemklDftGetValueInt64(desc, ONEMKL_DFT_PARAM_DIMENSION, &dims) != 0) return -1; if (dims <= 0 || dims > 8) return -1; int64_t lens[16]; int64_t want = dims; if (onemklDftGetValueInt64Array(desc, ONEMKL_DFT_PARAM_LENGTHS, lens, &want) != 0) return -1; if (want != dims) return -1; int64_t total = 1; for (int i=0;i<dims;i++){ if (lens[i]<=0) return -1; total *= lens[i]; } return total; }\n\n// Select real/complex element size variant for pointers.\nint onemklDftComputeForwardBuffer(onemklDftDescriptor_t desc, void *inout) {\n    if (!desc || !inout) return -2; if (!desc->ptr) return -3; int64_t n = get_element_count(desc); if (n <= 0) return -3; try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) { auto buf = make_buffer((float*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, buf)); }\n            else { auto buf = make_buffer((double*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, buf)); }\n        } else { // COMPLEX\n            if (desc->prec == precision::SINGLE) { auto buf = make_buffer((std::complex<float>*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, buf)); }\n            else { auto buf = make_buffer((std::complex<double>*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, buf)); }\n        }\n        return 0; } catch (...) { return -1; }\n}\n\nint onemklDftComputeForwardOutOfPlaceBuffer(onemklDftDescriptor_t desc, void *in, void *out) {\n    if (!desc || !in || !out) return -2; if (!desc->ptr) return -3; int64_t n = get_element_count(desc); if (n <= 0) return -3; try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) { auto bufi = make_buffer((float*)in, n); /* complex output size may differ; assume caller sized */ auto bufo = make_buffer((std::complex<float>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, bufi, bufo)); }\n            else { auto bufi = make_buffer((double*)in, n); auto bufo = make_buffer((std::complex<double>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, bufi, bufo)); }\n        } else {\n            if (desc->prec == precision::SINGLE) { auto bufi = make_buffer((std::complex<float>*)in, n); auto bufo = make_buffer((std::complex<float>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, bufi, bufo)); }\n            else { auto bufi = make_buffer((std::complex<double>*)in, n); auto bufo = make_buffer((std::complex<double>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_forward(*d, bufi, bufo)); }\n        }\n        return 0; } catch (...) { return -1; }\n}\n\nint onemklDftComputeBackwardBuffer(onemklDftDescriptor_t desc, void *inout) {\n    if (!desc || !inout) return -2; if (!desc->ptr) return -3; int64_t n = get_element_count(desc); if (n <= 0) return -3; try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) { auto buf = make_buffer((float*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, buf)); }\n            else { auto buf = make_buffer((double*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, buf)); }\n        } else {\n            if (desc->prec == precision::SINGLE) { auto buf = make_buffer((std::complex<float>*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, buf)); }\n            else { auto buf = make_buffer((std::complex<double>*)inout, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, buf)); }\n        }\n        return 0; } catch (...) { return -1; }\n}\n\nint onemklDftComputeBackwardOutOfPlaceBuffer(onemklDftDescriptor_t desc, void *in, void *out) {\n    if (!desc || !in || !out) return -2; if (!desc->ptr) return -3; int64_t n = get_element_count(desc); if (n <= 0) return -3; try {\n        if (desc->dom == domain::REAL) {\n            if (desc->prec == precision::SINGLE) { auto bufi = make_buffer((std::complex<float>*)in, n); auto bufo = make_buffer((float*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, bufi, bufo)); }\n            else { auto bufi = make_buffer((std::complex<double>*)in, n); auto bufo = make_buffer((double*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, bufi, bufo)); }\n        } else {\n            if (desc->prec == precision::SINGLE) { auto bufi = make_buffer((std::complex<float>*)in, n); auto bufo = make_buffer((std::complex<float>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, bufi, bufo)); }\n            else { auto bufi = make_buffer((std::complex<double>*)in, n); auto bufo = make_buffer((std::complex<double>*)out, n); ONEMKL_DFT_DISPATCH(desc->ptr, compute_backward(*d, bufi, bufo)); }\n        }\n        return 0; } catch (...) { return -1; }\n}\n\n#undef ONEMKL_DFT_DISPATCH\n#undef ONEMKL_DFT_DISPATCH_CFG\n\n// Introspection helper: capture integral values of config_param enums that we\n// rely upon in the Julia layer. We enumerate the sequence present in our C\n// header; if oneMKL's internal ordering diverges this will expose it.\nint onemklDftQueryParamIndices(int64_t *out, int64_t n) {\n    if (!out || n < 20) return -2; // we expose 20 params currently\n    try {\n#if defined(__clang__)\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wdeprecated-declarations\"\n#elif defined(__GNUC__)\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n#endif\n        config_param params[] = {\n            config_param::FORWARD_DOMAIN,\n            config_param::DIMENSION,\n            config_param::LENGTHS,\n            config_param::PRECISION,\n            config_param::FORWARD_SCALE,\n            config_param::BACKWARD_SCALE,\n            config_param::NUMBER_OF_TRANSFORMS,\n            config_param::COMPLEX_STORAGE,\n            config_param::PLACEMENT,\n            config_param::INPUT_STRIDES,\n            config_param::OUTPUT_STRIDES,\n            config_param::FWD_DISTANCE,\n            config_param::BWD_DISTANCE,\n            config_param::WORKSPACE,\n            config_param::WORKSPACE_ESTIMATE_BYTES,\n            config_param::WORKSPACE_BYTES,\n            config_param::FWD_STRIDES,\n            config_param::BWD_STRIDES,\n            config_param::WORKSPACE_PLACEMENT,\n            config_param::WORKSPACE_EXTERNAL_BYTES\n        };\n#if defined(__clang__)\n#pragma clang diagnostic pop\n#elif defined(__GNUC__)\n#pragma GCC diagnostic pop\n#endif\n        for (int i=0;i<20;i++) out[i] = static_cast<int64_t>(params[i]);\n        return 20;\n    } catch (...) { return -1; }\n}\n"
  },
  {
    "path": "deps/src/onemkl_dft.h",
    "content": "#pragma once\n\n#include \"sycl.h\"\n\n#include <stdint.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// Return codes (negative values indicate errors):\n//  0  : success\n// -1  : internal error / exception caught\n// -2  : invalid argument (null pointer, bad length, etc.)\n// -3  : invalid descriptor state (e.g. uninitialized desc->ptr) or size query failure\n#define ONEMKL_DFT_STATUS_SUCCESS            0\n#define ONEMKL_DFT_STATUS_ERROR             -1\n#define ONEMKL_DFT_STATUS_INVALID_ARGUMENT  -2\n#define ONEMKL_DFT_STATUS_BAD_STATE         -3\n\n// DFT precision\ntypedef enum {\n    ONEMKL_DFT_PRECISION_SINGLE = 0,\n    ONEMKL_DFT_PRECISION_DOUBLE = 1\n} onemklDftPrecision;\n\n// DFT domain\ntypedef enum {\n    ONEMKL_DFT_DOMAIN_REAL = 0,\n    ONEMKL_DFT_DOMAIN_COMPLEX = 1\n} onemklDftDomain;\n\n// Configuration parameters (subset mirrors oneapi::mkl::dft::config_param)\ntypedef enum {\n    ONEMKL_DFT_PARAM_FORWARD_DOMAIN = 0,\n    ONEMKL_DFT_PARAM_DIMENSION,\n    ONEMKL_DFT_PARAM_LENGTHS,\n    ONEMKL_DFT_PARAM_PRECISION,\n    ONEMKL_DFT_PARAM_FORWARD_SCALE,\n    ONEMKL_DFT_PARAM_BACKWARD_SCALE,\n    ONEMKL_DFT_PARAM_NUMBER_OF_TRANSFORMS,\n    ONEMKL_DFT_PARAM_COMPLEX_STORAGE,\n    ONEMKL_DFT_PARAM_PLACEMENT,\n    ONEMKL_DFT_PARAM_INPUT_STRIDES,\n    ONEMKL_DFT_PARAM_OUTPUT_STRIDES,\n    ONEMKL_DFT_PARAM_FWD_DISTANCE,\n    ONEMKL_DFT_PARAM_BWD_DISTANCE,\n    ONEMKL_DFT_PARAM_WORKSPACE,              // size query / placement\n    ONEMKL_DFT_PARAM_WORKSPACE_ESTIMATE_BYTES,\n    ONEMKL_DFT_PARAM_WORKSPACE_BYTES,\n    ONEMKL_DFT_PARAM_FWD_STRIDES,\n    ONEMKL_DFT_PARAM_BWD_STRIDES,\n    ONEMKL_DFT_PARAM_WORKSPACE_PLACEMENT,\n    ONEMKL_DFT_PARAM_WORKSPACE_EXTERNAL_BYTES\n} onemklDftConfigParam;\n\n// Configuration values (mirrors oneapi::mkl::dft::config_value)\ntypedef enum {\n    ONEMKL_DFT_VALUE_COMMITTED = 0,\n    ONEMKL_DFT_VALUE_UNCOMMITTED,\n    ONEMKL_DFT_VALUE_COMPLEX_COMPLEX,\n    ONEMKL_DFT_VALUE_REAL_REAL,\n    ONEMKL_DFT_VALUE_INPLACE,\n    ONEMKL_DFT_VALUE_NOT_INPLACE,\n    ONEMKL_DFT_VALUE_WORKSPACE_AUTOMATIC,   // internal\n    ONEMKL_DFT_VALUE_ALLOW,\n    ONEMKL_DFT_VALUE_AVOID,\n    ONEMKL_DFT_VALUE_WORKSPACE_INTERNAL,\n    ONEMKL_DFT_VALUE_WORKSPACE_EXTERNAL\n} onemklDftConfigValue;\n\n// Opaque descriptor handle\nstruct onemklDftDescriptor_st;\ntypedef struct onemklDftDescriptor_st *onemklDftDescriptor_t;\n\n// Creation / destruction\nint onemklDftCreate1D(onemklDftDescriptor_t *desc,\n                      onemklDftPrecision precision,\n                      onemklDftDomain domain,\n                      int64_t length);\n\nint onemklDftCreateND(onemklDftDescriptor_t *desc,\n                      onemklDftPrecision precision,\n                      onemklDftDomain domain,\n                      int64_t dim,\n                      const int64_t *lengths);\n\nint onemklDftDestroy(onemklDftDescriptor_t desc);\n\n// Commit descriptor to a queue\nint onemklDftCommit(onemklDftDescriptor_t desc, syclQueue_t queue);\n\n// Configuration set\nint onemklDftSetValueInt64(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t value);\nint onemklDftSetValueDouble(onemklDftDescriptor_t desc, onemklDftConfigParam param, double value);\nint onemklDftSetValueInt64Array(onemklDftDescriptor_t desc, onemklDftConfigParam param, const int64_t *values, int64_t n);\nint onemklDftSetValueConfigValue(onemklDftDescriptor_t desc, onemklDftConfigParam param, onemklDftConfigValue value);\n\n// Configuration get\nint onemklDftGetValueInt64(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t *value);\nint onemklDftGetValueDouble(onemklDftDescriptor_t desc, onemklDftConfigParam param, double *value);\n// For array queries pass *n as available length; on return *n has elements written.\nint onemklDftGetValueInt64Array(onemklDftDescriptor_t desc, onemklDftConfigParam param, int64_t *values, int64_t *n);\nint onemklDftGetValueConfigValue(onemklDftDescriptor_t desc, onemklDftConfigParam param, onemklDftConfigValue *value);\n\n// Compute (USM) in-place/out-of-place. Pointers must reference memory\n// appropriate for precision/domain. No size checking is performed.\nint onemklDftComputeForward(onemklDftDescriptor_t desc, void *inout);\nint onemklDftComputeForwardOutOfPlace(onemklDftDescriptor_t desc, void *in, void *out);\nint onemklDftComputeBackward(onemklDftDescriptor_t desc, void *inout);\nint onemklDftComputeBackwardOutOfPlace(onemklDftDescriptor_t desc, void *in, void *out);\n\n// Compute (buffer API) variants. Host pointers are wrapped in temporary 1D buffers.\nint onemklDftComputeForwardBuffer(onemklDftDescriptor_t desc, void *inout);\nint onemklDftComputeForwardOutOfPlaceBuffer(onemklDftDescriptor_t desc, void *in, void *out);\nint onemklDftComputeBackwardBuffer(onemklDftDescriptor_t desc, void *inout);\nint onemklDftComputeBackwardOutOfPlaceBuffer(onemklDftDescriptor_t desc, void *in, void *out);\n\n// Introspection: write out the integral values of selected config_param enums in\n// the same order as our public enum declaration above. Returns number written or\n// a negative error code if n is insufficient or arguments invalid.\nint onemklDftQueryParamIndices(int64_t *out, int64_t n);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "deps/src/sycl.cpp",
    "content": "#include \"sycl.hpp\"\n\n#include <sycl/ext/oneapi/backend/level_zero.hpp>\n\n// https://github.com/intel/llvm/blob/sycl/sycl/include/sycl/ext/oneapi/backend/level_zero.hpp\n\nextern \"C\" int syclPlatformCreate(syclPlatform_t *obj,\n                                  ze_driver_handle_t driver) {\n    auto sycl_platform =\n        sycl::make_platform<sycl::backend::ext_oneapi_level_zero>(driver);\n    *obj = new syclPlatform_st({sycl_platform});\n    return 0;\n}\n\nextern \"C\" int syclPlatformDestroy(syclPlatform_t obj) {\n    delete obj;\n    return 0;\n}\n\nextern \"C\" int syclDeviceCreate(syclDevice_t *obj, syclPlatform_t platform,\n                                ze_device_handle_t device) {\n    auto sycl_device =\n        sycl::make_device<sycl::backend::ext_oneapi_level_zero>(device);\n    *obj = new syclDevice_st({sycl_device});\n    return 0;\n}\n\nextern \"C\" int syclDeviceDestroy(syclDevice_t obj) {\n    delete obj;\n    return 0;\n}\n\nextern \"C\" int syclContextCreate(syclContext_t *obj, syclDevice_t *devices,\n                                 size_t ndevices, ze_context_handle_t context,\n                                 int keep_ownership) {\n    std::vector<sycl::device> sycl_devices(ndevices);\n    for (size_t i = 0; i < ndevices; i++)\n        sycl_devices[i] = devices[i]->val;\n    auto sycl_ownership =\n        keep_ownership ? sycl::ext::oneapi::level_zero::ownership::keep\n                       : sycl::ext::oneapi::level_zero::ownership::transfer;\n    sycl::backend_input_t<sycl::backend::ext_oneapi_level_zero, sycl::context>\n        sycl_context_input = {context, sycl_devices, sycl_ownership};\n\n    auto sycl_context =\n        sycl::make_context<sycl::backend::ext_oneapi_level_zero>(\n            sycl_context_input);\n    *obj = new syclContext_st({sycl_context});\n    return 0;\n}\n\nextern \"C\" int syclContextDestroy(syclContext_t obj) {\n    delete obj;\n    return 0;\n}\n\nextern \"C\" int syclQueueCreate(syclQueue_t *obj, syclContext_t context,\n                               syclDevice_t device,\n                               ze_command_queue_handle_t queue,\n                               int keep_ownership) {\n    auto sycl_ownership =\n        keep_ownership ? sycl::ext::oneapi::level_zero::ownership::keep\n                       : sycl::ext::oneapi::level_zero::ownership::transfer;\n    auto sycl_queue_input =\n        sycl::backend_input_t<sycl::backend::ext_oneapi_level_zero,\n                              sycl::queue>{queue, device->val, sycl_ownership};\n\n    auto sycl_queue = sycl::make_queue<sycl::backend::ext_oneapi_level_zero>(\n        sycl_queue_input, context->val);\n    *obj = new syclQueue_st({sycl_queue});\n    return 0;\n}\n\nextern \"C\" int syclQueueDestroy(syclQueue_t obj) {\n    delete obj;\n    return 0;\n}\n\nextern \"C\" int syclQueueWait(syclQueue_t obj) {\n    obj->val.wait();\n    return 0;\n}\n\nextern \"C\" int syclEventCreate(syclEvent_t *obj, syclContext_t context,\n                               ze_event_handle_t event, int keep_ownership) {\n    auto sycl_ownership =\n        keep_ownership ? sycl::ext::oneapi::level_zero::ownership::keep\n                       : sycl::ext::oneapi::level_zero::ownership::transfer;\n    auto sycl_event_input =\n        sycl::backend_input_t<sycl::backend::ext_oneapi_level_zero,\n                              sycl::event>{event, sycl_ownership};\n\n    auto sycl_event = sycl::make_event<sycl::backend::ext_oneapi_level_zero>(\n        sycl_event_input, context->val);\n    *obj = new syclEvent_st({sycl_event});\n    return 0;\n}\n\nextern \"C\" int syclEventDestroy(syclEvent_t obj) {\n   delete obj;\n   return 0;\n}\n"
  },
  {
    "path": "deps/src/sycl.h",
    "content": "#pragma once\n\n#include <stddef.h>\n\n#include <level_zero/ze_api.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef struct syclPlatform_st *syclPlatform_t;\nint syclPlatformCreate(syclPlatform_t *obj, ze_driver_handle_t driver);\nint syclPlatformDestroy(syclPlatform_t obj);\n\ntypedef struct syclDevice_st *syclDevice_t;\nint syclDeviceCreate(syclDevice_t *obj, syclPlatform_t platform,\n                     ze_device_handle_t device);\nint syclDeviceDestroy(syclDevice_t obj);\n\ntypedef struct syclContext_st *syclContext_t;\nint syclContextCreate(syclContext_t *obj, syclDevice_t *devices, size_t ndevices,\n                      ze_context_handle_t context, int keep_ownership);\nint syclContextDestroy(syclContext_t obj);\n\ntypedef struct syclQueue_st *syclQueue_t;\nint syclQueueCreate(syclQueue_t *obj, syclContext_t context, syclDevice_t device,\n                    ze_command_queue_handle_t queue, int keep_ownership);\nint syclQueueDestroy(syclQueue_t obj);\nint syclQueueWait(syclQueue_t obj);\n\ntypedef struct syclEvent_st *syclEvent_t;\nint syclEventCreate(syclEvent_t *obj, syclContext_t context,\n                    ze_event_handle_t event, int keep_ownership);\nint syclEventDestroy(syclEvent_t obj);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "deps/src/sycl.hpp",
    "content": "#pragma once\n\n#include \"sycl.h\"\n\n#include <sycl/sycl.hpp>\n\nstruct syclPlatform_st {\n    sycl::platform val;\n};\n\nstruct syclDevice_st {\n    sycl::device val;\n};\n\nstruct syclContext_st {\n    sycl::context val;\n};\n\nstruct syclQueue_st {\n    sycl::queue val;\n};\n\nstruct syclEvent_st {\n    sycl::event val;\n};\n"
  },
  {
    "path": "docs/Project.toml",
    "content": "[deps]\nDocumenter = \"e30172f5-a6a5-5a46-863b-614d45cd2de4\"\noneAPI = \"8f75cd03-7ff8-4ecb-9b8f-daf728133b1b\"\n\n[sources]\noneAPI = {path = \"/home/michel/git/oneAPI.jl\"}\n\n[compat]\nDocumenter = \"1\"\n"
  },
  {
    "path": "docs/make.jl",
    "content": "using Pkg\n\nPkg.develop(PackageSpec(path=joinpath(dirname(@__FILE__), \"..\")))\n# # when first running instantiate\nPkg.instantiate()\nusing Documenter\nusing Documenter.Remotes\nusing oneAPI\n\noneAPI.versioninfo()\n\nmakedocs(\n    sitename = \"oneAPI.jl\",\n    format = Documenter.HTML(\n        prettyurls = Base.get(ENV, \"CI\", nothing) == \"true\",\n        canonical = \"https://exanauts.github.io/ExaPF.jl/stable/\",\n        mathengine = Documenter.KaTeX(),\n    ),\n    modules = [oneAPI],\n    pages = [\n        \"Home\" => \"index.md\",\n        \"Installation\" => \"installation.md\",\n        \"Getting Started\" => \"getting_started.md\",\n        \"Usage\" => [\n            \"Array Programming\" => \"arrays.md\",\n            \"Kernel Programming\" => \"kernels.md\",\n            \"Memory Management\" => \"memory.md\",\n            \"Device Intrinsics\" => \"device.md\",\n            \"Performance Guide\" => \"usage/performance.md\",\n        ],\n        \"API Reference\" => [\n            \"Overview\" => \"api.md\",\n            \"Context & Device Management\" => \"api/context.md\",\n            \"Array Operations\" => \"api/arrays.md\",\n            \"Kernel Programming\" => \"api/kernels.md\",\n            \"Memory Management\" => \"api/memory.md\",\n            \"Compiler & Reflection\" => \"api/compiler.md\",\n            \"Level Zero (oneL0)\" => \"level_zero.md\",\n            \"oneMKL\" => \"onemkl.md\",\n        ],\n        \"Troubleshooting\" => \"troubleshooting.md\",\n    ],\n    checkdocs = :none,  # Don't error on missing docstrings\n    warnonly = [:cross_references, :missing_docs],  # Only warn, don't error\n)\n\ndeploydocs(\n    repo = \"github.com/JuliaGPU/oneAPI.jl.git\",\n    target = \"build\",\n    devbranch = \"master\",\n    devurl = \"dev\",\n    push_preview = true,\n)\n\n"
  },
  {
    "path": "docs/src/api/arrays.md",
    "content": "# Array Operations\n\nThis page documents the array types and operations provided by oneAPI.jl.\n\n## Array Types\n\n### Host-Side Arrays\n\n#### `oneArray{T,N,B}`\n\nN-dimensional dense array type for Intel GPU programming using oneAPI and Level Zero.\n\n**Type Parameters:**\n- `T`: Element type (must be stored inline, no isbits-unions)\n- `N`: Number of dimensions\n- `B`: Buffer type, one of:\n  - `oneL0.DeviceBuffer`: GPU device memory (default, not CPU-accessible)\n  - `oneL0.SharedBuffer`: Unified shared memory (CPU and GPU accessible)\n  - `oneL0.HostBuffer`: Pinned host memory (CPU-accessible, GPU-visible)\n\n**Type Aliases:**\n- `oneVector{T}` = `oneArray{T,1}` - 1D array\n- `oneMatrix{T}` = `oneArray{T,2}` - 2D array\n- `oneVecOrMat{T}` = `Union{oneVector{T}, oneMatrix{T}}` - 1D or 2D array\n\n### Device-Side Arrays\n\n#### `oneDeviceArray{T,N,A}`\n\nDevice-side array type for use within GPU kernels. This type represents a view of GPU memory\naccessible within kernel code. Unlike `oneArray` which is used on the host, `oneDeviceArray`\nis designed for device-side operations and cannot be directly constructed on the host.\n\n**Type Parameters:**\n- `T`: Element type\n- `N`: Number of dimensions\n- `A`: Address space (typically `AS.CrossWorkgroup` for global memory)\n\n**Type Aliases:**\n- `oneDeviceVector` = `oneDeviceArray{T,1}` - 1D device array\n- `oneDeviceMatrix` = `oneDeviceArray{T,2}` - 2D device array\n\n#### `oneLocalArray(::Type{T}, dims)`\n\nAllocate local (workgroup-shared) memory within a GPU kernel. Local memory is shared among\nall work-items in a workgroup and provides faster access than global memory.\n\n## Memory Type Queries\n\n### `is_device(a::oneArray) -> Bool`\n\nCheck if the array is stored in device memory (not directly CPU-accessible).\n\n### `is_shared(a::oneArray) -> Bool`\n\nCheck if the array is stored in shared (unified) memory, accessible from both CPU and GPU.\n\n### `is_host(a::oneArray) -> Bool`\n\nCheck if the array is stored in pinned host memory, which resides on the CPU but is visible to the GPU.\n\n\n## Array Construction\n\n`oneArray` supports multiple construction patterns similar to standard Julia arrays:\n\n```julia\nusing oneAPI\n\n# Uninitialized arrays\na = oneArray{Float32}(undef, 100)\nb = oneArray{Float32,2}(undef, 10, 10)\n\n# Specify memory type\nc = oneArray{Float32,1,oneL0.SharedBuffer}(undef, 100)  # Shared memory\nd = oneArray{Float32,1,oneL0.HostBuffer}(undef, 100)    # Host memory\n\n# From existing arrays\ne = oneArray(rand(Float32, 100))\nf = oneArray([1, 2, 3, 4])\n\n# Using zeros/ones/rand\ng = oneAPI.zeros(Float32, 100)\nh = oneAPI.ones(Float32, 100)\ni = oneAPI.rand(Float32, 100)\n\n# Do-block for automatic cleanup\nresult = oneArray{Float32}(100) do arr\n    arr .= 1.0f0\n    sum(arr)  # Returns result, arr is freed automatically\nend\n```\n\n## Array Operations\n\n`oneArray` implements the full `AbstractArray` interface and supports:\n\n### Broadcasting\n\n```julia\na = oneArray(rand(Float32, 100))\nb = oneArray(rand(Float32, 100))\n\nc = a .+ b          # Element-wise addition\nd = a .* 2.0f0      # Scalar multiplication\ne = sin.(a)         # Unary operations\nf = a .+ b .* c     # Fused operations\n```\n\n### Reductions\n\n```julia\na = oneArray(rand(Float32, 100))\n\ns = sum(a)          # Sum\np = prod(a)         # Product\nm = maximum(a)      # Maximum\nn = minimum(a)      # Minimum\nμ = mean(a)         # Mean (requires Statistics)\n```\n\n### Mapping\n\n```julia\na = oneArray(rand(Float32, 100))\n\nb = map(x -> x^2, a)        # Apply function\nc = map(+, a, b)            # Binary operation\n```\n\n### Accumulation\n\n```julia\na = oneArray([1, 2, 3, 4])\n\nb = cumsum(a)       # Cumulative sum: [1, 3, 6, 10]\nc = cumprod(a)      # Cumulative product: [1, 2, 6, 24]\n```\n\n### Finding Elements\n\n```julia\na = oneArray([1.0f0, -2.0f0, 3.0f0, -4.0f0])\n\nindices = findall(x -> x > 0, a)  # Indices of positive elements\n```\n\n### Random Number Generation\n\n```julia\nusing oneAPI, Random\n\n# Uniform distribution\na = oneAPI.rand(Float32, 100)\nb = oneAPI.rand(Float32, 10, 10)\n\n# Normal distribution\nc = oneAPI.randn(Float32, 100)\n\n# With seed\nRandom.seed!(1234)\nd = oneAPI.rand(Float32, 100)\n```\n\n## Data Transfer\n\n### CPU to GPU\n\n```julia\n# Using constructor\nh_array = rand(Float32, 100)\nd_array = oneArray(h_array)\n\n# Using copyto!\nd_array = oneArray{Float32}(undef, 100)\ncopyto!(d_array, h_array)\n```\n\n### GPU to CPU\n\n```julia\n# Using Array constructor\nh_array = Array(d_array)\n\n# Using copyto!\nh_array = Vector{Float32}(undef, 100)\ncopyto!(h_array, d_array)\n```\n\n### GPU to GPU\n\n```julia\nd_array1 = oneArray(rand(Float32, 100))\nd_array2 = similar(d_array1)\ncopyto!(d_array2, d_array1)\n```\n\n## Memory Types Comparison\n\n| Memory Type | CPU Access | GPU Access | Performance | Use Case |\n|-------------|-----------|------------|-------------|----------|\n| Device (default) | ❌ No | ✅ Fast | Fastest | GPU computations |\n| Shared | ✅ Yes | ✅ Good | Good | CPU-GPU data sharing |\n| Host | ✅ Yes | ✅ Slower | Moderate | Staging, pinned buffers |\n\n```julia\n# Device memory (default, fastest for GPU)\na = oneArray{Float32}(undef, 100)\n\n# Shared memory (CPU and GPU accessible)\nb = oneArray{Float32,1,oneL0.SharedBuffer}(undef, 100)\n\n# Host memory (CPU memory visible to GPU)\nc = oneArray{Float32,1,oneL0.HostBuffer}(undef, 100)\n\n# Query memory type\nis_device(a)  # true\nis_shared(b)  # true\nis_host(c)    # true\n```\n\n## Views and Slicing\n\n`oneArray` supports array views for efficient sub-array operations without copying:\n\n```julia\na = oneArray(rand(Float32, 100))\n\n# Create a view\nv = view(a, 1:50)\nv .= 0.0f0  # Modifies first 50 elements of a\n\n# Slicing returns a view\ns = a[1:50]  # This is a view, not a copy\n```\n\n## Reshaping\n\n```julia\na = oneArray(rand(Float32, 100))\n\n# Reshape to 2D\nb = reshape(a, 10, 10)\n\n# Flatten\nc = vec(b)  # Returns 1D view\n```\n\n## Advanced: Custom Array Wrappers\n\nFor advanced use cases, oneAPI.jl provides type aliases for array wrappers:\n\n- `oneDenseArray`: Dense contiguous arrays\n- `oneStridedArray`: Arrays with arbitrary strides (including views)\n- `oneWrappedArray`: Any array backed by a oneArray\n\nThese are useful for writing functions that accept various array types:\n\n```julia\nfunction my_kernel!(a::oneStridedArray{Float32})\n    # Accepts oneArray and views\n    a .+= 1.0f0\nend\n```\n"
  },
  {
    "path": "docs/src/api/compiler.md",
    "content": "# Compiler and Reflection\n\nThis page documents the compiler interface and code reflection tools for oneAPI.jl.\n\n## Code Reflection\n\noneAPI.jl provides macros for inspecting code generation at various stages:\n\n- `@device_code_lowered` - Show lowered IR (desugared Julia code)\n- `@device_code_typed` - Show type-inferred IR\n- `@device_code_warntype` - Show type-inferred IR with type stability warnings\n- `@device_code_llvm` - Show LLVM IR\n- `@device_code_spirv` - Show SPIR-V assembly\n- `@device_code` - Show all compilation stages interactively\n\nThese macros are re-exported from GPUCompiler.jl. See the [GPUCompiler documentation](https://github.com/JuliaGPU/GPUCompiler.jl) for detailed usage.\n\n### `return_type(f, tt) -> Type`\n\nReturn the inferred return type of function `f` when called with argument types `tt` in a GPU kernel context.\n\n**Arguments:**\n- `f`: Function to analyze\n- `tt`: Tuple type of arguments\n\n**Returns:**\n- Type that `f(args...)` would return where `args::tt`\n\n**Example:**\n```julia\nfunction compute(x::Float32)\n    return x * 2.0f0\nend\n\nrt = oneAPI.return_type(compute, Tuple{Float32})\n@assert rt == Float32\n```\n\n\n## Inspecting Generated Code\n\nCode reflection tools help you understand how your Julia code is compiled to GPU code:\n\n### LLVM IR\n\nView the LLVM intermediate representation:\n\n```julia\nusing oneAPI\n\nfunction kernel(a, b)\n    i = get_global_id()\n    @inbounds a[i] = b[i] + 1.0f0\n    return\nend\n\na = oneArray(zeros(Float32, 10))\nb = oneArray(rand(Float32, 10))\n\n@device_code_llvm @oneapi groups=1 items=10 kernel(a, b)\n```\n\n### SPIR-V Assembly\n\nView the final SPIR-V assembly that runs on the GPU:\n\n```julia\n@device_code_spirv @oneapi groups=1 items=10 kernel(a, b)\n```\n\n### Type Inference\n\nCheck for type instabilities that hurt performance:\n\n```julia\n@device_code_warntype @oneapi groups=1 items=10 kernel(a, b)\n```\n\n### Type-Inferred IR\n\nSee the typed intermediate representation:\n\n```julia\n@device_code_typed @oneapi groups=1 items=10 kernel(a, b)\n```\n\n### Interactive Inspection\n\nUse `@device_code` for an interactive menu:\n\n```julia\n@device_code @oneapi groups=1 items=10 kernel(a, b)\n# Opens a menu to select which compilation stage to view\n```\n\n## Return Type Inference\n\nQuery the return type of a kernel:\n\n```julia\nfunction compute(x::Float32)\n    return x * 2.0f0\nend\n\n# Infer return type\nrt = oneAPI.return_type(compute, Tuple{Float32})\n@assert rt == Float32\n```\n\n## Debugging Type Issues\n\n### Common Type Instability Sources\n\n```julia\n# ❌ Type instability: Conditional returns different types\nfunction bad_kernel(x, flag)\n    if flag\n        return x        # Float32\n    else\n        return 0        # Int\n    end\nend\n\n# ✅ Type stable: Consistent return type\nfunction good_kernel(x, flag)\n    if flag\n        return x        # Float32\n    else\n        return 0.0f0    # Float32\n    end\nend\n```\n\n### Using @device_code_warntype\n\n```julia\nfunction mystery_kernel!(output, input)\n    i = get_global_id()\n    @inbounds output[i] = some_complex_function(input[i])\n    return\nend\n\n# Check for type issues\n@device_code_warntype @oneapi groups=1 items=10 mystery_kernel!(a, b)\n\n# Look for red warnings indicating type instability\n```\n\n## Compilation Options\n\n### Kernel vs Device Function\n\n```julia\n# Compile as kernel (default for @oneapi)\n@device_code_llvm @oneapi kernel=true kernel(a, b)\n\n# Compile as device function (callable from other kernels)\n@device_code_llvm @oneapi kernel=false helper_function(x)\n```\n\n### Always Inline\n\nForce inlining of device functions:\n\n```julia\n@oneapi always_inline=true kernel(a, b)\n```\n\n### Custom Kernel Name\n\nSpecify a custom name for the kernel:\n\n```julia\n@oneapi name=\"my_custom_kernel\" kernel(a, b)\n```\n\n## Example: Optimizing a Kernel\n\nHere's a workflow for optimizing a kernel using reflection tools:\n\n```julia\nusing oneAPI\n\n# Initial version\nfunction sum_kernel_v1!(result, data)\n    i = get_global_id()\n    if i == 1\n        sum = 0\n        for j in 1:length(data)\n            sum += data[j]\n        end\n        result[1] = sum\n    end\n    return\nend\n\ndata = oneArray(rand(Float32, 1000))\nresult = oneArray(zeros(Float32, 1))\n\n# Check for type issues\n@device_code_warntype @oneapi groups=1 items=1 sum_kernel_v1!(result, data)\n# Notice: `sum` might be Int instead of Float32!\n\n# Fixed version\nfunction sum_kernel_v2!(result, data)\n    i = get_global_id()\n    if i == 1\n        sum = 0.0f0  # Explicitly Float32\n        for j in 1:length(data)\n            sum += data[j]\n        end\n        result[1] = sum\n    end\n    return\nend\n\n# Verify the fix\n@device_code_warntype @oneapi groups=1 items=1 sum_kernel_v2!(result, data)\n# Should be type-stable now!\n\n# Check the generated code\n@device_code_llvm @oneapi groups=1 items=1 sum_kernel_v2!(result, data)\n```\n\n## Profiling\n\nFor performance profiling, see the [Performance Guide](@ref).\n\n## Troubleshooting\n\n### Compilation Errors\n\nIf you encounter compilation errors:\n\n1. **Check type stability**: Use `@device_code_warntype`\n2. **Inspect LLVM IR**: Use `@device_code_llvm` to see if the issue is in LLVM generation\n3. **Simplify the kernel**: Comment out sections to isolate the problematic code\n4. **Check argument types**: Ensure arguments are GPU-compatible (isbits types)\n\n### SPIR-V Issues\n\nIf SPIR-V generation fails:\n\n1. **Update dependencies**: Ensure SPIRV-LLVM-Translator is up to date\n2. **Check device capabilities**: Some operations require specific hardware features\n3. **Reduce complexity**: Very complex kernels might hit compiler limits\n\n### Performance Issues\n\nIf your kernel is slow:\n\n1. **Profile memory access patterns**: Coalesced access is crucial\n2. **Check occupancy**: Are you launching enough work-items?\n3. **Minimize barriers**: Synchronization has overhead\n4. **Use local memory wisely**: It's faster than global memory but limited in size\n"
  },
  {
    "path": "docs/src/api/context.md",
    "content": "# Context and Device Management\n\nThis page documents the API for managing Level Zero drivers, devices, and contexts in oneAPI.jl.\n\n## Overview\n\noneAPI.jl uses task-local state to manage GPU resources. This allows different Julia tasks to\nwork with different drivers, devices, or contexts without interfering with each other.\n\nThe typical hierarchy is:\n- **Driver**: Represents a Level Zero driver (usually one per GPU vendor/installation)\n- **Device**: Represents a physical GPU device\n- **Context**: Manages resources like memory allocations and command queues\n\n## Driver Management\n\n### `driver() -> ZeDriver`\n\nGet the current Level Zero driver for the calling task. If no driver has been explicitly\nset with `driver!`, returns the first available driver. The driver selection is task-local.\n\n### `driver!(drv::ZeDriver)`\n\nSet the current Level Zero driver for the calling task. This also clears the current\ndevice selection, as devices are associated with specific drivers.\n\n### `drivers() -> Vector{ZeDriver}`\n\nReturn a list of all available Level Zero drivers.\n\n## Device Management\n\n### `device() -> ZeDevice`\n\nGet the current Level Zero device for the calling task. If no device has been explicitly\nset with `device!`, returns the first available device for the current driver. The device\nselection is task-local.\n\n### `device!(dev::ZeDevice)` / `device!(i::Int)`\n\nSet the current Level Zero device for the calling task. Can pass either a device object or\na 1-based device index.\n\n### `devices() -> Vector{ZeDevice}` / `devices(drv::ZeDriver)`\n\nReturn a list of available Level Zero devices. Without arguments, returns devices for\nthe current driver.\n\n## Context Management\n\n### `context() -> ZeContext`\n\nGet the current Level Zero context for the calling task. If no context has been explicitly\nset with `context!`, returns a global context for the current driver. Contexts manage the\nlifetime of resources like memory allocations and command queues.\n\n### `context!(ctx::ZeContext)`\n\nSet the current Level Zero context for the calling task.\n\n## Command Queues\n\n### `global_queue(ctx::ZeContext, dev::ZeDevice) -> ZeCommandQueue`\n\nGet the global command queue for the given context and device. This queue is used as the\ndefault queue for executing operations. The queue is created with in-order execution flags.\n\n### `synchronize()`\n\nBlock the host thread until all operations on the global command queue for the current\ncontext and device have completed.\n\n\n## Example Workflow\n\n```julia\nusing oneAPI\n\n# List available drivers\ndrv_list = drivers()\nprintln(\"Available drivers: \", length(drv_list))\n\n# Select a specific driver\ndriver!(drv_list[1])\n\n# List devices for current driver\ndev_list = devices()\nprintln(\"Available devices: \", length(dev_list))\n\n# Select a specific device\ndevice!(dev_list[1])\n\n# Get the current context (created automatically)\nctx = context()\n\n# Perform GPU operations...\na = oneArray(rand(Float32, 100))\n\n# Wait for all operations to complete\nsynchronize()\n```\n\n## Multi-Device Programming\n\nYou can use different devices in different Julia tasks:\n\n```julia\nusing oneAPI\n\n# Task 1: Use first device\nThreads.@spawn begin\n    device!(1)\n    a = oneArray(rand(Float32, 100))\n    # ... operations on device 1 ...\nend\n\n# Task 2: Use second device\nThreads.@spawn begin\n    device!(2)\n    b = oneArray(rand(Float32, 100))\n    # ... operations on device 2 ...\nend\n```\n"
  },
  {
    "path": "docs/src/api/kernels.md",
    "content": "# Kernel Programming\n\nThis page documents the kernel programming API for writing custom GPU kernels in oneAPI.jl.\n\n## Kernel Launch\n\n### `@oneapi [kwargs...] kernel(args...)`\n\nHigh-level interface for launching Julia kernels on Intel GPUs using oneAPI.\n\nThis macro compiles a Julia function to SPIR-V, prepares the arguments, and optionally\nlaunches the kernel on the GPU.\n\n**Keyword Arguments:**\n\n**Macro Keywords (compile-time):**\n- `launch::Bool=true`: Whether to launch the kernel immediately\n\n**Compiler Keywords:**\n- `kernel::Bool=false`: Whether to compile as a kernel or device function\n- `name::Union{String,Nothing}=nothing`: Explicit name for the kernel\n- `always_inline::Bool=false`: Whether to always inline device functions\n\n**Launch Keywords (runtime):**\n- `groups`: Number of workgroups (required). Can be an integer or tuple.\n- `items`: Number of work-items per workgroup (required). Can be an integer or tuple.\n- `queue::ZeCommandQueue`: Command queue to submit to (defaults to global queue).\n\n### `zefunction(f, tt; kwargs...)`\n\nCompile a Julia function to a Level Zero kernel function. This is the lower-level interface\nused by `@oneapi`. Returns a callable kernel object.\n\n### `kernel_convert(x)`\n\nConvert arguments for kernel execution. This function is called for every argument passed to\na kernel, allowing customization of argument conversion. By default, it converts `oneArray`\nto `oneDeviceArray`.\n\n\n## Basic Kernel Example\n\n```julia\nusing oneAPI\n\nfunction vadd_kernel!(a, b, c)\n    i = get_global_id()\n    if i <= length(a)\n        @inbounds c[i] = a[i] + b[i]\n    end\n    return\nend\n\nN = 1024\na = oneArray(rand(Float32, N))\nb = oneArray(rand(Float32, N))\nc = similar(a)\n\n# Launch with 4 workgroups of 256 work-items each\n@oneapi groups=4 items=256 vadd_kernel!(a, b, c)\n```\n\n## Launch Configuration\n\n### Workgroups and Work-Items\n\nThe oneAPI execution model is based on:\n- **Work-items**: Individual threads of execution (analogous to CUDA threads)\n- **Workgroups**: Groups of work-items that can synchronize and share local memory (analogous to CUDA blocks)\n\n```julia\n# 1D configuration\n@oneapi groups=10 items=64 kernel(args...)        # 640 work-items total\n\n# 2D configuration\n@oneapi groups=(10, 10) items=(8, 8) kernel(args...)  # 6400 work-items total\n\n# 3D configuration\n@oneapi groups=(4, 4, 4) items=(4, 4, 4) kernel(args...)  # 4096 work-items total\n```\n\n### Determining Launch Configuration\n\n```julia\n# For simple element-wise operations\nN = length(array)\nitems = 256  # Typical workgroup size\ngroups = cld(N, items)  # Ceiling division\n\n@oneapi groups=groups items=items kernel(array)\n```\n\n### Compile Without Launch\n\nYou can compile a kernel without launching it:\n\n```julia\n# Compile the kernel\nkernel = @oneapi launch=false vadd_kernel!(a, b, c)\n\n# Launch later with different configurations\nkernel(a, b, c; groups=4, items=256)\nkernel(a, b, c; groups=8, items=128)\n```\n\n## Device Intrinsics\n\nInside GPU kernels, you can use various intrinsics to query execution context and synchronize work-items.\n\n### Thread Indexing\n\n```julia\n# Global ID (unique across all work-items)\ni = get_global_id()      # 1D linear index\ni = get_global_id(0)     # X dimension\nj = get_global_id(1)     # Y dimension\nk = get_global_id(2)     # Z dimension\n\n# Local ID (within workgroup)\nlocal_i = get_local_id()   # 1D linear index\nlocal_i = get_local_id(0)  # X dimension\nlocal_j = get_local_id(1)  # Y dimension\nlocal_k = get_local_id(2)  # Z dimension\n\n# Workgroup ID\ngroup_i = get_group_id(0)  # X dimension\ngroup_j = get_group_id(1)  # Y dimension\ngroup_k = get_group_id(2)  # Z dimension\n\n# Workgroup size\nlocal_size = get_local_size()   # Total work-items in workgroup\nlocal_size_x = get_local_size(0)\nlocal_size_y = get_local_size(1)\n\n# Global size\nglobal_size = get_global_size()   # Total work-items\nglobal_size_x = get_global_size(0)\n```\n\n### 2D Matrix Example\n\n```julia\nfunction matmul_kernel!(C, A, B)\n    # Get 2D indices\n    row = get_global_id(0)\n    col = get_global_id(1)\n\n    if row <= size(C, 1) && col <= size(C, 2)\n        sum = 0.0f0\n        for k in 1:size(A, 2)\n            @inbounds sum += A[row, k] * B[k, col]\n        end\n        @inbounds C[row, col] = sum\n    end\n    return\nend\n\nM, N, K = 256, 256, 256\nA = oneArray(rand(Float32, M, K))\nB = oneArray(rand(Float32, K, N))\nC = oneArray{Float32}(undef, M, N)\n\n# Launch with 2D configuration\nitems = (16, 16)  # 16x16 work-items per workgroup\ngroups = (cld(M, items[1]), cld(N, items[2]))\n\n@oneapi groups=groups items=items matmul_kernel!(C, A, B)\n```\n\n### Synchronization\n\n```julia\n# Barrier: synchronize all work-items in a workgroup\nbarrier()\n\n# Memory fences (ensure memory operations are visible)\nmem_fence()     # Both local and global memory\nlocal_mem_fence()   # Local memory only\nglobal_mem_fence()  # Global memory only\n```\n\n### Local Memory\n\nLocal memory (workgroup-shared memory) enables cooperation between work-items:\n\n```julia\nfunction optimized_reduction!(result, input)\n    local_id = get_local_id()\n    local_size = get_local_size()\n\n    # Allocate local memory (shared within workgroup)\n    local_data = oneLocalArray(Float32, 256)\n\n    # Load into local memory\n    @inbounds local_data[local_id] = input[get_global_id()]\n    barrier()\n\n    # Tree reduction in local memory\n    stride = local_size ÷ 2\n    while stride > 0\n        if local_id <= stride\n            @inbounds local_data[local_id] += local_data[local_id + stride]\n        end\n        barrier()\n        stride ÷= 2\n    end\n\n    # First work-item writes result\n    if local_id == 1\n        @inbounds result[get_group_id()] = local_data[1]\n    end\n    return\nend\n```\n\n### Atomic Operations\n\nFor thread-safe operations on shared data:\n\n```julia\n# Atomic add\noneAPI.atomic_add!(ptr, value)\n\n# Atomic exchange\nold_value = oneAPI.atomic_xchg!(ptr, new_value)\n\n# Atomic compare-and-swap\nold_value = oneAPI.atomic_cas!(ptr, compare, new_value)\n\n# Atomic min/max\noneAPI.atomic_min!(ptr, value)\noneAPI.atomic_max!(ptr, value)\n```\n\nExample histogram kernel:\n\n```julia\nfunction histogram_kernel!(hist, data, bins)\n    i = get_global_id()\n    if i <= length(data)\n        @inbounds val = data[i]\n        bin = clamp(floor(Int, val * bins) + 1, 1, bins)\n        oneAPI.atomic_add!(pointer(hist, bin), 1)\n    end\n    return\nend\n```\n\n## Kernel Restrictions\n\nGPU kernels have certain restrictions:\n\n1. **Must return `nothing`**: Kernels cannot return values directly. Use output arrays instead.\n2. **No dynamic memory allocation**: Cannot allocate arrays inside kernels\n3. **No I/O operations**: Cannot print or write to files (use printf-style debugging with care)\n4. **Limited recursion**: Avoid or minimize recursive calls\n5. **Type stability**: Ensure type-stable code for best performance\n\n```julia\n# ❌ Bad: Returns a value\nfunction bad_kernel(a)\n    return a[1] + 1\nend\n\n# ✅ Good: Returns nothing, uses output parameter\nfunction good_kernel!(result, a)\n    @inbounds result[1] = a[1] + 1\n    return\nend\n```\n\n## KernelAbstractions.jl\n\nFor portable GPU programming across CUDA, AMD, and Intel GPUs, use KernelAbstractions.jl:\n\n```julia\nusing KernelAbstractions\nusing oneAPI\n\n@kernel function generic_kernel!(a, b)\n    i = @index(Global)\n    @inbounds a[i] = a[i] + b[i]\nend\n\na = oneArray(rand(Float32, 100))\nb = oneArray(rand(Float32, 100))\n\nbackend = get_backend(a)  # oneAPIBackend()\nkernel! = generic_kernel!(backend)\nkernel!(a, b, ndrange=length(a))\n```\n\nSee the [KernelAbstractions.jl documentation](https://juliagpu.github.io/KernelAbstractions.jl/stable/) for more details.\n\n## Debugging Kernels\n\nSee the [Compiler and Reflection](@ref) page for tools to inspect generated code and debug kernels.\n"
  },
  {
    "path": "docs/src/api/memory.md",
    "content": "# Memory Management\n\nThis page documents memory management in oneAPI.jl.\n\n## Memory Operations\n\n### `Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice, dst, src, N)`\n\nLow-level memory copy operation on the GPU. Copies `N` elements from `src` to `dst` using\nthe specified context and device. Both `src` and `dst` can be either host pointers (`Ptr`)\nor device pointers (`ZePtr`).\n\n!!! warning\n    This is a low-level function. No bounds checking is performed. For safe array copying,\n    use `copyto!` on `oneArray` objects instead.\n\n### `unsafe_fill!(ctx::ZeContext, dev::ZeDevice, ptr, pattern, N)`\n\nLow-level memory fill operation on the GPU. Fills `N` elements at `ptr` with the given pattern\nusing the specified context and device.\n\n!!! warning\n    This is a low-level function. For safe array operations, use `fill!` on `oneArray`\n    objects instead.\n\n\n## Memory Types\n\noneAPI supports three types of memory through Unified Shared Memory (USM):\n\n### Device Memory (Default)\n\nFastest GPU access, not directly accessible from CPU.\n\n```julia\n# Create array in device memory (default)\na = oneArray{Float32}(undef, 1000)\n@assert is_device(a)\n\n# Or explicitly specify\nb = oneArray{Float32,1,oneL0.DeviceBuffer}(undef, 1000)\n```\n\n**Advantages:**\n- Fastest GPU access\n- Best for compute-intensive operations\n\n**Disadvantages:**\n- Cannot directly access from CPU\n- Requires explicit copy to/from CPU\n\n**Use when:** Data stays on GPU for multiple operations\n\n### Shared Memory\n\nAccessible from both CPU and GPU with automatic migration.\n\n```julia\n# Create array in shared memory\na = oneArray{Float32,1,oneL0.SharedBuffer}(undef, 1000)\n@assert is_shared(a)\n\n# Can access from CPU\na[1] = 42.0f0  # Automatic migration to CPU\nprintln(a[1])  # Read from CPU\n\n# Can use in GPU kernels\n@oneapi groups=1 items=1000 kernel(a)  # Automatic migration to GPU\n```\n\n**Advantages:**\n- Accessible from both CPU and GPU\n- Unified virtual addressing\n- Automatic migration\n\n**Disadvantages:**\n- Migration overhead\n- Slower than device memory for pure GPU work\n\n**Use when:** Frequent CPU-GPU data exchange needed\n\n### Host Memory\n\nCPU memory that's pinned and visible to GPU.\n\n```julia\n# Create array in host memory\na = oneArray{Float32,1,oneL0.HostBuffer}(undef, 1000)\n@assert is_host(a)\n\n# Direct CPU access\na[1] = 42.0f0\n\n# Can be used by GPU (but slower than device memory)\n@oneapi groups=1 items=1000 kernel(a)\n```\n\n**Advantages:**\n- Direct CPU access\n- Pinned memory (faster PCIe transfers)\n- Good for staging\n\n**Disadvantages:**\n- Slower GPU access than device memory\n- Uses pinned system memory (limited resource)\n\n**Use when:** Staging data for transfer, or CPU needs to write while GPU reads\n\n## Memory Type Comparison\n\n| Feature | Device | Shared | Host |\n|---------|--------|--------|------|\n| CPU Access | ❌ No | ✅ Yes | ✅ Yes |\n| GPU Performance | ⭐⭐⭐ Fastest | ⭐⭐ Good | ⭐ Slower |\n| Migration | Manual | Automatic | Manual |\n| Use Case | Pure GPU | Mixed CPU/GPU | Staging |\n\n## Memory Allocation and Deallocation\n\n### Automatic Management\n\nJulia's garbage collector automatically manages `oneArray` memory:\n\n```julia\nfunction allocate_and_compute()\n    a = oneArray(rand(Float32, 1000))\n    b = oneArray(rand(Float32, 1000))\n    c = a .+ b\n    return Array(c)  # Only c is copied back\n    # a and b will be garbage collected\nend\n\nresult = allocate_and_compute()\n# GPU memory for a and b is freed eventually\n```\n\n### Manual Garbage Collection\n\nForce garbage collection to free GPU memory:\n\n```julia\n# Allocate large arrays\na = oneArray(rand(Float32, 10_000_000))\nb = oneArray(rand(Float32, 10_000_000))\n\n# Clear references\na = nothing\nb = nothing\n\n# Force GC to reclaim GPU memory\nGC.gc()\n```\n\n### Explicit Freeing\n\nImmediately free GPU memory (use with caution):\n\n```julia\na = oneArray(rand(Float32, 1000))\n# ... use a ...\n\n# Explicitly free (dangerous if still in use!)\nunsafe_free!(a)\n\n# a is now invalid - do not use!\n```\n\n!!! warning\n    Only use `unsafe_free!` when you're certain the array is no longer needed, including\n    by any pending GPU operations. Prefer letting the GC handle cleanup.\n\n### Do-Block Pattern\n\nUse do-blocks for automatic cleanup:\n\n```julia\nresult = oneArray{Float32}(1000) do temp\n    # temp is automatically freed when block exits\n    temp .= 1.0f0\n    sum(temp)  # Result is returned\nend\n```\n\n## Memory Pooling\n\noneAPI.jl uses memory pooling to reduce allocation overhead:\n\n```julia\nusing oneAPI\n\n# Allocations are pooled\nfor i in 1:100\n    a = oneArray(rand(Float32, 1000))\n    # ... use a ...\n    # Memory is returned to pool, not freed\nend\n```\n\nThe pool automatically manages memory reuse, reducing allocation costs.\n\n## Checking Memory Usage\n\nQuery GPU memory info:\n\n```julia\nusing oneAPI.oneL0\n\ndev = device()\nprops = memory_properties(dev)\n\nfor prop in props\n    println(\"Memory size: \", prop.totalSize ÷ (1024^3), \" GB\")\nend\n```\n\n## Out of Memory Errors\n\nIf you encounter out-of-memory errors:\n\n### 1. Reduce Batch Size\n\n```julia\n# Instead of processing all at once\nresult = process(oneArray(huge_data))\n\n# Process in smaller batches\nfor batch in batches(huge_data, size=1000)\n    result = process(oneArray(batch))\n    # Process result...\nend\n```\n\n### 2. Free Unused Arrays\n\n```julia\na = oneArray(rand(Float32, 1_000_000))\nb = compute(a)\n\n# If 'a' is no longer needed\nunsafe_free!(a)\n\n# Continue with 'b'\nresult = process(b)\n```\n\n### 3. Use Shared or Host Memory\n\n```julia\n# Instead of device memory\na = oneArray{Float32}(undef, huge_size)\n\n# Use shared memory (can swap to system RAM)\na = oneArray{Float32,1,oneL0.SharedBuffer}(undef, huge_size)\n```\n\n### 4. Force Garbage Collection\n\n```julia\n# After freeing references\nlarge_array = nothing\nGC.gc()  # Immediately reclaim GPU memory\n```\n\n### 5. Use Multiple Devices\n\n```julia\n# Distribute work across devices\nfor (i, dev_id) in enumerate(1:length(devices()))\n    Threads.@spawn begin\n        device!(dev_id)\n        partition = data_partitions[i]\n        a = oneArray(partition)\n        result = compute(a)\n        # ...\n    end\nend\n```\n\n## Low-Level Memory Operations\n\nFor advanced users, oneL0 provides direct memory management:\n\n```julia\nusing oneAPI.oneL0\n\nctx = context()\ndev = device()\n\n# Allocate device memory\nptr = device_alloc(ctx, dev, 1024, 8)  # 1024 bytes, 8-byte aligned\n\n# Copy data\ndata = rand(Float32, 256)\nGC.@preserve data begin\n    unsafe_copyto!(ctx, dev, ptr, pointer(data), 256)\nend\n\n# Free memory\nfree(ctx, ptr)\n```\n\n## Memory Advise and Prefetch\n\nHint to the runtime about memory usage (shared memory only):\n\n```julia\nusing oneAPI.oneL0\n\na = oneArray{Float32,1,oneL0.SharedBuffer}(undef, 1000)\n\n# Advise that this will be read-only on the device\n# (Implementation depends on Level Zero driver support)\n\n# Prefetch to device\nctx = context()\ndev = device()\nqueue = global_queue(ctx, dev)\n\nexecute!(queue) do list\n    append_prefetch!(list, pointer(a), sizeof(a))\nend\n```\n\n## Best Practices\n\n1. **Use device memory by default** for best GPU performance\n2. **Use shared memory** when you need CPU access without explicit copies\n3. **Use host memory** for staging data or when CPU writes frequently\n4. **Let GC handle cleanup** unless you have specific memory pressure\n5. **Reuse allocations** within loops when possible\n6. **Profile memory usage** to identify bottlenecks\n7. **Be cautious with `unsafe_free!`** - use only when you're certain it's safe\n\n## Example: Efficient Memory Usage\n\n```julia\nusing oneAPI\n\nfunction efficient_pipeline(data_batches)\n    # Allocate output buffer once\n    result = oneArray{Float32}(undef, 1000)\n    results = Float32[]\n\n    for batch in data_batches\n        # Reuse input buffer by copying\n        input = oneArray(batch)\n\n        # Compute in-place when possible\n        @oneapi groups=4 items=250 process_kernel!(result, input)\n\n        # Copy result back\n        push!(results, Array(result)...)\n\n        # Input is freed when loop continues\n    end\n\n    return results\nend\n```\n"
  },
  {
    "path": "docs/src/api.md",
    "content": "# API Reference\n\nThis page provides an overview of the oneAPI.jl API. For detailed documentation, see the specific API reference pages:\n\n- [Context & Device Management](api/context.md) - Managing drivers, devices, and contexts\n- [Array Operations](api/arrays.md) - Working with GPU arrays\n- [Kernel Programming](api/kernels.md) - Writing and launching custom kernels\n- [Memory Management](api/memory.md) - Memory allocation and transfer\n- [Compiler & Reflection](api/compiler.md) - Code generation and introspection\n\n## Core Functions\n\n```@autodocs\nModules = [oneAPI]\nPages   = [\"src/context.jl\", \"src/utils.jl\"]\nFilter = t -> t !== oneAPI.synchronize\n```\n\n## Compiler Functions\n\n```@autodocs\nModules = [oneAPI]\nPages = [\"src/compiler/execution.jl\", \"src/compiler/reflection.jl\"]\n```\n\n## oneL0 (Level Zero)\n\nLow-level bindings to the Level Zero API. See the [Level Zero page](level_zero.md) for details.\n\n```@autodocs\nModules = [oneAPI.oneL0]\nFilter = t -> t !== oneAPI.oneL0.synchronize\n```\n\n## oneMKL\n\nIntel oneAPI Math Kernel Library bindings. See the [oneMKL page](onemkl.md) for details.\n\n```@autodocs\nModules = [oneAPI.oneMKL]\n```\n\n"
  },
  {
    "path": "docs/src/arrays.md",
    "content": "# Array Programming\n\noneAPI.jl provides an array type, `oneArray`, which lives on the GPU. It implements the interface defined by `GPUArrays.jl`, allowing for high-level array operations.\n\n## The `oneArray` Type\n\nThe `oneArray{T,N}` type represents an N-dimensional array with elements of type `T` stored on the GPU.\n\n```julia\nusing oneAPI\n\n# Allocate an uninitialized array\na = oneArray{Float32}(undef, 1024)\n\n# Initialize from a CPU array\nb = oneArray([1, 2, 3, 4])\n\n# Initialize with zeros/ones\nz = oneAPI.zeros(Float32, 100)\no = oneAPI.ones(Float32, 100)\n```\n\n## Array Operations\n\nSince `oneArray` implements the AbstractArray interface, you can use standard Julia array operations.\n\n```julia\na = oneArray(rand(Float32, 10))\nb = oneArray(rand(Float32, 10))\n\nc = a .+ b        # Element-wise addition\nd = sum(a)        # Reduction\ne = map(sin, a)   # Map\n```\n\n## Data Transfer\n\nTo move data between the host (CPU) and the device (GPU), use the constructors or `copyto!`.\n\n```julia\n# CPU to GPU\nd_a = oneArray(h_a)\n\n# GPU to CPU\nh_a = Array(d_a)\n```\n\n## Backend Agnostic Programming\n\nTo write code that works on both CPU and GPU (and other backends like CUDA), use the generic array interfaces provided by `GPUArrays.jl`. Avoid hardcoding `oneArray` in your functions; instead, accept `AbstractArray` and let the dispatch system handle the specific implementation.\n\n```julia\nfunction generic_add!(a::AbstractArray, b::AbstractArray)\n    a .+= b\n    return a\nend\n\n# Works on CPU\ngeneric_add!(rand(10), rand(10))\n\n# Works on Intel GPU\ngeneric_add!(oneArray(rand(10)), oneArray(rand(10)))\n```\n\n"
  },
  {
    "path": "docs/src/device.md",
    "content": "# Device Intrinsics\n\nWhen writing custom kernels, you have access to a set of device intrinsics that map to underlying hardware instructions.\n\n## Indexing\n\nThese functions allow you to determine the current thread's position in the execution grid.\n\n- `get_global_id(dim=0)`: Global index of the work item.\n- `get_local_id(dim=0)`: Local index of the work item within the workgroup.\n- `get_group_id(dim=0)`: Index of the workgroup.\n- `get_global_size(dim=0)`: Global size of the ND-range.\n- `get_local_size(dim=0)`: Size of the workgroup.\n- `get_num_groups(dim=0)`: Number of workgroups.\n\n## Synchronization\n\n- `barrier(flags=0)`: Synchronizes all work items in a workgroup.\n\n## Atomics\n\nAtomic operations are supported for thread-safe updates to memory.\n\n- `atomic_add!(ptr, val)`\n- `atomic_sub!(ptr, val)`\n- `atomic_inc!(ptr)`\n- `atomic_dec!(ptr)`\n- `atomic_min!(ptr, val)`\n- `atomic_max!(ptr, val)`\n- `atomic_and!(ptr, val)`\n- `atomic_or!(ptr, val)`\n- `atomic_xor!(ptr, val)`\n- `atomic_cmpxchg!(ptr, cmp, val)`\n\nSupported types for atomics generally include `Int32`, `Int64`, `UInt32`, `UInt64`, `Float32`, and `Float64`.\n\n## Math Functions\n\nStandard math functions from Julia's `Base` are supported within kernels (e.g., `sin`, `cos`, `exp`, `sqrt`).\n\n"
  },
  {
    "path": "docs/src/getting_started.md",
    "content": "# Getting Started\n\n## Basic Usage\n\nThe most basic usage involves moving data to the GPU using `oneArray` and performing operations on it.\n\n```julia\nusing oneAPI\n\n# Create an array on the CPU\na = rand(Float32, 1024)\n\n# Move it to the GPU\nd_a = oneArray(a)\n\n# Perform operations on the GPU\nd_b = d_a .+ 1.0f0\n\n# Move the result back to the CPU\nb = Array(d_b)\n```\n\n## Matrix Multiplication\n\nMatrix multiplication is accelerated using the oneMKL library when available.\n\n```julia\nusing oneAPI\n\nA = oneArray(rand(Float32, 128, 128))\nB = oneArray(rand(Float32, 128, 128))\n\n# This operation runs on the GPU\nC = A * B\n```\n\n## Writing Kernels\n\nFor custom operations, you can write kernels using the `@oneapi` macro.\n\n```julia\nusing oneAPI\n\nfunction my_kernel(a, b)\n    i = get_global_id()\n    @inbounds a[i] += b[i]\n    return\nend\n\na = oneArray(ones(Float32, 1024))\nb = oneArray(ones(Float32, 1024))\n\n# Launch the kernel with 1024 items\n@oneapi items=1024 my_kernel(a, b)\n```\n\nSee the [Kernel Programming](kernels.md) section for more details.\n\n"
  },
  {
    "path": "docs/src/index.md",
    "content": "# oneAPI.jl\n\n*Julia support for the oneAPI programming toolkit.*\n\noneAPI.jl provides support for working with the [oneAPI unified programming model](https://software.intel.com/en-us/oneapi). The package is currently verified to work with the implementation provided by the [Intel Compute Runtime](https://github.com/intel/compute-runtime), primarily on Linux.\n\n## Writing Portable Code\n\nWhile oneAPI.jl provides specific functionality for Intel GPUs, it is highly recommended to write **backend-agnostic code** whenever possible. This allows your code to run on various hardware backends (NVIDIA, AMD, Intel, Apple) without modification.\n\n- **[GPUArrays.jl](https://github.com/JuliaGPU/GPUArrays.jl)**: Use high-level array abstractions that work across different GPU backends.\n- **[KernelAbstractions.jl](https://github.com/JuliaGPU/KernelAbstractions.jl)**: Use this package for writing kernels that can be compiled for CPU, CUDA, ROCm, and oneAPI devices.\n\nDirect use of `oneAPI`-specific macros (like `@oneapi`) and types (like `oneArray`) should be reserved for cases where you need specific optimizations or features not covered by the generic abstractions.\n\n## Features\n\n- **High-level Array Abstractions**: `oneArray` type fully implementing the `GPUArrays.jl` interface.\n- **Kernel Programming**: Execute custom kernels written in Julia on Intel GPUs.\n- **Level Zero Integration**: Low-level access to the Level Zero API via the `oneL0` submodule.\n- **oneMKL Support**: Integration with Intel oneMKL for BLAS, LAPACK, and sparse operations.\n- **SYCL Integration**: Interoperability with SYCL (on Linux).\n\n## Requirements\n\n- **Julia**: 1.10 or higher\n- **OS**: Linux\n- **Hardware**: Intel Gen9 graphics or newer (including Intel Arc A-Series)\n\n"
  },
  {
    "path": "docs/src/installation.md",
    "content": "# Installation\n\n## Requirements\n\noneAPI.jl requires:\n- **Julia**: 1.10 or higher\n- **OS**: Linux (recommended) or Windows (experimental via WSL2)\n- **Hardware**: Intel Gen9 graphics or newer. For Intel Arc GPUs (A580, A750, A770, etc), **Linux 6.2+** is required.\n\n## Installing oneAPI.jl\n\nYou can install oneAPI.jl using the Julia package manager:\n\n```julia\npkg> add oneAPI\n```\n\nThis will automatically download the necessary binary dependencies, including:\n- `oneAPI loader`\n- `SPIR-V tools`\n- `Intel Compute Runtime` (if compatible hardware is found)\n\n## Verifying Installation\n\nAfter installation, you can verify that oneAPI.jl is working correctly and detecting your hardware:\n\n```julia\njulia> using oneAPI\njulia> oneAPI.versioninfo()\n```\n\nThe output should list the binary dependencies, toolchain versions, available drivers, and devices.\n\n## Troubleshooting Drivers\n\nIf no drivers or devices are detected, ensure that you have the correct Intel graphics drivers installed for your system.\n- On Linux, check if `libze_intel_gpu.so` or similar libraries are available.\n- On Windows (WSL2), ensure you have the latest Intel graphics drivers installed on the host Windows system and that WSL2 is configured to access the GPU.\n\nYou can explicitly select drivers and devices if multiple are available:\n\n```julia\njulia> drivers()\njulia> devices()\njulia> device!(1) # Select the first available device\n```\n\n## Using System Libraries (Advanced)\n\n!!! warning\n    Using system libraries instead of the provided artifacts is **not recommended** for most users. Only use this approach if you have specialized requirements or custom Intel binaries.\n\nBy default, oneAPI.jl uses pre-built binary artifacts (JLLs) for the Intel Compute Runtime, oneAPI loader, and related libraries. However, you may need to use system-installed libraries in certain situations:\n\n- Custom or newer Intel graphics drivers\n- Specialized hardware configurations\n- Development or debugging of the runtime stack\n- Systems where the artifacts are incompatible\n\n### Configuration Script\n\noneAPI.jl provides a helper script to discover and configure system libraries. From the Julia REPL:\n\n```julia\njulia> include(joinpath(pkgdir(oneAPI), \"res\", \"local.jl\"))\n```\n\nThis script will:\n1. Search for Intel libraries on your system:\n   - Intel Graphics Compiler (IGC): `libigc`, `libiga64`, `libigdfcl`, `libopencl-clang`\n   - Graphics Memory Management Library: `libigdgmm`\n   - Intel Compute Runtime (NEO): `libze_intel_gpu`, `libigdrcl`\n   - oneAPI Level Zero Loader: `libze_loader`, `libze_validation_layer`\n\n2. Generate preferences in `LocalPreferences.toml` that override the artifact paths\n\n### Manual Configuration\n\nYou can also manually set preferences to use specific library paths. Create or edit `LocalPreferences.toml` in your project or global environment:\n\n```toml\n[NEO_jll]\nlibze_intel_gpu_path = \"/usr/lib/x86_64-linux-gnu/libze_intel_gpu.so.1\"\nlibigdrcl_path = \"/usr/lib/x86_64-linux-gnu/intel-opencl/libigdrcl.so\"\n\n[libigc_jll]\nlibigc_path = \"/usr/lib/x86_64-linux-gnu/libigc.so\"\nlibigdfcl_path = \"/usr/lib/x86_64-linux-gnu/libigdfcl.so\"\n\n[gmmlib_jll]\nlibigdgmm_path = \"/usr/lib/x86_64-linux-gnu/libigdgmm.so\"\n\n[oneAPI_Level_Zero_Loader_jll]\nlibze_loader_path = \"/usr/lib/x86_64-linux-gnu/libze_loader.so\"\n```\n\n### Reverting to Artifacts\n\nTo revert to the default artifact binaries, simply delete the oneAPI-related entries from `LocalPreferences.toml` (or delete the entire file if it only contains these preferences).\n\n### Common Locations\n\nSystem libraries are typically installed in:\n\n**Ubuntu/Debian:**\n- `/usr/lib/x86_64-linux-gnu/`\n- `/usr/lib/x86_64-linux-gnu/intel-opencl/`\n\n**Fedora/RHEL:**\n- `/usr/lib64/`\n- `/usr/lib64/intel-opencl/`\n\n**Custom Intel oneAPI installation:**\n- `/opt/intel/oneapi/compiler/latest/linux/lib/`\n- `/opt/intel/oneapi/compiler/latest/linux/lib/x64/`\n\n### Verifying System Library Configuration\n\nAfter configuring system libraries, restart Julia and verify the configuration:\n\n```julia\njulia> using oneAPI\njulia> oneAPI.versioninfo()\n```\n\nCheck that the reported library paths match your system libraries. If issues arise, examine the `LocalPreferences.toml` file and ensure all paths are correct and the libraries are compatible with each other.\n\n"
  },
  {
    "path": "docs/src/kernels.md",
    "content": "# Kernel Programming\n\nFor maximum performance or custom operations not covered by high-level array abstractions, you can write custom kernels in Julia that execute on the GPU.\n\n## The `@oneapi` Macro\n\nThe `@oneapi` macro is used to launch a kernel on the device. It takes configuration arguments like the number of items (threads) and groups (blocks).\n\n```julia\nusing oneAPI\n\nfunction kernel(a, b)\n    i = get_global_id()\n    if i <= length(a)\n        @inbounds a[i] += b[i]\n    end\n    return\nend\n\na = oneArray(rand(Float32, 100))\nb = oneArray(rand(Float32, 100))\n\n# Launch configuration\nitems = 100\ngroups = 1\n\n@oneapi items=items groups=groups kernel(a, b)\n```\n\n## KernelAbstractions.jl\n\nFor portable kernel programming, it is highly recommended to use [KernelAbstractions.jl](https://github.com/JuliaGPU/KernelAbstractions.jl). This allows you to write kernels that work on CPU, CUDA, ROCm, and oneAPI.\n\n```julia\nusing KernelAbstractions, oneAPI\n\n@kernel function my_kernel!(a, b)\n    i = @index(Global, Linear)\n    @inbounds a[i] += b[i]\nend\n\n# Get the backend\nbackend = get_backend(a)\n\n# Instantiate the kernel\nk = my_kernel!(backend)\n\n# Launch with configuration\nk(a, b; ndrange=length(a))\n```\n\n## Device Intrinsics\n\nInside a kernel, you can use various intrinsics to interact with the hardware:\n- `get_global_id()`: Get the global thread ID.\n- `get_local_id()`: Get the local thread ID within a workgroup.\n- `get_group_id()`: Get the workgroup ID.\n- `barrier()`: Synchronize threads within a workgroup.\n\nThese correspond to standard OpenCL/Level Zero intrinsics.\n\n"
  },
  {
    "path": "docs/src/level_zero.md",
    "content": "# Level Zero Interface\n\nThe `oneL0` submodule provides low-level access to the Level Zero API, which gives you fine-grained control over the hardware.\n\n## Drivers and Devices\n\nYou can enumerate available drivers and devices:\n\n```julia\nusing oneAPI.oneL0\n\n# Get available drivers\ndrvs = drivers()\n\n# Get devices for a driver\ndevs = devices(first(drvs))\n\n# Inspect device properties\nprops = compute_properties(first(devs))\nprintln(\"Max workgroup size: \", props.maxTotalGroupSize)\n```\n\n## Contexts and Queues\n\nManage contexts and command queues for executing operations:\n\n```julia\n# Create a context\nctx = ZeContext(first(drvs))\n\n# Create a command queue\nqueue = ZeCommandQueue(ctx, first(devs))\n\n# Execute a command list\nexecute!(queue) do list\n    append_barrier!(list)\nend\n```\n\n## Memory Operations\n\nYou can perform low-level memory operations using command lists:\n\n```julia\nexecute!(queue) do list\n    append_copy!(list, dst_ptr, src_ptr, size)\nend\n```\n\n"
  },
  {
    "path": "docs/src/memory.md",
    "content": "# Memory Management\n\nEfficient memory management is crucial for GPU programming. oneAPI.jl provides tools to manage device memory allocation and data transfer.\n\n## Unified Shared Memory (USM)\n\noneAPI uses Unified Shared Memory, which allows for pointers that can be accessible from both the host and the device, or specific to one.\n\n- **Device Memory**: Accessible only by the device. Fastest access for kernels.\n- **Host Memory**: Accessible by the host and device.\n- **Shared Memory**: Automatically migrated between host and device.\n\n`oneArray` typically uses device memory for performance.\n\n## Allocation\n\nYou can perform low-level memory allocation using the `oneL0` submodule if needed, though `oneArray` handles this automatically.\n\n```julia\nusing oneAPI.oneL0\n\n# Allocate device memory\nptr = oneL0.zeMemAllocDevice(context(), device(), 1024, 1)\n\n# Free memory\noneL0.zeMemFree(context(), ptr)\n```\n\n## Garbage Collection\n\nJulia's garbage collector automatically manages `oneArray` objects. However, GPU memory is a limited resource. If you are running into out-of-memory errors, you might need to manually trigger garbage collection or free arrays.\n\n```julia\na = oneArray(rand(Float32, 1024*1024*100))\na = nothing\nGC.gc() # Reclaim memory\n```\n\n## Explicit Freeing\n\nFor immediate memory release, you can use `unsafe_free!`:\n\n```julia\nusing oneAPI\n\na = oneArray(rand(1024))\noneAPI.unsafe_free!(a)\n```\n\n**Warning**: Only use `unsafe_free!` if you are sure the array is no longer used, including by any pending GPU operations.\n\n"
  },
  {
    "path": "docs/src/onemkl.md",
    "content": "# oneMKL Integration\n\noneAPI.jl provides bindings to the Intel oneMKL library, enabling high-performance linear algebra operations on Intel GPUs.\n\n## Dense Linear Algebra (BLAS/LAPACK)\n\nStandard BLAS and LAPACK operations are automatically accelerated when using `oneArray`.\n\n```julia\nusing oneAPI, LinearAlgebra\n\nA = oneArray(rand(Float32, 100, 100))\nB = oneArray(rand(Float32, 100, 100))\n\n# Matrix multiplication (GEMM)\nC = A * B\n\n# Linear solve (AX = B)\nX = A \\ B\n```\n\n## Sparse Linear Algebra\n\noneAPI.jl supports sparse matrix operations via oneMKL's sparse BLAS functionality. These integrate with Julia's `SparseArrays` standard library.\n\n```julia\nusing oneAPI, oneAPI.oneMKL, SparseArrays, LinearAlgebra\n\n# Create a sparse matrix on CPU\nA = sprand(100, 100, 0.1)\n\n# Move to GPU (converts to oneMKL format)\ndA = oneMKL.oneSparseMatrixCSC(A)\n\n# Create a dense vector\nx = oneArray(rand(100))\n\n# Sparse matrix-vector multiplication\ny = dA * x\n```\n\nNote that `oneSparseMatrixCSC` is available for Compressed Sparse Column format, which is the standard in Julia.\n\n## FFTs\n\nFast Fourier Transforms are supported through `AbstractFFTs.jl` interface integration with oneMKL DFTs.\n\n```julia\nusing oneAPI, FFTW\n\na = oneArray(rand(ComplexF32, 1024))\n\n# Forward FFT\nb = fft(a)\n\n# Inverse FFT\nc = ifft(b)\n```\n\n"
  },
  {
    "path": "docs/src/troubleshooting.md",
    "content": "# Troubleshooting\n\n## Common Issues\n\n### No devices detected\n\n**Symptom**: `oneAPI.devices()` returns an empty list.\n\n**Solution**:\n1. Ensure you are running on Linux (recommended) or WSL2.\n2. Check if the Intel Compute Runtime is installed and accessible.\n3. Verify your user has permissions to access the GPU render device (usually `render` group).\n4. Run `oneAPI.versioninfo()` to see detailed diagnostic information.\n\n### \"Double type is not supported\"\n\n**Symptom**: Kernel compilation fails with an error about `Float64` or `Double` support.\n\n**Solution**:\nSome Intel GPUs (especially integrated graphics) lack native hardware support for 64-bit floating point operations.\n- Use `Float32` instead of `Float64`.\n- Check support with:\n  ```julia\n  using oneAPI.oneL0\n  oneL0.module_properties(device()).fp64flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP64 != 0\n  ```\n\n### \"Out of memory\" errors\n\n**Symptom**: Memory allocation fails.\n\n**Solution**:\n- Trigger garbage collection: `GC.gc()`.\n- Manually free unused arrays: `oneAPI.unsafe_free!(array)`.\n- Check if you are exceeding the device's memory capacity.\n\n## Debugging\n\n### Validation Layer\n\nEnable the Level Zero validation layer to catch API misuse:\n\n```bash\nexport ZE_ENABLE_VALIDATION_LAYER=1\nexport ZE_ENABLE_PARAMETER_VALIDATION=1\n```\n\n### Debug Mode\n\nEnable debug mode in oneAPI.jl to use debug builds of underlying toolchains (if available):\n\n```julia\noneAPI.set_debug!(true)\n```\n\n"
  },
  {
    "path": "docs/src/usage/performance.md",
    "content": "# Performance Guide\n\nThis guide provides tips and techniques for optimizing oneAPI.jl applications.\n\n## Quick Wins\n\n### 1. Use Device Memory\n\nDevice memory is fastest for GPU operations:\n\n```julia\n# ✅ Good: Device memory (default)\na = oneArray{Float32}(undef, 1000)\n\n# ❌ Slower: Shared memory (unless CPU access is needed)\na = oneArray{Float32,1,oneL0.SharedBuffer}(undef, 1000)\n```\n\n### 2. Minimize Data Transfers\n\nKeep data on GPU between operations:\n\n```julia\n# ❌ Bad: Unnecessary transfers\nfor i in 1:100\n    cpu_data = Array(gpu_array)  # GPU → CPU\n    cpu_data .+= 1\n    gpu_array = oneArray(cpu_data)  # CPU → GPU\nend\n\n# ✅ Good: Keep data on GPU\nfor i in 1:100\n    gpu_array .+= 1  # All on GPU\nend\n```\n\n### 3. Use Fused Operations\n\nBroadcasting automatically fuses operations:\n\n```julia\n# ❌ Slower: Multiple kernel launches\na = oneArray(rand(Float32, 1000))\nb = sin.(a)\nc = b .+ 1.0f0\nd = c .* 2.0f0\n\n# ✅ Faster: Single fused kernel\nd = 2.0f0 .* (sin.(a) .+ 1.0f0)\n```\n\n### 4. Specify Float32\n\nGPUs are typically optimized for single precision:\n\n```julia\n# ❌ Slower: Float64 (if not needed)\na = oneArray(rand(Float64, 1000))\n\n# ✅ Faster: Float32\na = oneArray(rand(Float32, 1000))\n```\n\n## Kernel Optimization\n\n### Launch Configuration\n\nChoose appropriate workgroup sizes:\n\n```julia\n# Typical good workgroup sizes\nitems = 256   # Common choice, adjust based on hardware\nitems = 128   # Try smaller if using lots of local memory\nitems = 512   # Try larger for simple kernels\n\n# Calculate groups\nN = length(array)\ngroups = cld(N, items)  # Ceiling division\n\n@oneapi groups=groups items=items kernel(array)\n```\n\n### Memory Access Patterns\n\nCoalesced memory access is crucial for performance:\n\n```julia\n# ✅ Good: Coalesced access (consecutive threads access consecutive memory)\nfunction good_kernel!(output, input)\n    i = get_global_id()\n    @inbounds output[i] = input[i] + 1.0f0\n    return\nend\n\n# ❌ Bad: Strided access (cache inefficient)\nfunction bad_kernel!(output, input, stride)\n    i = get_global_id()\n    @inbounds output[i] = input[i * stride] + 1.0f0\n    return\nend\n```\n\n### Use Local Memory\n\nLocal memory is faster than global memory for data reuse:\n\n```julia\nfunction optimized_reduction!(result, input)\n    local_id = get_local_id()\n    local_size = get_local_size()\n    group_id = get_group_id()\n\n    # Allocate local memory\n    local_mem = oneLocalArray(Float32, 256)\n\n    # Load global → local (coalesced)\n    global_id = get_global_id()\n    @inbounds local_mem[local_id] = input[global_id]\n    barrier()\n\n    # Reduce in local memory (much faster)\n    stride = local_size ÷ 2\n    while stride > 0\n        if local_id <= stride\n            @inbounds local_mem[local_id] += local_mem[local_id + stride]\n        end\n        barrier()\n        stride ÷= 2\n    end\n\n    # Write result\n    if local_id == 1\n        @inbounds result[group_id] = local_mem[1]\n    end\n    return\nend\n```\n\n### Minimize Barriers\n\nBarriers have overhead:\n\n```julia\n# ❌ Bad: Unnecessary barriers\nfunction wasteful_kernel!(a)\n    i = get_local_id()\n    a[i] += 1\n    barrier()  # Not needed if no data sharing\n    a[i] *= 2\n    barrier()  # Not needed\n    return\nend\n\n# ✅ Good: Barriers only when needed\nfunction efficient_kernel!(a, shared)\n    i = get_local_id()\n\n    # Load to shared memory\n    shared[i] = a[i]\n    barrier()  # Needed: ensure all loads complete\n\n    # Use shared data\n    result = shared[i] + shared[i+1]\n    a[i] = result\n    return\nend\n```\n\n### Avoid Divergence\n\nMinimize thread divergence (different execution paths):\n\n```julia\n# ❌ Bad: High divergence\nfunction divergent_kernel!(a)\n    i = get_global_id()\n    if i % 32 == 0\n        # Only 1 in 32 threads executes this\n        @inbounds a[i] = expensive_computation(a[i])\n    else\n        @inbounds a[i] += 1.0f0\n    end\n    return\nend\n\n# ✅ Better: Separate into different kernels\nfunction uniform_kernel!(a)\n    i = get_global_id()\n    @inbounds a[i] += 1.0f0\n    return\nend\n\nfunction sparse_kernel!(a, indices)\n    i = get_global_id()\n    if i <= length(indices)\n        idx = indices[i]\n        @inbounds a[idx] = expensive_computation(a[idx])\n    end\n    return\nend\n```\n\n## Type Stability\n\nType instability severely hurts performance:\n\n```julia\n# ❌ Bad: Type unstable\nfunction unstable_kernel!(output, input, flag)\n    i = get_global_id()\n    if flag\n        value = input[i]  # Float32\n    else\n        value = 0         # Int\n    end\n    output[i] = value * 2  # Type uncertain!\n    return\nend\n\n# ✅ Good: Type stable\nfunction stable_kernel!(output, input, flag)\n    i = get_global_id()\n    if flag\n        value = input[i]  # Float32\n    else\n        value = 0.0f0     # Float32\n    end\n    output[i] = value * 2.0f0  # All Float32!\n    return\nend\n\n# Check type stability\n@device_code_warntype @oneapi groups=1 items=10 stable_kernel!(output, input, true)\n```\n\n## Algorithmic Optimization\n\n### Use Library Functions\n\nLeverage optimized library implementations:\n\n```julia\nusing oneAPI, LinearAlgebra\n\n# ✅ Good: Use oneMKL through LinearAlgebra\nA = oneArray(rand(Float32, 1000, 1000))\nB = oneArray(rand(Float32, 1000, 1000))\nC = A * B  # Uses optimized oneMKL\n\n# ❌ Bad: Write your own matrix multiplication\n# (unless you have a very specific use case)\n```\n\n### Choose Right Algorithm\n\nSome algorithms parallelize better than others:\n\n```julia\n# ❌ Sequential algorithm\nfunction sequential_sum(arr)\n    sum = 0.0f0\n    for x in arr\n        sum += x\n    end\n    return sum\nend\n\n# ✅ Parallel reduction\nresult = sum(oneArray(data))  # Optimized parallel reduction\n```\n\n## Benchmarking\n\n### Basic Timing\n\n```julia\nusing BenchmarkTools, oneAPI\n\na = oneArray(rand(Float32, 1000))\nb = oneArray(rand(Float32, 1000))\n\n# Warmup\nc = a .+ b\nsynchronize()\n\n# Benchmark\n@benchmark begin\n    c = $a .+ $b\n    synchronize()\nend\n```\n\n### Accurate GPU Timing\n\nAlways synchronize before timing:\n\n```julia\nusing oneAPI\n\na = oneArray(rand(Float32, 1_000_000))\n\n# ❌ Wrong: Doesn't wait for GPU\n@time a .+= 1  # Only measures kernel launch overhead\n\n# ✅ Correct: Wait for GPU to finish\n@time begin\n    a .+= 1\n    synchronize()\nend\n```\n\n### Profiling with Time\n\n```julia\nfunction profile_operation(a, b)\n    # Warmup\n    c = a .+ b\n    synchronize()\n\n    # Time kernel launch\n    t1 = time()\n    c = a .+ b\n    t2 = time()\n    launch_time = t2 - t1\n\n    # Time including synchronization\n    synchronize()\n    t3 = time()\n    total_time = t3 - t1\n\n    println(\"Launch: \", launch_time * 1000, \" ms\")\n    println(\"Total:  \", total_time * 1000, \" ms\")\n    println(\"Actual: \", (total_time - launch_time) * 1000, \" ms\")\nend\n\na = oneArray(rand(Float32, 10_000_000))\nb = oneArray(rand(Float32, 10_000_000))\nprofile_operation(a, b)\n```\n\n## Memory Bandwidth\n\n### Theoretical Peak\n\nCalculate theoretical bandwidth:\n\n```julia\n# Example: Intel Iris Xe Graphics\n# 96 execution units, 1.35 GHz\n# Memory bandwidth: ~68 GB/s\n\n# Your kernel processes N Float32 values\nN = 10_000_000\nbytes_transferred = N * sizeof(Float32) * 2  # Read + Write\n\n# Measure time\nt = @elapsed begin\n    a .+= b\n    synchronize()\nend\n\nbandwidth_achieved = bytes_transferred / t / 1e9  # GB/s\nprintln(\"Bandwidth: \", bandwidth_achieved, \" GB/s\")\n```\n\n### Improving Bandwidth Utilization\n\n```julia\n# ✅ Good: Single pass with fusion\nresult = @. a + b * c - d / e  # One pass over data\n\n# ❌ Bad: Multiple passes\nresult = a .+ b\nresult = result .* c\nresult = result .- d\nresult = result ./ e\n# Four separate passes over data!\n```\n\n## Common Performance Issues\n\n### Issue 1: Too Many Small Kernels\n\n```julia\n# ❌ Bad: Many small kernel launches\nfor i in 1:100\n    a .+= 1  # 100 kernel launches!\nend\n\n# ✅ Good: Single kernel or batching\na .+= 100  # Single operation\n```\n\n### Issue 2: Unnecessary Allocations\n\n```julia\n# ❌ Bad: Allocates temporary\nc = a .+ b  # Allocates new array\n\n# ✅ Good: In-place operation\nc = similar(a)\nc .= a .+ b  # Uses pre-allocated array\n```\n\n### Issue 3: Wrong Number Type\n\n```julia\n# ❌ Bad: Mixed types\na = oneArray(rand(Float32, 1000))\nb = a .+ 1.0  # Float64 constant!\n\n# ✅ Good: Matching types\nb = a .+ 1.0f0  # Float32 constant\n```\n\n## Performance Checklist\n\n- [ ] Using device memory (not shared unless necessary)\n- [ ] Minimizing CPU-GPU transfers\n- [ ] Using Float32 (unless Float64 required)\n- [ ] Fusing operations with broadcasting\n- [ ] Type-stable kernels (`@device_code_warntype`)\n- [ ] Appropriate workgroup sizes\n- [ ] Coalesced memory access\n- [ ] Minimal thread divergence\n- [ ] Leveraging local memory for reuse\n- [ ] Using library functions when available\n- [ ] Synchronizing before timing\n- [ ] Avoiding unnecessary allocations\n\n## Hardware-Specific Tuning\n\nDifferent Intel GPUs have different characteristics:\n\n```julia\nusing oneAPI.oneL0\n\ndev = device()\nprops = properties(dev)\ncompute_props = compute_properties(dev)\n\nprintln(\"Device: \", props.name)\nprintln(\"EU count: \", compute_props.numEUsPerSubslice *\n                       compute_props.numSubslicesPerSlice *\n                       compute_props.numSlices)\nprintln(\"Max workgroup size: \", compute_props.maxTotalGroupSize)\nprintln(\"Max local memory: \", compute_props.maxSharedLocalMemory, \" bytes\")\n\n# Adjust your code based on these properties\n```\n\n## Advanced: Async Operations\n\nFor overlapping compute and transfers (advanced users):\n\n```julia\nusing oneAPI.oneL0\n\nctx = context()\ndev = device()\n\n# Create multiple queues for async operations\nqueue1 = ZeCommandQueue(ctx, dev)\nqueue2 = ZeCommandQueue(ctx, dev)\n\n# Launch kernel on queue1\nexecute!(queue1) do list\n    # ... kernel launch ...\nend\n\n# Overlap with transfer on queue2\nexecute!(queue2) do list\n    append_copy!(list, dst, src, size)\nend\n\n# Synchronize both\nsynchronize(queue1)\nsynchronize(queue2)\n```\n\n## Further Resources\n\n- [Intel GPU Architecture](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-gpu-architecture.html)\n- [oneAPI Programming Guide](https://www.intel.com/content/www/us/en/developer/tools/oneapi/programming-guide.html)\n- [Level Zero Specification](https://spec.oneapi.io/level-zero/latest/index.html)\n"
  },
  {
    "path": "examples/gemm.jl",
    "content": "using oneAPI, Test\n\nA = oneArray(rand(Float32, 2, 3))\n\nB = oneArray(rand(Float32, 3, 4))\n\nC = A * B\n\n@test Array(C) ≈ Array(A) * Array(B)\n"
  },
  {
    "path": "examples/vadd.jl",
    "content": "using oneAPI, Test\n\nfunction vadd(a, b, c)\n    i = get_global_id()\n    @inbounds c[i] = a[i] + b[i]\n    return\nend\n\ndims = (2,)\na = round.(rand(Float32, dims) * 100)\nb = round.(rand(Float32, dims) * 100)\nc = similar(a)\n\nd_a = oneArray(a)\nd_b = oneArray(b)\nd_c = oneArray(c)\n\nlen = prod(dims)\n@oneapi items=len vadd(d_a, d_b, d_c)\nc = Array(d_c)\n@test a+b ≈ c\n"
  },
  {
    "path": "lib/level-zero/barrier.jl",
    "content": "export append_barrier!, device_barrier\n\nappend_barrier!(list::ZeCommandList, signal_event=nothing, wait_events::ZeEvent...) =\n    zeCommandListAppendBarrier(list, something(signal_event, C_NULL),\n                               length(wait_events), [wait_events...])\n\ndevice_barrier(dev::ZeDevice) = zeDeviceSystemBarrier(dev)\n"
  },
  {
    "path": "lib/level-zero/cmdlist.jl",
    "content": "# list\n\nexport ZeCommandList, execute!\n\nmutable struct ZeCommandList\n    handle::ze_command_list_handle_t\n\n    context::ZeContext\n    device::ZeDevice\n\n    function ZeCommandList(ctx::ZeContext, dev::ZeDevice, ordinal=1; flags=0)\n        desc_ref = Ref(ze_command_list_desc_t(;\n            commandQueueGroupOrdinal=ordinal-1, flags,\n        ))\n        handle_ref = Ref{ze_command_list_handle_t}()\n        zeCommandListCreate(ctx, dev, desc_ref, handle_ref)\n        obj = new(handle_ref[], ctx, dev)\n        finalizer(obj) do obj\n            zeCommandListDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_command_list_handle_t}, list::ZeCommandList) = list.handle\n\nBase.:(==)(a::ZeCommandList, b::ZeCommandList) = a.handle == b.handle\nBase.hash(e::ZeCommandList, h::UInt) = hash(e.handle, h)\n\nBase.close(list::ZeCommandList) = zeCommandListClose(list)\n\nBase.reset(list::ZeCommandList) = zeCommandListReset(list)\n\n\"\"\"\n    ZeCommandList(dev::ZeDevice, ...) do list\n        append_...!(list)\n    end\n\nCreate a command list for device `dev`, passing in a do block that appends operations.\nThe list is then closed and can be used immediately, e.g. for execution.\n\n\"\"\"\nfunction ZeCommandList(f::Base.Callable, args...; kwargs...)\n    list = ZeCommandList(args...; kwargs...)\n    f(list)\n    close(list)\n    return list\nend\n\nexecute!(queue::ZeCommandQueue, lists::Vector{ZeCommandList}, fence=nothing) =\n    zeCommandQueueExecuteCommandLists(queue, length(lists), lists, something(fence, C_NULL))\n\n\"\"\"\n    execute!(queue::ZeCommandQueue, ...) do list\n        append_...!(list)\n    end\n\nCreate a command list for the device that owns `queue`, passing in a do block that appends\noperations. The list is then closed and executed on the queue.\n\"\"\"\nfunction execute!(f::Base.Callable, queue::ZeCommandQueue, fence=nothing; kwargs...)\n    list = ZeCommandList(f, queue.context, queue.device, queue.ordinal; kwargs...)\n    execute!(queue, [list], fence)\nend\n"
  },
  {
    "path": "lib/level-zero/cmdqueue.jl",
    "content": "# queue\n\nexport ZeCommandQueue, synchronize\n\nmutable struct ZeCommandQueue\n    handle::ze_command_queue_handle_t\n\n    context::ZeContext\n    device::ZeDevice\n    ordinal::Int\n\n    function ZeCommandQueue(ctx::ZeContext, dev::ZeDevice, ordinal=1, index=1;\n                            flags=0,\n                            mode::ze_command_queue_mode_t=ZE_COMMAND_QUEUE_MODE_DEFAULT,\n                            priority::ze_command_queue_priority_t=ZE_COMMAND_QUEUE_PRIORITY_NORMAL)\n        desc_ref = Ref(ze_command_queue_desc_t(;\n            ordinal=ordinal-1, index=index-1, flags, mode, priority\n        ))\n        handle_ref = Ref{ze_command_queue_handle_t}()\n        zeCommandQueueCreate(ctx, dev, desc_ref, handle_ref)\n        obj = new(handle_ref[], ctx, dev, ordinal)\n        finalizer(obj) do obj\n            zeCommandQueueDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_command_queue_handle_t}, queue::ZeCommandQueue) = queue.handle\n\nBase.:(==)(a::ZeCommandQueue, b::ZeCommandQueue) = a.handle == b.handle\nBase.hash(e::ZeCommandQueue, h::UInt) = hash(e.handle, h)\n\nsynchronize(queue::ZeCommandQueue, timeout::Number=typemax(UInt64)) =\n    zeCommandQueueSynchronize(queue, timeout)\n\n\n## groups\n\nexport command_queue_groups, compute_groups\n\nstruct ZeCommandQueueGroups\n    device::ZeDevice\nend\n\ncommand_queue_groups(dev::ZeDevice) = ZeCommandQueueGroups(dev)\n\nBase.eltype(::ZeCommandQueueGroups) = ZeCommandQueueGroup\n\nfunction Base.iterate(groups::ZeCommandQueueGroups, i=1)\n    i >= length(groups) + 1 ? nothing : (ZeCommandQueueGroup(groups, i), i+1)\nend\n\nBase.length(groups::ZeCommandQueueGroups) = length(properties(groups))\n\nfunction properties(groups::ZeCommandQueueGroups)\n    count_ref = Ref{UInt32}(0)\n    zeDeviceGetCommandQueueGroupProperties(groups.device, count_ref, C_NULL)\n\n    all_props = fill(ze_command_queue_group_properties_t(), count_ref[])\n    zeDeviceGetCommandQueueGroupProperties(groups.device, count_ref, all_props)\n\n    return [(flags=props.flags,\n             maxMemoryFillPatternSize=UInt(props.maxMemoryFillPatternSize),\n             numQueues=Int(props.numQueues),\n             ) for props in all_props[1:count_ref[]]]\nend\n\nBase.IteratorSize(::ZeCommandQueueGroups) = Base.HasLength()\n\nstruct ZeCommandQueueGroup\n    groups::ZeCommandQueueGroups\n    ordinal::Int\nend\n\nproperties(group::ZeCommandQueueGroup) = properties(group.groups)[group.ordinal]\n\n# short-hands\ncompute_groups(dev::ZeDevice) = filter(collect(command_queue_groups(dev))) do group\n    properties(group).flags & oneL0.ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COMPUTE != 0\nend\n"
  },
  {
    "path": "lib/level-zero/common.jl",
    "content": "\"\"\"\n    ze_make_version(major::Integer, minor::Integer) -> UInt32\n\n32-bit unsigned integer version number from major and minor components.\nThis should be the Julia equivalent of the C macro:\n`#define ZE_MAKE_VERSION( _major, _minor )  (( _major << 16 )|( _minor & 0x0000ffff))`\n\"\"\"\nfunction ZE_MAKE_VERSION(major::Integer, minor::Integer)\n    # Shift the major version 16 bits to the left\n    # and combine it with the minor version using a bitwise OR.\n    # The `& 0xffff` is implicit for standard integer types when combining,\n    # but we can be explicit if needed. The result is cast to UInt32.\n    return (UInt32(major) << 16) | (UInt32(minor) & 0x0000ffff)\nend\nunmake_version(ver) = VersionNumber(Int(ver) >> 16, Int(ver) & 0x0000ffff)\n"
  },
  {
    "path": "lib/level-zero/context.jl",
    "content": "export ZeContext, status\n\nmutable struct ZeContext\n    handle::ze_context_handle_t\n\n    driver::ZeDriver\n\n    function ZeContext(drv::ZeDriver)\n        desc_ref = Ref(ze_context_desc_t())\n        handle_ref = Ref{ze_context_handle_t}()\n        zeContextCreate(drv, desc_ref, handle_ref)\n        obj = new(handle_ref[], drv)\n        finalizer(obj) do obj\n            zeContextDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_context_handle_t}, dev::ZeContext) = dev.handle\n\nBase.:(==)(a::ZeContext, b::ZeContext) = a.handle == b.handle\nBase.hash(e::ZeContext, h::UInt) = hash(e.handle, h)\n\nstatus(ctx::ZeContext) = zeContextGetStatus(ctx)\n"
  },
  {
    "path": "lib/level-zero/copy.jl",
    "content": "# copies\n\nexport append_copy!, append_fill!, append_prefetch!, append_advise!\n\nappend_copy!(list::ZeCommandList, dst::Union{Ptr,ZePtr}, src::Union{Ptr,ZePtr},\n             size::Integer, signal_event::Union{ZeEvent,Nothing}=nothing,\n             wait_events::ZeEvent...) =\n    zeCommandListAppendMemoryCopy(list, dst, src, size, something(signal_event, C_NULL),\n                                   length(wait_events), [wait_events...])\n\nappend_fill!(list::ZeCommandList, ptr::Union{Ptr,ZePtr}, pattern::Union{Ptr,ZePtr},\n             pattern_size::Integer, size::Integer,\n             signal_event::Union{ZeEvent,Nothing}=nothing, wait_events::ZeEvent...) =\n    zeCommandListAppendMemoryFill(list, ptr, pattern, pattern_size, size,\n                                  something(signal_event, C_NULL), length(wait_events),\n                                  [wait_events...])\n\nappend_prefetch!(list::ZeCommandList, ptr::Union{Ptr,ZePtr}, size::Integer) =\n    zeCommandListAppendMemoryPrefetch(list, ptr, size)\n\nappend_advise!(list::ZeCommandList, dev::ZeDevice, ptr::Union{Ptr,ZePtr}, size::Integer,\n               advise::ze_memory_advice_t) =\n    zeCommandListAppendMemAdvise(list, dev, ptr, size, advise)\n"
  },
  {
    "path": "lib/level-zero/device.jl",
    "content": "export ZeDevice, properties, compute_properties, module_properties, memory_properties, memory_access_properties, cache_properties, image_properties, p2p_properties\n\nstruct ZeDevice\n    handle::ze_device_handle_t\n\n    driver::ZeDriver\n\n    # only accept handles, don't convert\n    ZeDevice(handle::ze_device_handle_t, driver::ZeDriver) = new(handle, driver)\nend\n\nBase.unsafe_convert(::Type{ze_device_handle_t}, dev::ZeDevice) = dev.handle\n\nBase.:(==)(a::ZeDevice, b::ZeDevice) = a.handle == b.handle\nBase.hash(e::ZeDevice, h::UInt) = hash(e.handle, h)\n\nfunction Base.show(io::IO, dev::ZeDevice)\n    props = properties(dev)\n    print(io, \"ZeDevice(\")\n    if props.type == ZE_DEVICE_TYPE_GPU\n        print(io, \"GPU\")\n    elseif props.type == ZE_DEVICE_TYPE_FPGA\n        print(io, \"FPGA\")\n    end\n    print(io, \", vendor \")\n    show(io, props.vendorId)\n    print(io, \", device \")\n    show(io, props.deviceId)\n    if props.subdeviceId !== nothing\n        print(io, \", sub-device \")\n        show(io, props.subdeviceId)\n    end\n    print(io, \")\")\nend\n\nfunction Base.show(io::IO, ::MIME\"text/plain\", dev::ZeDevice)\n    show(io, dev)\n    props = properties(dev)\n    print(io, \": $(props.name)\")\nend\n\n\n## properties\n\nfunction properties(dev::ZeDevice)\n    props_ref = Ref(ze_device_properties_t())\n    zeDeviceGetProperties(dev, props_ref)\n\n    props = props_ref[]\n    return (\n        type=props.type,\n        vendorId=UInt16(props.vendorId),\n        deviceId=UInt16(props.deviceId),\n        flags=props.flags,\n        subdeviceId=(props.flags&ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE == 0) ? nothing : props.subdeviceId,\n        coreClockRate=Int(props.coreClockRate),\n        maxMemAllocSize=Int(props.maxMemAllocSize),\n        maxHardwareContexts=Int(props.maxHardwareContexts),\n        maxCommandQueuePriority=Int(props.maxCommandQueuePriority),\n        numThreadsPerEU=Int(props.numThreadsPerEU),\n        physicalEUSimdWidth=Int(props.physicalEUSimdWidth),\n        numEUsPerSubslice=Int(props.numEUsPerSubslice),\n        numSubslicesPerSlice=Int(props.numSubslicesPerSlice),\n        numSlices=Int(props.numSlices),\n        timerResolution=Int(props.timerResolution),\n        timestampValidBits=Int(props.timestampValidBits),\n        kernelTimestampValidBits=Int(props.kernelTimestampValidBits),\n        uuid=Base.UUID(reinterpret(UInt128, [props.uuid.id...])[1]),\n        name=String(UInt8[props.name[1:findfirst(isequal(0), props.name)-1]...]),\n    )\nend\n\nfunction compute_properties(dev::ZeDevice)\n    props_ref = Ref(ze_device_compute_properties_t())\n    zeDeviceGetComputeProperties(dev, props_ref)\n\n    props = props_ref[]\n    return (\n        maxTotalGroupSize=Int(props.maxTotalGroupSize),\n        maxGroupSizeX=Int(props.maxGroupSizeX),\n        maxGroupSizeY=Int(props.maxGroupSizeY),\n        maxGroupSizeZ=Int(props.maxGroupSizeZ),\n        maxGroupCountX=Int(props.maxGroupCountX),\n        maxGroupCountY=Int(props.maxGroupCountY),\n        maxGroupCountZ=Int(props.maxGroupCountZ),\n        maxSharedLocalMemory=Int(props.maxSharedLocalMemory),\n        subGroupSizes=Int.(props.subGroupSizes[1:props.numSubGroupSizes]),\n    )\nend\n\nfunction module_properties(dev::ZeDevice)\n    props_ref = Ref(ze_device_module_properties_t())\n    zeDeviceGetModuleProperties(dev, props_ref)\n\n    props = props_ref[]\n    return (\n        spirvVersionSupported=props.spirvVersionSupported==0 ? nothing : unmake_version(props.spirvVersionSupported),\n        flags=props.flags,\n        fp16flags=props.fp16flags,\n        fp32flags=props.fp32flags,\n        fp64flags=props.fp64flags,\n        maxArgumentsSize=Int(props.maxArgumentsSize),\n        printfBufferSize=Int(props.printfBufferSize),\n        nativeKernelSupported=Base.UUID(reinterpret(UInt128, [props.nativeKernelSupported.id...])[1]),\n    )\nend\n\nfunction memory_properties(dev::ZeDevice)\n    count_ref = Ref{UInt32}(0)\n    zeDeviceGetMemoryProperties(dev, count_ref, C_NULL)\n\n    all_props = fill(ze_device_memory_properties_t(), count_ref[])\n    zeDeviceGetMemoryProperties(dev, count_ref, all_props)\n\n    return [(maxClockRate=Int(props.maxClockRate),\n             maxBusWidth=Int(props.maxBusWidth),\n             totalSize=Int(props.totalSize),\n            ) for props in all_props[1:count_ref[]]]\nend\n\nfunction memory_access_properties(dev::ZeDevice)\n    props_ref = Ref(ze_device_memory_access_properties_t())\n    zeDeviceGetMemoryAccessProperties(dev, props_ref)\n\n    props = props_ref[]\n    return (\n        hostAllocCapabilities=Int(props.hostAllocCapabilities),\n        deviceAllocCapabilities=Int(props.deviceAllocCapabilities),\n        sharedSingleDeviceAllocCapabilities=Int(props.sharedSingleDeviceAllocCapabilities),\n        sharedCrossDeviceAllocCapabilities=Int(props.sharedCrossDeviceAllocCapabilities),\n        sharedSystemAllocCapabilities=Int(props.sharedSystemAllocCapabilities),\n    )\nend\n\nfunction cache_properties(dev::ZeDevice)\n    count_ref = Ref{UInt32}(0)\n    zeDeviceGetCacheProperties(dev, count_ref, C_NULL)\n\n    all_props = fill(ze_device_cache_properties_t(), count_ref[])\n    zeDeviceGetCacheProperties(dev, count_ref, all_props)\n\n    return [(flags=props.flags,\n             cacheSize=Int(props.cacheSize),\n            ) for props in all_props[1:count_ref[]]]\nend\n\nfunction image_properties(dev::ZeDevice)\n    props_ref = Ref(ze_device_image_properties_t())\n    zeDeviceGetImageProperties(dev, props_ref)\n\n    props = props_ref[]\n    return (\n        maxImageDims1D=Int(props.maxImageDims1D),\n        maxImageDims2D=Int(props.maxImageDims2D),\n        maxImageDims3D=Int(props.maxImageDims3D),\n        maxImageBufferSize=Int(props.maxImageBufferSize),\n        maxImageArraySlices=Int(props.maxImageArraySlices),\n        maxSamplers=Int(props.maxSamplers),\n        maxReadImageArgs=Int(props.maxReadImageArgs),\n        maxWriteImageArgs=Int(props.maxWriteImageArgs),\n    )\nend\n\nfunction p2p_properties(dev1, dev2::ZeDevice)\n    props_ref = Ref(ze_device_p2p_properties_t())\n    zeDeviceGetP2PProperties(dev1, dev2, props_ref)\n\n    props = props_ref[]\n    return (\n        flags=props.flags,\n    )\nend\n\n\n## device iteration\n\nexport devices\n\nstruct ZeDevices\n    handles::Vector{ze_device_handle_t}\n\n    driver::ZeDriver\n\n    function ZeDevices(drv::ZeDriver)\n        count_ref = Ref{UInt32}(0)\n        zeDeviceGet(drv, count_ref, C_NULL)\n\n        handles = fill(ze_device_handle_t(), count_ref[])\n        zeDeviceGet(drv, count_ref, handles)\n\n        new(handles, drv)\n    end\nend\n\ndevices(drv::ZeDriver) = ZeDevices(drv)\n\nBase.eltype(::ZeDevices) = ZeDevice\n\nfunction Base.iterate(iter::ZeDevices, i=1)\n    i >= length(iter) + 1 ? nothing : (ZeDevice(iter.handles[i], iter.driver), i+1)\nend\n\nBase.length(iter::ZeDevices) = length(iter.handles)\n\nBase.IteratorSize(::ZeDevices) = Base.HasLength()\n\nBase.keys(iter::ZeDevices) = 1:length(iter)\n\nfunction Base.show(io::IO, ::MIME\"text/plain\", iter::ZeDevices)\n    print(io, \"ZeDevice iterator for $(length(iter)) devices\")\n    if !isempty(iter)\n        print(io, \":\")\n        for (i,dev) in enumerate(iter)\n            print(io, \"\\n$(i). $(properties(dev).name)\")\n        end\n    end\nend\n\nBase.getindex(iter::ZeDevices, i::Integer) =\n    ZeDevice(iter.handles[i], iter.driver)\n"
  },
  {
    "path": "lib/level-zero/driver.jl",
    "content": "export ZeDriver, api_version, properties, ipc_properties, extension_properties\n\nstruct ZeDriver\n    handle::ze_driver_handle_t\n\n    # only accept handles, don't convert\n    ZeDriver(handle::ze_driver_handle_t) = new(handle)\nend\n\nBase.unsafe_convert(::Type{ze_driver_handle_t}, drv::ZeDriver) = drv.handle\n\nBase.:(==)(a::ZeDriver, b::ZeDriver) = a.handle == b.handle\nBase.hash(e::ZeDriver, h::UInt) = hash(e.handle, h)\n\nfunction api_version(drv::ZeDriver)\n    version_ref = Ref{ze_api_version_t}()\n    zeDriverGetApiVersion(drv, version_ref)\n    unmake_version(version_ref[])\nend\n\nfunction Base.show(io::IO, drv::ZeDriver)\n    props = properties(drv)\n    print(io, \"ZeDriver($(props.uuid))\")\nend\n\nfunction Base.show(io::IO, ::MIME\"text/plain\", drv::ZeDriver)\n    show(io, drv)\n    props = properties(drv)\n    print(io, \": version $(props.driverVersion)\")\nend\n\n\n## driver iteration\n\nexport drivers\n\nstruct ZeDrivers\n    handles::Vector{ze_driver_handle_t}\n\n    function ZeDrivers()\n        count_ref = Ref{UInt32}(0)\n        zeDriverGet(count_ref, C_NULL)\n\n        handles = Vector{ze_driver_handle_t}(undef, count_ref[])\n        zeDriverGet(count_ref, handles)\n\n        new(handles)\n    end\nend\n\ndrivers() = ZeDrivers()\n\nBase.eltype(::ZeDrivers) = ZeDriver\n\nfunction Base.iterate(iter::ZeDrivers, i=1)\n    i >= length(iter) + 1 ? nothing : (ZeDriver(iter.handles[i]), i+1)\nend\n\nBase.length(iter::ZeDrivers) = length(iter.handles)\n\nBase.IteratorSize(::ZeDrivers) = Base.HasLength()\n\nfunction Base.show(io::IO, mime::MIME\"text/plain\", iter::ZeDrivers)\n    print(io, \"ZeDriver iterator for $(length(iter)) drivers\")\n    if !isempty(iter)\n        print(io, \":\")\n        for (i,drv) in enumerate(iter)\n            print(io, \"\\n$(i). \")\n            show(io, mime, drv)\n        end\n    end\nend\n\nBase.getindex(iter::ZeDrivers, i::Integer) = ZeDriver(iter.handles[i])\n\n\n\n## properties\n\nfunction properties(drv::ZeDriver)\n    props_ref = Ref(ze_driver_properties_t())\n    zeDriverGetProperties(drv, props_ref)\n\n    props = props_ref[]\n    return (\n        uuid=Base.UUID(reinterpret(UInt128, [props.uuid.id...])[1]),\n        driverVersion=VersionNumber((props.driverVersion & 0xFF000000) >> 24,\n                                    (props.driverVersion & 0x00FF0000) >> 16,\n                                    props.driverVersion & 0x0000FFFF),\n    )\nend\n\nfunction ipc_properties(drv::ZeDriver)\n    props_ref = Ref(ze_driver_ipc_properties_t())\n    zeDriverGetIpcProperties(drv, props_ref)\n\n    props = props_ref[]\n    return (\n        flags=props.flags,\n    )\nend\n\nfunction extension_properties(drv::ZeDriver)\n    count_ref = Ref{UInt32}(0)\n    zeDriverGetExtensionProperties(drv, count_ref, C_NULL)\n\n    all_props = Vector{ze_driver_extension_properties_t}(undef, count_ref[])\n    zeDriverGetExtensionProperties(drv, count_ref, all_props)\n\n    extensions = Dict{String,VersionNumber}()\n    for prop in all_props[1:count_ref[]]\n        name = String(UInt8[prop.name[1:findfirst(isequal(0), prop.name)-1]...])\n        version = unmake_version(prop.version)\n        extensions[name] = version\n    end\n    return extensions\nend\n"
  },
  {
    "path": "lib/level-zero/error.jl",
    "content": "# Error type and decoding functionality\n\nexport ZeError\n\n\nstruct ZeError <: Exception\n    code::ze_result_t\nend\n\nBase.convert(::Type{ze_result_t}, err::ZeError) = err.code\n\nBase.showerror(io::IO, err::ZeError) =\n    print(io, \"ZeError: \", description(err), \" (code $(reinterpret(Int32, err.code)), $(name(err)))\")\n\nBase.show(io::IO, ::MIME\"text/plain\", err::ZeError) = print(io, \"ZeError($(err.code))\")\n\nname(err::ZeError) = string(err.code)\n\n## COV_EXCL_START\nfunction description(err::ZeError)\n    if err.code == RESULT_SUCCESS\n        \"success\"\n    elseif err.code == RESULT_NOT_READY\n        \"synchronization primitive not signaled\"\n    elseif err.code == RESULT_ERROR_DEVICE_LOST\n        \"device hung, reset, was removed, or driver update occurred\"\n    elseif err.code == RESULT_ERROR_OUT_OF_HOST_MEMORY\n        \"insufficient host memory to satisfy call\"\n    elseif err.code == RESULT_ERROR_OUT_OF_DEVICE_MEMORY\n        \"insufficient device memory to satisfy call\"\n    elseif err.code == RESULT_ERROR_MODULE_BUILD_FAILURE\n        \"error occurred when building module, see build log for details\"\n    elseif err.code == RESULT_ERROR_INSUFFICIENT_PERMISSIONS\n        \"access denied due to permission level\"\n    elseif err.code == RESULT_ERROR_NOT_AVAILABLE\n        \"resource already in use and simultaneous access not allowed\"\n    elseif err.code == RESULT_ERROR_UNINITIALIZED\n        \"driver is not initialized\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_VERSION\n        \"generic error code for unsupported versions\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_FEATURE\n        \"generic error code for unsupported features\"\n    elseif err.code == RESULT_ERROR_INVALID_ARGUMENT\n        \"generic error code for invalid arguments\"\n    elseif err.code == RESULT_ERROR_INVALID_NULL_HANDLE\n        \"handle argument is not valid\"\n    elseif err.code == RESULT_ERROR_HANDLE_OBJECT_IN_USE\n        \"object pointed to by handle still in-use by device\"\n    elseif err.code == RESULT_ERROR_INVALID_NULL_POINTER\n        \"pointer argument may not be nullptr\"\n    elseif err.code == RESULT_ERROR_INVALID_SIZE\n        \"size argument is invalid (e.g., must not be zero)\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_SIZE\n        \"size argument is not supported by the device (e.g., too large)\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_ALIGNMENT\n        \"alignment argument is not supported by the device (e.g., too small)\"\n    elseif err.code == RESULT_ERROR_INVALID_SYNCHRONIZATION_OBJECT\n        \"synchronization object in invalid state\"\n    elseif err.code == RESULT_ERROR_INVALID_ENUMERATION\n        \"enumerator argument is not valid\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_ENUMERATION\n        \"enumerator argument is not supported by the device\"\n    elseif err.code == RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT\n        \"image format is not supported by the device\"\n    elseif err.code == RESULT_ERROR_INVALID_NATIVE_BINARY\n        \"native binary is not supported by the device\"\n    elseif err.code == RESULT_ERROR_INVALID_GLOBAL_NAME\n        \"global variable is not found in the module\"\n    elseif err.code == RESULT_ERROR_INVALID_KERNEL_NAME\n        \"kernel name is not found in the module\"\n    elseif err.code == RESULT_ERROR_INVALID_FUNCTION_NAME\n        \"function name is not found in the module\"\n    elseif err.code == RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION\n        \"group size dimension is not valid for the kernel or device\"\n    elseif err.code == RESULT_ERROR_INVALID_GLOBAL_WIDTH_DIMENSION\n        \"global width dimension is not valid for the kernel or device\"\n    elseif err.code == RESULT_ERROR_INVALID_KERNEL_ARGUMENT_INDEX\n        \"kernel argument index is not valid for kernel\"\n    elseif err.code == RESULT_ERROR_INVALID_KERNEL_ARGUMENT_SIZE\n        \"kernel argument size does not match kernel\"\n    elseif err.code == RESULT_ERROR_INVALID_KERNEL_ATTRIBUTE_VALUE\n        \"value of kernel attribute is not valid for the kernel or device\"\n    elseif err.code == RESULT_ERROR_INVALID_COMMAND_LIST_TYPE\n        \"command list type does not match command queue type\"\n    elseif err.code == RESULT_ERROR_OVERLAPPING_REGIONS\n        \"copy operations do not support overlapping regions of memory\"\n    elseif err.code == RESULT_ERROR_UNKNOWN\n        \"unknown or internal error\"\n    else\n        \"no description for this error\"\n    end\nend\n## COV_EXCL_STOP\n\n@enum_without_prefix _ze_result_t ZE_\n"
  },
  {
    "path": "lib/level-zero/event.jl",
    "content": "# pool\n\nexport ZeEventPool\n\nmutable struct ZeEventPool\n    handle::ze_event_pool_handle_t\n\n    context::ZeContext\n\n    function ZeEventPool(ctx::ZeContext, count::Integer, devs::ZeDevice...;\n                         flags=0)\n        desc_ref = Ref(ze_event_pool_desc_t(; flags, count))\n        handle_ref = Ref{ze_event_pool_handle_t}()\n        zeEventPoolCreate(ctx, desc_ref, length(devs), isempty(devs) ? C_NULL : [devs...], handle_ref)\n        obj = new(handle_ref[], ctx)\n        finalizer(obj) do obj\n            zeEventPoolDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_event_pool_handle_t}, pool::ZeEventPool) = pool.handle\n\nBase.:(==)(a::ZeEventPool, b::ZeEventPool) = a.handle == b.handle\nBase.hash(e::ZeEventPool, h::UInt) = hash(e.handle, h)\n\nBase.getindex(pool::ZeEventPool, i::Integer) = ZeEvent(pool, i)\n\n\n# event\n\nexport ZeEvent, append_wait!, signal, append_signal!, append_reset!, kernel_timestamp\n\nmutable struct ZeEvent\n    handle::ze_event_handle_t\n    pool::ZeEventPool\n\n    function ZeEvent(pool, index::Integer)\n        desc_ref = Ref(ze_event_desc_t(; index=index-1))\n        handle_ref = Ref{ze_event_handle_t}()\n        zeEventCreate(pool, desc_ref, handle_ref)\n        obj = new(handle_ref[], pool)\n        finalizer(obj) do obj\n            zeEventDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_event_handle_t}, event::ZeEvent) = event.handle\n\nBase.:(==)(a::ZeEvent, b::ZeEvent) = a.handle == b.handle\nBase.hash(e::ZeEvent, h::UInt) = hash(e.handle, h)\n\nsignal(event::ZeEvent) = zeEventHostSignal(event)\nappend_signal!(list::ZeCommandList, event::ZeEvent) = zeCommandListAppendSignalEvent(list, event)\n\nBase.wait(event::ZeEvent, timeout::Number=typemax(UInt64)) =\n    zeEventHostSynchronize(event, timeout)\nappend_wait!(list::ZeCommandList, events::ZeEvent...) =\n    zeCommandListAppendWaitOnEvents(list, length(events), [events...])\n\nBase.reset(event::ZeEvent) = zeEventHostReset(event)\nappend_reset!(list::ZeCommandList, event::ZeEvent) = zeCommandListAppendEventReset(list, event)\n\nfunction Base.isdone(event::ZeEvent)\n    res = unchecked_zeEventQueryStatus(event)\n    if res == RESULT_NOT_READY\n        return false\n    elseif res == RESULT_SUCCESS\n        return true\n    else\n        throw_api_error(res)\n    end\nend\n\nfunction kernel_timestamp(event)\n    timestamp_ref = Ref{ze_kernel_timestamp_result_t}()\n    zeEventQueryKernelTimestamp(event, timestamp_ref)\n\n    # TODO: convert using ze_device_properties_t.timerResolution\n    # TODO: mask by ze_device_properties_t.kernelTimestampValidBits\n    # https://spec.oneapi.com/level-zero/latest/core/PROG.html#kernel-timestamp-events\n    # but how to get the device?\n\n    timestamp = timestamp_ref[]\n    return (;\n        :global => (\n            start = timestamp._global.kernelStart == -1%UInt32 ? nothing : Int(timestamp._global.kernelStart),\n            stop  = timestamp._global.kernelEnd == -1%UInt32 ?   nothing : Int(timestamp._global.kernelEnd)\n        ),\n        :context => (\n            start = timestamp.context.kernelStart == -1%UInt32 ? nothing : Int(timestamp.context.kernelStart),\n            stop  = timestamp.context.kernelEnd == -1%UInt32 ?   nothing : Int(timestamp.context.kernelEnd)\n        )\n    )\nend\n"
  },
  {
    "path": "lib/level-zero/fence.jl",
    "content": "# fence\n\nexport ZeFence\n\nmutable struct ZeFence\n    handle::ze_fence_handle_t\n    queue::ZeCommandQueue\n\n    function ZeFence(queue)\n        desc_ref = Ref(ze_fence_desc_t())\n        handle_ref = Ref{ze_fence_handle_t}()\n        zeFenceCreate(queue, desc_ref, handle_ref)\n        obj = new(handle_ref[], queue)\n        finalizer(obj) do obj\n            zeFenceDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_fence_handle_t}, fence::ZeFence) = fence.handle\n\nBase.:(==)(a::ZeFence, b::ZeFence) = a.handle == b.handle\nBase.hash(e::ZeFence, h::UInt) = hash(e.handle, h)\n\nBase.wait(fence::ZeFence, timeout::Number=typemax(UInt64)) =\n    zeFenceHostSynchronize(fence, timeout)\n\nBase.reset(fence::ZeFence) = zeFenceReset(fence)\n\nfunction Base.isdone(fence::ZeFence)\n    res = unchecked_zeFenceQueryStatus(fence)\n    if res == RESULT_NOT_READY\n        return false\n    elseif res == RESULT_SUCCESS\n        return true\n    else\n        throw_api_error(res)\n    end\nend\n"
  },
  {
    "path": "lib/level-zero/libze.jl",
    "content": "using CEnum: CEnum, @cenum\n\n# outlined functionality to avoid GC frame allocation\n@noinline function throw_api_error(res)\n    if res == RESULT_ERROR_OUT_OF_HOST_MEMORY || res == RESULT_ERROR_OUT_OF_DEVICE_MEMORY\n        throw(OutOfGPUMemoryError())\n    else\n        throw(ZeError(res))\n    end\nend\n\nfunction check(f)\n    res = retry_reclaim(err -> err == RESULT_ERROR_OUT_OF_HOST_MEMORY ||\n                               err == RESULT_ERROR_OUT_OF_DEVICE_MEMORY) do\n        return f()\n    end\n\n    if res != RESULT_SUCCESS\n        throw_api_error(res)\n    end\n\n    return\nend\n\nconst ze_bool_t = UInt8\n\nmutable struct _ze_driver_handle_t end\n\nconst ze_driver_handle_t = Ptr{_ze_driver_handle_t}\n\nmutable struct _ze_device_handle_t end\n\nconst ze_device_handle_t = Ptr{_ze_device_handle_t}\n\nmutable struct _ze_context_handle_t end\n\nconst ze_context_handle_t = Ptr{_ze_context_handle_t}\n\nmutable struct _ze_command_queue_handle_t end\n\nconst ze_command_queue_handle_t = Ptr{_ze_command_queue_handle_t}\n\nmutable struct _ze_command_list_handle_t end\n\nconst ze_command_list_handle_t = Ptr{_ze_command_list_handle_t}\n\nmutable struct _ze_fence_handle_t end\n\nconst ze_fence_handle_t = Ptr{_ze_fence_handle_t}\n\nmutable struct _ze_event_pool_handle_t end\n\nconst ze_event_pool_handle_t = Ptr{_ze_event_pool_handle_t}\n\nmutable struct _ze_event_handle_t end\n\nconst ze_event_handle_t = Ptr{_ze_event_handle_t}\n\nmutable struct _ze_image_handle_t end\n\nconst ze_image_handle_t = Ptr{_ze_image_handle_t}\n\nmutable struct _ze_module_handle_t end\n\nconst ze_module_handle_t = Ptr{_ze_module_handle_t}\n\nmutable struct _ze_module_build_log_handle_t end\n\nconst ze_module_build_log_handle_t = Ptr{_ze_module_build_log_handle_t}\n\nmutable struct _ze_kernel_handle_t end\n\nconst ze_kernel_handle_t = Ptr{_ze_kernel_handle_t}\n\nmutable struct _ze_sampler_handle_t end\n\nconst ze_sampler_handle_t = Ptr{_ze_sampler_handle_t}\n\nmutable struct _ze_physical_mem_handle_t end\n\nconst ze_physical_mem_handle_t = Ptr{_ze_physical_mem_handle_t}\n\nmutable struct _ze_fabric_vertex_handle_t end\n\nconst ze_fabric_vertex_handle_t = Ptr{_ze_fabric_vertex_handle_t}\n\nmutable struct _ze_fabric_edge_handle_t end\n\nconst ze_fabric_edge_handle_t = Ptr{_ze_fabric_edge_handle_t}\n\nstruct _ze_ipc_mem_handle_t\n    data::NTuple{64,Cchar}\nend\n\nconst ze_ipc_mem_handle_t = _ze_ipc_mem_handle_t\n\nstruct _ze_ipc_event_pool_handle_t\n    data::NTuple{64,Cchar}\nend\n\nconst ze_ipc_event_pool_handle_t = _ze_ipc_event_pool_handle_t\n\n@cenum _ze_result_t::UInt32 begin\n    ZE_RESULT_SUCCESS = 0\n    ZE_RESULT_NOT_READY = 1\n    ZE_RESULT_ERROR_DEVICE_LOST = 1879048193\n    ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY = 1879048194\n    ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY = 1879048195\n    ZE_RESULT_ERROR_MODULE_BUILD_FAILURE = 1879048196\n    ZE_RESULT_ERROR_MODULE_LINK_FAILURE = 1879048197\n    ZE_RESULT_ERROR_DEVICE_REQUIRES_RESET = 1879048198\n    ZE_RESULT_ERROR_DEVICE_IN_LOW_POWER_STATE = 1879048199\n    ZE_RESULT_EXP_ERROR_DEVICE_IS_NOT_VERTEX = 2146435073\n    ZE_RESULT_EXP_ERROR_VERTEX_IS_NOT_DEVICE = 2146435074\n    ZE_RESULT_EXP_ERROR_REMOTE_DEVICE = 2146435075\n    ZE_RESULT_EXP_ERROR_OPERANDS_INCOMPATIBLE = 2146435076\n    ZE_RESULT_EXP_RTAS_BUILD_RETRY = 2146435077\n    ZE_RESULT_EXP_RTAS_BUILD_DEFERRED = 2146435078\n    ZE_RESULT_ERROR_INSUFFICIENT_PERMISSIONS = 1879113728\n    ZE_RESULT_ERROR_NOT_AVAILABLE = 1879113729\n    ZE_RESULT_ERROR_DEPENDENCY_UNAVAILABLE = 1879179264\n    ZE_RESULT_WARNING_DROPPED_DATA = 1879179265\n    ZE_RESULT_ERROR_UNINITIALIZED = 2013265921\n    ZE_RESULT_ERROR_UNSUPPORTED_VERSION = 2013265922\n    ZE_RESULT_ERROR_UNSUPPORTED_FEATURE = 2013265923\n    ZE_RESULT_ERROR_INVALID_ARGUMENT = 2013265924\n    ZE_RESULT_ERROR_INVALID_NULL_HANDLE = 2013265925\n    ZE_RESULT_ERROR_HANDLE_OBJECT_IN_USE = 2013265926\n    ZE_RESULT_ERROR_INVALID_NULL_POINTER = 2013265927\n    ZE_RESULT_ERROR_INVALID_SIZE = 2013265928\n    ZE_RESULT_ERROR_UNSUPPORTED_SIZE = 2013265929\n    ZE_RESULT_ERROR_UNSUPPORTED_ALIGNMENT = 2013265930\n    ZE_RESULT_ERROR_INVALID_SYNCHRONIZATION_OBJECT = 2013265931\n    ZE_RESULT_ERROR_INVALID_ENUMERATION = 2013265932\n    ZE_RESULT_ERROR_UNSUPPORTED_ENUMERATION = 2013265933\n    ZE_RESULT_ERROR_UNSUPPORTED_IMAGE_FORMAT = 2013265934\n    ZE_RESULT_ERROR_INVALID_NATIVE_BINARY = 2013265935\n    ZE_RESULT_ERROR_INVALID_GLOBAL_NAME = 2013265936\n    ZE_RESULT_ERROR_INVALID_KERNEL_NAME = 2013265937\n    ZE_RESULT_ERROR_INVALID_FUNCTION_NAME = 2013265938\n    ZE_RESULT_ERROR_INVALID_GROUP_SIZE_DIMENSION = 2013265939\n    ZE_RESULT_ERROR_INVALID_GLOBAL_WIDTH_DIMENSION = 2013265940\n    ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_INDEX = 2013265941\n    ZE_RESULT_ERROR_INVALID_KERNEL_ARGUMENT_SIZE = 2013265942\n    ZE_RESULT_ERROR_INVALID_KERNEL_ATTRIBUTE_VALUE = 2013265943\n    ZE_RESULT_ERROR_INVALID_MODULE_UNLINKED = 2013265944\n    ZE_RESULT_ERROR_INVALID_COMMAND_LIST_TYPE = 2013265945\n    ZE_RESULT_ERROR_OVERLAPPING_REGIONS = 2013265946\n    ZE_RESULT_WARNING_ACTION_REQUIRED = 2013265947\n    ZE_RESULT_ERROR_INVALID_KERNEL_HANDLE = 2013265948\n    ZE_RESULT_EXT_RTAS_BUILD_RETRY = 2013265949\n    ZE_RESULT_EXT_RTAS_BUILD_DEFERRED = 2013265950\n    ZE_RESULT_EXT_ERROR_OPERANDS_INCOMPATIBLE = 2013265951\n    ZE_RESULT_ERROR_SURVIVABILITY_MODE_DETECTED = 2013265952\n    ZE_RESULT_ERROR_UNKNOWN = 2147483646\n    ZE_RESULT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_result_t = _ze_result_t\n\n@cenum _ze_structure_type_t::UInt32 begin\n    ZE_STRUCTURE_TYPE_DRIVER_PROPERTIES = 1\n    ZE_STRUCTURE_TYPE_DRIVER_IPC_PROPERTIES = 2\n    ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES = 3\n    ZE_STRUCTURE_TYPE_DEVICE_COMPUTE_PROPERTIES = 4\n    ZE_STRUCTURE_TYPE_DEVICE_MODULE_PROPERTIES = 5\n    ZE_STRUCTURE_TYPE_COMMAND_QUEUE_GROUP_PROPERTIES = 6\n    ZE_STRUCTURE_TYPE_DEVICE_MEMORY_PROPERTIES = 7\n    ZE_STRUCTURE_TYPE_DEVICE_MEMORY_ACCESS_PROPERTIES = 8\n    ZE_STRUCTURE_TYPE_DEVICE_CACHE_PROPERTIES = 9\n    ZE_STRUCTURE_TYPE_DEVICE_IMAGE_PROPERTIES = 10\n    ZE_STRUCTURE_TYPE_DEVICE_P2P_PROPERTIES = 11\n    ZE_STRUCTURE_TYPE_DEVICE_EXTERNAL_MEMORY_PROPERTIES = 12\n    ZE_STRUCTURE_TYPE_CONTEXT_DESC = 13\n    ZE_STRUCTURE_TYPE_COMMAND_QUEUE_DESC = 14\n    ZE_STRUCTURE_TYPE_COMMAND_LIST_DESC = 15\n    ZE_STRUCTURE_TYPE_EVENT_POOL_DESC = 16\n    ZE_STRUCTURE_TYPE_EVENT_DESC = 17\n    ZE_STRUCTURE_TYPE_FENCE_DESC = 18\n    ZE_STRUCTURE_TYPE_IMAGE_DESC = 19\n    ZE_STRUCTURE_TYPE_IMAGE_PROPERTIES = 20\n    ZE_STRUCTURE_TYPE_DEVICE_MEM_ALLOC_DESC = 21\n    ZE_STRUCTURE_TYPE_HOST_MEM_ALLOC_DESC = 22\n    ZE_STRUCTURE_TYPE_MEMORY_ALLOCATION_PROPERTIES = 23\n    ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_DESC = 24\n    ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_FD = 25\n    ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_FD = 26\n    ZE_STRUCTURE_TYPE_MODULE_DESC = 27\n    ZE_STRUCTURE_TYPE_MODULE_PROPERTIES = 28\n    ZE_STRUCTURE_TYPE_KERNEL_DESC = 29\n    ZE_STRUCTURE_TYPE_KERNEL_PROPERTIES = 30\n    ZE_STRUCTURE_TYPE_SAMPLER_DESC = 31\n    ZE_STRUCTURE_TYPE_PHYSICAL_MEM_DESC = 32\n    ZE_STRUCTURE_TYPE_KERNEL_PREFERRED_GROUP_SIZE_PROPERTIES = 33\n    ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMPORT_WIN32 = 34\n    ZE_STRUCTURE_TYPE_EXTERNAL_MEMORY_EXPORT_WIN32 = 35\n    ZE_STRUCTURE_TYPE_DEVICE_RAYTRACING_EXT_PROPERTIES = 65537\n    ZE_STRUCTURE_TYPE_RAYTRACING_MEM_ALLOC_EXT_DESC = 65538\n    ZE_STRUCTURE_TYPE_FLOAT_ATOMIC_EXT_PROPERTIES = 65539\n    ZE_STRUCTURE_TYPE_CACHE_RESERVATION_EXT_DESC = 65540\n    ZE_STRUCTURE_TYPE_EU_COUNT_EXT = 65541\n    ZE_STRUCTURE_TYPE_SRGB_EXT_DESC = 65542\n    ZE_STRUCTURE_TYPE_LINKAGE_INSPECTION_EXT_DESC = 65543\n    ZE_STRUCTURE_TYPE_PCI_EXT_PROPERTIES = 65544\n    ZE_STRUCTURE_TYPE_DRIVER_MEMORY_FREE_EXT_PROPERTIES = 65545\n    ZE_STRUCTURE_TYPE_MEMORY_FREE_EXT_DESC = 65546\n    ZE_STRUCTURE_TYPE_MEMORY_COMPRESSION_HINTS_EXT_DESC = 65547\n    ZE_STRUCTURE_TYPE_IMAGE_ALLOCATION_EXT_PROPERTIES = 65548\n    ZE_STRUCTURE_TYPE_DEVICE_LUID_EXT_PROPERTIES = 65549\n    ZE_STRUCTURE_TYPE_DEVICE_MEMORY_EXT_PROPERTIES = 65550\n    ZE_STRUCTURE_TYPE_DEVICE_IP_VERSION_EXT = 65551\n    ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXT_DESC = 65552\n    ZE_STRUCTURE_TYPE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_PROPERTIES = 65553\n    ZE_STRUCTURE_TYPE_EVENT_QUERY_KERNEL_TIMESTAMPS_RESULTS_EXT_PROPERTIES = 65554\n    ZE_STRUCTURE_TYPE_KERNEL_MAX_GROUP_SIZE_EXT_PROPERTIES = 65555\n    ZE_STRUCTURE_TYPE_RELAXED_ALLOCATION_LIMITS_EXP_DESC = 131073\n    ZE_STRUCTURE_TYPE_MODULE_PROGRAM_EXP_DESC = 131074\n    ZE_STRUCTURE_TYPE_SCHEDULING_HINT_EXP_PROPERTIES = 131075\n    ZE_STRUCTURE_TYPE_SCHEDULING_HINT_EXP_DESC = 131076\n    ZE_STRUCTURE_TYPE_IMAGE_VIEW_PLANAR_EXP_DESC = 131077\n    ZE_STRUCTURE_TYPE_DEVICE_PROPERTIES_1_2 = 131078\n    ZE_STRUCTURE_TYPE_IMAGE_MEMORY_EXP_PROPERTIES = 131079\n    ZE_STRUCTURE_TYPE_POWER_SAVING_HINT_EXP_DESC = 131080\n    ZE_STRUCTURE_TYPE_COPY_BANDWIDTH_EXP_PROPERTIES = 131081\n    ZE_STRUCTURE_TYPE_DEVICE_P2P_BANDWIDTH_EXP_PROPERTIES = 131082\n    ZE_STRUCTURE_TYPE_FABRIC_VERTEX_EXP_PROPERTIES = 131083\n    ZE_STRUCTURE_TYPE_FABRIC_EDGE_EXP_PROPERTIES = 131084\n    ZE_STRUCTURE_TYPE_MEMORY_SUB_ALLOCATIONS_EXP_PROPERTIES = 131085\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXP_DESC = 131086\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_BUILD_OP_EXP_DESC = 131087\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXP_PROPERTIES = 131088\n    ZE_STRUCTURE_TYPE_RTAS_PARALLEL_OPERATION_EXP_PROPERTIES = 131089\n    ZE_STRUCTURE_TYPE_RTAS_DEVICE_EXP_PROPERTIES = 131090\n    ZE_STRUCTURE_TYPE_RTAS_GEOMETRY_AABBS_EXP_CB_PARAMS = 131091\n    ZE_STRUCTURE_TYPE_COUNTER_BASED_EVENT_POOL_EXP_DESC = 131092\n    ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_LIST_EXP_PROPERTIES = 131093\n    ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_LIST_EXP_DESC = 131094\n    ZE_STRUCTURE_TYPE_MUTABLE_COMMAND_ID_EXP_DESC = 131095\n    ZE_STRUCTURE_TYPE_MUTABLE_COMMANDS_EXP_DESC = 131096\n    ZE_STRUCTURE_TYPE_MUTABLE_KERNEL_ARGUMENT_EXP_DESC = 131097\n    ZE_STRUCTURE_TYPE_MUTABLE_GROUP_COUNT_EXP_DESC = 131098\n    ZE_STRUCTURE_TYPE_MUTABLE_GROUP_SIZE_EXP_DESC = 131099\n    ZE_STRUCTURE_TYPE_MUTABLE_GLOBAL_OFFSET_EXP_DESC = 131100\n    ZE_STRUCTURE_TYPE_PITCHED_ALLOC_DEVICE_EXP_PROPERTIES = 131101\n    ZE_STRUCTURE_TYPE_BINDLESS_IMAGE_EXP_DESC = 131102\n    ZE_STRUCTURE_TYPE_PITCHED_IMAGE_EXP_DESC = 131103\n    ZE_STRUCTURE_TYPE_MUTABLE_GRAPH_ARGUMENT_EXP_DESC = 131104\n    ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC = 131105\n    ZE_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_EXT_DESC = 131106\n    ZE_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_WIN32_EXT_DESC = 131107\n    ZE_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_FD_EXT_DESC = 131108\n    ZE_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_EXT = 131109\n    ZE_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_WAIT_PARAMS_EXT = 131110\n    ZE_STRUCTURE_TYPE_DRIVER_DDI_HANDLES_EXT_PROPERTIES = 131111\n    ZE_STRUCTURE_TYPE_DEVICE_CACHELINE_SIZE_EXT = 131112\n    ZE_STRUCTURE_TYPE_DEVICE_VECTOR_WIDTH_PROPERTIES_EXT = 131113\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXT_DESC = 131120\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_BUILD_OP_EXT_DESC = 131121\n    ZE_STRUCTURE_TYPE_RTAS_BUILDER_EXT_PROPERTIES = 131122\n    ZE_STRUCTURE_TYPE_RTAS_PARALLEL_OPERATION_EXT_PROPERTIES = 131123\n    ZE_STRUCTURE_TYPE_RTAS_DEVICE_EXT_PROPERTIES = 131124\n    ZE_STRUCTURE_TYPE_RTAS_GEOMETRY_AABBS_EXT_CB_PARAMS = 131125\n    ZE_STRUCTURE_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_structure_type_t = _ze_structure_type_t\n\nconst ze_external_memory_type_flags_t = UInt32\n\n@cenum _ze_external_memory_type_flag_t::UInt32 begin\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_FD = 1\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_DMA_BUF = 2\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32 = 4\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_OPAQUE_WIN32_KMT = 8\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_TEXTURE = 16\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D11_TEXTURE_KMT = 32\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D12_HEAP = 64\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_D3D12_RESOURCE = 128\n    ZE_EXTERNAL_MEMORY_TYPE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_external_memory_type_flag_t = _ze_external_memory_type_flag_t\n\n@cenum _ze_bandwidth_unit_t::UInt32 begin\n    ZE_BANDWIDTH_UNIT_UNKNOWN = 0\n    ZE_BANDWIDTH_UNIT_BYTES_PER_NANOSEC = 1\n    ZE_BANDWIDTH_UNIT_BYTES_PER_CLOCK = 2\n    ZE_BANDWIDTH_UNIT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_bandwidth_unit_t = _ze_bandwidth_unit_t\n\n@cenum _ze_latency_unit_t::UInt32 begin\n    ZE_LATENCY_UNIT_UNKNOWN = 0\n    ZE_LATENCY_UNIT_NANOSEC = 1\n    ZE_LATENCY_UNIT_CLOCK = 2\n    ZE_LATENCY_UNIT_HOP = 3\n    ZE_LATENCY_UNIT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_latency_unit_t = _ze_latency_unit_t\n\nstruct _ze_uuid_t\n    id::NTuple{16,UInt8}\nend\n\nconst ze_uuid_t = _ze_uuid_t\n\nstruct _ze_base_cb_params_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\nend\n\nconst ze_base_cb_params_t = _ze_base_cb_params_t\n\nstruct _ze_base_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\nend\n\nconst ze_base_properties_t = _ze_base_properties_t\n\nstruct _ze_base_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\nend\n\nconst ze_base_desc_t = _ze_base_desc_t\n\nconst ze_init_driver_type_flags_t = UInt32\n\nstruct _ze_init_driver_type_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_init_driver_type_flags_t\nend\n\nconst ze_init_driver_type_desc_t = _ze_init_driver_type_desc_t\n\nstruct _ze_driver_uuid_t\n    id::NTuple{16,UInt8}\nend\n\nconst ze_driver_uuid_t = _ze_driver_uuid_t\n\nstruct _ze_driver_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    uuid::ze_driver_uuid_t\n    driverVersion::UInt32\nend\n\nconst ze_driver_properties_t = _ze_driver_properties_t\n\nconst ze_ipc_property_flags_t = UInt32\n\nstruct _ze_driver_ipc_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_ipc_property_flags_t\nend\n\nconst ze_driver_ipc_properties_t = _ze_driver_ipc_properties_t\n\nstruct _ze_driver_extension_properties_t\n    name::NTuple{256,Cchar}\n    version::UInt32\nend\n\nconst ze_driver_extension_properties_t = _ze_driver_extension_properties_t\n\nstruct _ze_device_uuid_t\n    id::NTuple{16,UInt8}\nend\n\nconst ze_device_uuid_t = _ze_device_uuid_t\n\n@cenum _ze_device_type_t::UInt32 begin\n    ZE_DEVICE_TYPE_GPU = 1\n    ZE_DEVICE_TYPE_CPU = 2\n    ZE_DEVICE_TYPE_FPGA = 3\n    ZE_DEVICE_TYPE_MCA = 4\n    ZE_DEVICE_TYPE_VPU = 5\n    ZE_DEVICE_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_type_t = _ze_device_type_t\n\nconst ze_device_property_flags_t = UInt32\n\nstruct _ze_device_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    type::ze_device_type_t\n    vendorId::UInt32\n    deviceId::UInt32\n    flags::ze_device_property_flags_t\n    subdeviceId::UInt32\n    coreClockRate::UInt32\n    maxMemAllocSize::UInt64\n    maxHardwareContexts::UInt32\n    maxCommandQueuePriority::UInt32\n    numThreadsPerEU::UInt32\n    physicalEUSimdWidth::UInt32\n    numEUsPerSubslice::UInt32\n    numSubslicesPerSlice::UInt32\n    numSlices::UInt32\n    timerResolution::UInt64\n    timestampValidBits::UInt32\n    kernelTimestampValidBits::UInt32\n    uuid::ze_device_uuid_t\n    name::NTuple{256,Cchar}\nend\n\nconst ze_device_properties_t = _ze_device_properties_t\n\nstruct _ze_device_thread_t\n    slice::UInt32\n    subslice::UInt32\n    eu::UInt32\n    thread::UInt32\nend\n\nconst ze_device_thread_t = _ze_device_thread_t\n\nstruct _ze_device_compute_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    maxTotalGroupSize::UInt32\n    maxGroupSizeX::UInt32\n    maxGroupSizeY::UInt32\n    maxGroupSizeZ::UInt32\n    maxGroupCountX::UInt32\n    maxGroupCountY::UInt32\n    maxGroupCountZ::UInt32\n    maxSharedLocalMemory::UInt32\n    numSubGroupSizes::UInt32\n    subGroupSizes::NTuple{8,UInt32}\nend\n\nconst ze_device_compute_properties_t = _ze_device_compute_properties_t\n\nstruct _ze_native_kernel_uuid_t\n    id::NTuple{16,UInt8}\nend\n\nconst ze_native_kernel_uuid_t = _ze_native_kernel_uuid_t\n\nconst ze_device_module_flags_t = UInt32\n\nconst ze_device_fp_flags_t = UInt32\n\nstruct _ze_device_module_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    spirvVersionSupported::UInt32\n    flags::ze_device_module_flags_t\n    fp16flags::ze_device_fp_flags_t\n    fp32flags::ze_device_fp_flags_t\n    fp64flags::ze_device_fp_flags_t\n    maxArgumentsSize::UInt32\n    printfBufferSize::UInt32\n    nativeKernelSupported::ze_native_kernel_uuid_t\nend\n\nconst ze_device_module_properties_t = _ze_device_module_properties_t\n\nconst ze_command_queue_group_property_flags_t = UInt32\n\nstruct _ze_command_queue_group_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_command_queue_group_property_flags_t\n    maxMemoryFillPatternSize::Csize_t\n    numQueues::UInt32\nend\n\nconst ze_command_queue_group_properties_t = _ze_command_queue_group_properties_t\n\nconst ze_device_memory_property_flags_t = UInt32\n\nstruct _ze_device_memory_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_device_memory_property_flags_t\n    maxClockRate::UInt32\n    maxBusWidth::UInt32\n    totalSize::UInt64\n    name::NTuple{256,Cchar}\nend\n\nconst ze_device_memory_properties_t = _ze_device_memory_properties_t\n\nconst ze_memory_access_cap_flags_t = UInt32\n\nstruct _ze_device_memory_access_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    hostAllocCapabilities::ze_memory_access_cap_flags_t\n    deviceAllocCapabilities::ze_memory_access_cap_flags_t\n    sharedSingleDeviceAllocCapabilities::ze_memory_access_cap_flags_t\n    sharedCrossDeviceAllocCapabilities::ze_memory_access_cap_flags_t\n    sharedSystemAllocCapabilities::ze_memory_access_cap_flags_t\nend\n\nconst ze_device_memory_access_properties_t = _ze_device_memory_access_properties_t\n\nconst ze_device_cache_property_flags_t = UInt32\n\nstruct _ze_device_cache_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_device_cache_property_flags_t\n    cacheSize::Csize_t\nend\n\nconst ze_device_cache_properties_t = _ze_device_cache_properties_t\n\nstruct _ze_device_image_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    maxImageDims1D::UInt32\n    maxImageDims2D::UInt32\n    maxImageDims3D::UInt32\n    maxImageBufferSize::UInt64\n    maxImageArraySlices::UInt32\n    maxSamplers::UInt32\n    maxReadImageArgs::UInt32\n    maxWriteImageArgs::UInt32\nend\n\nconst ze_device_image_properties_t = _ze_device_image_properties_t\n\nstruct _ze_device_external_memory_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    memoryAllocationImportTypes::ze_external_memory_type_flags_t\n    memoryAllocationExportTypes::ze_external_memory_type_flags_t\n    imageImportTypes::ze_external_memory_type_flags_t\n    imageExportTypes::ze_external_memory_type_flags_t\nend\n\nconst ze_device_external_memory_properties_t = _ze_device_external_memory_properties_t\n\nconst ze_device_p2p_property_flags_t = UInt32\n\nstruct _ze_device_p2p_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_device_p2p_property_flags_t\nend\n\nconst ze_device_p2p_properties_t = _ze_device_p2p_properties_t\n\nconst ze_context_flags_t = UInt32\n\nstruct _ze_context_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_context_flags_t\nend\n\nconst ze_context_desc_t = _ze_context_desc_t\n\nconst ze_command_queue_flags_t = UInt32\n\n@cenum _ze_command_queue_mode_t::UInt32 begin\n    ZE_COMMAND_QUEUE_MODE_DEFAULT = 0\n    ZE_COMMAND_QUEUE_MODE_SYNCHRONOUS = 1\n    ZE_COMMAND_QUEUE_MODE_ASYNCHRONOUS = 2\n    ZE_COMMAND_QUEUE_MODE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_queue_mode_t = _ze_command_queue_mode_t\n\n@cenum _ze_command_queue_priority_t::UInt32 begin\n    ZE_COMMAND_QUEUE_PRIORITY_NORMAL = 0\n    ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_LOW = 1\n    ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH = 2\n    ZE_COMMAND_QUEUE_PRIORITY_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_queue_priority_t = _ze_command_queue_priority_t\n\nstruct _ze_command_queue_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    ordinal::UInt32\n    index::UInt32\n    flags::ze_command_queue_flags_t\n    mode::ze_command_queue_mode_t\n    priority::ze_command_queue_priority_t\nend\n\nconst ze_command_queue_desc_t = _ze_command_queue_desc_t\n\nconst ze_command_list_flags_t = UInt32\n\nstruct _ze_command_list_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandQueueGroupOrdinal::UInt32\n    flags::ze_command_list_flags_t\nend\n\nconst ze_command_list_desc_t = _ze_command_list_desc_t\n\nstruct _ze_copy_region_t\n    originX::UInt32\n    originY::UInt32\n    originZ::UInt32\n    width::UInt32\n    height::UInt32\n    depth::UInt32\nend\n\nconst ze_copy_region_t = _ze_copy_region_t\n\nstruct _ze_image_region_t\n    originX::UInt32\n    originY::UInt32\n    originZ::UInt32\n    width::UInt32\n    height::UInt32\n    depth::UInt32\nend\n\nconst ze_image_region_t = _ze_image_region_t\n\nconst ze_event_pool_flags_t = UInt32\n\nstruct _ze_event_pool_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_event_pool_flags_t\n    count::UInt32\nend\n\nconst ze_event_pool_desc_t = _ze_event_pool_desc_t\n\nconst ze_event_scope_flags_t = UInt32\n\nstruct _ze_event_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    index::UInt32\n    signal::ze_event_scope_flags_t\n    wait::ze_event_scope_flags_t\nend\n\nconst ze_event_desc_t = _ze_event_desc_t\n\nstruct _ze_kernel_timestamp_data_t\n    kernelStart::UInt64\n    kernelEnd::UInt64\nend\n\nconst ze_kernel_timestamp_data_t = _ze_kernel_timestamp_data_t\n\nstruct _ze_kernel_timestamp_result_t\n    _global::ze_kernel_timestamp_data_t\n    context::ze_kernel_timestamp_data_t\nend\n\nconst ze_kernel_timestamp_result_t = _ze_kernel_timestamp_result_t\n\nconst ze_fence_flags_t = UInt32\n\nstruct _ze_fence_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_fence_flags_t\nend\n\nconst ze_fence_desc_t = _ze_fence_desc_t\n\n@cenum _ze_image_format_layout_t::UInt32 begin\n    ZE_IMAGE_FORMAT_LAYOUT_8 = 0\n    ZE_IMAGE_FORMAT_LAYOUT_16 = 1\n    ZE_IMAGE_FORMAT_LAYOUT_32 = 2\n    ZE_IMAGE_FORMAT_LAYOUT_8_8 = 3\n    ZE_IMAGE_FORMAT_LAYOUT_8_8_8_8 = 4\n    ZE_IMAGE_FORMAT_LAYOUT_16_16 = 5\n    ZE_IMAGE_FORMAT_LAYOUT_16_16_16_16 = 6\n    ZE_IMAGE_FORMAT_LAYOUT_32_32 = 7\n    ZE_IMAGE_FORMAT_LAYOUT_32_32_32_32 = 8\n    ZE_IMAGE_FORMAT_LAYOUT_10_10_10_2 = 9\n    ZE_IMAGE_FORMAT_LAYOUT_11_11_10 = 10\n    ZE_IMAGE_FORMAT_LAYOUT_5_6_5 = 11\n    ZE_IMAGE_FORMAT_LAYOUT_5_5_5_1 = 12\n    ZE_IMAGE_FORMAT_LAYOUT_4_4_4_4 = 13\n    ZE_IMAGE_FORMAT_LAYOUT_Y8 = 14\n    ZE_IMAGE_FORMAT_LAYOUT_NV12 = 15\n    ZE_IMAGE_FORMAT_LAYOUT_YUYV = 16\n    ZE_IMAGE_FORMAT_LAYOUT_VYUY = 17\n    ZE_IMAGE_FORMAT_LAYOUT_YVYU = 18\n    ZE_IMAGE_FORMAT_LAYOUT_UYVY = 19\n    ZE_IMAGE_FORMAT_LAYOUT_AYUV = 20\n    ZE_IMAGE_FORMAT_LAYOUT_P010 = 21\n    ZE_IMAGE_FORMAT_LAYOUT_Y410 = 22\n    ZE_IMAGE_FORMAT_LAYOUT_P012 = 23\n    ZE_IMAGE_FORMAT_LAYOUT_Y16 = 24\n    ZE_IMAGE_FORMAT_LAYOUT_P016 = 25\n    ZE_IMAGE_FORMAT_LAYOUT_Y216 = 26\n    ZE_IMAGE_FORMAT_LAYOUT_P216 = 27\n    ZE_IMAGE_FORMAT_LAYOUT_P8 = 28\n    ZE_IMAGE_FORMAT_LAYOUT_YUY2 = 29\n    ZE_IMAGE_FORMAT_LAYOUT_A8P8 = 30\n    ZE_IMAGE_FORMAT_LAYOUT_IA44 = 31\n    ZE_IMAGE_FORMAT_LAYOUT_AI44 = 32\n    ZE_IMAGE_FORMAT_LAYOUT_Y416 = 33\n    ZE_IMAGE_FORMAT_LAYOUT_Y210 = 34\n    ZE_IMAGE_FORMAT_LAYOUT_I420 = 35\n    ZE_IMAGE_FORMAT_LAYOUT_YV12 = 36\n    ZE_IMAGE_FORMAT_LAYOUT_400P = 37\n    ZE_IMAGE_FORMAT_LAYOUT_422H = 38\n    ZE_IMAGE_FORMAT_LAYOUT_422V = 39\n    ZE_IMAGE_FORMAT_LAYOUT_444P = 40\n    ZE_IMAGE_FORMAT_LAYOUT_RGBP = 41\n    ZE_IMAGE_FORMAT_LAYOUT_BRGP = 42\n    ZE_IMAGE_FORMAT_LAYOUT_8_8_8 = 43\n    ZE_IMAGE_FORMAT_LAYOUT_16_16_16 = 44\n    ZE_IMAGE_FORMAT_LAYOUT_32_32_32 = 45\n    ZE_IMAGE_FORMAT_LAYOUT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_format_layout_t = _ze_image_format_layout_t\n\n@cenum _ze_image_format_type_t::UInt32 begin\n    ZE_IMAGE_FORMAT_TYPE_UINT = 0\n    ZE_IMAGE_FORMAT_TYPE_SINT = 1\n    ZE_IMAGE_FORMAT_TYPE_UNORM = 2\n    ZE_IMAGE_FORMAT_TYPE_SNORM = 3\n    ZE_IMAGE_FORMAT_TYPE_FLOAT = 4\n    ZE_IMAGE_FORMAT_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_format_type_t = _ze_image_format_type_t\n\n@cenum _ze_image_format_swizzle_t::UInt32 begin\n    ZE_IMAGE_FORMAT_SWIZZLE_R = 0\n    ZE_IMAGE_FORMAT_SWIZZLE_G = 1\n    ZE_IMAGE_FORMAT_SWIZZLE_B = 2\n    ZE_IMAGE_FORMAT_SWIZZLE_A = 3\n    ZE_IMAGE_FORMAT_SWIZZLE_0 = 4\n    ZE_IMAGE_FORMAT_SWIZZLE_1 = 5\n    ZE_IMAGE_FORMAT_SWIZZLE_X = 6\n    ZE_IMAGE_FORMAT_SWIZZLE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_format_swizzle_t = _ze_image_format_swizzle_t\n\nstruct _ze_image_format_t\n    layout::ze_image_format_layout_t\n    type::ze_image_format_type_t\n    x::ze_image_format_swizzle_t\n    y::ze_image_format_swizzle_t\n    z::ze_image_format_swizzle_t\n    w::ze_image_format_swizzle_t\nend\n\nconst ze_image_format_t = _ze_image_format_t\n\nconst ze_image_flags_t = UInt32\n\n@cenum _ze_image_type_t::UInt32 begin\n    ZE_IMAGE_TYPE_1D = 0\n    ZE_IMAGE_TYPE_1DARRAY = 1\n    ZE_IMAGE_TYPE_2D = 2\n    ZE_IMAGE_TYPE_2DARRAY = 3\n    ZE_IMAGE_TYPE_3D = 4\n    ZE_IMAGE_TYPE_BUFFER = 5\n    ZE_IMAGE_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_type_t = _ze_image_type_t\n\nstruct _ze_image_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_image_flags_t\n    type::ze_image_type_t\n    format::ze_image_format_t\n    width::UInt64\n    height::UInt32\n    depth::UInt32\n    arraylevels::UInt32\n    miplevels::UInt32\nend\n\nconst ze_image_desc_t = _ze_image_desc_t\n\nconst ze_image_sampler_filter_flags_t = UInt32\n\nstruct _ze_image_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    samplerFilterFlags::ze_image_sampler_filter_flags_t\nend\n\nconst ze_image_properties_t = _ze_image_properties_t\n\nconst ze_device_mem_alloc_flags_t = UInt32\n\nstruct _ze_device_mem_alloc_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_device_mem_alloc_flags_t\n    ordinal::UInt32\nend\n\nconst ze_device_mem_alloc_desc_t = _ze_device_mem_alloc_desc_t\n\nconst ze_host_mem_alloc_flags_t = UInt32\n\nstruct _ze_host_mem_alloc_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_host_mem_alloc_flags_t\nend\n\nconst ze_host_mem_alloc_desc_t = _ze_host_mem_alloc_desc_t\n\n@cenum _ze_memory_type_t::UInt32 begin\n    ZE_MEMORY_TYPE_UNKNOWN = 0\n    ZE_MEMORY_TYPE_HOST = 1\n    ZE_MEMORY_TYPE_DEVICE = 2\n    ZE_MEMORY_TYPE_SHARED = 3\n    ZE_MEMORY_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_type_t = _ze_memory_type_t\n\nstruct _ze_memory_allocation_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    type::ze_memory_type_t\n    id::UInt64\n    pageSize::UInt64\nend\n\nconst ze_memory_allocation_properties_t = _ze_memory_allocation_properties_t\n\nstruct _ze_external_memory_export_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_memory_type_flags_t\nend\n\nconst ze_external_memory_export_desc_t = _ze_external_memory_export_desc_t\n\nstruct _ze_external_memory_import_fd_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_memory_type_flags_t\n    fd::Cint\nend\n\nconst ze_external_memory_import_fd_t = _ze_external_memory_import_fd_t\n\nstruct _ze_external_memory_export_fd_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_memory_type_flags_t\n    fd::Cint\nend\n\nconst ze_external_memory_export_fd_t = _ze_external_memory_export_fd_t\n\nstruct _ze_external_memory_import_win32_handle_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_memory_type_flags_t\n    handle::Ptr{Cvoid}\n    name::Ptr{Cvoid}\nend\n\nconst ze_external_memory_import_win32_handle_t = _ze_external_memory_import_win32_handle_t\n\nstruct _ze_external_memory_export_win32_handle_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_memory_type_flags_t\n    handle::Ptr{Cvoid}\nend\n\nconst ze_external_memory_export_win32_handle_t = _ze_external_memory_export_win32_handle_t\n\nstruct _ze_module_constants_t\n    numConstants::UInt32\n    pConstantIds::Ptr{UInt32}\n    pConstantValues::Ptr{Ptr{Cvoid}}\nend\n\nconst ze_module_constants_t = _ze_module_constants_t\n\n@cenum _ze_module_format_t::UInt32 begin\n    ZE_MODULE_FORMAT_IL_SPIRV = 0\n    ZE_MODULE_FORMAT_NATIVE = 1\n    ZE_MODULE_FORMAT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_module_format_t = _ze_module_format_t\n\nstruct _ze_module_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    format::ze_module_format_t\n    inputSize::Csize_t\n    pInputModule::Ptr{UInt8}\n    pBuildFlags::Ptr{Cchar}\n    pConstants::Ptr{ze_module_constants_t}\nend\n\nconst ze_module_desc_t = _ze_module_desc_t\n\nconst ze_module_property_flags_t = UInt32\n\nstruct _ze_module_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_module_property_flags_t\nend\n\nconst ze_module_properties_t = _ze_module_properties_t\n\nconst ze_kernel_flags_t = UInt32\n\nstruct _ze_kernel_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_kernel_flags_t\n    pKernelName::Ptr{Cchar}\nend\n\nconst ze_kernel_desc_t = _ze_kernel_desc_t\n\nstruct _ze_kernel_uuid_t\n    kid::NTuple{16,UInt8}\n    mid::NTuple{16,UInt8}\nend\n\nconst ze_kernel_uuid_t = _ze_kernel_uuid_t\n\nstruct _ze_kernel_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    numKernelArgs::UInt32\n    requiredGroupSizeX::UInt32\n    requiredGroupSizeY::UInt32\n    requiredGroupSizeZ::UInt32\n    requiredNumSubGroups::UInt32\n    requiredSubgroupSize::UInt32\n    maxSubgroupSize::UInt32\n    maxNumSubgroups::UInt32\n    localMemSize::UInt32\n    privateMemSize::UInt32\n    spillMemSize::UInt32\n    uuid::ze_kernel_uuid_t\nend\n\nconst ze_kernel_properties_t = _ze_kernel_properties_t\n\nstruct _ze_kernel_preferred_group_size_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    preferredMultiple::UInt32\nend\n\nconst ze_kernel_preferred_group_size_properties_t = _ze_kernel_preferred_group_size_properties_t\n\nstruct _ze_group_count_t\n    groupCountX::UInt32\n    groupCountY::UInt32\n    groupCountZ::UInt32\nend\n\nconst ze_group_count_t = _ze_group_count_t\n\nstruct _ze_module_program_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    count::UInt32\n    inputSizes::Ptr{Csize_t}\n    pInputModules::Ptr{Ptr{UInt8}}\n    pBuildFlags::Ptr{Ptr{Cchar}}\n    pConstants::Ptr{Ptr{ze_module_constants_t}}\nend\n\nconst ze_module_program_exp_desc_t = _ze_module_program_exp_desc_t\n\nconst ze_device_raytracing_ext_flags_t = UInt32\n\nstruct _ze_device_raytracing_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_device_raytracing_ext_flags_t\n    maxBVHLevels::UInt32\nend\n\nconst ze_device_raytracing_ext_properties_t = _ze_device_raytracing_ext_properties_t\n\nconst ze_raytracing_mem_alloc_ext_flags_t = UInt32\n\nstruct _ze_raytracing_mem_alloc_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_raytracing_mem_alloc_ext_flags_t\nend\n\nconst ze_raytracing_mem_alloc_ext_desc_t = _ze_raytracing_mem_alloc_ext_desc_t\n\n@cenum _ze_sampler_address_mode_t::UInt32 begin\n    ZE_SAMPLER_ADDRESS_MODE_NONE = 0\n    ZE_SAMPLER_ADDRESS_MODE_REPEAT = 1\n    ZE_SAMPLER_ADDRESS_MODE_CLAMP = 2\n    ZE_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3\n    ZE_SAMPLER_ADDRESS_MODE_MIRROR = 4\n    ZE_SAMPLER_ADDRESS_MODE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_sampler_address_mode_t = _ze_sampler_address_mode_t\n\n@cenum _ze_sampler_filter_mode_t::UInt32 begin\n    ZE_SAMPLER_FILTER_MODE_NEAREST = 0\n    ZE_SAMPLER_FILTER_MODE_LINEAR = 1\n    ZE_SAMPLER_FILTER_MODE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_sampler_filter_mode_t = _ze_sampler_filter_mode_t\n\nstruct _ze_sampler_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    addressMode::ze_sampler_address_mode_t\n    filterMode::ze_sampler_filter_mode_t\n    isNormalized::ze_bool_t\nend\n\nconst ze_sampler_desc_t = _ze_sampler_desc_t\n\nconst ze_physical_mem_flags_t = UInt32\n\nstruct _ze_physical_mem_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_physical_mem_flags_t\n    size::Csize_t\nend\n\nconst ze_physical_mem_desc_t = _ze_physical_mem_desc_t\n\nconst ze_device_fp_atomic_ext_flags_t = UInt32\n\nstruct _ze_float_atomic_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    fp16Flags::ze_device_fp_atomic_ext_flags_t\n    fp32Flags::ze_device_fp_atomic_ext_flags_t\n    fp64Flags::ze_device_fp_atomic_ext_flags_t\nend\n\nconst ze_float_atomic_ext_properties_t = _ze_float_atomic_ext_properties_t\n\nconst ze_relaxed_allocation_limits_exp_flags_t = UInt32\n\nstruct _ze_relaxed_allocation_limits_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_relaxed_allocation_limits_exp_flags_t\nend\n\nconst ze_relaxed_allocation_limits_exp_desc_t = _ze_relaxed_allocation_limits_exp_desc_t\n\nconst ze_driver_ddi_handle_ext_flags_t = UInt32\n\nstruct _ze_driver_ddi_handles_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_driver_ddi_handle_ext_flags_t\nend\n\nconst ze_driver_ddi_handles_ext_properties_t = _ze_driver_ddi_handles_ext_properties_t\n\nconst ze_external_semaphore_ext_flags_t = UInt32\n\nstruct _ze_external_semaphore_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_external_semaphore_ext_flags_t\nend\n\nconst ze_external_semaphore_ext_desc_t = _ze_external_semaphore_ext_desc_t\n\nstruct _ze_external_semaphore_win32_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    handle::Ptr{Cvoid}\n    name::Ptr{Cchar}\nend\n\nconst ze_external_semaphore_win32_ext_desc_t = _ze_external_semaphore_win32_ext_desc_t\n\nstruct _ze_external_semaphore_fd_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    fd::Cint\nend\n\nconst ze_external_semaphore_fd_ext_desc_t = _ze_external_semaphore_fd_ext_desc_t\n\nstruct _ze_external_semaphore_signal_params_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    value::UInt64\nend\n\nconst ze_external_semaphore_signal_params_ext_t = _ze_external_semaphore_signal_params_ext_t\n\nstruct _ze_external_semaphore_wait_params_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    value::UInt64\nend\n\nconst ze_external_semaphore_wait_params_ext_t = _ze_external_semaphore_wait_params_ext_t\n\nstruct _ze_device_cache_line_size_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    cacheLineSize::Csize_t\nend\n\nconst ze_device_cache_line_size_ext_t = _ze_device_cache_line_size_ext_t\n\n@cenum _ze_rtas_builder_ext_version_t::UInt32 begin\n    ZE_RTAS_BUILDER_EXT_VERSION_1_0 = 65536\n    ZE_RTAS_BUILDER_EXT_VERSION_CURRENT = 65536\n    ZE_RTAS_BUILDER_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_ext_version_t = _ze_rtas_builder_ext_version_t\n\nstruct _ze_rtas_builder_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    builderVersion::ze_rtas_builder_ext_version_t\nend\n\nconst ze_rtas_builder_ext_desc_t = _ze_rtas_builder_ext_desc_t\n\nconst ze_rtas_builder_ext_flags_t = UInt32\n\nstruct _ze_rtas_builder_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_builder_ext_flags_t\n    rtasBufferSizeBytesExpected::Csize_t\n    rtasBufferSizeBytesMaxRequired::Csize_t\n    scratchBufferSizeBytes::Csize_t\nend\n\nconst ze_rtas_builder_ext_properties_t = _ze_rtas_builder_ext_properties_t\n\nconst ze_rtas_parallel_operation_ext_flags_t = UInt32\n\nstruct _ze_rtas_parallel_operation_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_parallel_operation_ext_flags_t\n    maxConcurrency::UInt32\nend\n\nconst ze_rtas_parallel_operation_ext_properties_t = _ze_rtas_parallel_operation_ext_properties_t\n\nconst ze_rtas_device_ext_flags_t = UInt32\n\n@cenum _ze_rtas_format_ext_t::UInt32 begin\n    ZE_RTAS_FORMAT_EXT_INVALID = 0\n    ZE_RTAS_FORMAT_EXT_MAX = 2147483646\n    ZE_RTAS_FORMAT_EXT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_format_ext_t = _ze_rtas_format_ext_t\n\nstruct _ze_rtas_device_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_device_ext_flags_t\n    rtasFormat::ze_rtas_format_ext_t\n    rtasBufferAlignment::UInt32\nend\n\nconst ze_rtas_device_ext_properties_t = _ze_rtas_device_ext_properties_t\n\nstruct _ze_rtas_float3_ext_t\n    x::Cfloat\n    y::Cfloat\n    z::Cfloat\nend\n\nconst ze_rtas_float3_ext_t = _ze_rtas_float3_ext_t\n\nstruct _ze_rtas_transform_float3x4_column_major_ext_t\n    vx_x::Cfloat\n    vx_y::Cfloat\n    vx_z::Cfloat\n    vy_x::Cfloat\n    vy_y::Cfloat\n    vy_z::Cfloat\n    vz_x::Cfloat\n    vz_y::Cfloat\n    vz_z::Cfloat\n    p_x::Cfloat\n    p_y::Cfloat\n    p_z::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_column_major_ext_t = _ze_rtas_transform_float3x4_column_major_ext_t\n\nstruct _ze_rtas_transform_float3x4_aligned_column_major_ext_t\n    vx_x::Cfloat\n    vx_y::Cfloat\n    vx_z::Cfloat\n    pad0::Cfloat\n    vy_x::Cfloat\n    vy_y::Cfloat\n    vy_z::Cfloat\n    pad1::Cfloat\n    vz_x::Cfloat\n    vz_y::Cfloat\n    vz_z::Cfloat\n    pad2::Cfloat\n    p_x::Cfloat\n    p_y::Cfloat\n    p_z::Cfloat\n    pad3::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_aligned_column_major_ext_t = _ze_rtas_transform_float3x4_aligned_column_major_ext_t\n\nstruct _ze_rtas_transform_float3x4_row_major_ext_t\n    vx_x::Cfloat\n    vy_x::Cfloat\n    vz_x::Cfloat\n    p_x::Cfloat\n    vx_y::Cfloat\n    vy_y::Cfloat\n    vz_y::Cfloat\n    p_y::Cfloat\n    vx_z::Cfloat\n    vy_z::Cfloat\n    vz_z::Cfloat\n    p_z::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_row_major_ext_t = _ze_rtas_transform_float3x4_row_major_ext_t\n\nstruct _ze_rtas_aabb_ext_t\n    lower::ze_rtas_float3_ext_t\n    upper::ze_rtas_float3_ext_t\nend\n\nconst ze_rtas_aabb_ext_t = _ze_rtas_aabb_ext_t\n\nstruct _ze_rtas_triangle_indices_uint32_ext_t\n    v0::UInt32\n    v1::UInt32\n    v2::UInt32\nend\n\nconst ze_rtas_triangle_indices_uint32_ext_t = _ze_rtas_triangle_indices_uint32_ext_t\n\nstruct _ze_rtas_quad_indices_uint32_ext_t\n    v0::UInt32\n    v1::UInt32\n    v2::UInt32\n    v3::UInt32\nend\n\nconst ze_rtas_quad_indices_uint32_ext_t = _ze_rtas_quad_indices_uint32_ext_t\n\nconst ze_rtas_builder_packed_geometry_type_ext_t = UInt8\n\nstruct _ze_rtas_builder_geometry_info_ext_t\n    geometryType::ze_rtas_builder_packed_geometry_type_ext_t\nend\n\nconst ze_rtas_builder_geometry_info_ext_t = _ze_rtas_builder_geometry_info_ext_t\n\nconst ze_rtas_builder_packed_geometry_ext_flags_t = UInt8\n\nconst ze_rtas_builder_packed_input_data_format_ext_t = UInt8\n\nstruct _ze_rtas_builder_triangles_geometry_info_ext_t\n    geometryType::ze_rtas_builder_packed_geometry_type_ext_t\n    geometryFlags::ze_rtas_builder_packed_geometry_ext_flags_t\n    geometryMask::UInt8\n    triangleFormat::ze_rtas_builder_packed_input_data_format_ext_t\n    vertexFormat::ze_rtas_builder_packed_input_data_format_ext_t\n    triangleCount::UInt32\n    vertexCount::UInt32\n    triangleStride::UInt32\n    vertexStride::UInt32\n    pTriangleBuffer::Ptr{Cvoid}\n    pVertexBuffer::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_triangles_geometry_info_ext_t = _ze_rtas_builder_triangles_geometry_info_ext_t\n\nstruct _ze_rtas_builder_quads_geometry_info_ext_t\n    geometryType::ze_rtas_builder_packed_geometry_type_ext_t\n    geometryFlags::ze_rtas_builder_packed_geometry_ext_flags_t\n    geometryMask::UInt8\n    quadFormat::ze_rtas_builder_packed_input_data_format_ext_t\n    vertexFormat::ze_rtas_builder_packed_input_data_format_ext_t\n    quadCount::UInt32\n    vertexCount::UInt32\n    quadStride::UInt32\n    vertexStride::UInt32\n    pQuadBuffer::Ptr{Cvoid}\n    pVertexBuffer::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_quads_geometry_info_ext_t = _ze_rtas_builder_quads_geometry_info_ext_t\n\nstruct _ze_rtas_geometry_aabbs_ext_cb_params_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    primID::UInt32\n    primIDCount::UInt32\n    pGeomUserPtr::Ptr{Cvoid}\n    pBuildUserPtr::Ptr{Cvoid}\n    pBoundsOut::Ptr{ze_rtas_aabb_ext_t}\nend\n\nconst ze_rtas_geometry_aabbs_ext_cb_params_t = _ze_rtas_geometry_aabbs_ext_cb_params_t\n\n# typedef void ( * ze_rtas_geometry_aabbs_cb_ext_t ) ( ze_rtas_geometry_aabbs_ext_cb_params_t * params ///< [in] callback function parameters structure )\nconst ze_rtas_geometry_aabbs_cb_ext_t = Ptr{Cvoid}\n\nstruct _ze_rtas_builder_procedural_geometry_info_ext_t\n    geometryType::ze_rtas_builder_packed_geometry_type_ext_t\n    geometryFlags::ze_rtas_builder_packed_geometry_ext_flags_t\n    geometryMask::UInt8\n    reserved::UInt8\n    primCount::UInt32\n    pfnGetBoundsCb::ze_rtas_geometry_aabbs_cb_ext_t\n    pGeomUserPtr::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_procedural_geometry_info_ext_t = _ze_rtas_builder_procedural_geometry_info_ext_t\n\nconst ze_rtas_builder_packed_instance_ext_flags_t = UInt8\n\nstruct _ze_rtas_builder_instance_geometry_info_ext_t\n    geometryType::ze_rtas_builder_packed_geometry_type_ext_t\n    instanceFlags::ze_rtas_builder_packed_instance_ext_flags_t\n    geometryMask::UInt8\n    transformFormat::ze_rtas_builder_packed_input_data_format_ext_t\n    instanceUserID::UInt32\n    pTransform::Ptr{Cvoid}\n    pBounds::Ptr{ze_rtas_aabb_ext_t}\n    pAccelerationStructure::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_instance_geometry_info_ext_t = _ze_rtas_builder_instance_geometry_info_ext_t\n\n@cenum _ze_rtas_builder_build_quality_hint_ext_t::UInt32 begin\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXT_LOW = 0\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXT_MEDIUM = 1\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXT_HIGH = 2\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_build_quality_hint_ext_t = _ze_rtas_builder_build_quality_hint_ext_t\n\nconst ze_rtas_builder_build_op_ext_flags_t = UInt32\n\nstruct _ze_rtas_builder_build_op_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    rtasFormat::ze_rtas_format_ext_t\n    buildQuality::ze_rtas_builder_build_quality_hint_ext_t\n    buildFlags::ze_rtas_builder_build_op_ext_flags_t\n    ppGeometries::Ptr{Ptr{ze_rtas_builder_geometry_info_ext_t}}\n    numGeometries::UInt32\nend\n\nconst ze_rtas_builder_build_op_ext_desc_t = _ze_rtas_builder_build_op_ext_desc_t\n\nstruct _ze_device_vector_width_properties_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    vector_width_size::UInt32\n    preferred_vector_width_char::UInt32\n    preferred_vector_width_short::UInt32\n    preferred_vector_width_int::UInt32\n    preferred_vector_width_long::UInt32\n    preferred_vector_width_float::UInt32\n    preferred_vector_width_double::UInt32\n    preferred_vector_width_half::UInt32\n    native_vector_width_char::UInt32\n    native_vector_width_short::UInt32\n    native_vector_width_int::UInt32\n    native_vector_width_long::UInt32\n    native_vector_width_float::UInt32\n    native_vector_width_double::UInt32\n    native_vector_width_half::UInt32\nend\n\nconst ze_device_vector_width_properties_ext_t = _ze_device_vector_width_properties_ext_t\n\nstruct _ze_cache_reservation_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    maxCacheReservationSize::Csize_t\nend\n\nconst ze_cache_reservation_ext_desc_t = _ze_cache_reservation_ext_desc_t\n\nstruct _ze_image_memory_properties_exp_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    size::UInt64\n    rowPitch::UInt64\n    slicePitch::UInt64\nend\n\nconst ze_image_memory_properties_exp_t = _ze_image_memory_properties_exp_t\n\nstruct _ze_image_view_planar_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    planeIndex::UInt32\nend\n\nconst ze_image_view_planar_ext_desc_t = _ze_image_view_planar_ext_desc_t\n\nstruct _ze_image_view_planar_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    planeIndex::UInt32\nend\n\nconst ze_image_view_planar_exp_desc_t = _ze_image_view_planar_exp_desc_t\n\nconst ze_scheduling_hint_exp_flags_t = UInt32\n\nstruct _ze_scheduling_hint_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    schedulingHintFlags::ze_scheduling_hint_exp_flags_t\nend\n\nconst ze_scheduling_hint_exp_properties_t = _ze_scheduling_hint_exp_properties_t\n\nstruct _ze_scheduling_hint_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_scheduling_hint_exp_flags_t\nend\n\nconst ze_scheduling_hint_exp_desc_t = _ze_scheduling_hint_exp_desc_t\n\nstruct _ze_context_power_saving_hint_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    hint::UInt32\nend\n\nconst ze_context_power_saving_hint_exp_desc_t = _ze_context_power_saving_hint_exp_desc_t\n\nstruct _ze_eu_count_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    numTotalEUs::UInt32\nend\n\nconst ze_eu_count_ext_t = _ze_eu_count_ext_t\n\nstruct _ze_pci_address_ext_t\n    domain::UInt32\n    bus::UInt32\n    device::UInt32\n    _function::UInt32\nend\n\nconst ze_pci_address_ext_t = _ze_pci_address_ext_t\n\nstruct _ze_pci_speed_ext_t\n    genVersion::Int32\n    width::Int32\n    maxBandwidth::Int64\nend\n\nconst ze_pci_speed_ext_t = _ze_pci_speed_ext_t\n\nstruct _ze_pci_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    address::ze_pci_address_ext_t\n    maxSpeed::ze_pci_speed_ext_t\nend\n\nconst ze_pci_ext_properties_t = _ze_pci_ext_properties_t\n\nstruct _ze_srgb_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    sRGB::ze_bool_t\nend\n\nconst ze_srgb_ext_desc_t = _ze_srgb_ext_desc_t\n\nstruct _ze_image_allocation_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    id::UInt64\nend\n\nconst ze_image_allocation_ext_properties_t = _ze_image_allocation_ext_properties_t\n\nconst ze_linkage_inspection_ext_flags_t = UInt32\n\nstruct _ze_linkage_inspection_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_linkage_inspection_ext_flags_t\nend\n\nconst ze_linkage_inspection_ext_desc_t = _ze_linkage_inspection_ext_desc_t\n\nconst ze_memory_compression_hints_ext_flags_t = UInt32\n\nstruct _ze_memory_compression_hints_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_memory_compression_hints_ext_flags_t\nend\n\nconst ze_memory_compression_hints_ext_desc_t = _ze_memory_compression_hints_ext_desc_t\n\nconst ze_driver_memory_free_policy_ext_flags_t = UInt32\n\nstruct _ze_driver_memory_free_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    freePolicies::ze_driver_memory_free_policy_ext_flags_t\nend\n\nconst ze_driver_memory_free_ext_properties_t = _ze_driver_memory_free_ext_properties_t\n\nstruct _ze_memory_free_ext_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    freePolicy::ze_driver_memory_free_policy_ext_flags_t\nend\n\nconst ze_memory_free_ext_desc_t = _ze_memory_free_ext_desc_t\n\nstruct _ze_device_p2p_bandwidth_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    logicalBandwidth::UInt32\n    physicalBandwidth::UInt32\n    bandwidthUnit::ze_bandwidth_unit_t\n    logicalLatency::UInt32\n    physicalLatency::UInt32\n    latencyUnit::ze_latency_unit_t\nend\n\nconst ze_device_p2p_bandwidth_exp_properties_t = _ze_device_p2p_bandwidth_exp_properties_t\n\nstruct _ze_copy_bandwidth_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    copyBandwidth::UInt32\n    copyBandwidthUnit::ze_bandwidth_unit_t\nend\n\nconst ze_copy_bandwidth_exp_properties_t = _ze_copy_bandwidth_exp_properties_t\n\nstruct _ze_device_luid_ext_t\n    id::NTuple{8,UInt8}\nend\n\nconst ze_device_luid_ext_t = _ze_device_luid_ext_t\n\nstruct _ze_device_luid_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    luid::ze_device_luid_ext_t\n    nodeMask::UInt32\nend\n\nconst ze_device_luid_ext_properties_t = _ze_device_luid_ext_properties_t\n\nstruct _ze_fabric_vertex_pci_exp_address_t\n    domain::UInt32\n    bus::UInt32\n    device::UInt32\n    _function::UInt32\nend\n\nconst ze_fabric_vertex_pci_exp_address_t = _ze_fabric_vertex_pci_exp_address_t\n\n@cenum _ze_fabric_vertex_exp_type_t::UInt32 begin\n    ZE_FABRIC_VERTEX_EXP_TYPE_UNKNOWN = 0\n    ZE_FABRIC_VERTEX_EXP_TYPE_DEVICE = 1\n    ZE_FABRIC_VERTEX_EXP_TYPE_SUBDEVICE = 2\n    ZE_FABRIC_VERTEX_EXP_TYPE_SWITCH = 3\n    ZE_FABRIC_VERTEX_EXP_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_fabric_vertex_exp_type_t = _ze_fabric_vertex_exp_type_t\n\nstruct _ze_fabric_vertex_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    uuid::ze_uuid_t\n    type::ze_fabric_vertex_exp_type_t\n    remote::ze_bool_t\n    address::ze_fabric_vertex_pci_exp_address_t\nend\n\nconst ze_fabric_vertex_exp_properties_t = _ze_fabric_vertex_exp_properties_t\n\n@cenum _ze_fabric_edge_exp_duplexity_t::UInt32 begin\n    ZE_FABRIC_EDGE_EXP_DUPLEXITY_UNKNOWN = 0\n    ZE_FABRIC_EDGE_EXP_DUPLEXITY_HALF_DUPLEX = 1\n    ZE_FABRIC_EDGE_EXP_DUPLEXITY_FULL_DUPLEX = 2\n    ZE_FABRIC_EDGE_EXP_DUPLEXITY_FORCE_UINT32 = 2147483647\nend\n\nconst ze_fabric_edge_exp_duplexity_t = _ze_fabric_edge_exp_duplexity_t\n\nstruct _ze_fabric_edge_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    uuid::ze_uuid_t\n    model::NTuple{256,Cchar}\n    bandwidth::UInt32\n    bandwidthUnit::ze_bandwidth_unit_t\n    latency::UInt32\n    latencyUnit::ze_latency_unit_t\n    duplexity::ze_fabric_edge_exp_duplexity_t\nend\n\nconst ze_fabric_edge_exp_properties_t = _ze_fabric_edge_exp_properties_t\n\n@cenum _ze_device_memory_ext_type_t::UInt32 begin\n    ZE_DEVICE_MEMORY_EXT_TYPE_HBM = 0\n    ZE_DEVICE_MEMORY_EXT_TYPE_HBM2 = 1\n    ZE_DEVICE_MEMORY_EXT_TYPE_DDR = 2\n    ZE_DEVICE_MEMORY_EXT_TYPE_DDR2 = 3\n    ZE_DEVICE_MEMORY_EXT_TYPE_DDR3 = 4\n    ZE_DEVICE_MEMORY_EXT_TYPE_DDR4 = 5\n    ZE_DEVICE_MEMORY_EXT_TYPE_DDR5 = 6\n    ZE_DEVICE_MEMORY_EXT_TYPE_LPDDR = 7\n    ZE_DEVICE_MEMORY_EXT_TYPE_LPDDR3 = 8\n    ZE_DEVICE_MEMORY_EXT_TYPE_LPDDR4 = 9\n    ZE_DEVICE_MEMORY_EXT_TYPE_LPDDR5 = 10\n    ZE_DEVICE_MEMORY_EXT_TYPE_SRAM = 11\n    ZE_DEVICE_MEMORY_EXT_TYPE_L1 = 12\n    ZE_DEVICE_MEMORY_EXT_TYPE_L3 = 13\n    ZE_DEVICE_MEMORY_EXT_TYPE_GRF = 14\n    ZE_DEVICE_MEMORY_EXT_TYPE_SLM = 15\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR4 = 16\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR5 = 17\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR5X = 18\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR6 = 19\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR6X = 20\n    ZE_DEVICE_MEMORY_EXT_TYPE_GDDR7 = 21\n    ZE_DEVICE_MEMORY_EXT_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_memory_ext_type_t = _ze_device_memory_ext_type_t\n\nstruct _ze_device_memory_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    type::ze_device_memory_ext_type_t\n    physicalSize::UInt64\n    readBandwidth::UInt32\n    writeBandwidth::UInt32\n    bandwidthUnit::ze_bandwidth_unit_t\nend\n\nconst ze_device_memory_ext_properties_t = _ze_device_memory_ext_properties_t\n\nstruct _ze_device_ip_version_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    ipVersion::UInt32\nend\n\nconst ze_device_ip_version_ext_t = _ze_device_ip_version_ext_t\n\nstruct _ze_kernel_max_group_size_properties_ext_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    maxGroupSize::UInt32\nend\n\nconst ze_kernel_max_group_size_properties_ext_t = _ze_kernel_max_group_size_properties_ext_t\n\nstruct _ze_sub_allocation_t\n    base::Ptr{Cvoid}\n    size::Csize_t\nend\n\nconst ze_sub_allocation_t = _ze_sub_allocation_t\n\nstruct _ze_memory_sub_allocations_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    pCount::Ptr{UInt32}\n    pSubAllocations::Ptr{ze_sub_allocation_t}\nend\n\nconst ze_memory_sub_allocations_exp_properties_t = _ze_memory_sub_allocations_exp_properties_t\n\nconst ze_event_query_kernel_timestamps_ext_flags_t = UInt32\n\nstruct _ze_event_query_kernel_timestamps_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_event_query_kernel_timestamps_ext_flags_t\nend\n\nconst ze_event_query_kernel_timestamps_ext_properties_t = _ze_event_query_kernel_timestamps_ext_properties_t\n\nstruct _ze_synchronized_timestamp_data_ext_t\n    kernelStart::UInt64\n    kernelEnd::UInt64\nend\n\nconst ze_synchronized_timestamp_data_ext_t = _ze_synchronized_timestamp_data_ext_t\n\nstruct _ze_synchronized_timestamp_result_ext_t\n    _global::ze_synchronized_timestamp_data_ext_t\n    context::ze_synchronized_timestamp_data_ext_t\nend\n\nconst ze_synchronized_timestamp_result_ext_t = _ze_synchronized_timestamp_result_ext_t\n\nstruct _ze_event_query_kernel_timestamps_results_ext_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    pKernelTimestampsBuffer::Ptr{ze_kernel_timestamp_result_t}\n    pSynchronizedTimestampsBuffer::Ptr{ze_synchronized_timestamp_result_ext_t}\nend\n\nconst ze_event_query_kernel_timestamps_results_ext_properties_t = _ze_event_query_kernel_timestamps_results_ext_properties_t\n\n@cenum _ze_rtas_builder_exp_version_t::UInt32 begin\n    ZE_RTAS_BUILDER_EXP_VERSION_1_0 = 65536\n    ZE_RTAS_BUILDER_EXP_VERSION_CURRENT = 65536\n    ZE_RTAS_BUILDER_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_exp_version_t = _ze_rtas_builder_exp_version_t\n\nstruct _ze_rtas_builder_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    builderVersion::ze_rtas_builder_exp_version_t\nend\n\nconst ze_rtas_builder_exp_desc_t = _ze_rtas_builder_exp_desc_t\n\nconst ze_rtas_builder_exp_flags_t = UInt32\n\nstruct _ze_rtas_builder_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_builder_exp_flags_t\n    rtasBufferSizeBytesExpected::Csize_t\n    rtasBufferSizeBytesMaxRequired::Csize_t\n    scratchBufferSizeBytes::Csize_t\nend\n\nconst ze_rtas_builder_exp_properties_t = _ze_rtas_builder_exp_properties_t\n\nconst ze_rtas_parallel_operation_exp_flags_t = UInt32\n\nstruct _ze_rtas_parallel_operation_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_parallel_operation_exp_flags_t\n    maxConcurrency::UInt32\nend\n\nconst ze_rtas_parallel_operation_exp_properties_t = _ze_rtas_parallel_operation_exp_properties_t\n\nconst ze_rtas_device_exp_flags_t = UInt32\n\n@cenum _ze_rtas_format_exp_t::UInt32 begin\n    ZE_RTAS_FORMAT_EXP_INVALID = 0\n    ZE_RTAS_FORMAT_EXP_MAX = 2147483646\n    ZE_RTAS_FORMAT_EXP_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_format_exp_t = _ze_rtas_format_exp_t\n\nstruct _ze_rtas_device_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_rtas_device_exp_flags_t\n    rtasFormat::ze_rtas_format_exp_t\n    rtasBufferAlignment::UInt32\nend\n\nconst ze_rtas_device_exp_properties_t = _ze_rtas_device_exp_properties_t\n\nstruct _ze_rtas_float3_exp_t\n    x::Cfloat\n    y::Cfloat\n    z::Cfloat\nend\n\nconst ze_rtas_float3_exp_t = _ze_rtas_float3_exp_t\n\nstruct _ze_rtas_transform_float3x4_column_major_exp_t\n    vx_x::Cfloat\n    vx_y::Cfloat\n    vx_z::Cfloat\n    vy_x::Cfloat\n    vy_y::Cfloat\n    vy_z::Cfloat\n    vz_x::Cfloat\n    vz_y::Cfloat\n    vz_z::Cfloat\n    p_x::Cfloat\n    p_y::Cfloat\n    p_z::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_column_major_exp_t = _ze_rtas_transform_float3x4_column_major_exp_t\n\nstruct _ze_rtas_transform_float3x4_aligned_column_major_exp_t\n    vx_x::Cfloat\n    vx_y::Cfloat\n    vx_z::Cfloat\n    pad0::Cfloat\n    vy_x::Cfloat\n    vy_y::Cfloat\n    vy_z::Cfloat\n    pad1::Cfloat\n    vz_x::Cfloat\n    vz_y::Cfloat\n    vz_z::Cfloat\n    pad2::Cfloat\n    p_x::Cfloat\n    p_y::Cfloat\n    p_z::Cfloat\n    pad3::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_aligned_column_major_exp_t = _ze_rtas_transform_float3x4_aligned_column_major_exp_t\n\nstruct _ze_rtas_transform_float3x4_row_major_exp_t\n    vx_x::Cfloat\n    vy_x::Cfloat\n    vz_x::Cfloat\n    p_x::Cfloat\n    vx_y::Cfloat\n    vy_y::Cfloat\n    vz_y::Cfloat\n    p_y::Cfloat\n    vx_z::Cfloat\n    vy_z::Cfloat\n    vz_z::Cfloat\n    p_z::Cfloat\nend\n\nconst ze_rtas_transform_float3x4_row_major_exp_t = _ze_rtas_transform_float3x4_row_major_exp_t\n\nstruct _ze_rtas_aabb_exp_t\n    lower::ze_rtas_float3_exp_t\n    upper::ze_rtas_float3_exp_t\nend\n\nconst ze_rtas_aabb_exp_t = _ze_rtas_aabb_exp_t\n\nstruct _ze_rtas_triangle_indices_uint32_exp_t\n    v0::UInt32\n    v1::UInt32\n    v2::UInt32\nend\n\nconst ze_rtas_triangle_indices_uint32_exp_t = _ze_rtas_triangle_indices_uint32_exp_t\n\nstruct _ze_rtas_quad_indices_uint32_exp_t\n    v0::UInt32\n    v1::UInt32\n    v2::UInt32\n    v3::UInt32\nend\n\nconst ze_rtas_quad_indices_uint32_exp_t = _ze_rtas_quad_indices_uint32_exp_t\n\nconst ze_rtas_builder_packed_geometry_type_exp_t = UInt8\n\nstruct _ze_rtas_builder_geometry_info_exp_t\n    geometryType::ze_rtas_builder_packed_geometry_type_exp_t\nend\n\nconst ze_rtas_builder_geometry_info_exp_t = _ze_rtas_builder_geometry_info_exp_t\n\nconst ze_rtas_builder_packed_geometry_exp_flags_t = UInt8\n\nconst ze_rtas_builder_packed_input_data_format_exp_t = UInt8\n\nstruct _ze_rtas_builder_triangles_geometry_info_exp_t\n    geometryType::ze_rtas_builder_packed_geometry_type_exp_t\n    geometryFlags::ze_rtas_builder_packed_geometry_exp_flags_t\n    geometryMask::UInt8\n    triangleFormat::ze_rtas_builder_packed_input_data_format_exp_t\n    vertexFormat::ze_rtas_builder_packed_input_data_format_exp_t\n    triangleCount::UInt32\n    vertexCount::UInt32\n    triangleStride::UInt32\n    vertexStride::UInt32\n    pTriangleBuffer::Ptr{Cvoid}\n    pVertexBuffer::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_triangles_geometry_info_exp_t = _ze_rtas_builder_triangles_geometry_info_exp_t\n\nstruct _ze_rtas_builder_quads_geometry_info_exp_t\n    geometryType::ze_rtas_builder_packed_geometry_type_exp_t\n    geometryFlags::ze_rtas_builder_packed_geometry_exp_flags_t\n    geometryMask::UInt8\n    quadFormat::ze_rtas_builder_packed_input_data_format_exp_t\n    vertexFormat::ze_rtas_builder_packed_input_data_format_exp_t\n    quadCount::UInt32\n    vertexCount::UInt32\n    quadStride::UInt32\n    vertexStride::UInt32\n    pQuadBuffer::Ptr{Cvoid}\n    pVertexBuffer::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_quads_geometry_info_exp_t = _ze_rtas_builder_quads_geometry_info_exp_t\n\nstruct _ze_rtas_geometry_aabbs_exp_cb_params_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    primID::UInt32\n    primIDCount::UInt32\n    pGeomUserPtr::Ptr{Cvoid}\n    pBuildUserPtr::Ptr{Cvoid}\n    pBoundsOut::Ptr{ze_rtas_aabb_exp_t}\nend\n\nconst ze_rtas_geometry_aabbs_exp_cb_params_t = _ze_rtas_geometry_aabbs_exp_cb_params_t\n\n# typedef void ( * ze_rtas_geometry_aabbs_cb_exp_t ) ( ze_rtas_geometry_aabbs_exp_cb_params_t * params ///< [in] callback function parameters structure )\nconst ze_rtas_geometry_aabbs_cb_exp_t = Ptr{Cvoid}\n\nstruct _ze_rtas_builder_procedural_geometry_info_exp_t\n    geometryType::ze_rtas_builder_packed_geometry_type_exp_t\n    geometryFlags::ze_rtas_builder_packed_geometry_exp_flags_t\n    geometryMask::UInt8\n    reserved::UInt8\n    primCount::UInt32\n    pfnGetBoundsCb::ze_rtas_geometry_aabbs_cb_exp_t\n    pGeomUserPtr::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_procedural_geometry_info_exp_t = _ze_rtas_builder_procedural_geometry_info_exp_t\n\nconst ze_rtas_builder_packed_instance_exp_flags_t = UInt8\n\nstruct _ze_rtas_builder_instance_geometry_info_exp_t\n    geometryType::ze_rtas_builder_packed_geometry_type_exp_t\n    instanceFlags::ze_rtas_builder_packed_instance_exp_flags_t\n    geometryMask::UInt8\n    transformFormat::ze_rtas_builder_packed_input_data_format_exp_t\n    instanceUserID::UInt32\n    pTransform::Ptr{Cvoid}\n    pBounds::Ptr{ze_rtas_aabb_exp_t}\n    pAccelerationStructure::Ptr{Cvoid}\nend\n\nconst ze_rtas_builder_instance_geometry_info_exp_t = _ze_rtas_builder_instance_geometry_info_exp_t\n\n@cenum _ze_rtas_builder_build_quality_hint_exp_t::UInt32 begin\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXP_LOW = 0\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXP_MEDIUM = 1\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXP_HIGH = 2\n    ZE_RTAS_BUILDER_BUILD_QUALITY_HINT_EXP_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_build_quality_hint_exp_t = _ze_rtas_builder_build_quality_hint_exp_t\n\nconst ze_rtas_builder_build_op_exp_flags_t = UInt32\n\nstruct _ze_rtas_builder_build_op_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    rtasFormat::ze_rtas_format_exp_t\n    buildQuality::ze_rtas_builder_build_quality_hint_exp_t\n    buildFlags::ze_rtas_builder_build_op_exp_flags_t\n    ppGeometries::Ptr{Ptr{ze_rtas_builder_geometry_info_exp_t}}\n    numGeometries::UInt32\nend\n\nconst ze_rtas_builder_build_op_exp_desc_t = _ze_rtas_builder_build_op_exp_desc_t\n\nconst ze_event_pool_counter_based_exp_flags_t = UInt32\n\nstruct _ze_event_pool_counter_based_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_event_pool_counter_based_exp_flags_t\nend\n\nconst ze_event_pool_counter_based_exp_desc_t = _ze_event_pool_counter_based_exp_desc_t\n\nconst ze_image_bindless_exp_flags_t = UInt32\n\nstruct _ze_image_bindless_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_image_bindless_exp_flags_t\nend\n\nconst ze_image_bindless_exp_desc_t = _ze_image_bindless_exp_desc_t\n\nstruct _ze_image_pitched_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    ptr::Ptr{Cvoid}\nend\n\nconst ze_image_pitched_exp_desc_t = _ze_image_pitched_exp_desc_t\n\nstruct _ze_device_pitched_alloc_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    maxImageLinearWidth::Csize_t\n    maxImageLinearHeight::Csize_t\nend\n\nconst ze_device_pitched_alloc_exp_properties_t = _ze_device_pitched_alloc_exp_properties_t\n\nconst ze_mutable_command_exp_flags_t = UInt32\n\nstruct _ze_mutable_command_id_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_mutable_command_exp_flags_t\nend\n\nconst ze_mutable_command_id_exp_desc_t = _ze_mutable_command_id_exp_desc_t\n\nconst ze_mutable_command_list_exp_flags_t = UInt32\n\nstruct _ze_mutable_command_list_exp_properties_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    mutableCommandListFlags::ze_mutable_command_list_exp_flags_t\n    mutableCommandFlags::ze_mutable_command_exp_flags_t\nend\n\nconst ze_mutable_command_list_exp_properties_t = _ze_mutable_command_list_exp_properties_t\n\nstruct _ze_mutable_command_list_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::ze_mutable_command_list_exp_flags_t\nend\n\nconst ze_mutable_command_list_exp_desc_t = _ze_mutable_command_list_exp_desc_t\n\nstruct _ze_mutable_commands_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    flags::UInt32\nend\n\nconst ze_mutable_commands_exp_desc_t = _ze_mutable_commands_exp_desc_t\n\nstruct _ze_mutable_kernel_argument_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandId::UInt64\n    argIndex::UInt32\n    argSize::Csize_t\n    pArgValue::Ptr{Cvoid}\nend\n\nconst ze_mutable_kernel_argument_exp_desc_t = _ze_mutable_kernel_argument_exp_desc_t\n\nstruct _ze_mutable_group_count_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandId::UInt64\n    pGroupCount::Ptr{ze_group_count_t}\nend\n\nconst ze_mutable_group_count_exp_desc_t = _ze_mutable_group_count_exp_desc_t\n\nstruct _ze_mutable_group_size_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandId::UInt64\n    groupSizeX::UInt32\n    groupSizeY::UInt32\n    groupSizeZ::UInt32\nend\n\nconst ze_mutable_group_size_exp_desc_t = _ze_mutable_group_size_exp_desc_t\n\nstruct _ze_mutable_global_offset_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandId::UInt64\n    offsetX::UInt32\n    offsetY::UInt32\n    offsetZ::UInt32\nend\n\nconst ze_mutable_global_offset_exp_desc_t = _ze_mutable_global_offset_exp_desc_t\n\nstruct _ze_mutable_graph_argument_exp_desc_t\n    stype::ze_structure_type_t\n    pNext::Ptr{Cvoid}\n    commandId::UInt64\n    argIndex::UInt32\n    pArgValue::Ptr{Cvoid}\nend\n\nconst ze_mutable_graph_argument_exp_desc_t = _ze_mutable_graph_argument_exp_desc_t\n\nconst ze_init_flags_t = UInt32\n\n@cenum _ze_init_flag_t::UInt32 begin\n    ZE_INIT_FLAG_GPU_ONLY = 1\n    ZE_INIT_FLAG_VPU_ONLY = 2\n    ZE_INIT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_init_flag_t = _ze_init_flag_t\n\n@checked function zeInit(flags)\n    @ccall libze_loader.zeInit(flags::ze_init_flags_t)::ze_result_t\nend\n\n@checked function zeDriverGet(pCount, phDrivers)\n    @ccall libze_loader.zeDriverGet(pCount::Ptr{UInt32},\n                                    phDrivers::Ptr{ze_driver_handle_t})::ze_result_t\nend\n\n@cenum _ze_init_driver_type_flag_t::UInt32 begin\n    ZE_INIT_DRIVER_TYPE_FLAG_GPU = 1\n    ZE_INIT_DRIVER_TYPE_FLAG_NPU = 2\n    ZE_INIT_DRIVER_TYPE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_init_driver_type_flag_t = _ze_init_driver_type_flag_t\n\n@checked function zeInitDrivers(pCount, phDrivers, desc)\n    @ccall libze_loader.zeInitDrivers(pCount::Ptr{UInt32},\n                                      phDrivers::Ptr{ze_driver_handle_t},\n                                      desc::Ptr{ze_init_driver_type_desc_t})::ze_result_t\nend\n\n@cenum _ze_api_version_t::UInt32 begin\n    ZE_API_VERSION_1_0 = 65536\n    ZE_API_VERSION_1_1 = 65537\n    ZE_API_VERSION_1_2 = 65538\n    ZE_API_VERSION_1_3 = 65539\n    ZE_API_VERSION_1_4 = 65540\n    ZE_API_VERSION_1_5 = 65541\n    ZE_API_VERSION_1_6 = 65542\n    ZE_API_VERSION_1_7 = 65543\n    ZE_API_VERSION_1_8 = 65544\n    ZE_API_VERSION_1_9 = 65545\n    ZE_API_VERSION_1_10 = 65546\n    ZE_API_VERSION_1_11 = 65547\n    ZE_API_VERSION_1_12 = 65548\n    ZE_API_VERSION_1_13 = 65549\n    ZE_API_VERSION_CURRENT = 65549\n    ZE_API_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_api_version_t = _ze_api_version_t\n\n@checked function zeDriverGetApiVersion(hDriver, version)\n    @ccall libze_loader.zeDriverGetApiVersion(hDriver::ze_driver_handle_t,\n                                              version::Ptr{ze_api_version_t})::ze_result_t\nend\n\n@checked function zeDriverGetProperties(hDriver, pDriverProperties)\n    @ccall libze_loader.zeDriverGetProperties(hDriver::ze_driver_handle_t,\n                                              pDriverProperties::Ptr{ze_driver_properties_t})::ze_result_t\nend\n\n@cenum _ze_ipc_property_flag_t::UInt32 begin\n    ZE_IPC_PROPERTY_FLAG_MEMORY = 1\n    ZE_IPC_PROPERTY_FLAG_EVENT_POOL = 2\n    ZE_IPC_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_ipc_property_flag_t = _ze_ipc_property_flag_t\n\n@checked function zeDriverGetIpcProperties(hDriver, pIpcProperties)\n    @ccall libze_loader.zeDriverGetIpcProperties(hDriver::ze_driver_handle_t,\n                                                 pIpcProperties::Ptr{ze_driver_ipc_properties_t})::ze_result_t\nend\n\n@checked function zeDriverGetExtensionProperties(hDriver, pCount, pExtensionProperties)\n    @ccall libze_loader.zeDriverGetExtensionProperties(hDriver::ze_driver_handle_t,\n                                                       pCount::Ptr{UInt32},\n                                                       pExtensionProperties::Ptr{ze_driver_extension_properties_t})::ze_result_t\nend\n\n@checked function zeDriverGetExtensionFunctionAddress(hDriver, name, ppFunctionAddress)\n    @ccall libze_loader.zeDriverGetExtensionFunctionAddress(hDriver::ze_driver_handle_t,\n                                                            name::Ptr{Cchar},\n                                                            ppFunctionAddress::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeDriverGetLastErrorDescription(hDriver, ppString)\n    @ccall libze_loader.zeDriverGetLastErrorDescription(hDriver::ze_driver_handle_t,\n                                                        ppString::Ptr{Ptr{Cchar}})::ze_result_t\nend\n\n@checked function zeDeviceGet(hDriver, pCount, phDevices)\n    @ccall libze_loader.zeDeviceGet(hDriver::ze_driver_handle_t, pCount::Ptr{UInt32},\n                                    phDevices::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@checked function zeDeviceGetRootDevice(hDevice, phRootDevice)\n    @ccall libze_loader.zeDeviceGetRootDevice(hDevice::ze_device_handle_t,\n                                              phRootDevice::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@checked function zeDeviceGetSubDevices(hDevice, pCount, phSubdevices)\n    @ccall libze_loader.zeDeviceGetSubDevices(hDevice::ze_device_handle_t,\n                                              pCount::Ptr{UInt32},\n                                              phSubdevices::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@cenum _ze_device_property_flag_t::UInt32 begin\n    ZE_DEVICE_PROPERTY_FLAG_INTEGRATED = 1\n    ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE = 2\n    ZE_DEVICE_PROPERTY_FLAG_ECC = 4\n    ZE_DEVICE_PROPERTY_FLAG_ONDEMANDPAGING = 8\n    ZE_DEVICE_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_property_flag_t = _ze_device_property_flag_t\n\n@checked function zeDeviceGetProperties(hDevice, pDeviceProperties)\n    @ccall libze_loader.zeDeviceGetProperties(hDevice::ze_device_handle_t,\n                                              pDeviceProperties::Ptr{ze_device_properties_t})::ze_result_t\nend\n\n@checked function zeDeviceGetComputeProperties(hDevice, pComputeProperties)\n    @ccall libze_loader.zeDeviceGetComputeProperties(hDevice::ze_device_handle_t,\n                                                     pComputeProperties::Ptr{ze_device_compute_properties_t})::ze_result_t\nend\n\n@cenum _ze_device_module_flag_t::UInt32 begin\n    ZE_DEVICE_MODULE_FLAG_FP16 = 1\n    ZE_DEVICE_MODULE_FLAG_FP64 = 2\n    ZE_DEVICE_MODULE_FLAG_INT64_ATOMICS = 4\n    ZE_DEVICE_MODULE_FLAG_DP4A = 8\n    ZE_DEVICE_MODULE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_module_flag_t = _ze_device_module_flag_t\n\n@cenum _ze_device_fp_flag_t::UInt32 begin\n    ZE_DEVICE_FP_FLAG_DENORM = 1\n    ZE_DEVICE_FP_FLAG_INF_NAN = 2\n    ZE_DEVICE_FP_FLAG_ROUND_TO_NEAREST = 4\n    ZE_DEVICE_FP_FLAG_ROUND_TO_ZERO = 8\n    ZE_DEVICE_FP_FLAG_ROUND_TO_INF = 16\n    ZE_DEVICE_FP_FLAG_FMA = 32\n    ZE_DEVICE_FP_FLAG_ROUNDED_DIVIDE_SQRT = 64\n    ZE_DEVICE_FP_FLAG_SOFT_FLOAT = 128\n    ZE_DEVICE_FP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_fp_flag_t = _ze_device_fp_flag_t\n\n@checked function zeDeviceGetModuleProperties(hDevice, pModuleProperties)\n    @ccall libze_loader.zeDeviceGetModuleProperties(hDevice::ze_device_handle_t,\n                                                    pModuleProperties::Ptr{ze_device_module_properties_t})::ze_result_t\nend\n\n@cenum _ze_command_queue_group_property_flag_t::UInt32 begin\n    ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COMPUTE = 1\n    ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COPY = 2\n    ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_COOPERATIVE_KERNELS = 4\n    ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_METRICS = 8\n    ZE_COMMAND_QUEUE_GROUP_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_queue_group_property_flag_t = _ze_command_queue_group_property_flag_t\n\n@checked function zeDeviceGetCommandQueueGroupProperties(hDevice, pCount,\n                                                         pCommandQueueGroupProperties)\n    @ccall libze_loader.zeDeviceGetCommandQueueGroupProperties(hDevice::ze_device_handle_t,\n                                                               pCount::Ptr{UInt32},\n                                                               pCommandQueueGroupProperties::Ptr{ze_command_queue_group_properties_t})::ze_result_t\nend\n\n@cenum _ze_device_memory_property_flag_t::UInt32 begin\n    ZE_DEVICE_MEMORY_PROPERTY_FLAG_TBD = 1\n    ZE_DEVICE_MEMORY_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_memory_property_flag_t = _ze_device_memory_property_flag_t\n\n@checked function zeDeviceGetMemoryProperties(hDevice, pCount, pMemProperties)\n    @ccall libze_loader.zeDeviceGetMemoryProperties(hDevice::ze_device_handle_t,\n                                                    pCount::Ptr{UInt32},\n                                                    pMemProperties::Ptr{ze_device_memory_properties_t})::ze_result_t\nend\n\n@cenum _ze_memory_access_cap_flag_t::UInt32 begin\n    ZE_MEMORY_ACCESS_CAP_FLAG_RW = 1\n    ZE_MEMORY_ACCESS_CAP_FLAG_ATOMIC = 2\n    ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT = 4\n    ZE_MEMORY_ACCESS_CAP_FLAG_CONCURRENT_ATOMIC = 8\n    ZE_MEMORY_ACCESS_CAP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_access_cap_flag_t = _ze_memory_access_cap_flag_t\n\n@checked function zeDeviceGetMemoryAccessProperties(hDevice, pMemAccessProperties)\n    @ccall libze_loader.zeDeviceGetMemoryAccessProperties(hDevice::ze_device_handle_t,\n                                                          pMemAccessProperties::Ptr{ze_device_memory_access_properties_t})::ze_result_t\nend\n\n@cenum _ze_device_cache_property_flag_t::UInt32 begin\n    ZE_DEVICE_CACHE_PROPERTY_FLAG_USER_CONTROL = 1\n    ZE_DEVICE_CACHE_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_cache_property_flag_t = _ze_device_cache_property_flag_t\n\n@checked function zeDeviceGetCacheProperties(hDevice, pCount, pCacheProperties)\n    @ccall libze_loader.zeDeviceGetCacheProperties(hDevice::ze_device_handle_t,\n                                                   pCount::Ptr{UInt32},\n                                                   pCacheProperties::Ptr{ze_device_cache_properties_t})::ze_result_t\nend\n\n@checked function zeDeviceGetImageProperties(hDevice, pImageProperties)\n    @ccall libze_loader.zeDeviceGetImageProperties(hDevice::ze_device_handle_t,\n                                                   pImageProperties::Ptr{ze_device_image_properties_t})::ze_result_t\nend\n\n@checked function zeDeviceGetExternalMemoryProperties(hDevice, pExternalMemoryProperties)\n    @ccall libze_loader.zeDeviceGetExternalMemoryProperties(hDevice::ze_device_handle_t,\n                                                            pExternalMemoryProperties::Ptr{ze_device_external_memory_properties_t})::ze_result_t\nend\n\n@cenum _ze_device_p2p_property_flag_t::UInt32 begin\n    ZE_DEVICE_P2P_PROPERTY_FLAG_ACCESS = 1\n    ZE_DEVICE_P2P_PROPERTY_FLAG_ATOMICS = 2\n    ZE_DEVICE_P2P_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_p2p_property_flag_t = _ze_device_p2p_property_flag_t\n\n@checked function zeDeviceGetP2PProperties(hDevice, hPeerDevice, pP2PProperties)\n    @ccall libze_loader.zeDeviceGetP2PProperties(hDevice::ze_device_handle_t,\n                                                 hPeerDevice::ze_device_handle_t,\n                                                 pP2PProperties::Ptr{ze_device_p2p_properties_t})::ze_result_t\nend\n\n@checked function zeDeviceCanAccessPeer(hDevice, hPeerDevice, value)\n    @ccall libze_loader.zeDeviceCanAccessPeer(hDevice::ze_device_handle_t,\n                                              hPeerDevice::ze_device_handle_t,\n                                              value::Ptr{ze_bool_t})::ze_result_t\nend\n\n@checked function zeDeviceGetStatus(hDevice)\n    @ccall libze_loader.zeDeviceGetStatus(hDevice::ze_device_handle_t)::ze_result_t\nend\n\n@checked function zeDeviceGetGlobalTimestamps(hDevice, hostTimestamp, deviceTimestamp)\n    @ccall libze_loader.zeDeviceGetGlobalTimestamps(hDevice::ze_device_handle_t,\n                                                    hostTimestamp::Ptr{UInt64},\n                                                    deviceTimestamp::Ptr{UInt64})::ze_result_t\nend\n\n@cenum _ze_context_flag_t::UInt32 begin\n    ZE_CONTEXT_FLAG_TBD = 1\n    ZE_CONTEXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_context_flag_t = _ze_context_flag_t\n\n@checked function zeContextCreate(hDriver, desc, phContext)\n    @ccall libze_loader.zeContextCreate(hDriver::ze_driver_handle_t,\n                                        desc::Ptr{ze_context_desc_t},\n                                        phContext::Ptr{ze_context_handle_t})::ze_result_t\nend\n\n@checked function zeContextCreateEx(hDriver, desc, numDevices, phDevices, phContext)\n    @ccall libze_loader.zeContextCreateEx(hDriver::ze_driver_handle_t,\n                                          desc::Ptr{ze_context_desc_t}, numDevices::UInt32,\n                                          phDevices::Ptr{ze_device_handle_t},\n                                          phContext::Ptr{ze_context_handle_t})::ze_result_t\nend\n\n@checked function zeContextDestroy(hContext)\n    @ccall libze_loader.zeContextDestroy(hContext::ze_context_handle_t)::ze_result_t\nend\n\n@checked function zeContextGetStatus(hContext)\n    @ccall libze_loader.zeContextGetStatus(hContext::ze_context_handle_t)::ze_result_t\nend\n\n@cenum _ze_command_queue_flag_t::UInt32 begin\n    ZE_COMMAND_QUEUE_FLAG_EXPLICIT_ONLY = 1\n    ZE_COMMAND_QUEUE_FLAG_IN_ORDER = 2\n    ZE_COMMAND_QUEUE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_queue_flag_t = _ze_command_queue_flag_t\n\n@checked function zeCommandQueueCreate(hContext, hDevice, desc, phCommandQueue)\n    @ccall libze_loader.zeCommandQueueCreate(hContext::ze_context_handle_t,\n                                             hDevice::ze_device_handle_t,\n                                             desc::Ptr{ze_command_queue_desc_t},\n                                             phCommandQueue::Ptr{ze_command_queue_handle_t})::ze_result_t\nend\n\n@checked function zeCommandQueueDestroy(hCommandQueue)\n    @ccall libze_loader.zeCommandQueueDestroy(hCommandQueue::ze_command_queue_handle_t)::ze_result_t\nend\n\n@checked function zeCommandQueueExecuteCommandLists(hCommandQueue, numCommandLists,\n                                                    phCommandLists, hFence)\n    @ccall libze_loader.zeCommandQueueExecuteCommandLists(hCommandQueue::ze_command_queue_handle_t,\n                                                          numCommandLists::UInt32,\n                                                          phCommandLists::Ptr{ze_command_list_handle_t},\n                                                          hFence::ze_fence_handle_t)::ze_result_t\nend\n\n@checked function zeCommandQueueSynchronize(hCommandQueue, timeout)\n    @ccall libze_loader.zeCommandQueueSynchronize(hCommandQueue::ze_command_queue_handle_t,\n                                                  timeout::UInt64)::ze_result_t\nend\n\n@checked function zeCommandQueueGetOrdinal(hCommandQueue, pOrdinal)\n    @ccall libze_loader.zeCommandQueueGetOrdinal(hCommandQueue::ze_command_queue_handle_t,\n                                                 pOrdinal::Ptr{UInt32})::ze_result_t\nend\n\n@checked function zeCommandQueueGetIndex(hCommandQueue, pIndex)\n    @ccall libze_loader.zeCommandQueueGetIndex(hCommandQueue::ze_command_queue_handle_t,\n                                               pIndex::Ptr{UInt32})::ze_result_t\nend\n\n@cenum _ze_command_list_flag_t::UInt32 begin\n    ZE_COMMAND_LIST_FLAG_RELAXED_ORDERING = 1\n    ZE_COMMAND_LIST_FLAG_MAXIMIZE_THROUGHPUT = 2\n    ZE_COMMAND_LIST_FLAG_EXPLICIT_ONLY = 4\n    ZE_COMMAND_LIST_FLAG_IN_ORDER = 8\n    ZE_COMMAND_LIST_FLAG_EXP_CLONEABLE = 16\n    ZE_COMMAND_LIST_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_list_flag_t = _ze_command_list_flag_t\n\n@checked function zeCommandListCreate(hContext, hDevice, desc, phCommandList)\n    @ccall libze_loader.zeCommandListCreate(hContext::ze_context_handle_t,\n                                            hDevice::ze_device_handle_t,\n                                            desc::Ptr{ze_command_list_desc_t},\n                                            phCommandList::Ptr{ze_command_list_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListCreateImmediate(hContext, hDevice, altdesc, phCommandList)\n    @ccall libze_loader.zeCommandListCreateImmediate(hContext::ze_context_handle_t,\n                                                     hDevice::ze_device_handle_t,\n                                                     altdesc::Ptr{ze_command_queue_desc_t},\n                                                     phCommandList::Ptr{ze_command_list_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListDestroy(hCommandList)\n    @ccall libze_loader.zeCommandListDestroy(hCommandList::ze_command_list_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListClose(hCommandList)\n    @ccall libze_loader.zeCommandListClose(hCommandList::ze_command_list_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListReset(hCommandList)\n    @ccall libze_loader.zeCommandListReset(hCommandList::ze_command_list_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendWriteGlobalTimestamp(hCommandList, dstptr,\n                                                          hSignalEvent, numWaitEvents,\n                                                          phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendWriteGlobalTimestamp(hCommandList::ze_command_list_handle_t,\n                                                                dstptr::Ptr{UInt64},\n                                                                hSignalEvent::ze_event_handle_t,\n                                                                numWaitEvents::UInt32,\n                                                                phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListHostSynchronize(hCommandList, timeout)\n    @ccall libze_loader.zeCommandListHostSynchronize(hCommandList::ze_command_list_handle_t,\n                                                     timeout::UInt64)::ze_result_t\nend\n\n@checked function zeCommandListGetDeviceHandle(hCommandList, phDevice)\n    @ccall libze_loader.zeCommandListGetDeviceHandle(hCommandList::ze_command_list_handle_t,\n                                                     phDevice::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListGetContextHandle(hCommandList, phContext)\n    @ccall libze_loader.zeCommandListGetContextHandle(hCommandList::ze_command_list_handle_t,\n                                                      phContext::Ptr{ze_context_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListGetOrdinal(hCommandList, pOrdinal)\n    @ccall libze_loader.zeCommandListGetOrdinal(hCommandList::ze_command_list_handle_t,\n                                                pOrdinal::Ptr{UInt32})::ze_result_t\nend\n\n@checked function zeCommandListImmediateGetIndex(hCommandListImmediate, pIndex)\n    @ccall libze_loader.zeCommandListImmediateGetIndex(hCommandListImmediate::ze_command_list_handle_t,\n                                                       pIndex::Ptr{UInt32})::ze_result_t\nend\n\n@checked function zeCommandListIsImmediate(hCommandList, pIsImmediate)\n    @ccall libze_loader.zeCommandListIsImmediate(hCommandList::ze_command_list_handle_t,\n                                                 pIsImmediate::Ptr{ze_bool_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendBarrier(hCommandList, hSignalEvent, numWaitEvents,\n                                             phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendBarrier(hCommandList::ze_command_list_handle_t,\n                                                   hSignalEvent::ze_event_handle_t,\n                                                   numWaitEvents::UInt32,\n                                                   phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryRangesBarrier(hCommandList, numRanges,\n                                                         pRangeSizes, pRanges, hSignalEvent,\n                                                         numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendMemoryRangesBarrier(hCommandList::ze_command_list_handle_t,\n                                                               numRanges::UInt32,\n                                                               pRangeSizes::Ptr{Csize_t},\n                                                               pRanges::Ptr{Ptr{Cvoid}},\n                                                               hSignalEvent::ze_event_handle_t,\n                                                               numWaitEvents::UInt32,\n                                                               phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeContextSystemBarrier(hContext, hDevice)\n    @ccall libze_loader.zeContextSystemBarrier(hContext::ze_context_handle_t,\n                                               hDevice::ze_device_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryCopy(hCommandList, dstptr, srcptr, size,\n                                                hSignalEvent, numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendMemoryCopy(hCommandList::ze_command_list_handle_t,\n                                                      dstptr::PtrOrZePtr{Cvoid},\n                                                      srcptr::PtrOrZePtr{Cvoid},\n                                                      size::Csize_t,\n                                                      hSignalEvent::ze_event_handle_t,\n                                                      numWaitEvents::UInt32,\n                                                      phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryFill(hCommandList, ptr, pattern, pattern_size,\n                                                size, hSignalEvent, numWaitEvents,\n                                                phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendMemoryFill(hCommandList::ze_command_list_handle_t,\n                                                      ptr::PtrOrZePtr{Cvoid},\n                                                      pattern::PtrOrZePtr{Cvoid},\n                                                      pattern_size::Csize_t, size::Csize_t,\n                                                      hSignalEvent::ze_event_handle_t,\n                                                      numWaitEvents::UInt32,\n                                                      phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryCopyRegion(hCommandList, dstptr, dstRegion,\n                                                      dstPitch, dstSlicePitch, srcptr,\n                                                      srcRegion, srcPitch, srcSlicePitch,\n                                                      hSignalEvent, numWaitEvents,\n                                                      phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendMemoryCopyRegion(hCommandList::ze_command_list_handle_t,\n                                                            dstptr::PtrOrZePtr{Cvoid},\n                                                            dstRegion::Ptr{ze_copy_region_t},\n                                                            dstPitch::UInt32,\n                                                            dstSlicePitch::UInt32,\n                                                            srcptr::PtrOrZePtr{Cvoid},\n                                                            srcRegion::Ptr{ze_copy_region_t},\n                                                            srcPitch::UInt32,\n                                                            srcSlicePitch::UInt32,\n                                                            hSignalEvent::ze_event_handle_t,\n                                                            numWaitEvents::UInt32,\n                                                            phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryCopyFromContext(hCommandList, dstptr,\n                                                           hContextSrc, srcptr, size,\n                                                           hSignalEvent, numWaitEvents,\n                                                           phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendMemoryCopyFromContext(hCommandList::ze_command_list_handle_t,\n                                                                 dstptr::PtrOrZePtr{Cvoid},\n                                                                 hContextSrc::ze_context_handle_t,\n                                                                 srcptr::PtrOrZePtr{Cvoid},\n                                                                 size::Csize_t,\n                                                                 hSignalEvent::ze_event_handle_t,\n                                                                 numWaitEvents::UInt32,\n                                                                 phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendImageCopy(hCommandList, hDstImage, hSrcImage,\n                                               hSignalEvent, numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopy(hCommandList::ze_command_list_handle_t,\n                                                     hDstImage::ze_image_handle_t,\n                                                     hSrcImage::ze_image_handle_t,\n                                                     hSignalEvent::ze_event_handle_t,\n                                                     numWaitEvents::UInt32,\n                                                     phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendImageCopyRegion(hCommandList, hDstImage, hSrcImage,\n                                                     pDstRegion, pSrcRegion, hSignalEvent,\n                                                     numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopyRegion(hCommandList::ze_command_list_handle_t,\n                                                           hDstImage::ze_image_handle_t,\n                                                           hSrcImage::ze_image_handle_t,\n                                                           pDstRegion::Ptr{ze_image_region_t},\n                                                           pSrcRegion::Ptr{ze_image_region_t},\n                                                           hSignalEvent::ze_event_handle_t,\n                                                           numWaitEvents::UInt32,\n                                                           phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendImageCopyToMemory(hCommandList, dstptr, hSrcImage,\n                                                       pSrcRegion, hSignalEvent,\n                                                       numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopyToMemory(hCommandList::ze_command_list_handle_t,\n                                                             dstptr::Ptr{Cvoid},\n                                                             hSrcImage::ze_image_handle_t,\n                                                             pSrcRegion::Ptr{ze_image_region_t},\n                                                             hSignalEvent::ze_event_handle_t,\n                                                             numWaitEvents::UInt32,\n                                                             phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendImageCopyFromMemory(hCommandList, hDstImage, srcptr,\n                                                         pDstRegion, hSignalEvent,\n                                                         numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopyFromMemory(hCommandList::ze_command_list_handle_t,\n                                                               hDstImage::ze_image_handle_t,\n                                                               srcptr::Ptr{Cvoid},\n                                                               pDstRegion::Ptr{ze_image_region_t},\n                                                               hSignalEvent::ze_event_handle_t,\n                                                               numWaitEvents::UInt32,\n                                                               phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendMemoryPrefetch(hCommandList, ptr, size)\n    @ccall libze_loader.zeCommandListAppendMemoryPrefetch(hCommandList::ze_command_list_handle_t,\n                                                          ptr::PtrOrZePtr{Cvoid},\n                                                          size::Csize_t)::ze_result_t\nend\n\n@cenum _ze_memory_advice_t::UInt32 begin\n    ZE_MEMORY_ADVICE_SET_READ_MOSTLY = 0\n    ZE_MEMORY_ADVICE_CLEAR_READ_MOSTLY = 1\n    ZE_MEMORY_ADVICE_SET_PREFERRED_LOCATION = 2\n    ZE_MEMORY_ADVICE_CLEAR_PREFERRED_LOCATION = 3\n    ZE_MEMORY_ADVICE_SET_NON_ATOMIC_MOSTLY = 4\n    ZE_MEMORY_ADVICE_CLEAR_NON_ATOMIC_MOSTLY = 5\n    ZE_MEMORY_ADVICE_BIAS_CACHED = 6\n    ZE_MEMORY_ADVICE_BIAS_UNCACHED = 7\n    ZE_MEMORY_ADVICE_SET_SYSTEM_MEMORY_PREFERRED_LOCATION = 8\n    ZE_MEMORY_ADVICE_CLEAR_SYSTEM_MEMORY_PREFERRED_LOCATION = 9\n    ZE_MEMORY_ADVICE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_advice_t = _ze_memory_advice_t\n\n@checked function zeCommandListAppendMemAdvise(hCommandList, hDevice, ptr, size, advice)\n    @ccall libze_loader.zeCommandListAppendMemAdvise(hCommandList::ze_command_list_handle_t,\n                                                     hDevice::ze_device_handle_t,\n                                                     ptr::PtrOrZePtr{Cvoid}, size::Csize_t,\n                                                     advice::ze_memory_advice_t)::ze_result_t\nend\n\n@cenum _ze_event_pool_flag_t::UInt32 begin\n    ZE_EVENT_POOL_FLAG_HOST_VISIBLE = 1\n    ZE_EVENT_POOL_FLAG_IPC = 2\n    ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP = 4\n    ZE_EVENT_POOL_FLAG_KERNEL_MAPPED_TIMESTAMP = 8\n    ZE_EVENT_POOL_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_pool_flag_t = _ze_event_pool_flag_t\n\n@checked function zeEventPoolCreate(hContext, desc, numDevices, phDevices, phEventPool)\n    @ccall libze_loader.zeEventPoolCreate(hContext::ze_context_handle_t,\n                                          desc::Ptr{ze_event_pool_desc_t},\n                                          numDevices::UInt32,\n                                          phDevices::Ptr{ze_device_handle_t},\n                                          phEventPool::Ptr{ze_event_pool_handle_t})::ze_result_t\nend\n\n@checked function zeEventPoolDestroy(hEventPool)\n    @ccall libze_loader.zeEventPoolDestroy(hEventPool::ze_event_pool_handle_t)::ze_result_t\nend\n\n@cenum _ze_event_scope_flag_t::UInt32 begin\n    ZE_EVENT_SCOPE_FLAG_SUBDEVICE = 1\n    ZE_EVENT_SCOPE_FLAG_DEVICE = 2\n    ZE_EVENT_SCOPE_FLAG_HOST = 4\n    ZE_EVENT_SCOPE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_scope_flag_t = _ze_event_scope_flag_t\n\n@checked function zeEventCreate(hEventPool, desc, phEvent)\n    @ccall libze_loader.zeEventCreate(hEventPool::ze_event_pool_handle_t,\n                                      desc::Ptr{ze_event_desc_t},\n                                      phEvent::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeEventDestroy(hEvent)\n    @ccall libze_loader.zeEventDestroy(hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeEventPoolGetIpcHandle(hEventPool, phIpc)\n    @ccall libze_loader.zeEventPoolGetIpcHandle(hEventPool::ze_event_pool_handle_t,\n                                                phIpc::Ptr{ze_ipc_event_pool_handle_t})::ze_result_t\nend\n\n@checked function zeEventPoolPutIpcHandle(hContext, hIpc)\n    @ccall libze_loader.zeEventPoolPutIpcHandle(hContext::ze_context_handle_t,\n                                                hIpc::ze_ipc_event_pool_handle_t)::ze_result_t\nend\n\n@checked function zeEventPoolOpenIpcHandle(hContext, hIpc, phEventPool)\n    @ccall libze_loader.zeEventPoolOpenIpcHandle(hContext::ze_context_handle_t,\n                                                 hIpc::ze_ipc_event_pool_handle_t,\n                                                 phEventPool::Ptr{ze_event_pool_handle_t})::ze_result_t\nend\n\n@checked function zeEventPoolCloseIpcHandle(hEventPool)\n    @ccall libze_loader.zeEventPoolCloseIpcHandle(hEventPool::ze_event_pool_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendSignalEvent(hCommandList, hEvent)\n    @ccall libze_loader.zeCommandListAppendSignalEvent(hCommandList::ze_command_list_handle_t,\n                                                       hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendWaitOnEvents(hCommandList, numEvents, phEvents)\n    @ccall libze_loader.zeCommandListAppendWaitOnEvents(hCommandList::ze_command_list_handle_t,\n                                                        numEvents::UInt32,\n                                                        phEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeEventHostSignal(hEvent)\n    @ccall libze_loader.zeEventHostSignal(hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeEventHostSynchronize(hEvent, timeout)\n    @ccall libze_loader.zeEventHostSynchronize(hEvent::ze_event_handle_t,\n                                               timeout::UInt64)::ze_result_t\nend\n\n@checked function zeEventQueryStatus(hEvent)\n    @ccall libze_loader.zeEventQueryStatus(hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendEventReset(hCommandList, hEvent)\n    @ccall libze_loader.zeCommandListAppendEventReset(hCommandList::ze_command_list_handle_t,\n                                                      hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeEventHostReset(hEvent)\n    @ccall libze_loader.zeEventHostReset(hEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeEventQueryKernelTimestamp(hEvent, dstptr)\n    @ccall libze_loader.zeEventQueryKernelTimestamp(hEvent::ze_event_handle_t,\n                                                    dstptr::Ptr{ze_kernel_timestamp_result_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendQueryKernelTimestamps(hCommandList, numEvents,\n                                                           phEvents, dstptr, pOffsets,\n                                                           hSignalEvent, numWaitEvents,\n                                                           phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendQueryKernelTimestamps(hCommandList::ze_command_list_handle_t,\n                                                                 numEvents::UInt32,\n                                                                 phEvents::Ptr{ze_event_handle_t},\n                                                                 dstptr::Ptr{Cvoid},\n                                                                 pOffsets::Ptr{Csize_t},\n                                                                 hSignalEvent::ze_event_handle_t,\n                                                                 numWaitEvents::UInt32,\n                                                                 phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeEventGetEventPool(hEvent, phEventPool)\n    @ccall libze_loader.zeEventGetEventPool(hEvent::ze_event_handle_t,\n                                            phEventPool::Ptr{ze_event_pool_handle_t})::ze_result_t\nend\n\n@checked function zeEventGetSignalScope(hEvent, pSignalScope)\n    @ccall libze_loader.zeEventGetSignalScope(hEvent::ze_event_handle_t,\n                                              pSignalScope::Ptr{ze_event_scope_flags_t})::ze_result_t\nend\n\n@checked function zeEventGetWaitScope(hEvent, pWaitScope)\n    @ccall libze_loader.zeEventGetWaitScope(hEvent::ze_event_handle_t,\n                                            pWaitScope::Ptr{ze_event_scope_flags_t})::ze_result_t\nend\n\n@checked function zeEventPoolGetContextHandle(hEventPool, phContext)\n    @ccall libze_loader.zeEventPoolGetContextHandle(hEventPool::ze_event_pool_handle_t,\n                                                    phContext::Ptr{ze_context_handle_t})::ze_result_t\nend\n\n@checked function zeEventPoolGetFlags(hEventPool, pFlags)\n    @ccall libze_loader.zeEventPoolGetFlags(hEventPool::ze_event_pool_handle_t,\n                                            pFlags::Ptr{ze_event_pool_flags_t})::ze_result_t\nend\n\n@cenum _ze_fence_flag_t::UInt32 begin\n    ZE_FENCE_FLAG_SIGNALED = 1\n    ZE_FENCE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_fence_flag_t = _ze_fence_flag_t\n\n@checked function zeFenceCreate(hCommandQueue, desc, phFence)\n    @ccall libze_loader.zeFenceCreate(hCommandQueue::ze_command_queue_handle_t,\n                                      desc::Ptr{ze_fence_desc_t},\n                                      phFence::Ptr{ze_fence_handle_t})::ze_result_t\nend\n\n@checked function zeFenceDestroy(hFence)\n    @ccall libze_loader.zeFenceDestroy(hFence::ze_fence_handle_t)::ze_result_t\nend\n\n@checked function zeFenceHostSynchronize(hFence, timeout)\n    @ccall libze_loader.zeFenceHostSynchronize(hFence::ze_fence_handle_t,\n                                               timeout::UInt64)::ze_result_t\nend\n\n@checked function zeFenceQueryStatus(hFence)\n    @ccall libze_loader.zeFenceQueryStatus(hFence::ze_fence_handle_t)::ze_result_t\nend\n\n@checked function zeFenceReset(hFence)\n    @ccall libze_loader.zeFenceReset(hFence::ze_fence_handle_t)::ze_result_t\nend\n\n@cenum _ze_image_flag_t::UInt32 begin\n    ZE_IMAGE_FLAG_KERNEL_WRITE = 1\n    ZE_IMAGE_FLAG_BIAS_UNCACHED = 2\n    ZE_IMAGE_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_flag_t = _ze_image_flag_t\n\n@cenum _ze_image_sampler_filter_flag_t::UInt32 begin\n    ZE_IMAGE_SAMPLER_FILTER_FLAG_POINT = 1\n    ZE_IMAGE_SAMPLER_FILTER_FLAG_LINEAR = 2\n    ZE_IMAGE_SAMPLER_FILTER_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_sampler_filter_flag_t = _ze_image_sampler_filter_flag_t\n\n@checked function zeImageGetProperties(hDevice, desc, pImageProperties)\n    @ccall libze_loader.zeImageGetProperties(hDevice::ze_device_handle_t,\n                                             desc::Ptr{ze_image_desc_t},\n                                             pImageProperties::Ptr{ze_image_properties_t})::ze_result_t\nend\n\n@checked function zeImageCreate(hContext, hDevice, desc, phImage)\n    @ccall libze_loader.zeImageCreate(hContext::ze_context_handle_t,\n                                      hDevice::ze_device_handle_t,\n                                      desc::Ptr{ze_image_desc_t},\n                                      phImage::Ptr{ze_image_handle_t})::ze_result_t\nend\n\n@checked function zeImageDestroy(hImage)\n    @ccall libze_loader.zeImageDestroy(hImage::ze_image_handle_t)::ze_result_t\nend\n\n@cenum _ze_device_mem_alloc_flag_t::UInt32 begin\n    ZE_DEVICE_MEM_ALLOC_FLAG_BIAS_CACHED = 1\n    ZE_DEVICE_MEM_ALLOC_FLAG_BIAS_UNCACHED = 2\n    ZE_DEVICE_MEM_ALLOC_FLAG_BIAS_INITIAL_PLACEMENT = 4\n    ZE_DEVICE_MEM_ALLOC_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_mem_alloc_flag_t = _ze_device_mem_alloc_flag_t\n\n@cenum _ze_host_mem_alloc_flag_t::UInt32 begin\n    ZE_HOST_MEM_ALLOC_FLAG_BIAS_CACHED = 1\n    ZE_HOST_MEM_ALLOC_FLAG_BIAS_UNCACHED = 2\n    ZE_HOST_MEM_ALLOC_FLAG_BIAS_WRITE_COMBINED = 4\n    ZE_HOST_MEM_ALLOC_FLAG_BIAS_INITIAL_PLACEMENT = 8\n    ZE_HOST_MEM_ALLOC_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_host_mem_alloc_flag_t = _ze_host_mem_alloc_flag_t\n\n@checked function zeMemAllocShared(hContext, device_desc, host_desc, size, alignment,\n                                   hDevice, pptr)\n    @ccall libze_loader.zeMemAllocShared(hContext::ze_context_handle_t,\n                                         device_desc::Ptr{ze_device_mem_alloc_desc_t},\n                                         host_desc::Ptr{ze_host_mem_alloc_desc_t},\n                                         size::Csize_t, alignment::Csize_t,\n                                         hDevice::ze_device_handle_t,\n                                         pptr::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeMemAllocDevice(hContext, device_desc, size, alignment, hDevice, pptr)\n    @ccall libze_loader.zeMemAllocDevice(hContext::ze_context_handle_t,\n                                         device_desc::Ptr{ze_device_mem_alloc_desc_t},\n                                         size::Csize_t, alignment::Csize_t,\n                                         hDevice::ze_device_handle_t,\n                                         pptr::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeMemAllocHost(hContext, host_desc, size, alignment, pptr)\n    @ccall libze_loader.zeMemAllocHost(hContext::ze_context_handle_t,\n                                       host_desc::Ptr{ze_host_mem_alloc_desc_t},\n                                       size::Csize_t, alignment::Csize_t,\n                                       pptr::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeMemFree(hContext, ptr)\n    @ccall libze_loader.zeMemFree(hContext::ze_context_handle_t,\n                                  ptr::PtrOrZePtr{Cvoid})::ze_result_t\nend\n\n@checked function zeMemGetAllocProperties(hContext, ptr, pMemAllocProperties, phDevice)\n    @ccall libze_loader.zeMemGetAllocProperties(hContext::ze_context_handle_t,\n                                                ptr::PtrOrZePtr{Cvoid},\n                                                pMemAllocProperties::Ptr{ze_memory_allocation_properties_t},\n                                                phDevice::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@checked function zeMemGetAddressRange(hContext, ptr, pBase, pSize)\n    @ccall libze_loader.zeMemGetAddressRange(hContext::ze_context_handle_t,\n                                             ptr::PtrOrZePtr{Cvoid}, pBase::Ptr{Ptr{Cvoid}},\n                                             pSize::Ptr{Csize_t})::ze_result_t\nend\n\n@checked function zeMemGetIpcHandle(hContext, ptr, pIpcHandle)\n    @ccall libze_loader.zeMemGetIpcHandle(hContext::ze_context_handle_t,\n                                          ptr::PtrOrZePtr{Cvoid},\n                                          pIpcHandle::Ptr{ze_ipc_mem_handle_t})::ze_result_t\nend\n\n@checked function zeMemGetIpcHandleFromFileDescriptorExp(hContext, handle, pIpcHandle)\n    @ccall libze_loader.zeMemGetIpcHandleFromFileDescriptorExp(hContext::ze_context_handle_t,\n                                                               handle::UInt64,\n                                                               pIpcHandle::Ptr{ze_ipc_mem_handle_t})::ze_result_t\nend\n\n@checked function zeMemGetFileDescriptorFromIpcHandleExp(hContext, ipcHandle, pHandle)\n    @ccall libze_loader.zeMemGetFileDescriptorFromIpcHandleExp(hContext::ze_context_handle_t,\n                                                               ipcHandle::ze_ipc_mem_handle_t,\n                                                               pHandle::Ptr{UInt64})::ze_result_t\nend\n\n@checked function zeMemPutIpcHandle(hContext, handle)\n    @ccall libze_loader.zeMemPutIpcHandle(hContext::ze_context_handle_t,\n                                          handle::ze_ipc_mem_handle_t)::ze_result_t\nend\n\nconst ze_ipc_memory_flags_t = UInt32\n\n@cenum _ze_ipc_memory_flag_t::UInt32 begin\n    ZE_IPC_MEMORY_FLAG_BIAS_CACHED = 1\n    ZE_IPC_MEMORY_FLAG_BIAS_UNCACHED = 2\n    ZE_IPC_MEMORY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_ipc_memory_flag_t = _ze_ipc_memory_flag_t\n\n@checked function zeMemOpenIpcHandle(hContext, hDevice, handle, flags, pptr)\n    @ccall libze_loader.zeMemOpenIpcHandle(hContext::ze_context_handle_t,\n                                           hDevice::ze_device_handle_t,\n                                           handle::ze_ipc_mem_handle_t,\n                                           flags::ze_ipc_memory_flags_t,\n                                           pptr::Ptr{PtrOrZePtr{Cvoid}})::ze_result_t\nend\n\n@checked function zeMemCloseIpcHandle(hContext, ptr)\n    @ccall libze_loader.zeMemCloseIpcHandle(hContext::ze_context_handle_t,\n                                            ptr::PtrOrZePtr{Cvoid})::ze_result_t\nend\n\nconst ze_memory_atomic_attr_exp_flags_t = UInt32\n\n@cenum _ze_memory_atomic_attr_exp_flag_t::UInt32 begin\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_NO_ATOMICS = 1\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_NO_HOST_ATOMICS = 2\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_HOST_ATOMICS = 4\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_NO_DEVICE_ATOMICS = 8\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_DEVICE_ATOMICS = 16\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_NO_SYSTEM_ATOMICS = 32\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_SYSTEM_ATOMICS = 64\n    ZE_MEMORY_ATOMIC_ATTR_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_atomic_attr_exp_flag_t = _ze_memory_atomic_attr_exp_flag_t\n\n@checked function zeMemSetAtomicAccessAttributeExp(hContext, hDevice, ptr, size, attr)\n    @ccall libze_loader.zeMemSetAtomicAccessAttributeExp(hContext::ze_context_handle_t,\n                                                         hDevice::ze_device_handle_t,\n                                                         ptr::Ptr{Cvoid}, size::Csize_t,\n                                                         attr::ze_memory_atomic_attr_exp_flags_t)::ze_result_t\nend\n\n@checked function zeMemGetAtomicAccessAttributeExp(hContext, hDevice, ptr, size, pAttr)\n    @ccall libze_loader.zeMemGetAtomicAccessAttributeExp(hContext::ze_context_handle_t,\n                                                         hDevice::ze_device_handle_t,\n                                                         ptr::Ptr{Cvoid}, size::Csize_t,\n                                                         pAttr::Ptr{ze_memory_atomic_attr_exp_flags_t})::ze_result_t\nend\n\n@checked function zeModuleCreate(hContext, hDevice, desc, phModule, phBuildLog)\n    @ccall libze_loader.zeModuleCreate(hContext::ze_context_handle_t,\n                                       hDevice::ze_device_handle_t,\n                                       desc::Ptr{ze_module_desc_t},\n                                       phModule::Ptr{ze_module_handle_t},\n                                       phBuildLog::Ptr{ze_module_build_log_handle_t})::ze_result_t\nend\n\n@checked function zeModuleDestroy(hModule)\n    @ccall libze_loader.zeModuleDestroy(hModule::ze_module_handle_t)::ze_result_t\nend\n\n@checked function zeModuleDynamicLink(numModules, phModules, phLinkLog)\n    @ccall libze_loader.zeModuleDynamicLink(numModules::UInt32,\n                                            phModules::Ptr{ze_module_handle_t},\n                                            phLinkLog::Ptr{ze_module_build_log_handle_t})::ze_result_t\nend\n\n@checked function zeModuleBuildLogDestroy(hModuleBuildLog)\n    @ccall libze_loader.zeModuleBuildLogDestroy(hModuleBuildLog::ze_module_build_log_handle_t)::ze_result_t\nend\n\n@checked function zeModuleBuildLogGetString(hModuleBuildLog, pSize, pBuildLog)\n    @ccall libze_loader.zeModuleBuildLogGetString(hModuleBuildLog::ze_module_build_log_handle_t,\n                                                  pSize::Ptr{Csize_t},\n                                                  pBuildLog::Ptr{Cchar})::ze_result_t\nend\n\n@checked function zeModuleGetNativeBinary(hModule, pSize, pModuleNativeBinary)\n    @ccall libze_loader.zeModuleGetNativeBinary(hModule::ze_module_handle_t,\n                                                pSize::Ptr{Csize_t},\n                                                pModuleNativeBinary::Ptr{UInt8})::ze_result_t\nend\n\n@checked function zeModuleGetGlobalPointer(hModule, pGlobalName, pSize, pptr)\n    @ccall libze_loader.zeModuleGetGlobalPointer(hModule::ze_module_handle_t,\n                                                 pGlobalName::Ptr{Cchar},\n                                                 pSize::Ptr{Csize_t},\n                                                 pptr::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeModuleGetKernelNames(hModule, pCount, pNames)\n    @ccall libze_loader.zeModuleGetKernelNames(hModule::ze_module_handle_t,\n                                               pCount::Ptr{UInt32},\n                                               pNames::Ptr{Ptr{Cchar}})::ze_result_t\nend\n\n@cenum _ze_module_property_flag_t::UInt32 begin\n    ZE_MODULE_PROPERTY_FLAG_IMPORTS = 1\n    ZE_MODULE_PROPERTY_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_module_property_flag_t = _ze_module_property_flag_t\n\n@checked function zeModuleGetProperties(hModule, pModuleProperties)\n    @ccall libze_loader.zeModuleGetProperties(hModule::ze_module_handle_t,\n                                              pModuleProperties::Ptr{ze_module_properties_t})::ze_result_t\nend\n\n@cenum _ze_kernel_flag_t::UInt32 begin\n    ZE_KERNEL_FLAG_FORCE_RESIDENCY = 1\n    ZE_KERNEL_FLAG_EXPLICIT_RESIDENCY = 2\n    ZE_KERNEL_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_kernel_flag_t = _ze_kernel_flag_t\n\n@checked function zeKernelCreate(hModule, desc, phKernel)\n    @ccall libze_loader.zeKernelCreate(hModule::ze_module_handle_t,\n                                       desc::Ptr{ze_kernel_desc_t},\n                                       phKernel::Ptr{ze_kernel_handle_t})::ze_result_t\nend\n\n@checked function zeKernelDestroy(hKernel)\n    @ccall libze_loader.zeKernelDestroy(hKernel::ze_kernel_handle_t)::ze_result_t\nend\n\n@checked function zeModuleGetFunctionPointer(hModule, pFunctionName, pfnFunction)\n    @ccall libze_loader.zeModuleGetFunctionPointer(hModule::ze_module_handle_t,\n                                                   pFunctionName::Ptr{Cchar},\n                                                   pfnFunction::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeKernelSetGroupSize(hKernel, groupSizeX, groupSizeY, groupSizeZ)\n    @ccall libze_loader.zeKernelSetGroupSize(hKernel::ze_kernel_handle_t,\n                                             groupSizeX::UInt32, groupSizeY::UInt32,\n                                             groupSizeZ::UInt32)::ze_result_t\nend\n\n@checked function zeKernelSuggestGroupSize(hKernel, globalSizeX, globalSizeY, globalSizeZ,\n                                           groupSizeX, groupSizeY, groupSizeZ)\n    @ccall libze_loader.zeKernelSuggestGroupSize(hKernel::ze_kernel_handle_t,\n                                                 globalSizeX::UInt32, globalSizeY::UInt32,\n                                                 globalSizeZ::UInt32,\n                                                 groupSizeX::Ptr{UInt32},\n                                                 groupSizeY::Ptr{UInt32},\n                                                 groupSizeZ::Ptr{UInt32})::ze_result_t\nend\n\n@checked function zeKernelSuggestMaxCooperativeGroupCount(hKernel, totalGroupCount)\n    @ccall libze_loader.zeKernelSuggestMaxCooperativeGroupCount(hKernel::ze_kernel_handle_t,\n                                                                totalGroupCount::Ptr{UInt32})::ze_result_t\nend\n\n@checked function zeKernelSetArgumentValue(hKernel, argIndex, argSize, pArgValue)\n    @ccall libze_loader.zeKernelSetArgumentValue(hKernel::ze_kernel_handle_t,\n                                                 argIndex::UInt32, argSize::Csize_t,\n                                                 pArgValue::Ptr{Cvoid})::ze_result_t\nend\n\nconst ze_kernel_indirect_access_flags_t = UInt32\n\n@cenum _ze_kernel_indirect_access_flag_t::UInt32 begin\n    ZE_KERNEL_INDIRECT_ACCESS_FLAG_HOST = 1\n    ZE_KERNEL_INDIRECT_ACCESS_FLAG_DEVICE = 2\n    ZE_KERNEL_INDIRECT_ACCESS_FLAG_SHARED = 4\n    ZE_KERNEL_INDIRECT_ACCESS_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_kernel_indirect_access_flag_t = _ze_kernel_indirect_access_flag_t\n\n@checked function zeKernelSetIndirectAccess(hKernel, flags)\n    @ccall libze_loader.zeKernelSetIndirectAccess(hKernel::ze_kernel_handle_t,\n                                                  flags::ze_kernel_indirect_access_flags_t)::ze_result_t\nend\n\n@checked function zeKernelGetIndirectAccess(hKernel, pFlags)\n    @ccall libze_loader.zeKernelGetIndirectAccess(hKernel::ze_kernel_handle_t,\n                                                  pFlags::Ptr{ze_kernel_indirect_access_flags_t})::ze_result_t\nend\n\n@checked function zeKernelGetSourceAttributes(hKernel, pSize, pString)\n    @ccall libze_loader.zeKernelGetSourceAttributes(hKernel::ze_kernel_handle_t,\n                                                    pSize::Ptr{UInt32},\n                                                    pString::Ptr{Ptr{Cchar}})::ze_result_t\nend\n\nconst ze_cache_config_flags_t = UInt32\n\n@cenum _ze_cache_config_flag_t::UInt32 begin\n    ZE_CACHE_CONFIG_FLAG_LARGE_SLM = 1\n    ZE_CACHE_CONFIG_FLAG_LARGE_DATA = 2\n    ZE_CACHE_CONFIG_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_cache_config_flag_t = _ze_cache_config_flag_t\n\n@checked function zeKernelSetCacheConfig(hKernel, flags)\n    @ccall libze_loader.zeKernelSetCacheConfig(hKernel::ze_kernel_handle_t,\n                                               flags::ze_cache_config_flags_t)::ze_result_t\nend\n\n@checked function zeKernelGetProperties(hKernel, pKernelProperties)\n    @ccall libze_loader.zeKernelGetProperties(hKernel::ze_kernel_handle_t,\n                                              pKernelProperties::Ptr{ze_kernel_properties_t})::ze_result_t\nend\n\n@checked function zeKernelGetName(hKernel, pSize, pName)\n    @ccall libze_loader.zeKernelGetName(hKernel::ze_kernel_handle_t, pSize::Ptr{Csize_t},\n                                        pName::Ptr{Cchar})::ze_result_t\nend\n\n@checked function zeCommandListAppendLaunchKernel(hCommandList, hKernel, pLaunchFuncArgs,\n                                                  hSignalEvent, numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendLaunchKernel(hCommandList::ze_command_list_handle_t,\n                                                        hKernel::ze_kernel_handle_t,\n                                                        pLaunchFuncArgs::Ptr{ze_group_count_t},\n                                                        hSignalEvent::ze_event_handle_t,\n                                                        numWaitEvents::UInt32,\n                                                        phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendLaunchCooperativeKernel(hCommandList, hKernel,\n                                                             pLaunchFuncArgs, hSignalEvent,\n                                                             numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendLaunchCooperativeKernel(hCommandList::ze_command_list_handle_t,\n                                                                   hKernel::ze_kernel_handle_t,\n                                                                   pLaunchFuncArgs::Ptr{ze_group_count_t},\n                                                                   hSignalEvent::ze_event_handle_t,\n                                                                   numWaitEvents::UInt32,\n                                                                   phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendLaunchKernelIndirect(hCommandList, hKernel,\n                                                          pLaunchArgumentsBuffer,\n                                                          hSignalEvent, numWaitEvents,\n                                                          phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendLaunchKernelIndirect(hCommandList::ze_command_list_handle_t,\n                                                                hKernel::ze_kernel_handle_t,\n                                                                pLaunchArgumentsBuffer::Ptr{ze_group_count_t},\n                                                                hSignalEvent::ze_event_handle_t,\n                                                                numWaitEvents::UInt32,\n                                                                phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendLaunchMultipleKernelsIndirect(hCommandList, numKernels,\n                                                                   phKernels, pCountBuffer,\n                                                                   pLaunchArgumentsBuffer,\n                                                                   hSignalEvent,\n                                                                   numWaitEvents,\n                                                                   phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendLaunchMultipleKernelsIndirect(hCommandList::ze_command_list_handle_t,\n                                                                         numKernels::UInt32,\n                                                                         phKernels::Ptr{ze_kernel_handle_t},\n                                                                         pCountBuffer::Ptr{UInt32},\n                                                                         pLaunchArgumentsBuffer::Ptr{ze_group_count_t},\n                                                                         hSignalEvent::ze_event_handle_t,\n                                                                         numWaitEvents::UInt32,\n                                                                         phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@cenum _ze_module_program_exp_version_t::UInt32 begin\n    ZE_MODULE_PROGRAM_EXP_VERSION_1_0 = 65536\n    ZE_MODULE_PROGRAM_EXP_VERSION_CURRENT = 65536\n    ZE_MODULE_PROGRAM_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_module_program_exp_version_t = _ze_module_program_exp_version_t\n\n@cenum _ze_raytracing_ext_version_t::UInt32 begin\n    ZE_RAYTRACING_EXT_VERSION_1_0 = 65536\n    ZE_RAYTRACING_EXT_VERSION_CURRENT = 65536\n    ZE_RAYTRACING_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_raytracing_ext_version_t = _ze_raytracing_ext_version_t\n\n@cenum _ze_device_raytracing_ext_flag_t::UInt32 begin\n    ZE_DEVICE_RAYTRACING_EXT_FLAG_RAYQUERY = 1\n    ZE_DEVICE_RAYTRACING_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_raytracing_ext_flag_t = _ze_device_raytracing_ext_flag_t\n\n@cenum _ze_raytracing_mem_alloc_ext_flag_t::UInt32 begin\n    ZE_RAYTRACING_MEM_ALLOC_EXT_FLAG_TBD = 1\n    ZE_RAYTRACING_MEM_ALLOC_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_raytracing_mem_alloc_ext_flag_t = _ze_raytracing_mem_alloc_ext_flag_t\n\n@checked function zeContextMakeMemoryResident(hContext, hDevice, ptr, size)\n    @ccall libze_loader.zeContextMakeMemoryResident(hContext::ze_context_handle_t,\n                                                    hDevice::ze_device_handle_t,\n                                                    ptr::PtrOrZePtr{Cvoid},\n                                                    size::Csize_t)::ze_result_t\nend\n\n@checked function zeContextEvictMemory(hContext, hDevice, ptr, size)\n    @ccall libze_loader.zeContextEvictMemory(hContext::ze_context_handle_t,\n                                             hDevice::ze_device_handle_t,\n                                             ptr::PtrOrZePtr{Cvoid},\n                                             size::Csize_t)::ze_result_t\nend\n\n@checked function zeContextMakeImageResident(hContext, hDevice, hImage)\n    @ccall libze_loader.zeContextMakeImageResident(hContext::ze_context_handle_t,\n                                                   hDevice::ze_device_handle_t,\n                                                   hImage::ze_image_handle_t)::ze_result_t\nend\n\n@checked function zeContextEvictImage(hContext, hDevice, hImage)\n    @ccall libze_loader.zeContextEvictImage(hContext::ze_context_handle_t,\n                                            hDevice::ze_device_handle_t,\n                                            hImage::ze_image_handle_t)::ze_result_t\nend\n\n@checked function zeSamplerCreate(hContext, hDevice, desc, phSampler)\n    @ccall libze_loader.zeSamplerCreate(hContext::ze_context_handle_t,\n                                        hDevice::ze_device_handle_t,\n                                        desc::Ptr{ze_sampler_desc_t},\n                                        phSampler::Ptr{ze_sampler_handle_t})::ze_result_t\nend\n\n@checked function zeSamplerDestroy(hSampler)\n    @ccall libze_loader.zeSamplerDestroy(hSampler::ze_sampler_handle_t)::ze_result_t\nend\n\n@cenum _ze_memory_access_attribute_t::UInt32 begin\n    ZE_MEMORY_ACCESS_ATTRIBUTE_NONE = 0\n    ZE_MEMORY_ACCESS_ATTRIBUTE_READWRITE = 1\n    ZE_MEMORY_ACCESS_ATTRIBUTE_READONLY = 2\n    ZE_MEMORY_ACCESS_ATTRIBUTE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_access_attribute_t = _ze_memory_access_attribute_t\n\n@checked function zeVirtualMemReserve(hContext, pStart, size, pptr)\n    @ccall libze_loader.zeVirtualMemReserve(hContext::ze_context_handle_t,\n                                            pStart::Ptr{Cvoid}, size::Csize_t,\n                                            pptr::Ptr{Ptr{Cvoid}})::ze_result_t\nend\n\n@checked function zeVirtualMemFree(hContext, ptr, size)\n    @ccall libze_loader.zeVirtualMemFree(hContext::ze_context_handle_t,\n                                         ptr::PtrOrZePtr{Cvoid}, size::Csize_t)::ze_result_t\nend\n\n@checked function zeVirtualMemQueryPageSize(hContext, hDevice, size, pagesize)\n    @ccall libze_loader.zeVirtualMemQueryPageSize(hContext::ze_context_handle_t,\n                                                  hDevice::ze_device_handle_t,\n                                                  size::Csize_t,\n                                                  pagesize::Ptr{Csize_t})::ze_result_t\nend\n\n@cenum _ze_physical_mem_flag_t::UInt32 begin\n    ZE_PHYSICAL_MEM_FLAG_ALLOCATE_ON_DEVICE = 1\n    ZE_PHYSICAL_MEM_FLAG_ALLOCATE_ON_HOST = 2\n    ZE_PHYSICAL_MEM_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_physical_mem_flag_t = _ze_physical_mem_flag_t\n\n@checked function zePhysicalMemCreate(hContext, hDevice, desc, phPhysicalMemory)\n    @ccall libze_loader.zePhysicalMemCreate(hContext::ze_context_handle_t,\n                                            hDevice::ze_device_handle_t,\n                                            desc::Ptr{ze_physical_mem_desc_t},\n                                            phPhysicalMemory::Ptr{ze_physical_mem_handle_t})::ze_result_t\nend\n\n@checked function zePhysicalMemDestroy(hContext, hPhysicalMemory)\n    @ccall libze_loader.zePhysicalMemDestroy(hContext::ze_context_handle_t,\n                                             hPhysicalMemory::ze_physical_mem_handle_t)::ze_result_t\nend\n\n@checked function zeVirtualMemMap(hContext, ptr, size, hPhysicalMemory, offset, access)\n    @ccall libze_loader.zeVirtualMemMap(hContext::ze_context_handle_t, ptr::Ptr{Cvoid},\n                                        size::Csize_t,\n                                        hPhysicalMemory::ze_physical_mem_handle_t,\n                                        offset::Csize_t,\n                                        access::ze_memory_access_attribute_t)::ze_result_t\nend\n\n@checked function zeVirtualMemUnmap(hContext, ptr, size)\n    @ccall libze_loader.zeVirtualMemUnmap(hContext::ze_context_handle_t, ptr::Ptr{Cvoid},\n                                          size::Csize_t)::ze_result_t\nend\n\n@checked function zeVirtualMemSetAccessAttribute(hContext, ptr, size, access)\n    @ccall libze_loader.zeVirtualMemSetAccessAttribute(hContext::ze_context_handle_t,\n                                                       ptr::Ptr{Cvoid}, size::Csize_t,\n                                                       access::ze_memory_access_attribute_t)::ze_result_t\nend\n\n@checked function zeVirtualMemGetAccessAttribute(hContext, ptr, size, access, outSize)\n    @ccall libze_loader.zeVirtualMemGetAccessAttribute(hContext::ze_context_handle_t,\n                                                       ptr::Ptr{Cvoid}, size::Csize_t,\n                                                       access::Ptr{ze_memory_access_attribute_t},\n                                                       outSize::Ptr{Csize_t})::ze_result_t\nend\n\n@cenum _ze_float_atomics_ext_version_t::UInt32 begin\n    ZE_FLOAT_ATOMICS_EXT_VERSION_1_0 = 65536\n    ZE_FLOAT_ATOMICS_EXT_VERSION_CURRENT = 65536\n    ZE_FLOAT_ATOMICS_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_float_atomics_ext_version_t = _ze_float_atomics_ext_version_t\n\n@cenum _ze_device_fp_atomic_ext_flag_t::UInt32 begin\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_LOAD_STORE = 1\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_ADD = 2\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_GLOBAL_MIN_MAX = 4\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_LOAD_STORE = 65536\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_ADD = 131072\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_LOCAL_MIN_MAX = 262144\n    ZE_DEVICE_FP_ATOMIC_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_fp_atomic_ext_flag_t = _ze_device_fp_atomic_ext_flag_t\n\n@cenum _ze_global_offset_exp_version_t::UInt32 begin\n    ZE_GLOBAL_OFFSET_EXP_VERSION_1_0 = 65536\n    ZE_GLOBAL_OFFSET_EXP_VERSION_CURRENT = 65536\n    ZE_GLOBAL_OFFSET_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_global_offset_exp_version_t = _ze_global_offset_exp_version_t\n\n@checked function zeKernelSetGlobalOffsetExp(hKernel, offsetX, offsetY, offsetZ)\n    @ccall libze_loader.zeKernelSetGlobalOffsetExp(hKernel::ze_kernel_handle_t,\n                                                   offsetX::UInt32, offsetY::UInt32,\n                                                   offsetZ::UInt32)::ze_result_t\nend\n\n@cenum _ze_relaxed_allocation_limits_exp_version_t::UInt32 begin\n    ZE_RELAXED_ALLOCATION_LIMITS_EXP_VERSION_1_0 = 65536\n    ZE_RELAXED_ALLOCATION_LIMITS_EXP_VERSION_CURRENT = 65536\n    ZE_RELAXED_ALLOCATION_LIMITS_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_relaxed_allocation_limits_exp_version_t = _ze_relaxed_allocation_limits_exp_version_t\n\n@cenum _ze_relaxed_allocation_limits_exp_flag_t::UInt32 begin\n    ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_MAX_SIZE = 1\n    ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_relaxed_allocation_limits_exp_flag_t = _ze_relaxed_allocation_limits_exp_flag_t\n\n@cenum _ze_kernel_get_binary_exp_version_t::UInt32 begin\n    ZE_KERNEL_GET_BINARY_EXP_VERSION_1_0 = 65536\n    ZE_KERNEL_GET_BINARY_EXP_VERSION_CURRENT = 65536\n    ZE_KERNEL_GET_BINARY_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_kernel_get_binary_exp_version_t = _ze_kernel_get_binary_exp_version_t\n\n@checked function zeKernelGetBinaryExp(hKernel, pSize, pKernelBinary)\n    @ccall libze_loader.zeKernelGetBinaryExp(hKernel::ze_kernel_handle_t,\n                                             pSize::Ptr{Csize_t},\n                                             pKernelBinary::Ptr{UInt8})::ze_result_t\nend\n\n@cenum _ze_driver_ddi_handles_ext_version_t::UInt32 begin\n    ZE_DRIVER_DDI_HANDLES_EXT_VERSION_1_0 = 65536\n    ZE_DRIVER_DDI_HANDLES_EXT_VERSION_CURRENT = 65536\n    ZE_DRIVER_DDI_HANDLES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_driver_ddi_handles_ext_version_t = _ze_driver_ddi_handles_ext_version_t\n\n@cenum _ze_driver_ddi_handle_ext_flag_t::UInt32 begin\n    ZE_DRIVER_DDI_HANDLE_EXT_FLAG_DDI_HANDLE_EXT_SUPPORTED = 1\n    ZE_DRIVER_DDI_HANDLE_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_driver_ddi_handle_ext_flag_t = _ze_driver_ddi_handle_ext_flag_t\n\n@cenum _ze_external_semaphore_ext_version_t::UInt32 begin\n    ZE_EXTERNAL_SEMAPHORE_EXT_VERSION_1_0 = 65536\n    ZE_EXTERNAL_SEMAPHORE_EXT_VERSION_CURRENT = 65536\n    ZE_EXTERNAL_SEMAPHORE_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_external_semaphore_ext_version_t = _ze_external_semaphore_ext_version_t\n\nmutable struct _ze_external_semaphore_ext_handle_t end\n\nconst ze_external_semaphore_ext_handle_t = Ptr{_ze_external_semaphore_ext_handle_t}\n\n@cenum _ze_external_semaphore_ext_flag_t::UInt32 begin\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_OPAQUE_FD = 1\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_OPAQUE_WIN32 = 2\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_OPAQUE_WIN32_KMT = 4\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_D3D12_FENCE = 8\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_D3D11_FENCE = 16\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_KEYED_MUTEX = 32\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_KEYED_MUTEX_KMT = 64\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_VK_TIMELINE_SEMAPHORE_FD = 128\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_VK_TIMELINE_SEMAPHORE_WIN32 = 256\n    ZE_EXTERNAL_SEMAPHORE_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_external_semaphore_ext_flag_t = _ze_external_semaphore_ext_flag_t\n\n@checked function zeDeviceImportExternalSemaphoreExt(hDevice, desc, phSemaphore)\n    @ccall libze_loader.zeDeviceImportExternalSemaphoreExt(hDevice::ze_device_handle_t,\n                                                           desc::Ptr{ze_external_semaphore_ext_desc_t},\n                                                           phSemaphore::Ptr{ze_external_semaphore_ext_handle_t})::ze_result_t\nend\n\n@checked function zeDeviceReleaseExternalSemaphoreExt(hSemaphore)\n    @ccall libze_loader.zeDeviceReleaseExternalSemaphoreExt(hSemaphore::ze_external_semaphore_ext_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListAppendSignalExternalSemaphoreExt(hCommandList, numSemaphores,\n                                                                phSemaphores, signalParams,\n                                                                hSignalEvent, numWaitEvents,\n                                                                phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendSignalExternalSemaphoreExt(hCommandList::ze_command_list_handle_t,\n                                                                      numSemaphores::UInt32,\n                                                                      phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},\n                                                                      signalParams::Ptr{ze_external_semaphore_signal_params_ext_t},\n                                                                      hSignalEvent::ze_event_handle_t,\n                                                                      numWaitEvents::UInt32,\n                                                                      phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendWaitExternalSemaphoreExt(hCommandList, numSemaphores,\n                                                              phSemaphores, waitParams,\n                                                              hSignalEvent, numWaitEvents,\n                                                              phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendWaitExternalSemaphoreExt(hCommandList::ze_command_list_handle_t,\n                                                                    numSemaphores::UInt32,\n                                                                    phSemaphores::Ptr{ze_external_semaphore_ext_handle_t},\n                                                                    waitParams::Ptr{ze_external_semaphore_wait_params_ext_t},\n                                                                    hSignalEvent::ze_event_handle_t,\n                                                                    numWaitEvents::UInt32,\n                                                                    phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@cenum _ze_device_cache_line_size_ext_version_t::UInt32 begin\n    ZE_DEVICE_CACHE_LINE_SIZE_EXT_VERSION_1_0 = 65536\n    ZE_DEVICE_CACHE_LINE_SIZE_EXT_VERSION_CURRENT = 65536\n    ZE_DEVICE_CACHE_LINE_SIZE_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_cache_line_size_ext_version_t = _ze_device_cache_line_size_ext_version_t\n\n@cenum _ze_rtas_device_ext_flag_t::UInt32 begin\n    ZE_RTAS_DEVICE_EXT_FLAG_RESERVED = 1\n    ZE_RTAS_DEVICE_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_device_ext_flag_t = _ze_rtas_device_ext_flag_t\n\n@cenum _ze_rtas_builder_ext_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_EXT_FLAG_RESERVED = 1\n    ZE_RTAS_BUILDER_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_ext_flag_t = _ze_rtas_builder_ext_flag_t\n\n@cenum _ze_rtas_parallel_operation_ext_flag_t::UInt32 begin\n    ZE_RTAS_PARALLEL_OPERATION_EXT_FLAG_RESERVED = 1\n    ZE_RTAS_PARALLEL_OPERATION_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_parallel_operation_ext_flag_t = _ze_rtas_parallel_operation_ext_flag_t\n\nconst ze_rtas_builder_geometry_ext_flags_t = UInt32\n\n@cenum _ze_rtas_builder_geometry_ext_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_GEOMETRY_EXT_FLAG_NON_OPAQUE = 1\n    ZE_RTAS_BUILDER_GEOMETRY_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_geometry_ext_flag_t = _ze_rtas_builder_geometry_ext_flag_t\n\nconst ze_rtas_builder_instance_ext_flags_t = UInt32\n\n@cenum _ze_rtas_builder_instance_ext_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_INSTANCE_EXT_FLAG_TRIANGLE_CULL_DISABLE = 1\n    ZE_RTAS_BUILDER_INSTANCE_EXT_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 2\n    ZE_RTAS_BUILDER_INSTANCE_EXT_FLAG_TRIANGLE_FORCE_OPAQUE = 4\n    ZE_RTAS_BUILDER_INSTANCE_EXT_FLAG_TRIANGLE_FORCE_NON_OPAQUE = 8\n    ZE_RTAS_BUILDER_INSTANCE_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_instance_ext_flag_t = _ze_rtas_builder_instance_ext_flag_t\n\n@cenum _ze_rtas_builder_build_op_ext_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_BUILD_OP_EXT_FLAG_COMPACT = 1\n    ZE_RTAS_BUILDER_BUILD_OP_EXT_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 2\n    ZE_RTAS_BUILDER_BUILD_OP_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_build_op_ext_flag_t = _ze_rtas_builder_build_op_ext_flag_t\n\n@cenum _ze_rtas_builder_geometry_type_ext_t::UInt32 begin\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXT_TRIANGLES = 0\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXT_QUADS = 1\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXT_PROCEDURAL = 2\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXT_INSTANCE = 3\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_geometry_type_ext_t = _ze_rtas_builder_geometry_type_ext_t\n\n@cenum _ze_rtas_builder_input_data_format_ext_t::UInt32 begin\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_FLOAT3 = 0\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_FLOAT3X4_COLUMN_MAJOR = 1\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_FLOAT3X4_ALIGNED_COLUMN_MAJOR = 2\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_FLOAT3X4_ROW_MAJOR = 3\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_AABB = 4\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_TRIANGLE_INDICES_UINT32 = 5\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_QUAD_INDICES_UINT32 = 6\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXT_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_input_data_format_ext_t = _ze_rtas_builder_input_data_format_ext_t\n\nmutable struct _ze_rtas_builder_ext_handle_t end\n\nconst ze_rtas_builder_ext_handle_t = Ptr{_ze_rtas_builder_ext_handle_t}\n\nmutable struct _ze_rtas_parallel_operation_ext_handle_t end\n\nconst ze_rtas_parallel_operation_ext_handle_t = Ptr{_ze_rtas_parallel_operation_ext_handle_t}\n\n@checked function zeRTASBuilderCreateExt(hDriver, pDescriptor, phBuilder)\n    @ccall libze_loader.zeRTASBuilderCreateExt(hDriver::ze_driver_handle_t,\n                                               pDescriptor::Ptr{ze_rtas_builder_ext_desc_t},\n                                               phBuilder::Ptr{ze_rtas_builder_ext_handle_t})::ze_result_t\nend\n\n@checked function zeRTASBuilderGetBuildPropertiesExt(hBuilder, pBuildOpDescriptor,\n                                                     pProperties)\n    @ccall libze_loader.zeRTASBuilderGetBuildPropertiesExt(hBuilder::ze_rtas_builder_ext_handle_t,\n                                                           pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},\n                                                           pProperties::Ptr{ze_rtas_builder_ext_properties_t})::ze_result_t\nend\n\n@checked function zeDriverRTASFormatCompatibilityCheckExt(hDriver, rtasFormatA, rtasFormatB)\n    @ccall libze_loader.zeDriverRTASFormatCompatibilityCheckExt(hDriver::ze_driver_handle_t,\n                                                                rtasFormatA::ze_rtas_format_ext_t,\n                                                                rtasFormatB::ze_rtas_format_ext_t)::ze_result_t\nend\n\n@checked function zeRTASBuilderBuildExt(hBuilder, pBuildOpDescriptor, pScratchBuffer,\n                                        scratchBufferSizeBytes, pRtasBuffer,\n                                        rtasBufferSizeBytes, hParallelOperation,\n                                        pBuildUserPtr, pBounds, pRtasBufferSizeBytes)\n    @ccall libze_loader.zeRTASBuilderBuildExt(hBuilder::ze_rtas_builder_ext_handle_t,\n                                              pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_ext_desc_t},\n                                              pScratchBuffer::Ptr{Cvoid},\n                                              scratchBufferSizeBytes::Csize_t,\n                                              pRtasBuffer::Ptr{Cvoid},\n                                              rtasBufferSizeBytes::Csize_t,\n                                              hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,\n                                              pBuildUserPtr::Ptr{Cvoid},\n                                              pBounds::Ptr{ze_rtas_aabb_ext_t},\n                                              pRtasBufferSizeBytes::Ptr{Csize_t})::ze_result_t\nend\n\n@checked function zeRTASBuilderCommandListAppendCopyExt(hCommandList, dstptr, srcptr, size,\n                                                        hSignalEvent, numWaitEvents,\n                                                        phWaitEvents)\n    @ccall libze_loader.zeRTASBuilderCommandListAppendCopyExt(hCommandList::ze_command_list_handle_t,\n                                                              dstptr::Ptr{Cvoid},\n                                                              srcptr::Ptr{Cvoid},\n                                                              size::Csize_t,\n                                                              hSignalEvent::ze_event_handle_t,\n                                                              numWaitEvents::UInt32,\n                                                              phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeRTASBuilderDestroyExt(hBuilder)\n    @ccall libze_loader.zeRTASBuilderDestroyExt(hBuilder::ze_rtas_builder_ext_handle_t)::ze_result_t\nend\n\n@checked function zeRTASParallelOperationCreateExt(hDriver, phParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationCreateExt(hDriver::ze_driver_handle_t,\n                                                         phParallelOperation::Ptr{ze_rtas_parallel_operation_ext_handle_t})::ze_result_t\nend\n\n@checked function zeRTASParallelOperationGetPropertiesExt(hParallelOperation, pProperties)\n    @ccall libze_loader.zeRTASParallelOperationGetPropertiesExt(hParallelOperation::ze_rtas_parallel_operation_ext_handle_t,\n                                                                pProperties::Ptr{ze_rtas_parallel_operation_ext_properties_t})::ze_result_t\nend\n\n@checked function zeRTASParallelOperationJoinExt(hParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationJoinExt(hParallelOperation::ze_rtas_parallel_operation_ext_handle_t)::ze_result_t\nend\n\n@checked function zeRTASParallelOperationDestroyExt(hParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationDestroyExt(hParallelOperation::ze_rtas_parallel_operation_ext_handle_t)::ze_result_t\nend\n\n@cenum _ze_device_vector_sizes_ext_version_t::UInt32 begin\n    ZE_DEVICE_VECTOR_SIZES_EXT_VERSION_1_0 = 65536\n    ZE_DEVICE_VECTOR_SIZES_EXT_VERSION_CURRENT = 65536\n    ZE_DEVICE_VECTOR_SIZES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_vector_sizes_ext_version_t = _ze_device_vector_sizes_ext_version_t\n\n@checked function zeDeviceGetVectorWidthPropertiesExt(hDevice, pCount,\n                                                      pVectorWidthProperties)\n    @ccall libze_loader.zeDeviceGetVectorWidthPropertiesExt(hDevice::ze_device_handle_t,\n                                                            pCount::Ptr{UInt32},\n                                                            pVectorWidthProperties::Ptr{ze_device_vector_width_properties_ext_t})::ze_result_t\nend\n\n@cenum _ze_cache_reservation_ext_version_t::UInt32 begin\n    ZE_CACHE_RESERVATION_EXT_VERSION_1_0 = 65536\n    ZE_CACHE_RESERVATION_EXT_VERSION_CURRENT = 65536\n    ZE_CACHE_RESERVATION_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_cache_reservation_ext_version_t = _ze_cache_reservation_ext_version_t\n\n@cenum _ze_cache_ext_region_t::UInt32 begin\n    ZE_CACHE_EXT_REGION_ZE_CACHE_REGION_DEFAULT = 0\n    ZE_CACHE_EXT_REGION_ZE_CACHE_RESERVE_REGION = 1\n    ZE_CACHE_EXT_REGION_ZE_CACHE_NON_RESERVED_REGION = 2\n    ZE_CACHE_EXT_REGION_DEFAULT = 0\n    ZE_CACHE_EXT_REGION_RESERVED = 1\n    ZE_CACHE_EXT_REGION_NON_RESERVED = 2\n    ZE_CACHE_EXT_REGION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_cache_ext_region_t = _ze_cache_ext_region_t\n\n@checked function zeDeviceReserveCacheExt(hDevice, cacheLevel, cacheReservationSize)\n    @ccall libze_loader.zeDeviceReserveCacheExt(hDevice::ze_device_handle_t,\n                                                cacheLevel::Csize_t,\n                                                cacheReservationSize::Csize_t)::ze_result_t\nend\n\n@checked function zeDeviceSetCacheAdviceExt(hDevice, ptr, regionSize, cacheRegion)\n    @ccall libze_loader.zeDeviceSetCacheAdviceExt(hDevice::ze_device_handle_t,\n                                                  ptr::Ptr{Cvoid}, regionSize::Csize_t,\n                                                  cacheRegion::ze_cache_ext_region_t)::ze_result_t\nend\n\n@cenum _ze_event_query_timestamps_exp_version_t::UInt32 begin\n    ZE_EVENT_QUERY_TIMESTAMPS_EXP_VERSION_1_0 = 65536\n    ZE_EVENT_QUERY_TIMESTAMPS_EXP_VERSION_CURRENT = 65536\n    ZE_EVENT_QUERY_TIMESTAMPS_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_query_timestamps_exp_version_t = _ze_event_query_timestamps_exp_version_t\n\n@checked function zeEventQueryTimestampsExp(hEvent, hDevice, pCount, pTimestamps)\n    @ccall libze_loader.zeEventQueryTimestampsExp(hEvent::ze_event_handle_t,\n                                                  hDevice::ze_device_handle_t,\n                                                  pCount::Ptr{UInt32},\n                                                  pTimestamps::Ptr{ze_kernel_timestamp_result_t})::ze_result_t\nend\n\n@cenum _ze_image_memory_properties_exp_version_t::UInt32 begin\n    ZE_IMAGE_MEMORY_PROPERTIES_EXP_VERSION_1_0 = 65536\n    ZE_IMAGE_MEMORY_PROPERTIES_EXP_VERSION_CURRENT = 65536\n    ZE_IMAGE_MEMORY_PROPERTIES_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_memory_properties_exp_version_t = _ze_image_memory_properties_exp_version_t\n\n@checked function zeImageGetMemoryPropertiesExp(hImage, pMemoryProperties)\n    @ccall libze_loader.zeImageGetMemoryPropertiesExp(hImage::ze_image_handle_t,\n                                                      pMemoryProperties::Ptr{ze_image_memory_properties_exp_t})::ze_result_t\nend\n\n@cenum _ze_image_view_ext_version_t::UInt32 begin\n    ZE_IMAGE_VIEW_EXT_VERSION_1_0 = 65536\n    ZE_IMAGE_VIEW_EXT_VERSION_CURRENT = 65536\n    ZE_IMAGE_VIEW_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_view_ext_version_t = _ze_image_view_ext_version_t\n\n@checked function zeImageViewCreateExt(hContext, hDevice, desc, hImage, phImageView)\n    @ccall libze_loader.zeImageViewCreateExt(hContext::ze_context_handle_t,\n                                             hDevice::ze_device_handle_t,\n                                             desc::Ptr{ze_image_desc_t},\n                                             hImage::ze_image_handle_t,\n                                             phImageView::Ptr{ze_image_handle_t})::ze_result_t\nend\n\n@cenum _ze_image_view_exp_version_t::UInt32 begin\n    ZE_IMAGE_VIEW_EXP_VERSION_1_0 = 65536\n    ZE_IMAGE_VIEW_EXP_VERSION_CURRENT = 65536\n    ZE_IMAGE_VIEW_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_view_exp_version_t = _ze_image_view_exp_version_t\n\n@checked function zeImageViewCreateExp(hContext, hDevice, desc, hImage, phImageView)\n    @ccall libze_loader.zeImageViewCreateExp(hContext::ze_context_handle_t,\n                                             hDevice::ze_device_handle_t,\n                                             desc::Ptr{ze_image_desc_t},\n                                             hImage::ze_image_handle_t,\n                                             phImageView::Ptr{ze_image_handle_t})::ze_result_t\nend\n\n@cenum _ze_image_view_planar_ext_version_t::UInt32 begin\n    ZE_IMAGE_VIEW_PLANAR_EXT_VERSION_1_0 = 65536\n    ZE_IMAGE_VIEW_PLANAR_EXT_VERSION_CURRENT = 65536\n    ZE_IMAGE_VIEW_PLANAR_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_view_planar_ext_version_t = _ze_image_view_planar_ext_version_t\n\n@cenum _ze_image_view_planar_exp_version_t::UInt32 begin\n    ZE_IMAGE_VIEW_PLANAR_EXP_VERSION_1_0 = 65536\n    ZE_IMAGE_VIEW_PLANAR_EXP_VERSION_CURRENT = 65536\n    ZE_IMAGE_VIEW_PLANAR_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_view_planar_exp_version_t = _ze_image_view_planar_exp_version_t\n\n@cenum _ze_scheduling_hints_exp_version_t::UInt32 begin\n    ZE_SCHEDULING_HINTS_EXP_VERSION_1_0 = 65536\n    ZE_SCHEDULING_HINTS_EXP_VERSION_CURRENT = 65536\n    ZE_SCHEDULING_HINTS_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_scheduling_hints_exp_version_t = _ze_scheduling_hints_exp_version_t\n\n@cenum _ze_scheduling_hint_exp_flag_t::UInt32 begin\n    ZE_SCHEDULING_HINT_EXP_FLAG_OLDEST_FIRST = 1\n    ZE_SCHEDULING_HINT_EXP_FLAG_ROUND_ROBIN = 2\n    ZE_SCHEDULING_HINT_EXP_FLAG_STALL_BASED_ROUND_ROBIN = 4\n    ZE_SCHEDULING_HINT_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_scheduling_hint_exp_flag_t = _ze_scheduling_hint_exp_flag_t\n\n@checked function zeKernelSchedulingHintExp(hKernel, pHint)\n    @ccall libze_loader.zeKernelSchedulingHintExp(hKernel::ze_kernel_handle_t,\n                                                  pHint::Ptr{ze_scheduling_hint_exp_desc_t})::ze_result_t\nend\n\n@cenum _ze_linkonce_odr_ext_version_t::UInt32 begin\n    ZE_LINKONCE_ODR_EXT_VERSION_1_0 = 65536\n    ZE_LINKONCE_ODR_EXT_VERSION_CURRENT = 65536\n    ZE_LINKONCE_ODR_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_linkonce_odr_ext_version_t = _ze_linkonce_odr_ext_version_t\n\n@cenum _ze_power_saving_hint_exp_version_t::UInt32 begin\n    ZE_POWER_SAVING_HINT_EXP_VERSION_1_0 = 65536\n    ZE_POWER_SAVING_HINT_EXP_VERSION_CURRENT = 65536\n    ZE_POWER_SAVING_HINT_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_power_saving_hint_exp_version_t = _ze_power_saving_hint_exp_version_t\n\n@cenum _ze_power_saving_hint_type_t::UInt32 begin\n    ZE_POWER_SAVING_HINT_TYPE_MIN = 0\n    ZE_POWER_SAVING_HINT_TYPE_MAX = 100\n    ZE_POWER_SAVING_HINT_TYPE_FORCE_UINT32 = 2147483647\nend\n\nconst ze_power_saving_hint_type_t = _ze_power_saving_hint_type_t\n\n@cenum _ze_subgroup_ext_version_t::UInt32 begin\n    ZE_SUBGROUP_EXT_VERSION_1_0 = 65536\n    ZE_SUBGROUP_EXT_VERSION_CURRENT = 65536\n    ZE_SUBGROUP_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_subgroup_ext_version_t = _ze_subgroup_ext_version_t\n\n@cenum _ze_eu_count_ext_version_t::UInt32 begin\n    ZE_EU_COUNT_EXT_VERSION_1_0 = 65536\n    ZE_EU_COUNT_EXT_VERSION_CURRENT = 65536\n    ZE_EU_COUNT_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_eu_count_ext_version_t = _ze_eu_count_ext_version_t\n\n@cenum _ze_pci_properties_ext_version_t::UInt32 begin\n    ZE_PCI_PROPERTIES_EXT_VERSION_1_0 = 65536\n    ZE_PCI_PROPERTIES_EXT_VERSION_CURRENT = 65536\n    ZE_PCI_PROPERTIES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_pci_properties_ext_version_t = _ze_pci_properties_ext_version_t\n\n@checked function zeDevicePciGetPropertiesExt(hDevice, pPciProperties)\n    @ccall libze_loader.zeDevicePciGetPropertiesExt(hDevice::ze_device_handle_t,\n                                                    pPciProperties::Ptr{ze_pci_ext_properties_t})::ze_result_t\nend\n\n@cenum _ze_srgb_ext_version_t::UInt32 begin\n    ZE_SRGB_EXT_VERSION_1_0 = 65536\n    ZE_SRGB_EXT_VERSION_CURRENT = 65536\n    ZE_SRGB_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_srgb_ext_version_t = _ze_srgb_ext_version_t\n\n@cenum _ze_image_copy_ext_version_t::UInt32 begin\n    ZE_IMAGE_COPY_EXT_VERSION_1_0 = 65536\n    ZE_IMAGE_COPY_EXT_VERSION_CURRENT = 65536\n    ZE_IMAGE_COPY_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_copy_ext_version_t = _ze_image_copy_ext_version_t\n\n@checked function zeCommandListAppendImageCopyToMemoryExt(hCommandList, dstptr, hSrcImage,\n                                                          pSrcRegion, destRowPitch,\n                                                          destSlicePitch, hSignalEvent,\n                                                          numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopyToMemoryExt(hCommandList::ze_command_list_handle_t,\n                                                                dstptr::Ptr{Cvoid},\n                                                                hSrcImage::ze_image_handle_t,\n                                                                pSrcRegion::Ptr{ze_image_region_t},\n                                                                destRowPitch::UInt32,\n                                                                destSlicePitch::UInt32,\n                                                                hSignalEvent::ze_event_handle_t,\n                                                                numWaitEvents::UInt32,\n                                                                phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListAppendImageCopyFromMemoryExt(hCommandList, hDstImage, srcptr,\n                                                            pDstRegion, srcRowPitch,\n                                                            srcSlicePitch, hSignalEvent,\n                                                            numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListAppendImageCopyFromMemoryExt(hCommandList::ze_command_list_handle_t,\n                                                                  hDstImage::ze_image_handle_t,\n                                                                  srcptr::Ptr{Cvoid},\n                                                                  pDstRegion::Ptr{ze_image_region_t},\n                                                                  srcRowPitch::UInt32,\n                                                                  srcSlicePitch::UInt32,\n                                                                  hSignalEvent::ze_event_handle_t,\n                                                                  numWaitEvents::UInt32,\n                                                                  phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@cenum _ze_image_query_alloc_properties_ext_version_t::UInt32 begin\n    ZE_IMAGE_QUERY_ALLOC_PROPERTIES_EXT_VERSION_1_0 = 65536\n    ZE_IMAGE_QUERY_ALLOC_PROPERTIES_EXT_VERSION_CURRENT = 65536\n    ZE_IMAGE_QUERY_ALLOC_PROPERTIES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_query_alloc_properties_ext_version_t = _ze_image_query_alloc_properties_ext_version_t\n\n@checked function zeImageGetAllocPropertiesExt(hContext, hImage, pImageAllocProperties)\n    @ccall libze_loader.zeImageGetAllocPropertiesExt(hContext::ze_context_handle_t,\n                                                     hImage::ze_image_handle_t,\n                                                     pImageAllocProperties::Ptr{ze_image_allocation_ext_properties_t})::ze_result_t\nend\n\n@cenum _ze_linkage_inspection_ext_version_t::UInt32 begin\n    ZE_LINKAGE_INSPECTION_EXT_VERSION_1_0 = 65536\n    ZE_LINKAGE_INSPECTION_EXT_VERSION_CURRENT = 65536\n    ZE_LINKAGE_INSPECTION_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_linkage_inspection_ext_version_t = _ze_linkage_inspection_ext_version_t\n\n@cenum _ze_linkage_inspection_ext_flag_t::UInt32 begin\n    ZE_LINKAGE_INSPECTION_EXT_FLAG_IMPORTS = 1\n    ZE_LINKAGE_INSPECTION_EXT_FLAG_UNRESOLVABLE_IMPORTS = 2\n    ZE_LINKAGE_INSPECTION_EXT_FLAG_EXPORTS = 4\n    ZE_LINKAGE_INSPECTION_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_linkage_inspection_ext_flag_t = _ze_linkage_inspection_ext_flag_t\n\n@checked function zeModuleInspectLinkageExt(pInspectDesc, numModules, phModules, phLog)\n    @ccall libze_loader.zeModuleInspectLinkageExt(pInspectDesc::Ptr{ze_linkage_inspection_ext_desc_t},\n                                                  numModules::UInt32,\n                                                  phModules::Ptr{ze_module_handle_t},\n                                                  phLog::Ptr{ze_module_build_log_handle_t})::ze_result_t\nend\n\n@cenum _ze_memory_compression_hints_ext_version_t::UInt32 begin\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_VERSION_1_0 = 65536\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_VERSION_CURRENT = 65536\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_compression_hints_ext_version_t = _ze_memory_compression_hints_ext_version_t\n\n@cenum _ze_memory_compression_hints_ext_flag_t::UInt32 begin\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_FLAG_COMPRESSED = 1\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_FLAG_UNCOMPRESSED = 2\n    ZE_MEMORY_COMPRESSION_HINTS_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_compression_hints_ext_flag_t = _ze_memory_compression_hints_ext_flag_t\n\n@cenum _ze_memory_free_policies_ext_version_t::UInt32 begin\n    ZE_MEMORY_FREE_POLICIES_EXT_VERSION_1_0 = 65536\n    ZE_MEMORY_FREE_POLICIES_EXT_VERSION_CURRENT = 65536\n    ZE_MEMORY_FREE_POLICIES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_memory_free_policies_ext_version_t = _ze_memory_free_policies_ext_version_t\n\n@cenum _ze_driver_memory_free_policy_ext_flag_t::UInt32 begin\n    ZE_DRIVER_MEMORY_FREE_POLICY_EXT_FLAG_BLOCKING_FREE = 1\n    ZE_DRIVER_MEMORY_FREE_POLICY_EXT_FLAG_DEFER_FREE = 2\n    ZE_DRIVER_MEMORY_FREE_POLICY_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_driver_memory_free_policy_ext_flag_t = _ze_driver_memory_free_policy_ext_flag_t\n\n@checked function zeMemFreeExt(hContext, pMemFreeDesc, ptr)\n    @ccall libze_loader.zeMemFreeExt(hContext::ze_context_handle_t,\n                                     pMemFreeDesc::Ptr{ze_memory_free_ext_desc_t},\n                                     ptr::PtrOrZePtr{Cvoid})::ze_result_t\nend\n\n@cenum _ze_device_luid_ext_version_t::UInt32 begin\n    ZE_DEVICE_LUID_EXT_VERSION_1_0 = 65536\n    ZE_DEVICE_LUID_EXT_VERSION_CURRENT = 65536\n    ZE_DEVICE_LUID_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_luid_ext_version_t = _ze_device_luid_ext_version_t\n\n@checked function zeFabricVertexGetExp(hDriver, pCount, phVertices)\n    @ccall libze_loader.zeFabricVertexGetExp(hDriver::ze_driver_handle_t,\n                                             pCount::Ptr{UInt32},\n                                             phVertices::Ptr{ze_fabric_vertex_handle_t})::ze_result_t\nend\n\n@checked function zeFabricVertexGetSubVerticesExp(hVertex, pCount, phSubvertices)\n    @ccall libze_loader.zeFabricVertexGetSubVerticesExp(hVertex::ze_fabric_vertex_handle_t,\n                                                        pCount::Ptr{UInt32},\n                                                        phSubvertices::Ptr{ze_fabric_vertex_handle_t})::ze_result_t\nend\n\n@checked function zeFabricVertexGetPropertiesExp(hVertex, pVertexProperties)\n    @ccall libze_loader.zeFabricVertexGetPropertiesExp(hVertex::ze_fabric_vertex_handle_t,\n                                                       pVertexProperties::Ptr{ze_fabric_vertex_exp_properties_t})::ze_result_t\nend\n\n@checked function zeFabricVertexGetDeviceExp(hVertex, phDevice)\n    @ccall libze_loader.zeFabricVertexGetDeviceExp(hVertex::ze_fabric_vertex_handle_t,\n                                                   phDevice::Ptr{ze_device_handle_t})::ze_result_t\nend\n\n@checked function zeDeviceGetFabricVertexExp(hDevice, phVertex)\n    @ccall libze_loader.zeDeviceGetFabricVertexExp(hDevice::ze_device_handle_t,\n                                                   phVertex::Ptr{ze_fabric_vertex_handle_t})::ze_result_t\nend\n\n@checked function zeFabricEdgeGetExp(hVertexA, hVertexB, pCount, phEdges)\n    @ccall libze_loader.zeFabricEdgeGetExp(hVertexA::ze_fabric_vertex_handle_t,\n                                           hVertexB::ze_fabric_vertex_handle_t,\n                                           pCount::Ptr{UInt32},\n                                           phEdges::Ptr{ze_fabric_edge_handle_t})::ze_result_t\nend\n\n@checked function zeFabricEdgeGetVerticesExp(hEdge, phVertexA, phVertexB)\n    @ccall libze_loader.zeFabricEdgeGetVerticesExp(hEdge::ze_fabric_edge_handle_t,\n                                                   phVertexA::Ptr{ze_fabric_vertex_handle_t},\n                                                   phVertexB::Ptr{ze_fabric_vertex_handle_t})::ze_result_t\nend\n\n@checked function zeFabricEdgeGetPropertiesExp(hEdge, pEdgeProperties)\n    @ccall libze_loader.zeFabricEdgeGetPropertiesExp(hEdge::ze_fabric_edge_handle_t,\n                                                     pEdgeProperties::Ptr{ze_fabric_edge_exp_properties_t})::ze_result_t\nend\n\n@cenum _ze_device_memory_properties_ext_version_t::UInt32 begin\n    ZE_DEVICE_MEMORY_PROPERTIES_EXT_VERSION_1_0 = 65536\n    ZE_DEVICE_MEMORY_PROPERTIES_EXT_VERSION_CURRENT = 65536\n    ZE_DEVICE_MEMORY_PROPERTIES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_memory_properties_ext_version_t = _ze_device_memory_properties_ext_version_t\n\n@cenum _ze_bfloat16_conversions_ext_version_t::UInt32 begin\n    ZE_BFLOAT16_CONVERSIONS_EXT_VERSION_1_0 = 65536\n    ZE_BFLOAT16_CONVERSIONS_EXT_VERSION_CURRENT = 65536\n    ZE_BFLOAT16_CONVERSIONS_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_bfloat16_conversions_ext_version_t = _ze_bfloat16_conversions_ext_version_t\n\n@cenum _ze_device_ip_version_version_t::UInt32 begin\n    ZE_DEVICE_IP_VERSION_VERSION_1_0 = 65536\n    ZE_DEVICE_IP_VERSION_VERSION_CURRENT = 65536\n    ZE_DEVICE_IP_VERSION_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_device_ip_version_version_t = _ze_device_ip_version_version_t\n\n@cenum _ze_kernel_max_group_size_properties_ext_version_t::UInt32 begin\n    ZE_KERNEL_MAX_GROUP_SIZE_PROPERTIES_EXT_VERSION_1_0 = 65536\n    ZE_KERNEL_MAX_GROUP_SIZE_PROPERTIES_EXT_VERSION_CURRENT = 65536\n    ZE_KERNEL_MAX_GROUP_SIZE_PROPERTIES_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_kernel_max_group_size_properties_ext_version_t = _ze_kernel_max_group_size_properties_ext_version_t\n\nconst ze_kernel_max_group_size_ext_properties_t = ze_kernel_max_group_size_properties_ext_t\n\n@cenum _ze_sub_allocations_exp_version_t::UInt32 begin\n    ZE_SUB_ALLOCATIONS_EXP_VERSION_1_0 = 65536\n    ZE_SUB_ALLOCATIONS_EXP_VERSION_CURRENT = 65536\n    ZE_SUB_ALLOCATIONS_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_sub_allocations_exp_version_t = _ze_sub_allocations_exp_version_t\n\n@cenum _ze_event_query_kernel_timestamps_ext_version_t::UInt32 begin\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_VERSION_1_0 = 65536\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_VERSION_CURRENT = 65536\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_query_kernel_timestamps_ext_version_t = _ze_event_query_kernel_timestamps_ext_version_t\n\n@cenum _ze_event_query_kernel_timestamps_ext_flag_t::UInt32 begin\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_FLAG_KERNEL = 1\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_FLAG_SYNCHRONIZED = 2\n    ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_query_kernel_timestamps_ext_flag_t = _ze_event_query_kernel_timestamps_ext_flag_t\n\n@checked function zeEventQueryKernelTimestampsExt(hEvent, hDevice, pCount, pResults)\n    @ccall libze_loader.zeEventQueryKernelTimestampsExt(hEvent::ze_event_handle_t,\n                                                        hDevice::ze_device_handle_t,\n                                                        pCount::Ptr{UInt32},\n                                                        pResults::Ptr{ze_event_query_kernel_timestamps_results_ext_properties_t})::ze_result_t\nend\n\n@cenum _ze_rtas_device_exp_flag_t::UInt32 begin\n    ZE_RTAS_DEVICE_EXP_FLAG_RESERVED = 1\n    ZE_RTAS_DEVICE_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_device_exp_flag_t = _ze_rtas_device_exp_flag_t\n\n@cenum _ze_rtas_builder_exp_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_EXP_FLAG_RESERVED = 1\n    ZE_RTAS_BUILDER_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_exp_flag_t = _ze_rtas_builder_exp_flag_t\n\n@cenum _ze_rtas_parallel_operation_exp_flag_t::UInt32 begin\n    ZE_RTAS_PARALLEL_OPERATION_EXP_FLAG_RESERVED = 1\n    ZE_RTAS_PARALLEL_OPERATION_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_parallel_operation_exp_flag_t = _ze_rtas_parallel_operation_exp_flag_t\n\nconst ze_rtas_builder_geometry_exp_flags_t = UInt32\n\n@cenum _ze_rtas_builder_geometry_exp_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_GEOMETRY_EXP_FLAG_NON_OPAQUE = 1\n    ZE_RTAS_BUILDER_GEOMETRY_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_geometry_exp_flag_t = _ze_rtas_builder_geometry_exp_flag_t\n\nconst ze_rtas_builder_instance_exp_flags_t = UInt32\n\n@cenum _ze_rtas_builder_instance_exp_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_INSTANCE_EXP_FLAG_TRIANGLE_CULL_DISABLE = 1\n    ZE_RTAS_BUILDER_INSTANCE_EXP_FLAG_TRIANGLE_FRONT_COUNTERCLOCKWISE = 2\n    ZE_RTAS_BUILDER_INSTANCE_EXP_FLAG_TRIANGLE_FORCE_OPAQUE = 4\n    ZE_RTAS_BUILDER_INSTANCE_EXP_FLAG_TRIANGLE_FORCE_NON_OPAQUE = 8\n    ZE_RTAS_BUILDER_INSTANCE_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_instance_exp_flag_t = _ze_rtas_builder_instance_exp_flag_t\n\n@cenum _ze_rtas_builder_build_op_exp_flag_t::UInt32 begin\n    ZE_RTAS_BUILDER_BUILD_OP_EXP_FLAG_COMPACT = 1\n    ZE_RTAS_BUILDER_BUILD_OP_EXP_FLAG_NO_DUPLICATE_ANYHIT_INVOCATION = 2\n    ZE_RTAS_BUILDER_BUILD_OP_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_build_op_exp_flag_t = _ze_rtas_builder_build_op_exp_flag_t\n\n@cenum _ze_rtas_builder_geometry_type_exp_t::UInt32 begin\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_TRIANGLES = 0\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_QUADS = 1\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_PROCEDURAL = 2\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_INSTANCE = 3\n    ZE_RTAS_BUILDER_GEOMETRY_TYPE_EXP_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_geometry_type_exp_t = _ze_rtas_builder_geometry_type_exp_t\n\n@cenum _ze_rtas_builder_input_data_format_exp_t::UInt32 begin\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FLOAT3 = 0\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FLOAT3X4_COLUMN_MAJOR = 1\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FLOAT3X4_ALIGNED_COLUMN_MAJOR = 2\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FLOAT3X4_ROW_MAJOR = 3\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_AABB = 4\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_TRIANGLE_INDICES_UINT32 = 5\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_QUAD_INDICES_UINT32 = 6\n    ZE_RTAS_BUILDER_INPUT_DATA_FORMAT_EXP_FORCE_UINT32 = 2147483647\nend\n\nconst ze_rtas_builder_input_data_format_exp_t = _ze_rtas_builder_input_data_format_exp_t\n\nmutable struct _ze_rtas_builder_exp_handle_t end\n\nconst ze_rtas_builder_exp_handle_t = Ptr{_ze_rtas_builder_exp_handle_t}\n\nmutable struct _ze_rtas_parallel_operation_exp_handle_t end\n\nconst ze_rtas_parallel_operation_exp_handle_t = Ptr{_ze_rtas_parallel_operation_exp_handle_t}\n\n@checked function zeRTASBuilderCreateExp(hDriver, pDescriptor, phBuilder)\n    @ccall libze_loader.zeRTASBuilderCreateExp(hDriver::ze_driver_handle_t,\n                                               pDescriptor::Ptr{ze_rtas_builder_exp_desc_t},\n                                               phBuilder::Ptr{ze_rtas_builder_exp_handle_t})::ze_result_t\nend\n\n@checked function zeRTASBuilderGetBuildPropertiesExp(hBuilder, pBuildOpDescriptor,\n                                                     pProperties)\n    @ccall libze_loader.zeRTASBuilderGetBuildPropertiesExp(hBuilder::ze_rtas_builder_exp_handle_t,\n                                                           pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_exp_desc_t},\n                                                           pProperties::Ptr{ze_rtas_builder_exp_properties_t})::ze_result_t\nend\n\n@checked function zeDriverRTASFormatCompatibilityCheckExp(hDriver, rtasFormatA, rtasFormatB)\n    @ccall libze_loader.zeDriverRTASFormatCompatibilityCheckExp(hDriver::ze_driver_handle_t,\n                                                                rtasFormatA::ze_rtas_format_exp_t,\n                                                                rtasFormatB::ze_rtas_format_exp_t)::ze_result_t\nend\n\n@checked function zeRTASBuilderBuildExp(hBuilder, pBuildOpDescriptor, pScratchBuffer,\n                                        scratchBufferSizeBytes, pRtasBuffer,\n                                        rtasBufferSizeBytes, hParallelOperation,\n                                        pBuildUserPtr, pBounds, pRtasBufferSizeBytes)\n    @ccall libze_loader.zeRTASBuilderBuildExp(hBuilder::ze_rtas_builder_exp_handle_t,\n                                              pBuildOpDescriptor::Ptr{ze_rtas_builder_build_op_exp_desc_t},\n                                              pScratchBuffer::Ptr{Cvoid},\n                                              scratchBufferSizeBytes::Csize_t,\n                                              pRtasBuffer::Ptr{Cvoid},\n                                              rtasBufferSizeBytes::Csize_t,\n                                              hParallelOperation::ze_rtas_parallel_operation_exp_handle_t,\n                                              pBuildUserPtr::Ptr{Cvoid},\n                                              pBounds::Ptr{ze_rtas_aabb_exp_t},\n                                              pRtasBufferSizeBytes::Ptr{Csize_t})::ze_result_t\nend\n\n@checked function zeRTASBuilderDestroyExp(hBuilder)\n    @ccall libze_loader.zeRTASBuilderDestroyExp(hBuilder::ze_rtas_builder_exp_handle_t)::ze_result_t\nend\n\n@checked function zeRTASParallelOperationCreateExp(hDriver, phParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationCreateExp(hDriver::ze_driver_handle_t,\n                                                         phParallelOperation::Ptr{ze_rtas_parallel_operation_exp_handle_t})::ze_result_t\nend\n\n@checked function zeRTASParallelOperationGetPropertiesExp(hParallelOperation, pProperties)\n    @ccall libze_loader.zeRTASParallelOperationGetPropertiesExp(hParallelOperation::ze_rtas_parallel_operation_exp_handle_t,\n                                                                pProperties::Ptr{ze_rtas_parallel_operation_exp_properties_t})::ze_result_t\nend\n\n@checked function zeRTASParallelOperationJoinExp(hParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationJoinExp(hParallelOperation::ze_rtas_parallel_operation_exp_handle_t)::ze_result_t\nend\n\n@checked function zeRTASParallelOperationDestroyExp(hParallelOperation)\n    @ccall libze_loader.zeRTASParallelOperationDestroyExp(hParallelOperation::ze_rtas_parallel_operation_exp_handle_t)::ze_result_t\nend\n\n@cenum _ze_event_pool_counter_based_exp_version_t::UInt32 begin\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_VERSION_1_0 = 65536\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_VERSION_CURRENT = 65536\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_pool_counter_based_exp_version_t = _ze_event_pool_counter_based_exp_version_t\n\n@cenum _ze_event_pool_counter_based_exp_flag_t::UInt32 begin\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_IMMEDIATE = 1\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_NON_IMMEDIATE = 2\n    ZE_EVENT_POOL_COUNTER_BASED_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_event_pool_counter_based_exp_flag_t = _ze_event_pool_counter_based_exp_flag_t\n\n@cenum _ze_bindless_image_exp_version_t::UInt32 begin\n    ZE_BINDLESS_IMAGE_EXP_VERSION_1_0 = 65536\n    ZE_BINDLESS_IMAGE_EXP_VERSION_CURRENT = 65536\n    ZE_BINDLESS_IMAGE_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_bindless_image_exp_version_t = _ze_bindless_image_exp_version_t\n\n@cenum _ze_image_bindless_exp_flag_t::UInt32 begin\n    ZE_IMAGE_BINDLESS_EXP_FLAG_BINDLESS = 1\n    ZE_IMAGE_BINDLESS_EXP_FLAG_SAMPLED_IMAGE = 2\n    ZE_IMAGE_BINDLESS_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_image_bindless_exp_flag_t = _ze_image_bindless_exp_flag_t\n\n@checked function zeMemGetPitchFor2dImage(hContext, hDevice, imageWidth, imageHeight,\n                                          elementSizeInBytes, rowPitch)\n    @ccall libze_loader.zeMemGetPitchFor2dImage(hContext::ze_context_handle_t,\n                                                hDevice::ze_device_handle_t,\n                                                imageWidth::Csize_t, imageHeight::Csize_t,\n                                                elementSizeInBytes::Cuint,\n                                                rowPitch::Ptr{Csize_t})::ze_result_t\nend\n\n@checked function zeImageGetDeviceOffsetExp(hImage, pDeviceOffset)\n    @ccall libze_loader.zeImageGetDeviceOffsetExp(hImage::ze_image_handle_t,\n                                                  pDeviceOffset::Ptr{UInt64})::ze_result_t\nend\n\n@cenum _ze_command_list_clone_exp_version_t::UInt32 begin\n    ZE_COMMAND_LIST_CLONE_EXP_VERSION_1_0 = 65536\n    ZE_COMMAND_LIST_CLONE_EXP_VERSION_CURRENT = 65536\n    ZE_COMMAND_LIST_CLONE_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_command_list_clone_exp_version_t = _ze_command_list_clone_exp_version_t\n\n@checked function zeCommandListCreateCloneExp(hCommandList, phClonedCommandList)\n    @ccall libze_loader.zeCommandListCreateCloneExp(hCommandList::ze_command_list_handle_t,\n                                                    phClonedCommandList::Ptr{ze_command_list_handle_t})::ze_result_t\nend\n\n@cenum _ze_immediate_command_list_append_exp_version_t::UInt32 begin\n    ZE_IMMEDIATE_COMMAND_LIST_APPEND_EXP_VERSION_1_0 = 65536\n    ZE_IMMEDIATE_COMMAND_LIST_APPEND_EXP_VERSION_CURRENT = 65536\n    ZE_IMMEDIATE_COMMAND_LIST_APPEND_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_immediate_command_list_append_exp_version_t = _ze_immediate_command_list_append_exp_version_t\n\n@checked function zeCommandListImmediateAppendCommandListsExp(hCommandListImmediate,\n                                                              numCommandLists,\n                                                              phCommandLists, hSignalEvent,\n                                                              numWaitEvents, phWaitEvents)\n    @ccall libze_loader.zeCommandListImmediateAppendCommandListsExp(hCommandListImmediate::ze_command_list_handle_t,\n                                                                    numCommandLists::UInt32,\n                                                                    phCommandLists::Ptr{ze_command_list_handle_t},\n                                                                    hSignalEvent::ze_event_handle_t,\n                                                                    numWaitEvents::UInt32,\n                                                                    phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@cenum _ze_mutable_command_list_exp_version_t::UInt32 begin\n    ZE_MUTABLE_COMMAND_LIST_EXP_VERSION_1_0 = 65536\n    ZE_MUTABLE_COMMAND_LIST_EXP_VERSION_1_1 = 65537\n    ZE_MUTABLE_COMMAND_LIST_EXP_VERSION_CURRENT = 65537\n    ZE_MUTABLE_COMMAND_LIST_EXP_VERSION_FORCE_UINT32 = 2147483647\nend\n\nconst ze_mutable_command_list_exp_version_t = _ze_mutable_command_list_exp_version_t\n\n@cenum _ze_mutable_command_exp_flag_t::UInt32 begin\n    ZE_MUTABLE_COMMAND_EXP_FLAG_KERNEL_ARGUMENTS = 1\n    ZE_MUTABLE_COMMAND_EXP_FLAG_GROUP_COUNT = 2\n    ZE_MUTABLE_COMMAND_EXP_FLAG_GROUP_SIZE = 4\n    ZE_MUTABLE_COMMAND_EXP_FLAG_GLOBAL_OFFSET = 8\n    ZE_MUTABLE_COMMAND_EXP_FLAG_SIGNAL_EVENT = 16\n    ZE_MUTABLE_COMMAND_EXP_FLAG_WAIT_EVENTS = 32\n    ZE_MUTABLE_COMMAND_EXP_FLAG_KERNEL_INSTRUCTION = 64\n    ZE_MUTABLE_COMMAND_EXP_FLAG_GRAPH_ARGUMENTS = 128\n    ZE_MUTABLE_COMMAND_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_mutable_command_exp_flag_t = _ze_mutable_command_exp_flag_t\n\n@cenum _ze_mutable_command_list_exp_flag_t::UInt32 begin\n    ZE_MUTABLE_COMMAND_LIST_EXP_FLAG_RESERVED = 1\n    ZE_MUTABLE_COMMAND_LIST_EXP_FLAG_FORCE_UINT32 = 2147483647\nend\n\nconst ze_mutable_command_list_exp_flag_t = _ze_mutable_command_list_exp_flag_t\n\n@checked function zeCommandListGetNextCommandIdExp(hCommandList, desc, pCommandId)\n    @ccall libze_loader.zeCommandListGetNextCommandIdExp(hCommandList::ze_command_list_handle_t,\n                                                         desc::Ptr{ze_mutable_command_id_exp_desc_t},\n                                                         pCommandId::Ptr{UInt64})::ze_result_t\nend\n\n@checked function zeCommandListGetNextCommandIdWithKernelsExp(hCommandList, desc,\n                                                              numKernels, phKernels,\n                                                              pCommandId)\n    @ccall libze_loader.zeCommandListGetNextCommandIdWithKernelsExp(hCommandList::ze_command_list_handle_t,\n                                                                    desc::Ptr{ze_mutable_command_id_exp_desc_t},\n                                                                    numKernels::UInt32,\n                                                                    phKernels::Ptr{ze_kernel_handle_t},\n                                                                    pCommandId::Ptr{UInt64})::ze_result_t\nend\n\n@checked function zeCommandListUpdateMutableCommandsExp(hCommandList, desc)\n    @ccall libze_loader.zeCommandListUpdateMutableCommandsExp(hCommandList::ze_command_list_handle_t,\n                                                              desc::Ptr{ze_mutable_commands_exp_desc_t})::ze_result_t\nend\n\n@checked function zeCommandListUpdateMutableCommandSignalEventExp(hCommandList, commandId,\n                                                                  hSignalEvent)\n    @ccall libze_loader.zeCommandListUpdateMutableCommandSignalEventExp(hCommandList::ze_command_list_handle_t,\n                                                                        commandId::UInt64,\n                                                                        hSignalEvent::ze_event_handle_t)::ze_result_t\nend\n\n@checked function zeCommandListUpdateMutableCommandWaitEventsExp(hCommandList, commandId,\n                                                                 numWaitEvents,\n                                                                 phWaitEvents)\n    @ccall libze_loader.zeCommandListUpdateMutableCommandWaitEventsExp(hCommandList::ze_command_list_handle_t,\n                                                                       commandId::UInt64,\n                                                                       numWaitEvents::UInt32,\n                                                                       phWaitEvents::Ptr{ze_event_handle_t})::ze_result_t\nend\n\n@checked function zeCommandListUpdateMutableCommandKernelsExp(hCommandList, numKernels,\n                                                              pCommandId, phKernels)\n    @ccall libze_loader.zeCommandListUpdateMutableCommandKernelsExp(hCommandList::ze_command_list_handle_t,\n                                                                    numKernels::UInt32,\n                                                                    pCommandId::Ptr{UInt64},\n                                                                    phKernels::Ptr{ze_kernel_handle_t})::ze_result_t\nend\n\nstruct _ze_init_params_t\n    pflags::Ptr{ze_init_flags_t}\nend\n\nconst ze_init_params_t = _ze_init_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnInitCb_t ) ( ze_init_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnInitCb_t = Ptr{Cvoid}\n\nstruct _ze_global_callbacks_t\n    pfnInitCb::ze_pfnInitCb_t\nend\n\nconst ze_global_callbacks_t = _ze_global_callbacks_t\n\nstruct _ze_driver_get_params_t\n    ppCount::Ptr{Ptr{UInt32}}\n    pphDrivers::Ptr{Ptr{ze_driver_handle_t}}\nend\n\nconst ze_driver_get_params_t = _ze_driver_get_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDriverGetCb_t ) ( ze_driver_get_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDriverGetCb_t = Ptr{Cvoid}\n\nstruct _ze_driver_get_api_version_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    pversion::Ptr{Ptr{ze_api_version_t}}\nend\n\nconst ze_driver_get_api_version_params_t = _ze_driver_get_api_version_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDriverGetApiVersionCb_t ) ( ze_driver_get_api_version_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDriverGetApiVersionCb_t = Ptr{Cvoid}\n\nstruct _ze_driver_get_properties_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    ppDriverProperties::Ptr{Ptr{ze_driver_properties_t}}\nend\n\nconst ze_driver_get_properties_params_t = _ze_driver_get_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDriverGetPropertiesCb_t ) ( ze_driver_get_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDriverGetPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_driver_get_ipc_properties_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    ppIpcProperties::Ptr{Ptr{ze_driver_ipc_properties_t}}\nend\n\nconst ze_driver_get_ipc_properties_params_t = _ze_driver_get_ipc_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDriverGetIpcPropertiesCb_t ) ( ze_driver_get_ipc_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDriverGetIpcPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_driver_get_extension_properties_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    ppExtensionProperties::Ptr{Ptr{ze_driver_extension_properties_t}}\nend\n\nconst ze_driver_get_extension_properties_params_t = _ze_driver_get_extension_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDriverGetExtensionPropertiesCb_t ) ( ze_driver_get_extension_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDriverGetExtensionPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_driver_callbacks_t\n    pfnGetCb::ze_pfnDriverGetCb_t\n    pfnGetApiVersionCb::ze_pfnDriverGetApiVersionCb_t\n    pfnGetPropertiesCb::ze_pfnDriverGetPropertiesCb_t\n    pfnGetIpcPropertiesCb::ze_pfnDriverGetIpcPropertiesCb_t\n    pfnGetExtensionPropertiesCb::ze_pfnDriverGetExtensionPropertiesCb_t\nend\n\nconst ze_driver_callbacks_t = _ze_driver_callbacks_t\n\nstruct _ze_device_get_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    pphDevices::Ptr{Ptr{ze_device_handle_t}}\nend\n\nconst ze_device_get_params_t = _ze_device_get_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetCb_t ) ( ze_device_get_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_sub_devices_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    pphSubdevices::Ptr{Ptr{ze_device_handle_t}}\nend\n\nconst ze_device_get_sub_devices_params_t = _ze_device_get_sub_devices_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetSubDevicesCb_t ) ( ze_device_get_sub_devices_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetSubDevicesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppDeviceProperties::Ptr{Ptr{ze_device_properties_t}}\nend\n\nconst ze_device_get_properties_params_t = _ze_device_get_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetPropertiesCb_t ) ( ze_device_get_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_compute_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppComputeProperties::Ptr{Ptr{ze_device_compute_properties_t}}\nend\n\nconst ze_device_get_compute_properties_params_t = _ze_device_get_compute_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetComputePropertiesCb_t ) ( ze_device_get_compute_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetComputePropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_module_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppModuleProperties::Ptr{Ptr{ze_device_module_properties_t}}\nend\n\nconst ze_device_get_module_properties_params_t = _ze_device_get_module_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetModulePropertiesCb_t ) ( ze_device_get_module_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetModulePropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_command_queue_group_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    ppCommandQueueGroupProperties::Ptr{Ptr{ze_command_queue_group_properties_t}}\nend\n\nconst ze_device_get_command_queue_group_properties_params_t = _ze_device_get_command_queue_group_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetCommandQueueGroupPropertiesCb_t ) ( ze_device_get_command_queue_group_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetCommandQueueGroupPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_memory_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    ppMemProperties::Ptr{Ptr{ze_device_memory_properties_t}}\nend\n\nconst ze_device_get_memory_properties_params_t = _ze_device_get_memory_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetMemoryPropertiesCb_t ) ( ze_device_get_memory_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetMemoryPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_memory_access_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppMemAccessProperties::Ptr{Ptr{ze_device_memory_access_properties_t}}\nend\n\nconst ze_device_get_memory_access_properties_params_t = _ze_device_get_memory_access_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetMemoryAccessPropertiesCb_t ) ( ze_device_get_memory_access_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetMemoryAccessPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_cache_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    ppCacheProperties::Ptr{Ptr{ze_device_cache_properties_t}}\nend\n\nconst ze_device_get_cache_properties_params_t = _ze_device_get_cache_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetCachePropertiesCb_t ) ( ze_device_get_cache_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetCachePropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_image_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppImageProperties::Ptr{Ptr{ze_device_image_properties_t}}\nend\n\nconst ze_device_get_image_properties_params_t = _ze_device_get_image_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetImagePropertiesCb_t ) ( ze_device_get_image_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetImagePropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_external_memory_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    ppExternalMemoryProperties::Ptr{Ptr{ze_device_external_memory_properties_t}}\nend\n\nconst ze_device_get_external_memory_properties_params_t = _ze_device_get_external_memory_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetExternalMemoryPropertiesCb_t ) ( ze_device_get_external_memory_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetExternalMemoryPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_p2_p_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    phPeerDevice::Ptr{ze_device_handle_t}\n    ppP2PProperties::Ptr{Ptr{ze_device_p2p_properties_t}}\nend\n\nconst ze_device_get_p2_p_properties_params_t = _ze_device_get_p2_p_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetP2PPropertiesCb_t ) ( ze_device_get_p2_p_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetP2PPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_device_can_access_peer_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    phPeerDevice::Ptr{ze_device_handle_t}\n    pvalue::Ptr{Ptr{ze_bool_t}}\nend\n\nconst ze_device_can_access_peer_params_t = _ze_device_can_access_peer_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceCanAccessPeerCb_t ) ( ze_device_can_access_peer_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceCanAccessPeerCb_t = Ptr{Cvoid}\n\nstruct _ze_device_get_status_params_t\n    phDevice::Ptr{ze_device_handle_t}\nend\n\nconst ze_device_get_status_params_t = _ze_device_get_status_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnDeviceGetStatusCb_t ) ( ze_device_get_status_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnDeviceGetStatusCb_t = Ptr{Cvoid}\n\nstruct _ze_device_callbacks_t\n    pfnGetCb::ze_pfnDeviceGetCb_t\n    pfnGetSubDevicesCb::ze_pfnDeviceGetSubDevicesCb_t\n    pfnGetPropertiesCb::ze_pfnDeviceGetPropertiesCb_t\n    pfnGetComputePropertiesCb::ze_pfnDeviceGetComputePropertiesCb_t\n    pfnGetModulePropertiesCb::ze_pfnDeviceGetModulePropertiesCb_t\n    pfnGetCommandQueueGroupPropertiesCb::ze_pfnDeviceGetCommandQueueGroupPropertiesCb_t\n    pfnGetMemoryPropertiesCb::ze_pfnDeviceGetMemoryPropertiesCb_t\n    pfnGetMemoryAccessPropertiesCb::ze_pfnDeviceGetMemoryAccessPropertiesCb_t\n    pfnGetCachePropertiesCb::ze_pfnDeviceGetCachePropertiesCb_t\n    pfnGetImagePropertiesCb::ze_pfnDeviceGetImagePropertiesCb_t\n    pfnGetExternalMemoryPropertiesCb::ze_pfnDeviceGetExternalMemoryPropertiesCb_t\n    pfnGetP2PPropertiesCb::ze_pfnDeviceGetP2PPropertiesCb_t\n    pfnCanAccessPeerCb::ze_pfnDeviceCanAccessPeerCb_t\n    pfnGetStatusCb::ze_pfnDeviceGetStatusCb_t\nend\n\nconst ze_device_callbacks_t = _ze_device_callbacks_t\n\nstruct _ze_context_create_params_t\n    phDriver::Ptr{ze_driver_handle_t}\n    pdesc::Ptr{Ptr{ze_context_desc_t}}\n    pphContext::Ptr{Ptr{ze_context_handle_t}}\nend\n\nconst ze_context_create_params_t = _ze_context_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextCreateCb_t ) ( ze_context_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_context_destroy_params_t\n    phContext::Ptr{ze_context_handle_t}\nend\n\nconst ze_context_destroy_params_t = _ze_context_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextDestroyCb_t ) ( ze_context_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_context_get_status_params_t\n    phContext::Ptr{ze_context_handle_t}\nend\n\nconst ze_context_get_status_params_t = _ze_context_get_status_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextGetStatusCb_t ) ( ze_context_get_status_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextGetStatusCb_t = Ptr{Cvoid}\n\nstruct _ze_context_system_barrier_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\nend\n\nconst ze_context_system_barrier_params_t = _ze_context_system_barrier_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextSystemBarrierCb_t ) ( ze_context_system_barrier_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextSystemBarrierCb_t = Ptr{Cvoid}\n\nstruct _ze_context_make_memory_resident_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\nend\n\nconst ze_context_make_memory_resident_params_t = _ze_context_make_memory_resident_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextMakeMemoryResidentCb_t ) ( ze_context_make_memory_resident_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextMakeMemoryResidentCb_t = Ptr{Cvoid}\n\nstruct _ze_context_evict_memory_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\nend\n\nconst ze_context_evict_memory_params_t = _ze_context_evict_memory_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextEvictMemoryCb_t ) ( ze_context_evict_memory_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextEvictMemoryCb_t = Ptr{Cvoid}\n\nstruct _ze_context_make_image_resident_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    phImage::Ptr{ze_image_handle_t}\nend\n\nconst ze_context_make_image_resident_params_t = _ze_context_make_image_resident_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextMakeImageResidentCb_t ) ( ze_context_make_image_resident_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextMakeImageResidentCb_t = Ptr{Cvoid}\n\nstruct _ze_context_evict_image_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    phImage::Ptr{ze_image_handle_t}\nend\n\nconst ze_context_evict_image_params_t = _ze_context_evict_image_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnContextEvictImageCb_t ) ( ze_context_evict_image_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnContextEvictImageCb_t = Ptr{Cvoid}\n\nstruct _ze_context_callbacks_t\n    pfnCreateCb::ze_pfnContextCreateCb_t\n    pfnDestroyCb::ze_pfnContextDestroyCb_t\n    pfnGetStatusCb::ze_pfnContextGetStatusCb_t\n    pfnSystemBarrierCb::ze_pfnContextSystemBarrierCb_t\n    pfnMakeMemoryResidentCb::ze_pfnContextMakeMemoryResidentCb_t\n    pfnEvictMemoryCb::ze_pfnContextEvictMemoryCb_t\n    pfnMakeImageResidentCb::ze_pfnContextMakeImageResidentCb_t\n    pfnEvictImageCb::ze_pfnContextEvictImageCb_t\nend\n\nconst ze_context_callbacks_t = _ze_context_callbacks_t\n\nstruct _ze_command_queue_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_command_queue_desc_t}}\n    pphCommandQueue::Ptr{Ptr{ze_command_queue_handle_t}}\nend\n\nconst ze_command_queue_create_params_t = _ze_command_queue_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandQueueCreateCb_t ) ( ze_command_queue_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandQueueCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_command_queue_destroy_params_t\n    phCommandQueue::Ptr{ze_command_queue_handle_t}\nend\n\nconst ze_command_queue_destroy_params_t = _ze_command_queue_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandQueueDestroyCb_t ) ( ze_command_queue_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandQueueDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_command_queue_execute_command_lists_params_t\n    phCommandQueue::Ptr{ze_command_queue_handle_t}\n    pnumCommandLists::Ptr{UInt32}\n    pphCommandLists::Ptr{Ptr{ze_command_list_handle_t}}\n    phFence::Ptr{ze_fence_handle_t}\nend\n\nconst ze_command_queue_execute_command_lists_params_t = _ze_command_queue_execute_command_lists_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandQueueExecuteCommandListsCb_t ) ( ze_command_queue_execute_command_lists_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandQueueExecuteCommandListsCb_t = Ptr{Cvoid}\n\nstruct _ze_command_queue_synchronize_params_t\n    phCommandQueue::Ptr{ze_command_queue_handle_t}\n    ptimeout::Ptr{UInt64}\nend\n\nconst ze_command_queue_synchronize_params_t = _ze_command_queue_synchronize_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandQueueSynchronizeCb_t ) ( ze_command_queue_synchronize_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandQueueSynchronizeCb_t = Ptr{Cvoid}\n\nstruct _ze_command_queue_callbacks_t\n    pfnCreateCb::ze_pfnCommandQueueCreateCb_t\n    pfnDestroyCb::ze_pfnCommandQueueDestroyCb_t\n    pfnExecuteCommandListsCb::ze_pfnCommandQueueExecuteCommandListsCb_t\n    pfnSynchronizeCb::ze_pfnCommandQueueSynchronizeCb_t\nend\n\nconst ze_command_queue_callbacks_t = _ze_command_queue_callbacks_t\n\nstruct _ze_command_list_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_command_list_desc_t}}\n    pphCommandList::Ptr{Ptr{ze_command_list_handle_t}}\nend\n\nconst ze_command_list_create_params_t = _ze_command_list_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListCreateCb_t ) ( ze_command_list_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_create_immediate_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    paltdesc::Ptr{Ptr{ze_command_queue_desc_t}}\n    pphCommandList::Ptr{Ptr{ze_command_list_handle_t}}\nend\n\nconst ze_command_list_create_immediate_params_t = _ze_command_list_create_immediate_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListCreateImmediateCb_t ) ( ze_command_list_create_immediate_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListCreateImmediateCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_destroy_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\nend\n\nconst ze_command_list_destroy_params_t = _ze_command_list_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListDestroyCb_t ) ( ze_command_list_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_close_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\nend\n\nconst ze_command_list_close_params_t = _ze_command_list_close_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListCloseCb_t ) ( ze_command_list_close_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListCloseCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_reset_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\nend\n\nconst ze_command_list_reset_params_t = _ze_command_list_reset_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListResetCb_t ) ( ze_command_list_reset_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListResetCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_write_global_timestamp_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pdstptr::Ptr{Ptr{UInt64}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_write_global_timestamp_params_t = _ze_command_list_append_write_global_timestamp_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendWriteGlobalTimestampCb_t ) ( ze_command_list_append_write_global_timestamp_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendWriteGlobalTimestampCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_barrier_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_barrier_params_t = _ze_command_list_append_barrier_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendBarrierCb_t ) ( ze_command_list_append_barrier_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendBarrierCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_ranges_barrier_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pnumRanges::Ptr{UInt32}\n    ppRangeSizes::Ptr{Ptr{Csize_t}}\n    ppRanges::Ptr{Ptr{Ptr{Cvoid}}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_memory_ranges_barrier_params_t = _ze_command_list_append_memory_ranges_barrier_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryRangesBarrierCb_t ) ( ze_command_list_append_memory_ranges_barrier_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryRangesBarrierCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_copy_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pdstptr::Ptr{Ptr{Cvoid}}\n    psrcptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_memory_copy_params_t = _ze_command_list_append_memory_copy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryCopyCb_t ) ( ze_command_list_append_memory_copy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryCopyCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_fill_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    ppattern::Ptr{Ptr{Cvoid}}\n    ppattern_size::Ptr{Csize_t}\n    psize::Ptr{Csize_t}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_memory_fill_params_t = _ze_command_list_append_memory_fill_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryFillCb_t ) ( ze_command_list_append_memory_fill_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryFillCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_copy_region_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pdstptr::Ptr{Ptr{Cvoid}}\n    pdstRegion::Ptr{Ptr{ze_copy_region_t}}\n    pdstPitch::Ptr{UInt32}\n    pdstSlicePitch::Ptr{UInt32}\n    psrcptr::Ptr{Ptr{Cvoid}}\n    psrcRegion::Ptr{Ptr{ze_copy_region_t}}\n    psrcPitch::Ptr{UInt32}\n    psrcSlicePitch::Ptr{UInt32}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_memory_copy_region_params_t = _ze_command_list_append_memory_copy_region_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryCopyRegionCb_t ) ( ze_command_list_append_memory_copy_region_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryCopyRegionCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_copy_from_context_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pdstptr::Ptr{Ptr{Cvoid}}\n    phContextSrc::Ptr{ze_context_handle_t}\n    psrcptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_memory_copy_from_context_params_t = _ze_command_list_append_memory_copy_from_context_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryCopyFromContextCb_t ) ( ze_command_list_append_memory_copy_from_context_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryCopyFromContextCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_image_copy_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phDstImage::Ptr{ze_image_handle_t}\n    phSrcImage::Ptr{ze_image_handle_t}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_image_copy_params_t = _ze_command_list_append_image_copy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendImageCopyCb_t ) ( ze_command_list_append_image_copy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendImageCopyCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_image_copy_region_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phDstImage::Ptr{ze_image_handle_t}\n    phSrcImage::Ptr{ze_image_handle_t}\n    ppDstRegion::Ptr{Ptr{ze_image_region_t}}\n    ppSrcRegion::Ptr{Ptr{ze_image_region_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_image_copy_region_params_t = _ze_command_list_append_image_copy_region_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendImageCopyRegionCb_t ) ( ze_command_list_append_image_copy_region_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendImageCopyRegionCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_image_copy_to_memory_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pdstptr::Ptr{Ptr{Cvoid}}\n    phSrcImage::Ptr{ze_image_handle_t}\n    ppSrcRegion::Ptr{Ptr{ze_image_region_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_image_copy_to_memory_params_t = _ze_command_list_append_image_copy_to_memory_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendImageCopyToMemoryCb_t ) ( ze_command_list_append_image_copy_to_memory_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendImageCopyToMemoryCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_image_copy_from_memory_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phDstImage::Ptr{ze_image_handle_t}\n    psrcptr::Ptr{Ptr{Cvoid}}\n    ppDstRegion::Ptr{Ptr{ze_image_region_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_image_copy_from_memory_params_t = _ze_command_list_append_image_copy_from_memory_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendImageCopyFromMemoryCb_t ) ( ze_command_list_append_image_copy_from_memory_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendImageCopyFromMemoryCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_memory_prefetch_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\nend\n\nconst ze_command_list_append_memory_prefetch_params_t = _ze_command_list_append_memory_prefetch_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemoryPrefetchCb_t ) ( ze_command_list_append_memory_prefetch_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemoryPrefetchCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_mem_advise_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    padvice::Ptr{ze_memory_advice_t}\nend\n\nconst ze_command_list_append_mem_advise_params_t = _ze_command_list_append_mem_advise_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendMemAdviseCb_t ) ( ze_command_list_append_mem_advise_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendMemAdviseCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_signal_event_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_command_list_append_signal_event_params_t = _ze_command_list_append_signal_event_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendSignalEventCb_t ) ( ze_command_list_append_signal_event_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendSignalEventCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_wait_on_events_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pnumEvents::Ptr{UInt32}\n    pphEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_wait_on_events_params_t = _ze_command_list_append_wait_on_events_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendWaitOnEventsCb_t ) ( ze_command_list_append_wait_on_events_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendWaitOnEventsCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_event_reset_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_command_list_append_event_reset_params_t = _ze_command_list_append_event_reset_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendEventResetCb_t ) ( ze_command_list_append_event_reset_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendEventResetCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_query_kernel_timestamps_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pnumEvents::Ptr{UInt32}\n    pphEvents::Ptr{Ptr{ze_event_handle_t}}\n    pdstptr::Ptr{Ptr{Cvoid}}\n    ppOffsets::Ptr{Ptr{Csize_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_query_kernel_timestamps_params_t = _ze_command_list_append_query_kernel_timestamps_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendQueryKernelTimestampsCb_t ) ( ze_command_list_append_query_kernel_timestamps_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendQueryKernelTimestampsCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_launch_kernel_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppLaunchFuncArgs::Ptr{Ptr{ze_group_count_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_launch_kernel_params_t = _ze_command_list_append_launch_kernel_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendLaunchKernelCb_t ) ( ze_command_list_append_launch_kernel_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendLaunchKernelCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_launch_cooperative_kernel_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppLaunchFuncArgs::Ptr{Ptr{ze_group_count_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_launch_cooperative_kernel_params_t = _ze_command_list_append_launch_cooperative_kernel_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendLaunchCooperativeKernelCb_t ) ( ze_command_list_append_launch_cooperative_kernel_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendLaunchCooperativeKernelCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_launch_kernel_indirect_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppLaunchArgumentsBuffer::Ptr{Ptr{ze_group_count_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_launch_kernel_indirect_params_t = _ze_command_list_append_launch_kernel_indirect_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendLaunchKernelIndirectCb_t ) ( ze_command_list_append_launch_kernel_indirect_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendLaunchKernelIndirectCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_append_launch_multiple_kernels_indirect_params_t\n    phCommandList::Ptr{ze_command_list_handle_t}\n    pnumKernels::Ptr{UInt32}\n    pphKernels::Ptr{Ptr{ze_kernel_handle_t}}\n    ppCountBuffer::Ptr{Ptr{UInt32}}\n    ppLaunchArgumentsBuffer::Ptr{Ptr{ze_group_count_t}}\n    phSignalEvent::Ptr{ze_event_handle_t}\n    pnumWaitEvents::Ptr{UInt32}\n    pphWaitEvents::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_command_list_append_launch_multiple_kernels_indirect_params_t = _ze_command_list_append_launch_multiple_kernels_indirect_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnCommandListAppendLaunchMultipleKernelsIndirectCb_t ) ( ze_command_list_append_launch_multiple_kernels_indirect_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnCommandListAppendLaunchMultipleKernelsIndirectCb_t = Ptr{Cvoid}\n\nstruct _ze_command_list_callbacks_t\n    pfnCreateCb::ze_pfnCommandListCreateCb_t\n    pfnCreateImmediateCb::ze_pfnCommandListCreateImmediateCb_t\n    pfnDestroyCb::ze_pfnCommandListDestroyCb_t\n    pfnCloseCb::ze_pfnCommandListCloseCb_t\n    pfnResetCb::ze_pfnCommandListResetCb_t\n    pfnAppendWriteGlobalTimestampCb::ze_pfnCommandListAppendWriteGlobalTimestampCb_t\n    pfnAppendBarrierCb::ze_pfnCommandListAppendBarrierCb_t\n    pfnAppendMemoryRangesBarrierCb::ze_pfnCommandListAppendMemoryRangesBarrierCb_t\n    pfnAppendMemoryCopyCb::ze_pfnCommandListAppendMemoryCopyCb_t\n    pfnAppendMemoryFillCb::ze_pfnCommandListAppendMemoryFillCb_t\n    pfnAppendMemoryCopyRegionCb::ze_pfnCommandListAppendMemoryCopyRegionCb_t\n    pfnAppendMemoryCopyFromContextCb::ze_pfnCommandListAppendMemoryCopyFromContextCb_t\n    pfnAppendImageCopyCb::ze_pfnCommandListAppendImageCopyCb_t\n    pfnAppendImageCopyRegionCb::ze_pfnCommandListAppendImageCopyRegionCb_t\n    pfnAppendImageCopyToMemoryCb::ze_pfnCommandListAppendImageCopyToMemoryCb_t\n    pfnAppendImageCopyFromMemoryCb::ze_pfnCommandListAppendImageCopyFromMemoryCb_t\n    pfnAppendMemoryPrefetchCb::ze_pfnCommandListAppendMemoryPrefetchCb_t\n    pfnAppendMemAdviseCb::ze_pfnCommandListAppendMemAdviseCb_t\n    pfnAppendSignalEventCb::ze_pfnCommandListAppendSignalEventCb_t\n    pfnAppendWaitOnEventsCb::ze_pfnCommandListAppendWaitOnEventsCb_t\n    pfnAppendEventResetCb::ze_pfnCommandListAppendEventResetCb_t\n    pfnAppendQueryKernelTimestampsCb::ze_pfnCommandListAppendQueryKernelTimestampsCb_t\n    pfnAppendLaunchKernelCb::ze_pfnCommandListAppendLaunchKernelCb_t\n    pfnAppendLaunchCooperativeKernelCb::ze_pfnCommandListAppendLaunchCooperativeKernelCb_t\n    pfnAppendLaunchKernelIndirectCb::ze_pfnCommandListAppendLaunchKernelIndirectCb_t\n    pfnAppendLaunchMultipleKernelsIndirectCb::ze_pfnCommandListAppendLaunchMultipleKernelsIndirectCb_t\nend\n\nconst ze_command_list_callbacks_t = _ze_command_list_callbacks_t\n\nstruct _ze_image_get_properties_params_t\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_image_desc_t}}\n    ppImageProperties::Ptr{Ptr{ze_image_properties_t}}\nend\n\nconst ze_image_get_properties_params_t = _ze_image_get_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnImageGetPropertiesCb_t ) ( ze_image_get_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnImageGetPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_image_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_image_desc_t}}\n    pphImage::Ptr{Ptr{ze_image_handle_t}}\nend\n\nconst ze_image_create_params_t = _ze_image_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnImageCreateCb_t ) ( ze_image_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnImageCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_image_destroy_params_t\n    phImage::Ptr{ze_image_handle_t}\nend\n\nconst ze_image_destroy_params_t = _ze_image_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnImageDestroyCb_t ) ( ze_image_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnImageDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_image_callbacks_t\n    pfnGetPropertiesCb::ze_pfnImageGetPropertiesCb_t\n    pfnCreateCb::ze_pfnImageCreateCb_t\n    pfnDestroyCb::ze_pfnImageDestroyCb_t\nend\n\nconst ze_image_callbacks_t = _ze_image_callbacks_t\n\nstruct _ze_mem_alloc_shared_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pdevice_desc::Ptr{Ptr{ze_device_mem_alloc_desc_t}}\n    phost_desc::Ptr{Ptr{ze_host_mem_alloc_desc_t}}\n    psize::Ptr{Csize_t}\n    palignment::Ptr{Csize_t}\n    phDevice::Ptr{ze_device_handle_t}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_mem_alloc_shared_params_t = _ze_mem_alloc_shared_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemAllocSharedCb_t ) ( ze_mem_alloc_shared_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemAllocSharedCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_alloc_device_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pdevice_desc::Ptr{Ptr{ze_device_mem_alloc_desc_t}}\n    psize::Ptr{Csize_t}\n    palignment::Ptr{Csize_t}\n    phDevice::Ptr{ze_device_handle_t}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_mem_alloc_device_params_t = _ze_mem_alloc_device_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemAllocDeviceCb_t ) ( ze_mem_alloc_device_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemAllocDeviceCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_alloc_host_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phost_desc::Ptr{Ptr{ze_host_mem_alloc_desc_t}}\n    psize::Ptr{Csize_t}\n    palignment::Ptr{Csize_t}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_mem_alloc_host_params_t = _ze_mem_alloc_host_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemAllocHostCb_t ) ( ze_mem_alloc_host_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemAllocHostCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_free_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\nend\n\nconst ze_mem_free_params_t = _ze_mem_free_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemFreeCb_t ) ( ze_mem_free_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemFreeCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_get_alloc_properties_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    ppMemAllocProperties::Ptr{Ptr{ze_memory_allocation_properties_t}}\n    pphDevice::Ptr{Ptr{ze_device_handle_t}}\nend\n\nconst ze_mem_get_alloc_properties_params_t = _ze_mem_get_alloc_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemGetAllocPropertiesCb_t ) ( ze_mem_get_alloc_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemGetAllocPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_get_address_range_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    ppBase::Ptr{Ptr{Ptr{Cvoid}}}\n    ppSize::Ptr{Ptr{Csize_t}}\nend\n\nconst ze_mem_get_address_range_params_t = _ze_mem_get_address_range_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemGetAddressRangeCb_t ) ( ze_mem_get_address_range_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemGetAddressRangeCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_get_ipc_handle_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    ppIpcHandle::Ptr{Ptr{ze_ipc_mem_handle_t}}\nend\n\nconst ze_mem_get_ipc_handle_params_t = _ze_mem_get_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemGetIpcHandleCb_t ) ( ze_mem_get_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemGetIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_open_ipc_handle_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    phandle::Ptr{ze_ipc_mem_handle_t}\n    pflags::Ptr{ze_ipc_memory_flags_t}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_mem_open_ipc_handle_params_t = _ze_mem_open_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemOpenIpcHandleCb_t ) ( ze_mem_open_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemOpenIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_close_ipc_handle_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\nend\n\nconst ze_mem_close_ipc_handle_params_t = _ze_mem_close_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnMemCloseIpcHandleCb_t ) ( ze_mem_close_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnMemCloseIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_mem_callbacks_t\n    pfnAllocSharedCb::ze_pfnMemAllocSharedCb_t\n    pfnAllocDeviceCb::ze_pfnMemAllocDeviceCb_t\n    pfnAllocHostCb::ze_pfnMemAllocHostCb_t\n    pfnFreeCb::ze_pfnMemFreeCb_t\n    pfnGetAllocPropertiesCb::ze_pfnMemGetAllocPropertiesCb_t\n    pfnGetAddressRangeCb::ze_pfnMemGetAddressRangeCb_t\n    pfnGetIpcHandleCb::ze_pfnMemGetIpcHandleCb_t\n    pfnOpenIpcHandleCb::ze_pfnMemOpenIpcHandleCb_t\n    pfnCloseIpcHandleCb::ze_pfnMemCloseIpcHandleCb_t\nend\n\nconst ze_mem_callbacks_t = _ze_mem_callbacks_t\n\nstruct _ze_fence_create_params_t\n    phCommandQueue::Ptr{ze_command_queue_handle_t}\n    pdesc::Ptr{Ptr{ze_fence_desc_t}}\n    pphFence::Ptr{Ptr{ze_fence_handle_t}}\nend\n\nconst ze_fence_create_params_t = _ze_fence_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnFenceCreateCb_t ) ( ze_fence_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnFenceCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_fence_destroy_params_t\n    phFence::Ptr{ze_fence_handle_t}\nend\n\nconst ze_fence_destroy_params_t = _ze_fence_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnFenceDestroyCb_t ) ( ze_fence_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnFenceDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_fence_host_synchronize_params_t\n    phFence::Ptr{ze_fence_handle_t}\n    ptimeout::Ptr{UInt64}\nend\n\nconst ze_fence_host_synchronize_params_t = _ze_fence_host_synchronize_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnFenceHostSynchronizeCb_t ) ( ze_fence_host_synchronize_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnFenceHostSynchronizeCb_t = Ptr{Cvoid}\n\nstruct _ze_fence_query_status_params_t\n    phFence::Ptr{ze_fence_handle_t}\nend\n\nconst ze_fence_query_status_params_t = _ze_fence_query_status_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnFenceQueryStatusCb_t ) ( ze_fence_query_status_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnFenceQueryStatusCb_t = Ptr{Cvoid}\n\nstruct _ze_fence_reset_params_t\n    phFence::Ptr{ze_fence_handle_t}\nend\n\nconst ze_fence_reset_params_t = _ze_fence_reset_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnFenceResetCb_t ) ( ze_fence_reset_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnFenceResetCb_t = Ptr{Cvoid}\n\nstruct _ze_fence_callbacks_t\n    pfnCreateCb::ze_pfnFenceCreateCb_t\n    pfnDestroyCb::ze_pfnFenceDestroyCb_t\n    pfnHostSynchronizeCb::ze_pfnFenceHostSynchronizeCb_t\n    pfnQueryStatusCb::ze_pfnFenceQueryStatusCb_t\n    pfnResetCb::ze_pfnFenceResetCb_t\nend\n\nconst ze_fence_callbacks_t = _ze_fence_callbacks_t\n\nstruct _ze_event_pool_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pdesc::Ptr{Ptr{ze_event_pool_desc_t}}\n    pnumDevices::Ptr{UInt32}\n    pphDevices::Ptr{Ptr{ze_device_handle_t}}\n    pphEventPool::Ptr{Ptr{ze_event_pool_handle_t}}\nend\n\nconst ze_event_pool_create_params_t = _ze_event_pool_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventPoolCreateCb_t ) ( ze_event_pool_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventPoolCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_event_pool_destroy_params_t\n    phEventPool::Ptr{ze_event_pool_handle_t}\nend\n\nconst ze_event_pool_destroy_params_t = _ze_event_pool_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventPoolDestroyCb_t ) ( ze_event_pool_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventPoolDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_event_pool_get_ipc_handle_params_t\n    phEventPool::Ptr{ze_event_pool_handle_t}\n    pphIpc::Ptr{Ptr{ze_ipc_event_pool_handle_t}}\nend\n\nconst ze_event_pool_get_ipc_handle_params_t = _ze_event_pool_get_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventPoolGetIpcHandleCb_t ) ( ze_event_pool_get_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventPoolGetIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_event_pool_open_ipc_handle_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phIpc::Ptr{ze_ipc_event_pool_handle_t}\n    pphEventPool::Ptr{Ptr{ze_event_pool_handle_t}}\nend\n\nconst ze_event_pool_open_ipc_handle_params_t = _ze_event_pool_open_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventPoolOpenIpcHandleCb_t ) ( ze_event_pool_open_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventPoolOpenIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_event_pool_close_ipc_handle_params_t\n    phEventPool::Ptr{ze_event_pool_handle_t}\nend\n\nconst ze_event_pool_close_ipc_handle_params_t = _ze_event_pool_close_ipc_handle_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventPoolCloseIpcHandleCb_t ) ( ze_event_pool_close_ipc_handle_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventPoolCloseIpcHandleCb_t = Ptr{Cvoid}\n\nstruct _ze_event_pool_callbacks_t\n    pfnCreateCb::ze_pfnEventPoolCreateCb_t\n    pfnDestroyCb::ze_pfnEventPoolDestroyCb_t\n    pfnGetIpcHandleCb::ze_pfnEventPoolGetIpcHandleCb_t\n    pfnOpenIpcHandleCb::ze_pfnEventPoolOpenIpcHandleCb_t\n    pfnCloseIpcHandleCb::ze_pfnEventPoolCloseIpcHandleCb_t\nend\n\nconst ze_event_pool_callbacks_t = _ze_event_pool_callbacks_t\n\nstruct _ze_event_create_params_t\n    phEventPool::Ptr{ze_event_pool_handle_t}\n    pdesc::Ptr{Ptr{ze_event_desc_t}}\n    pphEvent::Ptr{Ptr{ze_event_handle_t}}\nend\n\nconst ze_event_create_params_t = _ze_event_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventCreateCb_t ) ( ze_event_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_event_destroy_params_t\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_event_destroy_params_t = _ze_event_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventDestroyCb_t ) ( ze_event_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_event_host_signal_params_t\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_event_host_signal_params_t = _ze_event_host_signal_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventHostSignalCb_t ) ( ze_event_host_signal_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventHostSignalCb_t = Ptr{Cvoid}\n\nstruct _ze_event_host_synchronize_params_t\n    phEvent::Ptr{ze_event_handle_t}\n    ptimeout::Ptr{UInt64}\nend\n\nconst ze_event_host_synchronize_params_t = _ze_event_host_synchronize_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventHostSynchronizeCb_t ) ( ze_event_host_synchronize_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventHostSynchronizeCb_t = Ptr{Cvoid}\n\nstruct _ze_event_query_status_params_t\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_event_query_status_params_t = _ze_event_query_status_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventQueryStatusCb_t ) ( ze_event_query_status_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventQueryStatusCb_t = Ptr{Cvoid}\n\nstruct _ze_event_host_reset_params_t\n    phEvent::Ptr{ze_event_handle_t}\nend\n\nconst ze_event_host_reset_params_t = _ze_event_host_reset_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventHostResetCb_t ) ( ze_event_host_reset_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventHostResetCb_t = Ptr{Cvoid}\n\nstruct _ze_event_query_kernel_timestamp_params_t\n    phEvent::Ptr{ze_event_handle_t}\n    pdstptr::Ptr{Ptr{ze_kernel_timestamp_result_t}}\nend\n\nconst ze_event_query_kernel_timestamp_params_t = _ze_event_query_kernel_timestamp_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnEventQueryKernelTimestampCb_t ) ( ze_event_query_kernel_timestamp_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnEventQueryKernelTimestampCb_t = Ptr{Cvoid}\n\nstruct _ze_event_callbacks_t\n    pfnCreateCb::ze_pfnEventCreateCb_t\n    pfnDestroyCb::ze_pfnEventDestroyCb_t\n    pfnHostSignalCb::ze_pfnEventHostSignalCb_t\n    pfnHostSynchronizeCb::ze_pfnEventHostSynchronizeCb_t\n    pfnQueryStatusCb::ze_pfnEventQueryStatusCb_t\n    pfnHostResetCb::ze_pfnEventHostResetCb_t\n    pfnQueryKernelTimestampCb::ze_pfnEventQueryKernelTimestampCb_t\nend\n\nconst ze_event_callbacks_t = _ze_event_callbacks_t\n\nstruct _ze_module_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_module_desc_t}}\n    pphModule::Ptr{Ptr{ze_module_handle_t}}\n    pphBuildLog::Ptr{Ptr{ze_module_build_log_handle_t}}\nend\n\nconst ze_module_create_params_t = _ze_module_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleCreateCb_t ) ( ze_module_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_module_destroy_params_t\n    phModule::Ptr{ze_module_handle_t}\nend\n\nconst ze_module_destroy_params_t = _ze_module_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleDestroyCb_t ) ( ze_module_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_module_dynamic_link_params_t\n    pnumModules::Ptr{UInt32}\n    pphModules::Ptr{Ptr{ze_module_handle_t}}\n    pphLinkLog::Ptr{Ptr{ze_module_build_log_handle_t}}\nend\n\nconst ze_module_dynamic_link_params_t = _ze_module_dynamic_link_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleDynamicLinkCb_t ) ( ze_module_dynamic_link_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleDynamicLinkCb_t = Ptr{Cvoid}\n\nstruct _ze_module_get_native_binary_params_t\n    phModule::Ptr{ze_module_handle_t}\n    ppSize::Ptr{Ptr{Csize_t}}\n    ppModuleNativeBinary::Ptr{Ptr{UInt8}}\nend\n\nconst ze_module_get_native_binary_params_t = _ze_module_get_native_binary_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleGetNativeBinaryCb_t ) ( ze_module_get_native_binary_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleGetNativeBinaryCb_t = Ptr{Cvoid}\n\nstruct _ze_module_get_global_pointer_params_t\n    phModule::Ptr{ze_module_handle_t}\n    ppGlobalName::Ptr{Ptr{Cchar}}\n    ppSize::Ptr{Ptr{Csize_t}}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_module_get_global_pointer_params_t = _ze_module_get_global_pointer_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleGetGlobalPointerCb_t ) ( ze_module_get_global_pointer_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleGetGlobalPointerCb_t = Ptr{Cvoid}\n\nstruct _ze_module_get_kernel_names_params_t\n    phModule::Ptr{ze_module_handle_t}\n    ppCount::Ptr{Ptr{UInt32}}\n    ppNames::Ptr{Ptr{Ptr{Cchar}}}\nend\n\nconst ze_module_get_kernel_names_params_t = _ze_module_get_kernel_names_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleGetKernelNamesCb_t ) ( ze_module_get_kernel_names_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleGetKernelNamesCb_t = Ptr{Cvoid}\n\nstruct _ze_module_get_properties_params_t\n    phModule::Ptr{ze_module_handle_t}\n    ppModuleProperties::Ptr{Ptr{ze_module_properties_t}}\nend\n\nconst ze_module_get_properties_params_t = _ze_module_get_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleGetPropertiesCb_t ) ( ze_module_get_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleGetPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_module_get_function_pointer_params_t\n    phModule::Ptr{ze_module_handle_t}\n    ppFunctionName::Ptr{Ptr{Cchar}}\n    ppfnFunction::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_module_get_function_pointer_params_t = _ze_module_get_function_pointer_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleGetFunctionPointerCb_t ) ( ze_module_get_function_pointer_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleGetFunctionPointerCb_t = Ptr{Cvoid}\n\nstruct _ze_module_callbacks_t\n    pfnCreateCb::ze_pfnModuleCreateCb_t\n    pfnDestroyCb::ze_pfnModuleDestroyCb_t\n    pfnDynamicLinkCb::ze_pfnModuleDynamicLinkCb_t\n    pfnGetNativeBinaryCb::ze_pfnModuleGetNativeBinaryCb_t\n    pfnGetGlobalPointerCb::ze_pfnModuleGetGlobalPointerCb_t\n    pfnGetKernelNamesCb::ze_pfnModuleGetKernelNamesCb_t\n    pfnGetPropertiesCb::ze_pfnModuleGetPropertiesCb_t\n    pfnGetFunctionPointerCb::ze_pfnModuleGetFunctionPointerCb_t\nend\n\nconst ze_module_callbacks_t = _ze_module_callbacks_t\n\nstruct _ze_module_build_log_destroy_params_t\n    phModuleBuildLog::Ptr{ze_module_build_log_handle_t}\nend\n\nconst ze_module_build_log_destroy_params_t = _ze_module_build_log_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleBuildLogDestroyCb_t ) ( ze_module_build_log_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleBuildLogDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_module_build_log_get_string_params_t\n    phModuleBuildLog::Ptr{ze_module_build_log_handle_t}\n    ppSize::Ptr{Ptr{Csize_t}}\n    ppBuildLog::Ptr{Ptr{Cchar}}\nend\n\nconst ze_module_build_log_get_string_params_t = _ze_module_build_log_get_string_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnModuleBuildLogGetStringCb_t ) ( ze_module_build_log_get_string_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnModuleBuildLogGetStringCb_t = Ptr{Cvoid}\n\nstruct _ze_module_build_log_callbacks_t\n    pfnDestroyCb::ze_pfnModuleBuildLogDestroyCb_t\n    pfnGetStringCb::ze_pfnModuleBuildLogGetStringCb_t\nend\n\nconst ze_module_build_log_callbacks_t = _ze_module_build_log_callbacks_t\n\nstruct _ze_kernel_create_params_t\n    phModule::Ptr{ze_module_handle_t}\n    pdesc::Ptr{Ptr{ze_kernel_desc_t}}\n    pphKernel::Ptr{Ptr{ze_kernel_handle_t}}\nend\n\nconst ze_kernel_create_params_t = _ze_kernel_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelCreateCb_t ) ( ze_kernel_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_destroy_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\nend\n\nconst ze_kernel_destroy_params_t = _ze_kernel_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelDestroyCb_t ) ( ze_kernel_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_set_cache_config_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    pflags::Ptr{ze_cache_config_flags_t}\nend\n\nconst ze_kernel_set_cache_config_params_t = _ze_kernel_set_cache_config_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSetCacheConfigCb_t ) ( ze_kernel_set_cache_config_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSetCacheConfigCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_set_group_size_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    pgroupSizeX::Ptr{UInt32}\n    pgroupSizeY::Ptr{UInt32}\n    pgroupSizeZ::Ptr{UInt32}\nend\n\nconst ze_kernel_set_group_size_params_t = _ze_kernel_set_group_size_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSetGroupSizeCb_t ) ( ze_kernel_set_group_size_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSetGroupSizeCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_suggest_group_size_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    pglobalSizeX::Ptr{UInt32}\n    pglobalSizeY::Ptr{UInt32}\n    pglobalSizeZ::Ptr{UInt32}\n    pgroupSizeX::Ptr{Ptr{UInt32}}\n    pgroupSizeY::Ptr{Ptr{UInt32}}\n    pgroupSizeZ::Ptr{Ptr{UInt32}}\nend\n\nconst ze_kernel_suggest_group_size_params_t = _ze_kernel_suggest_group_size_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSuggestGroupSizeCb_t ) ( ze_kernel_suggest_group_size_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSuggestGroupSizeCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_suggest_max_cooperative_group_count_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    ptotalGroupCount::Ptr{Ptr{UInt32}}\nend\n\nconst ze_kernel_suggest_max_cooperative_group_count_params_t = _ze_kernel_suggest_max_cooperative_group_count_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSuggestMaxCooperativeGroupCountCb_t ) ( ze_kernel_suggest_max_cooperative_group_count_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSuggestMaxCooperativeGroupCountCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_set_argument_value_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    pargIndex::Ptr{UInt32}\n    pargSize::Ptr{Csize_t}\n    ppArgValue::Ptr{Ptr{Cvoid}}\nend\n\nconst ze_kernel_set_argument_value_params_t = _ze_kernel_set_argument_value_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSetArgumentValueCb_t ) ( ze_kernel_set_argument_value_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSetArgumentValueCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_set_indirect_access_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    pflags::Ptr{ze_kernel_indirect_access_flags_t}\nend\n\nconst ze_kernel_set_indirect_access_params_t = _ze_kernel_set_indirect_access_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelSetIndirectAccessCb_t ) ( ze_kernel_set_indirect_access_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelSetIndirectAccessCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_get_indirect_access_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppFlags::Ptr{Ptr{ze_kernel_indirect_access_flags_t}}\nend\n\nconst ze_kernel_get_indirect_access_params_t = _ze_kernel_get_indirect_access_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelGetIndirectAccessCb_t ) ( ze_kernel_get_indirect_access_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelGetIndirectAccessCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_get_source_attributes_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppSize::Ptr{Ptr{UInt32}}\n    ppString::Ptr{Ptr{Ptr{Cchar}}}\nend\n\nconst ze_kernel_get_source_attributes_params_t = _ze_kernel_get_source_attributes_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelGetSourceAttributesCb_t ) ( ze_kernel_get_source_attributes_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelGetSourceAttributesCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_get_properties_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppKernelProperties::Ptr{Ptr{ze_kernel_properties_t}}\nend\n\nconst ze_kernel_get_properties_params_t = _ze_kernel_get_properties_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelGetPropertiesCb_t ) ( ze_kernel_get_properties_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelGetPropertiesCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_get_name_params_t\n    phKernel::Ptr{ze_kernel_handle_t}\n    ppSize::Ptr{Ptr{Csize_t}}\n    ppName::Ptr{Ptr{Cchar}}\nend\n\nconst ze_kernel_get_name_params_t = _ze_kernel_get_name_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnKernelGetNameCb_t ) ( ze_kernel_get_name_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnKernelGetNameCb_t = Ptr{Cvoid}\n\nstruct _ze_kernel_callbacks_t\n    pfnCreateCb::ze_pfnKernelCreateCb_t\n    pfnDestroyCb::ze_pfnKernelDestroyCb_t\n    pfnSetCacheConfigCb::ze_pfnKernelSetCacheConfigCb_t\n    pfnSetGroupSizeCb::ze_pfnKernelSetGroupSizeCb_t\n    pfnSuggestGroupSizeCb::ze_pfnKernelSuggestGroupSizeCb_t\n    pfnSuggestMaxCooperativeGroupCountCb::ze_pfnKernelSuggestMaxCooperativeGroupCountCb_t\n    pfnSetArgumentValueCb::ze_pfnKernelSetArgumentValueCb_t\n    pfnSetIndirectAccessCb::ze_pfnKernelSetIndirectAccessCb_t\n    pfnGetIndirectAccessCb::ze_pfnKernelGetIndirectAccessCb_t\n    pfnGetSourceAttributesCb::ze_pfnKernelGetSourceAttributesCb_t\n    pfnGetPropertiesCb::ze_pfnKernelGetPropertiesCb_t\n    pfnGetNameCb::ze_pfnKernelGetNameCb_t\nend\n\nconst ze_kernel_callbacks_t = _ze_kernel_callbacks_t\n\nstruct _ze_sampler_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_sampler_desc_t}}\n    pphSampler::Ptr{Ptr{ze_sampler_handle_t}}\nend\n\nconst ze_sampler_create_params_t = _ze_sampler_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnSamplerCreateCb_t ) ( ze_sampler_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnSamplerCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_sampler_destroy_params_t\n    phSampler::Ptr{ze_sampler_handle_t}\nend\n\nconst ze_sampler_destroy_params_t = _ze_sampler_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnSamplerDestroyCb_t ) ( ze_sampler_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnSamplerDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_sampler_callbacks_t\n    pfnCreateCb::ze_pfnSamplerCreateCb_t\n    pfnDestroyCb::ze_pfnSamplerDestroyCb_t\nend\n\nconst ze_sampler_callbacks_t = _ze_sampler_callbacks_t\n\nstruct _ze_physical_mem_create_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    pdesc::Ptr{Ptr{ze_physical_mem_desc_t}}\n    pphPhysicalMemory::Ptr{Ptr{ze_physical_mem_handle_t}}\nend\n\nconst ze_physical_mem_create_params_t = _ze_physical_mem_create_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnPhysicalMemCreateCb_t ) ( ze_physical_mem_create_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnPhysicalMemCreateCb_t = Ptr{Cvoid}\n\nstruct _ze_physical_mem_destroy_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phPhysicalMemory::Ptr{ze_physical_mem_handle_t}\nend\n\nconst ze_physical_mem_destroy_params_t = _ze_physical_mem_destroy_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnPhysicalMemDestroyCb_t ) ( ze_physical_mem_destroy_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnPhysicalMemDestroyCb_t = Ptr{Cvoid}\n\nstruct _ze_physical_mem_callbacks_t\n    pfnCreateCb::ze_pfnPhysicalMemCreateCb_t\n    pfnDestroyCb::ze_pfnPhysicalMemDestroyCb_t\nend\n\nconst ze_physical_mem_callbacks_t = _ze_physical_mem_callbacks_t\n\nstruct _ze_virtual_mem_reserve_params_t\n    phContext::Ptr{ze_context_handle_t}\n    ppStart::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    ppptr::Ptr{Ptr{Ptr{Cvoid}}}\nend\n\nconst ze_virtual_mem_reserve_params_t = _ze_virtual_mem_reserve_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemReserveCb_t ) ( ze_virtual_mem_reserve_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemReserveCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_free_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\nend\n\nconst ze_virtual_mem_free_params_t = _ze_virtual_mem_free_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemFreeCb_t ) ( ze_virtual_mem_free_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemFreeCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_query_page_size_params_t\n    phContext::Ptr{ze_context_handle_t}\n    phDevice::Ptr{ze_device_handle_t}\n    psize::Ptr{Csize_t}\n    ppagesize::Ptr{Ptr{Csize_t}}\nend\n\nconst ze_virtual_mem_query_page_size_params_t = _ze_virtual_mem_query_page_size_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemQueryPageSizeCb_t ) ( ze_virtual_mem_query_page_size_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemQueryPageSizeCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_map_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    phPhysicalMemory::Ptr{ze_physical_mem_handle_t}\n    poffset::Ptr{Csize_t}\n    paccess::Ptr{ze_memory_access_attribute_t}\nend\n\nconst ze_virtual_mem_map_params_t = _ze_virtual_mem_map_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemMapCb_t ) ( ze_virtual_mem_map_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemMapCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_unmap_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\nend\n\nconst ze_virtual_mem_unmap_params_t = _ze_virtual_mem_unmap_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemUnmapCb_t ) ( ze_virtual_mem_unmap_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemUnmapCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_set_access_attribute_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    paccess::Ptr{ze_memory_access_attribute_t}\nend\n\nconst ze_virtual_mem_set_access_attribute_params_t = _ze_virtual_mem_set_access_attribute_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemSetAccessAttributeCb_t ) ( ze_virtual_mem_set_access_attribute_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemSetAccessAttributeCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_get_access_attribute_params_t\n    phContext::Ptr{ze_context_handle_t}\n    pptr::Ptr{Ptr{Cvoid}}\n    psize::Ptr{Csize_t}\n    paccess::Ptr{Ptr{ze_memory_access_attribute_t}}\n    poutSize::Ptr{Ptr{Csize_t}}\nend\n\nconst ze_virtual_mem_get_access_attribute_params_t = _ze_virtual_mem_get_access_attribute_params_t\n\n# typedef void ( ZE_APICALL * ze_pfnVirtualMemGetAccessAttributeCb_t ) ( ze_virtual_mem_get_access_attribute_params_t * params , ze_result_t result , void * pTracerUserData , void * * ppTracerInstanceUserData )\nconst ze_pfnVirtualMemGetAccessAttributeCb_t = Ptr{Cvoid}\n\nstruct _ze_virtual_mem_callbacks_t\n    pfnReserveCb::ze_pfnVirtualMemReserveCb_t\n    pfnFreeCb::ze_pfnVirtualMemFreeCb_t\n    pfnQueryPageSizeCb::ze_pfnVirtualMemQueryPageSizeCb_t\n    pfnMapCb::ze_pfnVirtualMemMapCb_t\n    pfnUnmapCb::ze_pfnVirtualMemUnmapCb_t\n    pfnSetAccessAttributeCb::ze_pfnVirtualMemSetAccessAttributeCb_t\n    pfnGetAccessAttributeCb::ze_pfnVirtualMemGetAccessAttributeCb_t\nend\n\nconst ze_virtual_mem_callbacks_t = _ze_virtual_mem_callbacks_t\n\nstruct _ze_callbacks_t\n    Global::ze_global_callbacks_t\n    Driver::ze_driver_callbacks_t\n    Device::ze_device_callbacks_t\n    Context::ze_context_callbacks_t\n    CommandQueue::ze_command_queue_callbacks_t\n    CommandList::ze_command_list_callbacks_t\n    Fence::ze_fence_callbacks_t\n    EventPool::ze_event_pool_callbacks_t\n    Event::ze_event_callbacks_t\n    Image::ze_image_callbacks_t\n    Module::ze_module_callbacks_t\n    ModuleBuildLog::ze_module_build_log_callbacks_t\n    Kernel::ze_kernel_callbacks_t\n    Sampler::ze_sampler_callbacks_t\n    PhysicalMem::ze_physical_mem_callbacks_t\n    Mem::ze_mem_callbacks_t\n    VirtualMem::ze_virtual_mem_callbacks_t\nend\n\nconst ze_callbacks_t = _ze_callbacks_t\n\n# Skipping MacroDefinition: ZE_APIEXPORT __attribute__ ( ( visibility ( \"default\" ) ) )\n\n# Skipping MacroDefinition: ZE_DLLEXPORT __attribute__ ( ( visibility ( \"default\" ) ) )\n\nconst ZE_MAX_IPC_HANDLE_SIZE = 64\n\nconst ZE_MAX_UUID_SIZE = 16\n\nconst ZE_API_VERSION_CURRENT_M = ZE_MAKE_VERSION(1, 13)\n\nconst ZE_MAX_DRIVER_UUID_SIZE = 16\n\nconst ZE_MAX_EXTENSION_NAME = 256\n\nconst ZE_MAX_DEVICE_UUID_SIZE = 16\n\nconst ZE_MAX_DEVICE_NAME = 256\n\nconst ZE_SUBGROUPSIZE_COUNT = 8\n\nconst ZE_MAX_NATIVE_KERNEL_UUID_SIZE = 16\n\nconst ZE_MAX_KERNEL_UUID_SIZE = 16\n\nconst ZE_MAX_MODULE_UUID_SIZE = 16\n\nconst ZE_MODULE_PROGRAM_EXP_NAME = \"ZE_experimental_module_program\"\n\nconst ZE_RAYTRACING_EXT_NAME = \"ZE_extension_raytracing\"\n\nconst ZE_FLOAT_ATOMICS_EXT_NAME = \"ZE_extension_float_atomics\"\n\nconst ZE_GLOBAL_OFFSET_EXP_NAME = \"ZE_experimental_global_offset\"\n\nconst ZE_RELAXED_ALLOCATION_LIMITS_EXP_NAME = \"ZE_experimental_relaxed_allocation_limits\"\n\nconst ZE_GET_KERNEL_BINARY_EXP_NAME = \"ZE_extension_kernel_binary_exp\"\n\nconst ZE_DRIVER_DDI_HANDLES_EXT_NAME = \"ZE_extension_driver_ddi_handles\"\n\nconst ZE_EXTERNAL_SEMAPHORES_EXTENSION_NAME = \"ZE_extension_external_semaphores\"\n\nconst ZE_CACHELINE_SIZE_EXT_NAME = \"ZE_extension_device_cache_line_size\"\n\nconst ZE_RTAS_EXT_NAME = \"ZE_extension_rtas\"\n\nconst ZE_DEVICE_VECTOR_SIZES_EXT_NAME = \"ZE_extension_device_vector_sizes\"\n\nconst ZE_CACHE_RESERVATION_EXT_NAME = \"ZE_extension_cache_reservation\"\n\nconst ZE_EVENT_QUERY_TIMESTAMPS_EXP_NAME = \"ZE_experimental_event_query_timestamps\"\n\nconst ZE_IMAGE_MEMORY_PROPERTIES_EXP_NAME = \"ZE_experimental_image_memory_properties\"\n\nconst ZE_IMAGE_VIEW_EXT_NAME = \"ZE_extension_image_view\"\n\nconst ZE_IMAGE_VIEW_EXP_NAME = \"ZE_experimental_image_view\"\n\nconst ZE_IMAGE_VIEW_PLANAR_EXT_NAME = \"ZE_extension_image_view_planar\"\n\nconst ZE_IMAGE_VIEW_PLANAR_EXP_NAME = \"ZE_experimental_image_view_planar\"\n\nconst ZE_KERNEL_SCHEDULING_HINTS_EXP_NAME = \"ZE_experimental_scheduling_hints\"\n\nconst ZE_LINKONCE_ODR_EXT_NAME = \"ZE_extension_linkonce_odr\"\n\nconst ZE_CONTEXT_POWER_SAVING_HINT_EXP_NAME = \"ZE_experimental_power_saving_hint\"\n\nconst ZE_SUBGROUPS_EXT_NAME = \"ZE_extension_subgroups\"\n\nconst ZE_EU_COUNT_EXT_NAME = \"ZE_extension_eu_count\"\n\nconst ZE_PCI_PROPERTIES_EXT_NAME = \"ZE_extension_pci_properties\"\n\nconst ZE_SRGB_EXT_NAME = \"ZE_extension_srgb\"\n\nconst ZE_IMAGE_COPY_EXT_NAME = \"ZE_extension_image_copy\"\n\nconst ZE_IMAGE_QUERY_ALLOC_PROPERTIES_EXT_NAME = \"ZE_extension_image_query_alloc_properties\"\n\nconst ZE_LINKAGE_INSPECTION_EXT_NAME = \"ZE_extension_linkage_inspection\"\n\nconst ZE_MEMORY_COMPRESSION_HINTS_EXT_NAME = \"ZE_extension_memory_compression_hints\"\n\nconst ZE_MEMORY_FREE_POLICIES_EXT_NAME = \"ZE_extension_memory_free_policies\"\n\nconst ZE_BANDWIDTH_PROPERTIES_EXP_NAME = \"ZE_experimental_bandwidth_properties\"\n\nconst ZE_DEVICE_LUID_EXT_NAME = \"ZE_extension_device_luid\"\n\nconst ZE_MAX_DEVICE_LUID_SIZE_EXT = 8\n\nconst ZE_FABRIC_EXP_NAME = \"ZE_experimental_fabric\"\n\nconst ZE_MAX_FABRIC_EDGE_MODEL_EXP_SIZE = 256\n\nconst ZE_DEVICE_MEMORY_PROPERTIES_EXT_NAME = \"ZE_extension_device_memory_properties\"\n\nconst ZE_BFLOAT16_CONVERSIONS_EXT_NAME = \"ZE_extension_bfloat16_conversions\"\n\nconst ZE_DEVICE_IP_VERSION_EXT_NAME = \"ZE_extension_device_ip_version\"\n\nconst ZE_KERNEL_MAX_GROUP_SIZE_PROPERTIES_EXT_NAME = \"ZE_extension_kernel_max_group_size_properties\"\n\nconst ZE_SUB_ALLOCATIONS_EXP_NAME = \"ZE_experimental_sub_allocations\"\n\nconst ZE_EVENT_QUERY_KERNEL_TIMESTAMPS_EXT_NAME = \"ZE_extension_event_query_kernel_timestamps\"\n\nconst ZE_RTAS_BUILDER_EXP_NAME = \"ZE_experimental_rtas_builder\"\n\nconst ZE_EVENT_POOL_COUNTER_BASED_EXP_NAME = \"ZE_experimental_event_pool_counter_based\"\n\nconst ZE_BINDLESS_IMAGE_EXP_NAME = \"ZE_experimental_bindless_image\"\n\nconst ZE_COMMAND_LIST_CLONE_EXP_NAME = \"ZE_experimental_command_list_clone\"\n\nconst ZE_IMMEDIATE_COMMAND_LIST_APPEND_EXP_NAME = \"ZE_experimental_immediate_command_list_append\"\n\nconst ZE_MUTABLE_COMMAND_LIST_EXP_NAME = \"ZE_experimental_mutable_command_list\"\n"
  },
  {
    "path": "lib/level-zero/libze_aliases.jl",
    "content": ""
  },
  {
    "path": "lib/level-zero/memory.jl",
    "content": "# Raw memory management\n\nexport device_alloc, host_alloc, shared_alloc, free, properties, lookup_alloc\n\n\n#\n# untyped buffers\n#\n\nabstract type AbstractBuffer end\n\nBase.convert(T::Type{<:Union{Ptr,ZePtr}}, buf::AbstractBuffer) =\n    throw(ArgumentError(\"Illegal conversion of a $(typeof(buf)) to a $T\"))\n\n# ccall integration\n#\n# taking the pointer of a buffer means returning the underlying pointer,\n# and not the pointer of the buffer object itself.\nBase.unsafe_convert(P::Type{<:Union{Ptr,ZePtr}}, buf::AbstractBuffer) = convert(P, buf)\n\nfunction free(buf::AbstractBuffer; policy=nothing)\n    ctx = context(buf)\n    if policy === nothing\n        zeMemFree(ctx, buf)\n    else\n        desc_ref = Ref(ze_memory_free_ext_desc_t(; freePolicy=policy))\n        zeMemFreeExt(ctx, desc_ref, buf)\n    end\nend\n\n\n## device buffer\n\n\"\"\"\n    DeviceBuffer\n\nA buffer of device memory, owned by a specific device. Generally, may only be accessed by\nthe device that owns it.\n\"\"\"\nstruct DeviceBuffer <: AbstractBuffer\n    ptr::ZePtr{Cvoid}\n    bytesize::Int\n    context::ZeContext\n    device::ZeDevice\nend\n\nfunction device_alloc(ctx::ZeContext, dev::ZeDevice, bytesize::Integer,\n                      alignment::Integer=1; flags=0, ordinal::Integer=0)\n    relaxed_allocation_ref = Ref(ze_relaxed_allocation_limits_exp_desc_t(;\n        flags = ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_MAX_SIZE,\n    ))\n    GC.@preserve relaxed_allocation_ref begin\n        if bytesize > properties(dev).maxMemAllocSize\n            desc_ref = Ref(ze_device_mem_alloc_desc_t(; flags, ordinal))\n            link_extensions(desc_ref, relaxed_allocation_ref)\n        else\n            desc_ref = Ref(ze_device_mem_alloc_desc_t(; flags, ordinal))\n        end\n\n        ptr_ref = Ref{Ptr{Cvoid}}()\n        zeMemAllocDevice(ctx, desc_ref, bytesize, alignment, dev, ptr_ref)\n\n        return DeviceBuffer(reinterpret(ZePtr{Cvoid}, ptr_ref[]), bytesize, ctx, dev)\n    end\nend\n\nBase.pointer(buf::DeviceBuffer) = buf.ptr\nBase.sizeof(buf::DeviceBuffer) = buf.bytesize\ncontext(buf::DeviceBuffer) = buf.context\ndevice(buf::DeviceBuffer) = buf.device\n\nBase.show(io::IO, buf::DeviceBuffer) =\n    @printf(io, \"DeviceBuffer(%s at %p)\", Base.format_bytes(sizeof(buf)), pointer(buf))\n\nBase.convert(::Type{ZePtr{T}}, buf::DeviceBuffer) where {T} =\n    convert(ZePtr{T}, pointer(buf))\n\n\n## host buffer\n\n\"\"\"\n    HostBuffer\n\nA buffer of memory on the host. May be accessed by the host, and all devices within the\nhost driver. Frequently used as staging areas to transfer data to or from devices.\n\nNote that these buffers need to be made resident to the device, e.g., by using the\nZE_KERNEL_FLAG_FORCE_RESIDENCY module flag, the ZE_KERNEL_SET_ATTR_INDIRECT_HOST_ACCESS\nkernel attribute, or by calling zeDeviceMakeMemoryResident.\n\"\"\"\nstruct HostBuffer <: AbstractBuffer\n    ptr::Ptr{Cvoid}\n    bytesize::Int\n    context::ZeContext\nend\n\nfunction host_alloc(ctx::ZeContext, bytesize::Integer, alignment::Integer=1;\n                    flags=0)\n    desc_ref = Ref(ze_host_mem_alloc_desc_t(; flags))\n\n    ptr_ref = Ref{Ptr{Cvoid}}()\n    zeMemAllocHost(ctx, desc_ref, bytesize, alignment, ptr_ref)\n\n    return HostBuffer(ptr_ref[], bytesize, ctx)\nend\n\nBase.pointer(buf::HostBuffer) = buf.ptr\nBase.sizeof(buf::HostBuffer) = buf.bytesize\ncontext(buf::HostBuffer) = buf.context\ndevice(buf::HostBuffer) = nothing\n\nBase.show(io::IO, buf::HostBuffer) =\n    @printf(io, \"HostBuffer(%s at %p)\", Base.format_bytes(sizeof(buf)), Int(pointer(buf)))\n\nBase.convert(::Type{Ptr{T}}, buf::HostBuffer) where {T} =\n    convert(Ptr{T}, pointer(buf))\n\nBase.convert(::Type{ZePtr{T}}, buf::HostBuffer) where {T} =\n    reinterpret(ZePtr{T}, pointer(buf))\n\n\n## shared buffer\n\n\"\"\"\n    SharedBuffer\n\nA managed buffer that is shared between the host and one or more devices.\n\"\"\"\nstruct SharedBuffer <: AbstractBuffer\n    ptr::ZePtr{Cvoid}\n    bytesize::Int\n    context::ZeContext\n    device::Union{Nothing,ZeDevice}\nend\n\nfunction shared_alloc(ctx::ZeContext, dev::Union{Nothing,ZeDevice},\n                      bytesize::Integer, alignment::Integer=1; host_flags=0,\n                      device_flags=0, ordinal::Integer=0)\n    relaxed_allocation_ref = Ref(ze_relaxed_allocation_limits_exp_desc_t(;\n        flags = ZE_RELAXED_ALLOCATION_LIMITS_EXP_FLAG_MAX_SIZE,\n    ))\n    GC.@preserve relaxed_allocation_ref begin\n        device_desc_ref = if dev !== nothing && bytesize > properties(dev).maxMemAllocSize\n            pNext = Base.unsafe_convert(Ptr{Cvoid}, relaxed_allocation_ref)\n            Ref(ze_device_mem_alloc_desc_t(; flags=device_flags, ordinal, pNext))\n        else\n            Ref(ze_device_mem_alloc_desc_t(; flags=device_flags, ordinal))\n        end\n        host_desc_ref = Ref(ze_host_mem_alloc_desc_t(; flags=host_flags))\n\n        ptr_ref = Ref{Ptr{Cvoid}}()\n        zeMemAllocShared(ctx, device_desc_ref, host_desc_ref, bytesize, alignment,\n                        something(dev, C_NULL), ptr_ref)\n\n        return SharedBuffer(reinterpret(ZePtr{Cvoid}, ptr_ref[]), bytesize, ctx, dev)\n    end\nend\n\nBase.pointer(buf::SharedBuffer) = buf.ptr\nBase.sizeof(buf::SharedBuffer) = buf.bytesize\ncontext(buf::SharedBuffer) = buf.context\ndevice(buf::SharedBuffer) = buf.device\n\nBase.show(io::IO, buf::SharedBuffer) =\n    @printf(io, \"SharedBuffer(%s at %p)\", Base.format_bytes(sizeof(buf)), Int(pointer(buf)))\n\nBase.convert(::Type{Ptr{T}}, buf::SharedBuffer) where {T} =\n    convert(Ptr{T}, reinterpret(Ptr{Cvoid}, pointer(buf)))\n\nBase.convert(::Type{ZePtr{T}}, buf::SharedBuffer) where {T} =\n    convert(ZePtr{T}, pointer(buf))\n\n\n## properties\n\nfunction properties(buf::AbstractBuffer)\n    props_ref = Ref(ze_memory_allocation_properties_t())\n    dev_ref = Ref(ze_device_handle_t())\n    zeMemGetAllocProperties(buf.context, pointer(buf), props_ref, dev_ref)\n\n    props = props_ref[]\n    return (\n        device=ZeDevice(dev_ref[], buf.context.driver),\n        type=props.type,\n        id=props.id,\n    )\nend\n\nstruct UnknownBuffer <: AbstractBuffer\n    ptr::Ptr{Cvoid}\n    bytesize::Int\n    context::ZeContext\nend\n\nBase.pointer(buf::UnknownBuffer) = buf.ptr\nBase.sizeof(buf::UnknownBuffer) = buf.bytesize\ncontext(buf::UnknownBuffer) = buf.context\n\nBase.show(io::IO, buf::UnknownBuffer) =\n    @printf(io, \"UnknownBuffer(%s at %p)\", Base.format_bytes(sizeof(buf)), Int(pointer(buf)))\n\nfunction lookup_alloc(ctx::ZeContext, ptr::Union{Ptr,ZePtr})\n    base_ref = Ref{Ptr{Cvoid}}()\n    bytesize_ref = Ref{Csize_t}()\n    zeMemGetAddressRange(ctx, ptr, base_ref, bytesize_ref)\n\n    buf = UnknownBuffer(base_ref[], bytesize_ref[], ctx)\n    props = properties(buf)\n    return if props.type == ZE_MEMORY_TYPE_HOST\n        HostBuffer(pointer(buf), sizeof(buf), ctx)\n    elseif props.type == ZE_MEMORY_TYPE_DEVICE\n        DeviceBuffer(reinterpret(ZePtr{Cvoid}, pointer(buf)), sizeof(buf), ctx, props.device)\n    elseif props.type == ZE_MEMORY_TYPE_SHARED\n        SharedBuffer(reinterpret(ZePtr{Cvoid}, pointer(buf)), sizeof(buf), ctx, props.device)\n    else\n        buf\n    end\nend\n"
  },
  {
    "path": "lib/level-zero/module.jl",
    "content": "\n\nexport ZeModule\n\nmutable struct ZeModule\n    handle::ze_module_handle_t\n\n    context::ZeContext\n    device::ZeDevice\n\n    function ZeModule(ctx::ZeContext, dev::ZeDevice, image; build_flags=\"\", log::Bool=true)\n        log_ref = if log\n            log_ref = Ref{ze_module_build_log_handle_t}()\n        else\n            C_NULL\n        end\n\n        constants = Ref(ze_module_constants_t(\n            0,\n            C_NULL,\n            C_NULL\n        ))\n\n        # compile the module\n        GC.@preserve image build_flags constants begin\n            desc_ref = Ref(ze_module_desc_t(;\n                format=ZE_MODULE_FORMAT_IL_SPIRV,\n                inputSize=sizeof(image),\n                pInputModule=pointer(image),\n                pBuildFlags=pointer(build_flags),\n                pConstants=Base.unsafe_convert(Ptr{ze_module_constants_t}, constants)\n            ))\n            handle_ref = Ref{ze_module_handle_t}()\n            res = unchecked_zeModuleCreate(ctx, dev, desc_ref, handle_ref, log_ref)\n        end\n\n        # read the log\n        if log_ref !== C_NULL\n            log_size_ref = Ref{Csize_t}(0)\n            zeModuleBuildLogGetString(log_ref[], log_size_ref, C_NULL)\n            log_buf = Vector{UInt8}(undef, log_size_ref[])\n            zeModuleBuildLogGetString(log_ref[], log_size_ref, pointer(log_buf))\n            zeModuleBuildLogDestroy(log_ref[])\n\n            log = String(log_buf)[1:end-1] # strip null terminator\n            if !isempty(log)\n                if res == ZE_RESULT_ERROR_MODULE_BUILD_FAILURE\n                    @error \"\"\"Module compilation failed:\n                              $log\"\"\"\n                else\n                    @debug \"\"\"Build log:\n                              $log\"\"\"\n                end\n            end\n        end\n\n        if res != RESULT_SUCCESS\n            throw_api_error(res)\n        end\n\n        obj = new(handle_ref[], ctx, dev)\n        finalizer(obj) do obj\n            zeModuleDestroy(obj)\n        end\n        return obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_module_handle_t}, mod::ZeModule) = mod.handle\n\nBase.:(==)(a::ZeModule, b::ZeModule) = a.handle == b.handle\nBase.hash(e::ZeModule, h::UInt) = hash(e.handle, h)\n\n\n## kernels\n\nexport ZeKernel\n\nmutable struct ZeKernel\n    mod::ZeModule\n    handle::ze_kernel_handle_t\n\n    function ZeKernel(mod, name)\n        GC.@preserve name begin\n            desc_ref = Ref(ze_kernel_desc_t(; pKernelName=pointer(name)))\n            handle_ref = Ref{ze_kernel_handle_t}()\n            zeKernelCreate(mod, desc_ref, handle_ref)\n        end\n        obj = new(mod, handle_ref[])\n\n        finalizer(obj) do obj\n            zeKernelDestroy(obj)\n        end\n        obj\n    end\nend\n\nBase.unsafe_convert(::Type{ze_kernel_handle_t}, kernel::ZeKernel) = kernel.handle\n\nBase.:(==)(a::ZeKernel, b::ZeKernel) = a.handle == b.handle\nBase.hash(e::ZeKernel, h::UInt) = hash(e.handle, h)\n\n\n## kernel iteration\n\nexport kernels\n\nstruct ZeModuleKernelDict <: AbstractDict{String,ZeKernel}\n    mod::ZeModule\n    names::Vector{String}\n\n    function ZeModuleKernelDict(mod)\n        count_ref = Ref{UInt32}(0)\n        zeModuleGetKernelNames(mod, count_ref, C_NULL)\n        names_ref = Vector{Ptr{Cchar}}(undef, count_ref[])\n        zeModuleGetKernelNames(mod, count_ref, names_ref)\n        new(mod, unsafe_string.(names_ref))\n    end\nend\n\nkernels(mod::ZeModule) = ZeModuleKernelDict(mod)\n\nfunction Base.iterate(dict::ZeModuleKernelDict, i=1)\n    i > length(dict.names) && return nothing\n    name = dict.names[i]\n    kernel = ZeKernel(dict.mod, name)\n    return (Pair{String,ZeKernel}(name, kernel), i+1)\nend\n\nBase.length(dict::ZeModuleKernelDict) = length(dict.names)\n\nfunction Base.get(dict::ZeModuleKernelDict, name::AbstractString, def)\n    in(name, dict.names) || return def\n    ZeKernel(dict.mod, name)\nend\n\n\n## group sizes\n\nexport ZeDim, suggest_groupsize, groupsize!\n\n\"\"\"\n    ZeDim3(x)\n\n    ZeDim3((x,))\n    ZeDim3((x, y))\n    ZeDim3((x, y, x))\n\nA type used to specify dimensions, consisting of 3 integers for respectively the `x`, `y`\nand `z` dimension. Unspecified dimensions default to `1`.\n\nOften accepted as argument through the `ZeDim` type alias, allowing to pass dimensions as a\nplain integer or a tuple without having to construct an explicit `ZeDim3` object.\n\"\"\"\nstruct ZeDim3\n    x::Int\n    y::Int\n    z::Int\nend\n\nZeDim3(dims::Integer)             = ZeDim3(dims,    1,       1)\nZeDim3(dims::NTuple{1,<:Integer}) = ZeDim3(dims[1], 1,       1)\nZeDim3(dims::NTuple{2,<:Integer}) = ZeDim3(dims[1], dims[2], 1)\nZeDim3(dims::NTuple{3,<:Integer}) = ZeDim3(dims[1], dims[2], dims[3])\n\n# Type alias for conveniently specifying the dimensions\n# (e.g. `(len, 2)` instead of `ZeDim3((len, 2))`)\nconst ZeDim = Union{Integer,\n                    Tuple{Integer},\n                    Tuple{Integer, Integer},\n                    Tuple{Integer, Integer, Integer}}\n\nfunction suggest_groupsize(kernel::ZeKernel, global_sz::ZeDim)\n    global_sz = ZeDim3(global_sz)\n    group_sz_x = Ref{UInt32}()\n    group_sz_y = Ref{UInt32}()\n    group_sz_z = Ref{UInt32}()\n    zeKernelSuggestGroupSize(kernel, global_sz.x, global_sz.y, global_sz.z,\n                             group_sz_x, group_sz_y, group_sz_z)\n    return ZeDim3(group_sz_x[], group_sz_y[], group_sz_z[])\nend\n\nfunction groupsize!(kernel::ZeKernel, sz::ZeDim)\n    sz = ZeDim3(sz)\n    zeKernelSetGroupSize(kernel, sz.x, sz.y, sz.z)\nend\n\n\n## arguments\n\nexport arguments\n\nstruct ZeKernelArgumentList\n    kernel::ZeKernel\nend\n\narguments(kernel::ZeKernel) = ZeKernelArgumentList(kernel)\n\nfunction Base.setindex!(args::ZeKernelArgumentList, value::Any, index::Integer)\n    @assert isbits(value)\n    zeKernelSetArgumentValue(args.kernel, index-1, Core.sizeof(value), Base.RefValue(value))\nend\n\n\n## attributes\n\nexport indirect_access, indirect_access!, source_attributes\n\nfunction indirect_access(kernel::ZeKernel)\n    flags_ref = Ref{ze_kernel_indirect_access_flags_t}()\n    zeKernelGetIndirectAccess(kernel, flags_ref)\n    return flags_ref[]\nend\n\nindirect_access!(kernel::ZeKernel, flags) = zeKernelSetIndirectAccess(kernel, flags)\n\nfunction source_attributes(kernel::ZeKernel)\n    size_ref = Ref{UInt32}(0)\n    zeKernelGetSourceAttributes(kernel, size_ref, C_NULL)\n\n    data = Vector{UInt8}(undef, size_ref[])\n    ptr_ref = Ref{Ptr{Cchar}}(pointer(data))\n    zeKernelGetSourceAttributes(kernel, size_ref, ptr_ref)\n    str = String(data)\n\n    # the attribute string is null-terminated, with attributes separated by space\n    return split(str[1:end-1])\nend\n\n\n## properties\n\nexport properties\n\nfunction properties(kernel::ZeKernel)\n    props_ref = Ref(ze_kernel_properties_t())\n    preferred_group_size_props_ref = Ref(ze_kernel_preferred_group_size_properties_t())\n    link_extensions(props_ref, preferred_group_size_props_ref)\n    if haskey(oneL0.extension_properties(kernel.mod.context.driver),\n              \"ZE_extension_kernel_max_group_size_properties\")\n        # TODO: memoize\n        max_group_size_props_ref = Ref(ze_kernel_max_group_size_properties_ext_t())\n        link_extensions(preferred_group_size_props_ref, max_group_size_props_ref)\n    else\n        max_group_size_props_ref = nothing\n    end\n    zeKernelGetProperties(kernel, props_ref)\n\n    props = props_ref[]\n    return (\n        numKernelArgs=Int(props.numKernelArgs),\n        requiredGroupSize=ZeDim3(props.requiredGroupSizeX,\n                                 props.requiredGroupSizeY,\n                                 props.requiredGroupSizeZ),\n        requiredNumSubGroups=Int(props.requiredNumSubGroups),\n        requiredSubgroupSize=Int(props.requiredSubgroupSize),\n        maxSubgroupSize=Int(props.maxSubgroupSize),\n        maxNumSubgroups=Int(props.maxNumSubgroups),\n        localMemSize=Int(props.localMemSize),\n        privateMemSize=Int(props.privateMemSize),\n        spillMemSize=Int(props.spillMemSize),\n        kernel_uuid=Base.UUID(reinterpret(UInt128, [props.uuid.kid...])[1]),\n        module_uuid=Base.UUID(reinterpret(UInt128, [props.uuid.mid...])[1]),\n        preferredGroupSize=Int(preferred_group_size_props_ref[].preferredMultiple),\n        maxGroupSize=max_group_size_props_ref === nothing ? missing :\n            Int(max_group_size_props_ref[].maxGroupSize)\n    )\nend\n\n\n## execution\n\nexport append_launch!\n\nze_group_count_t(dim::ZeDim3) = ze_group_count_t(dim.x, dim.y, dim.z)\n\nfunction append_launch!(list, kernel, group_count::ZeDim, signal_event=nothing,\n                        wait_events::ZeEvent...)\n    group_count = ze_group_count_t(ZeDim3(group_count))\n    zeCommandListAppendLaunchKernel(list, kernel, Ref(group_count),\n                                    something(signal_event, C_NULL),\n                                    length(wait_events), [wait_events...])\nend\n"
  },
  {
    "path": "lib/level-zero/oneL0.jl",
    "content": "module oneL0\n\nusing ..APIUtils\n\nusing CEnum\n\nusing Printf\n\nusing Libdl\n\nif Sys.iswindows()\n    const libze_loader = \"ze_loader\"\nelse\n    using NEO_jll\n    using oneAPI_Level_Zero_Loader_jll\nend\n\ninclude(\"utils.jl\")\ninclude(\"pointer.jl\")\n\n# core API\ninclude(\"common.jl\")\ninclude(\"libze.jl\")\n\n# level zero's structure types are often assumed to be zero-initialized (`= {}` in C).\n# Julia's memory is not, so define default constructors that ensure everything is zero.\n#\n# at the same time, our structs are immutable, so we can't just memset to 0 and set fields.\n# so instead the constructor we generate has keyword arguments for every fields, and the\n# default value for every field is set to 0 (can be overridden by defining `zeroinit`).\n#\n# TODO: is it really required to (1) zero-initialize memory and (2) set the stype field?\n#       none of these are documented...\n# TODO: add support for conveniently linking extension objects in pNext\nfor (structure_type_enum, _) in CEnum.name_value_pairs(ze_structure_type_t)\n    structure_type_name = string(structure_type_enum)\n    @assert startswith(structure_type_name, \"ZE_STRUCTURE_TYPE\")\n\n    T = Symbol(\"ze_\" * lowercase(structure_type_name[19:end]) * \"_t\")\n    if isdefined(oneL0, T)\n        struct_typ = getfield(oneL0, T)\n\n        args = Expr[]\n        for field in fieldnames(struct_typ)\n            field_type = fieldtype(struct_typ, field)\n            field_value = if field_type == ze_structure_type_t\n                :($structure_type_enum)\n            else\n                :(zeroinit($field_type))\n            end\n            push!(args, Expr(:kw, field, field_value))\n        end\n\n        @eval begin\n            @inline function $T(;$(args...))\n                $(T)($(fieldnames(struct_typ)...))\n            end\n        end\n    end\nend\n\n# alternative approach: make the structs mutable, and do memset + setfield\nzeroinit(::Type{T}) where {T} = convert(T, 0)\nzeroinit(::Type{T}) where {T<:CEnum.Cenum} = T(0)\nzeroinit(::Type{T}) where {T<:NTuple} = ntuple(_->zeroinit(T.parameters[1]), length(T.parameters))\nzeroinit(::Type{ze_driver_uuid_t}) = ze_driver_uuid_t(ntuple(_->zero(UInt8), 16))\nzeroinit(::Type{ze_device_uuid_t}) = ze_device_uuid_t(ntuple(_->zero(UInt8), 16))\nzeroinit(::Type{_ze_native_kernel_uuid_t}) =\n    _ze_native_kernel_uuid_t(ntuple(_->zero(UInt8), 16))\nzeroinit(::Type{ze_kernel_uuid_t}) =\n    ze_kernel_uuid_t(ntuple(_->zero(UInt8), 16), ntuple(_->zero(UInt8), 16))\n\n# link extension objects in pNext\nfunction link_extensions(refs...)\n    length(refs) >= 2 || return\n    for (parent, child) in zip(refs[1:end-1], refs[2:end])\n        pNext = Base.unsafe_convert(Ptr{Cvoid}, child)\n        typ = eltype(parent)\n        @assert fieldnames(typ)[2] == :pNext\n        field = Base.unsafe_convert(Ptr{Cvoid}, parent) + fieldoffset(typ, 2)\n        field = convert(Ptr{Ptr{Cvoid}}, field)\n        unsafe_store!(field, pNext)\n    end\n    return\nend\n\n# core wrappers\ninclude(\"error.jl\")\ninclude(\"driver.jl\")\ninclude(\"device.jl\")\n\n# Define OutOfGPUMemoryError after device.jl to ensure ZeDevice is available\nexport OutOfGPUMemoryError\n\n\"\"\"\n    OutOfGPUMemoryError(sz::Integer=0, dev::ZeDevice)\n\nAn operation allocated too much GPU memory.\n\"\"\"\nstruct OutOfGPUMemoryError <: Exception\n  sz::Int\n  dev::Union{ZeDevice, Nothing}\n\n  function OutOfGPUMemoryError(sz::Integer=0, dev::Union{ZeDevice, Nothing}=nothing)\n    new(sz, dev)\n  end\nend\n\nfunction Base.showerror(io::IO, err::OutOfGPUMemoryError)\n    print(io, \"Out of GPU memory\")\n    if err.sz > 0\n      print(io, \" trying to allocate $(Base.format_bytes(err.sz))\")\n    end\n    if err.dev !== nothing\n        print(\" on device $(properties(err.dev).name)\")\n        if length(memory_properties(err.dev)) == 1\n            # XXX: how to handle multiple memories?\n            print(\" with $(Base.format_bytes(only(memory_properties(err.dev)).totalSize))\")\n        end\n    end\n    return io\nend\n\ninclude(\"context.jl\")\ninclude(\"cmdqueue.jl\")\ninclude(\"cmdlist.jl\")\ninclude(\"fence.jl\")\ninclude(\"event.jl\")\ninclude(\"barrier.jl\")\ninclude(\"module.jl\")\ninclude(\"memory.jl\")\ninclude(\"copy.jl\")\ninclude(\"residency.jl\")\n\nconst functional = Ref{Bool}(false)\n\nconst validation_layer = Ref{Bool}()\nconst parameter_validation = Ref{Bool}()\n\nfunction __init__()\n    precompiling = ccall(:jl_generating_output, Cint, ()) != 0\n    precompiling && return\n\n    if Sys.iswindows()\n        if Libdl.dlopen(libze_loader; throw_error=false) === nothing\n            @error \"The oneAPI Level Zero loader was not found. Please ensure the Intel GPU drivers are installed.\"\n            return\n        end\n    else\n        if !oneAPI_Level_Zero_Loader_jll.is_available()\n            @error \"\"\"No oneAPI Level Zero loader found for your platform. Currently, only Linux x86 is supported.\n                      If you have a local oneAPI toolchain, you can use that; refer to the documentation for more details.\"\"\"\n            return\n        end\n\n        if !NEO_jll.is_available()\n            @error \"\"\"No oneAPI driver found for your platform. Currently, only Linux x86_64 is supported.\n                      If you have a local oneAPI toolchain, you can use that; refer to the documentation for more details.\"\"\"\n            return\n        end\n    end\n\n    try\n        zeInit(0)\n    catch err\n        # Handle the specific case where no oneAPI device is available\n        if err isa ZeError && err.code == RESULT_ERROR_UNINITIALIZED\n            functional[] = false\n            return\n        end\n        # For other errors, still report them as errors\n        @error \"Failed to initialize oneAPI\" exception=(err,catch_backtrace())\n        functional[] = false\n        return\n    end\n\n    # Check if there are actually any drivers/devices available\n    try\n        drv_count = Ref{UInt32}(0)\n        zeDriverGet(drv_count, C_NULL)\n        if drv_count[] == 0\n            @info \"oneAPI initialized but no drivers found. oneAPI.jl will not be functional.\"\n            functional[] = false\n            return\n        end\n    catch err\n        @error \"Failed to enumerate oneAPI drivers\" exception = (err, catch_backtrace())\n        functional[] = false\n        return\n    end\n\n    functional[] = true\n\n    validation_layer[] = parse(Bool, get(ENV, \"ZE_ENABLE_VALIDATION_LAYER\", \"false\"))\n    parameter_validation[] = parse(Bool, get(ENV, \"ZE_ENABLE_PARAMETER_VALIDATION\", \"false\"))\nend\n\nend\n"
  },
  {
    "path": "lib/level-zero/pointer.jl",
    "content": "# pointer types\n\nexport ZePtr, ZE_NULL, PtrOrZePtr, ZeRef, RefOrZeRef\n\n\n#\n# Device pointer\n#\n\n\"\"\"\n    ZePtr{T}\n\nA memory address that refers to data of type `T` that is accessible from q device. A `ZePtr`\nis ABI compatible with regular `Ptr` objects, e.g. it can be used to `ccall` a function that\nexpects a `Ptr` to device memory, but it prevents erroneous conversions between the two.\n\"\"\"\nZePtr\n\nif sizeof(Ptr{Cvoid}) == 8\n    primitive type ZePtr{T} 64 end\nelse\n    primitive type ZePtr{T} 32 end\nend\n\n# constructor\nZePtr{T}(x::Union{Int,UInt,ZePtr}) where {T} = Base.bitcast(ZePtr{T}, x)\n\nconst ZE_NULL = ZePtr{Cvoid}(0)\n\n\n## getters\n\nBase.eltype(::Type{<:ZePtr{T}}) where {T} = T\n\n\n## conversions\n\n# to and from integers\n## pointer to integer\nBase.convert(::Type{T}, x::ZePtr) where {T<:Integer} = T(UInt(x))\n## integer to pointer\nBase.convert(::Type{ZePtr{T}}, x::Union{Int,UInt}) where {T} = ZePtr{T}(x)\nBase.Int(x::ZePtr) = Base.bitcast(Int, x)\nBase.UInt(x::ZePtr) = Base.bitcast(UInt, x)\n\n# between regular and oneAPI pointers\nBase.convert(::Type{<:Ptr}, p::ZePtr) =\n    throw(ArgumentError(\"cannot convert a device pointer to a host pointer\"))\n\n# between oneAPI pointers\nBase.convert(::Type{ZePtr{T}}, p::ZePtr) where {T} = Base.bitcast(ZePtr{T}, p)\n\n# defer conversions to unsafe_convert\nBase.cconvert(::Type{<:ZePtr}, x) = x\n\n# fallback for unsafe_convert\nBase.unsafe_convert(::Type{P}, x::ZePtr) where {P<:ZePtr} = convert(P, x)\n\n# from arrays\nBase.unsafe_convert(::Type{ZePtr{S}}, a::AbstractArray{T}) where {S,T} =\n    convert(ZePtr{S}, Base.unsafe_convert(ZePtr{T}, a))\nBase.unsafe_convert(::Type{ZePtr{T}}, a::AbstractArray{T}) where {T} =\n    error(\"conversion to pointer not defined for $(typeof(a))\")\n\n## limited pointer arithmetic & comparison\n\nBase.isequal(x::ZePtr, y::ZePtr) = (x === y)\nBase.isless(x::ZePtr{T}, y::ZePtr{T}) where {T} = x < y\n\nBase.:(==)(x::ZePtr, y::ZePtr) = UInt(x) == UInt(y)\nBase.:(<)(x::ZePtr,  y::ZePtr) = UInt(x) < UInt(y)\nBase.:(-)(x::ZePtr,  y::ZePtr) = UInt(x) - UInt(y)\n\nBase.:(+)(x::ZePtr, y::Integer) = oftype(x, UInt(x) + (y % UInt) % UInt)\nBase.:(-)(x::ZePtr, y::Integer) = oftype(x, UInt(x) - (y % UInt) % UInt)\nBase.:(+)(x::Integer, y::ZePtr) = y + x\n\n\n\n#\n# Host or device pointer\n#\n\n\"\"\"\n    PtrOrZePtr{T}\n\nA special pointer type, ABI-compatible with both `Ptr` and `ZePtr`, for use in `ccall`\nexpressions to convert values to either a device or a host type (in that order). This is\nrequired for APIs which accept pointers that either point to host or device memory.\n\"\"\"\nPtrOrZePtr\n\n\nif sizeof(Ptr{Cvoid}) == 8\n    primitive type PtrOrZePtr{T} 64 end\nelse\n    primitive type PtrOrZePtr{T} 32 end\nend\n\nfunction Base.cconvert(::Type{PtrOrZePtr{T}}, val) where {T}\n    # `cconvert` is always implemented for both `Ptr` and `ZePtr`, so pick the first result\n    # that has done an actual conversion\n\n    dev_val = Base.cconvert(ZePtr{T}, val)\n    if dev_val !== val\n        return dev_val\n    end\n\n    host_val = Base.cconvert(Ptr{T}, val)\n    if host_val !== val\n        return host_val\n    end\n\n    return val\nend\n\nfunction Base.unsafe_convert(::Type{PtrOrZePtr{T}}, val) where {T}\n    ptr = if Core.Compiler.return_type(Base.unsafe_convert,\n                                       Tuple{Type{Ptr{T}}, typeof(val)}) !== Union{}\n        Base.unsafe_convert(Ptr{T}, val)\n    elseif Core.Compiler.return_type(Base.unsafe_convert,\n                                     Tuple{Type{ZePtr{T}}, typeof(val)}) !== Union{}\n        Base.unsafe_convert(ZePtr{T}, val)\n    else\n        throw(ArgumentError(\"cannot convert to either a host or device pointer\"))\n    end\n\n    return Base.bitcast(PtrOrZePtr{T}, ptr)\nend\n\n\n#\n# Device reference objects\n#\n\nif sizeof(Ptr{Cvoid}) == 8\n    primitive type ZeRef{T} 64 end\nelse\n    primitive type ZeRef{T} 32 end\nend\n\n# general methods for ZeRef{T} type\nBase.eltype(x::Type{<:ZeRef{T}}) where {T} = @isdefined(T) ? T : Any\n\nBase.convert(::Type{ZeRef{T}}, x::ZeRef{T}) where {T} = x\n\n# conversion or the actual ccall\nBase.unsafe_convert(::Type{ZeRef{T}}, x::ZeRef{T}) where {T} = Base.bitcast(ZeRef{T}, Base.unsafe_convert(ZePtr{T}, x))\nBase.unsafe_convert(::Type{ZeRef{T}}, x) where {T} = Base.bitcast(ZeRef{T}, Base.unsafe_convert(ZePtr{T}, x))\n\n# ZeRef from literal pointer\nBase.convert(::Type{ZeRef{T}}, x::ZePtr{T}) where {T} = x\n\n# indirect constructors using ZeRef\nBase.convert(::Type{ZeRef{T}}, x) where {T} = ZeRef{T}(x)\n\n\n## ZeRef object backed by an array at index i\n\nstruct ZeRefArray{T,A<:AbstractArray{T}} <: Ref{T}\n    x::A\n    i::Int\n    ZeRefArray{T,A}(x,i) where {T,A<:AbstractArray{T}} = new(x,i)\nend\nZeRefArray{T}(x::AbstractArray{T}, i::Int=1) where {T} = ZeRefArray{T,typeof(x)}(x, i)\nZeRefArray(x::AbstractArray{T}, i::Int=1) where {T} = ZeRefArray{T}(x, i)\nBase.convert(::Type{ZeRef{T}}, x::AbstractArray{T}) where {T} = ZeRefArray(x, 1)\n\nfunction Base.unsafe_convert(P::Type{ZePtr{T}}, b::ZeRefArray{T}) where T\n    return pointer(b.x, b.i)\nend\nfunction Base.unsafe_convert(P::Type{ZePtr{Any}}, b::ZeRefArray{Any})\n    return convert(P, pointer(b.x, b.i))\nend\nBase.unsafe_convert(::Type{ZePtr{Cvoid}}, b::ZeRefArray{T}) where {T} =\n    convert(ZePtr{Cvoid}, Base.unsafe_convert(ZePtr{T}, b))\n\n\n## Union with all ZeRef 'subtypes'\n\nconst ZeRefs{T} = Union{ZePtr{T}, ZeRefArray{T}}\n\n\n## RefOrZeRef\n\nif sizeof(Ptr{Cvoid}) == 8\n    primitive type RefOrZeRef{T} 64 end\nelse\n    primitive type RefOrZeRef{T} 32 end\nend\n\nBase.convert(::Type{RefOrZeRef{T}}, x::Union{RefOrZeRef{T}, Ref{T}, ZeRef{T}, ZeRefs{T}}) where {T} = x\n\n# prefer conversion to CPU ref: this is generally cheaper\nBase.convert(::Type{RefOrZeRef{T}}, x) where {T} = Ref{T}(x)\nBase.unsafe_convert(::Type{RefOrZeRef{T}}, x::Ref{T}) where {T} =\n    Base.bitcast(RefOrZeRef{T}, Base.unsafe_convert(Ptr{T}, x))\nBase.unsafe_convert(::Type{RefOrZeRef{T}}, x) where {T} =\n    Base.bitcast(RefOrZeRef{T}, Base.unsafe_convert(Ptr{T}, x))\n\n# support conversion from GPU ref\nBase.unsafe_convert(::Type{RefOrZeRef{T}}, x::ZeRefs{T}) where {T} =\n    Base.bitcast(RefOrZeRef{T}, Base.unsafe_convert(ZePtr{T}, x))\n\n# support conversion from arrays\nBase.convert(::Type{RefOrZeRef{T}}, x::Array{T}) where {T} = convert(Ref{T}, x)\nBase.convert(::Type{RefOrZeRef{T}}, x::AbstractArray{T}) where {T} = convert(ZeRef{T}, x)\nBase.unsafe_convert(P::Type{RefOrZeRef{T}}, b::ZeRefArray{T}) where T =\n    Base.bitcast(RefOrZeRef{T}, Base.unsafe_convert(ZeRef{T}, b))\n"
  },
  {
    "path": "lib/level-zero/residency.jl",
    "content": "export make_resident, evict\n\n\n## memory\n\nfunction make_resident(ctx::ZeContext, dev::ZeDevice, buf::AbstractBuffer, size=sizeof(buf))\n    zeContextMakeMemoryResident(ctx, dev, buf, size)\nend\n\nfunction evict(ctx::ZeContext, dev::ZeDevice, buf::AbstractBuffer, size=sizeof(buf))\n    zeContextEvictMemory(ctx, dev, buf, size)\nend\n"
  },
  {
    "path": "lib/level-zero/utils.jl",
    "content": "isdebug(group) = Base.CoreLogging.current_logger_for_env(Base.CoreLogging.Debug, group, oneL0) !== nothing\n\n# Registered callbacks invoked during memory reclamation (e.g., flushing deferred MKL\n# sparse handle releases).  Extensions like oneMKL can register cleanup functions here\n# so they run when Level Zero reports OOM or when proactive GC fires.\nconst _reclaim_callbacks = Function[]\n\nfunction register_reclaim_callback!(f::Function)\n    return push!(_reclaim_callbacks, f)\nend\n\nfunction _run_reclaim_callbacks()\n    for cb in _reclaim_callbacks\n        try\n            cb()\n        catch\n        end\n    end\n    return\nend\n\nfunction retry_reclaim(f, isfailed)\n    ret = f()\n\n    # slow path, incrementally reclaiming more memory until we succeed\n    if isfailed(ret)\n        phase = 1\n        while true\n            if phase == 1\n                GC.gc(false)\n            elseif phase == 2\n                GC.gc(true)\n            elseif phase == 3\n                # After GC, finalizers may have deferred resource releases (e.g., MKL\n                # sparse handles).  Flush them now, then GC again to free the memory\n                # those releases made available.\n                _run_reclaim_callbacks()\n                GC.gc(true)\n            else\n                break\n            end\n            phase += 1\n\n            ret = f()\n            isfailed(ret) || break\n        end\n    end\n\n    ret\nend\n"
  },
  {
    "path": "lib/mkl/array.jl",
    "content": "export oneSparseMatrixCSR, oneSparseMatrixCSC, oneSparseMatrixCOO\n\nabstract type oneAbstractSparseArray{Tv, Ti, N} <: AbstractSparseArray{Tv, Ti, N} end\nconst oneAbstractSparseVector{Tv, Ti} = oneAbstractSparseArray{Tv, Ti, 1}\nconst oneAbstractSparseMatrix{Tv, Ti} = oneAbstractSparseArray{Tv, Ti, 2}\n\nmutable struct oneSparseMatrixCSR{Tv, Ti} <: oneAbstractSparseMatrix{Tv, Ti}\n    handle::Union{Nothing, matrix_handle_t}\n    rowPtr::oneVector{Ti}\n    colVal::oneVector{Ti}\n    nzVal::oneVector{Tv}\n    dims::NTuple{2,Int}\n    nnz::Ti\nend\n\nmutable struct oneSparseMatrixCSC{Tv, Ti} <: oneAbstractSparseMatrix{Tv, Ti}\n    handle::Union{Nothing, matrix_handle_t}\n    colPtr::oneVector{Ti}\n    rowVal::oneVector{Ti}\n    nzVal::oneVector{Tv}\n    dims::NTuple{2,Int}\n    nnz::Ti\nend\n\nmutable struct oneSparseMatrixCOO{Tv, Ti} <: oneAbstractSparseMatrix{Tv, Ti}\n    handle::Union{Nothing, matrix_handle_t}\n    rowInd::oneVector{Ti}\n    colInd::oneVector{Ti}\n    nzVal::oneVector{Tv}\n    dims::NTuple{2,Int}\n    nnz::Ti\nend\n\nBase.length(A::oneAbstractSparseMatrix) = prod(A.dims)\nBase.size(A::oneAbstractSparseMatrix) = A.dims\n\nfunction Base.size(A::oneAbstractSparseMatrix, d::Integer)\n    if d == 1 || d == 2\n        return A.dims[d]\n    else\n        throw(ArgumentError(\"dimension must be 1 or 2, got $d\"))\n    end\nend\n\nSparseArrays.nnz(A::oneAbstractSparseMatrix) = A.nnz\nSparseArrays.nonzeros(A::oneAbstractSparseMatrix) = A.nzVal\n\nfor (gpu, cpu) in [:oneSparseMatrixCSR => :SparseMatrixCSC,\n                   :oneSparseMatrixCSC => :SparseMatrixCSC,\n                   :oneSparseMatrixCOO => :SparseMatrixCSC]\n    @eval Base.show(io::IOContext, x::$gpu) =\n        show(io, $cpu(x))\n\n    @eval function Base.show(io::IO, mime::MIME\"text/plain\", S::$gpu)\n        xnnz = nnz(S)\n        m, n = size(S)\n        print(io, m, \"×\", n, \" \", typeof(S), \" with \", xnnz, \" stored \",\n                  xnnz == 1 ? \"entry\" : \"entries\")\n        if !(m == 0 || n == 0)\n            println(io, \":\")\n            io = IOContext(io, :typeinfo => eltype(S))\n            if ndims(S) == 1\n                show(io, $cpu(S))\n            else\n                # so that we get the nice Braille pattern\n                Base.print_array(io, $cpu(S))\n            end\n        end\n    end\nend\n"
  },
  {
    "path": "lib/mkl/fft.jl",
    "content": "# oneMKL FFT (DFT) high-level Julia interface\n# Inspired by AMDGPU ROCFFT interface style, adapted to oneMKL DFT C wrapper.\n\nmodule FFT\n\nusing ..oneMKL\nusing ..oneMKL: oneAPI, SYCL, syclQueue_t\nusing ..Support\nusing ..SYCL\nusing LinearAlgebra\nusing GPUArrays\nusing AbstractFFTs\nimport AbstractFFTs: complexfloat, realfloat\nimport AbstractFFTs: plan_fft, plan_fft!, plan_bfft, plan_bfft!\nimport AbstractFFTs: plan_rfft, plan_brfft, plan_inv, normalization, ScaledPlan\nimport AbstractFFTs: fft, bfft, ifft, rfft, Plan, ScaledPlan\nexport MKLFFTPlan\n\n# Import DFT enums and constants from Support module\nusing ..Support\n\n# Allow implicit conversion of SYCL queue object to raw handle when storing/passing\nBase.convert(::Type{syclQueue_t}, q::SYCL.syclQueue) = Base.unsafe_convert(syclQueue_t, q)\n\nabstract type MKLFFTPlan{T,K,inplace} <: AbstractFFTs.Plan{T} end\n\nBase.eltype(::MKLFFTPlan{T}) where T = T\nis_inplace(::MKLFFTPlan{<:Any,<:Any,inplace}) where inplace = inplace\n\n# Forward / inverse flags\nconst MKLFFT_FORWARD = true\nconst MKLFFT_INVERSE = false\n\nmutable struct cMKLFFTPlan{T,K,inplace,N,R,B} <: MKLFFTPlan{T,K,inplace}\n    handle::onemklDftDescriptor_t\n    queue::syclQueue_t\n    sz::NTuple{N,Int}\n    osz::NTuple{N,Int}\n    realdomain::Bool\n    region::NTuple{R,Int}\n    buffer::B\n    pinv::Any\nend\n\n# Real transforms use separate struct (mirroring AMDGPU style) for buffer staging\nmutable struct rMKLFFTPlan{T,K,inplace,N,R,B} <: MKLFFTPlan{T,K,inplace}\n    handle::onemklDftDescriptor_t\n    queue::syclQueue_t\n    sz::NTuple{N,Int}\n    osz::NTuple{N,Int}\n    xtype::Symbol\n    region::NTuple{R,Int}\n    buffer::B\n    pinv::Any\nend\n\n# Inverse plan constructors (derive from existing plan)\nfunction normalization_factor(sz, region)\n    # AbstractFFTs expects inverse to scale by 1/prod(lengths along region)\n    prod(ntuple(i-> sz[region[i]], length(region)))\nend\n\nfunction plan_inv(p::cMKLFFTPlan{T,MKLFFT_FORWARD,inplace,N,R,B}) where {T,inplace,N,R,B}\n    q = cMKLFFTPlan{T,MKLFFT_INVERSE,inplace,N,R,B}(p.handle,p.queue,p.sz,p.osz,p.realdomain,p.region,p.buffer,p)\n    p.pinv = q\n    ScaledPlan(q, 1/normalization_factor(p.sz, p.region))\nend\nfunction plan_inv(p::cMKLFFTPlan{T,MKLFFT_INVERSE,inplace,N,R,B}) where {T,inplace,N,R,B}\n    q = cMKLFFTPlan{T,MKLFFT_FORWARD,inplace,N,R,B}(p.handle,p.queue,p.sz,p.osz,p.realdomain,p.region,p.buffer,p)\n    p.pinv = q\n    ScaledPlan(q, 1/normalization_factor(p.sz, p.region))\nend\n\nfunction plan_inv(p::rMKLFFTPlan{T,MKLFFT_FORWARD,inplace,N,R,B}) where {T,inplace,N,R,B}\n    q = rMKLFFTPlan{T,MKLFFT_INVERSE,inplace,N,R,B}(p.handle,p.queue,p.sz,p.osz,:brfft,p.region,p.buffer,p)\n    p.pinv = q\n    ScaledPlan(q, 1/normalization_factor(p.sz, p.region))\nend\nfunction plan_inv(p::rMKLFFTPlan{T,MKLFFT_INVERSE,inplace,N,R,B}) where {T,inplace,N,R,B}\n    q = rMKLFFTPlan{T,MKLFFT_FORWARD,inplace,N,R,B}(p.handle,p.queue,p.sz,p.osz,:rfft,p.region,p.buffer,p)\n    p.pinv = q\n    ScaledPlan(q, 1/normalization_factor(p.sz, p.region))\nend\n\nfunction Base.show(io::IO, p::MKLFFTPlan{T,K,inplace}) where {T,K,inplace}\n    print(io, inplace ? \"oneMKL FFT in-place \" : \"oneMKL FFT \", K ? \"forward\" : \"inverse\", \" plan for \")\n    if isempty(p.sz); print(io, \"0-dimensional\") else print(io, join(p.sz, \"×\")) end\n    print(io, \" oneArray of \", T)\nend\n\n# Plan constructors\nfunction _create_descriptor(sz::NTuple{N,Int}, T::Type, complex::Bool) where {N}\n    prec = T<:Float64 || T<:ComplexF64 ? ONEMKL_DFT_PRECISION_DOUBLE : ONEMKL_DFT_PRECISION_SINGLE\n    dom = complex ? ONEMKL_DFT_DOMAIN_COMPLEX : ONEMKL_DFT_DOMAIN_REAL\n    desc_ref = Ref{onemklDftDescriptor_t}()\n    # Create descriptor for the full array dimensions\n    lengths = collect(Int64, sz)\n    st = length(lengths) == 1 ? onemklDftCreate1D(desc_ref, prec, dom, lengths[1]) : onemklDftCreateND(desc_ref, prec, dom, length(lengths), pointer(lengths))\n    st == 0 || error(\"onemkl DFT create failed (status $st)\")\n    desc = desc_ref[]\n    # Do not program descriptor scaling; we'll perform inverse normalization manually.\n    # Set placement explicitly based on plan type later\n    # Construct a SYCL queue from current Level Zero context/device (reuse global queue)\n    ze_ctx = oneAPI.context(); ze_dev = oneAPI.device()\n    sycl_dev = SYCL.syclDevice(SYCL.syclPlatform(oneAPI.driver()), ze_dev)\n    sycl_ctx = SYCL.syclContext([sycl_dev], ze_ctx)\n    q = SYCL.syclQueue(sycl_ctx, sycl_dev, oneAPI.global_queue(ze_ctx, ze_dev))\n    return desc, q\nend\n\n# Complex plans\nfunction plan_fft(X::oneAPI.oneArray{T,N}, region) where {T<:Union{ComplexF32,ComplexF64},N}\n    R = length(region); reg = NTuple{R,Int}(region)\n    # For now, only support full transforms (all dimensions)\n    if reg != ntuple(identity, N)\n        error(\"Partial dimension FFT not yet supported. Region $reg must be $(ntuple(identity, N))\")\n    end\n    desc, q = _create_descriptor(size(X), T, true)\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_NOT_INPLACE)\n    if N > 1\n        # Column-major strides: stride along dimension i is product of sizes of previous dims\n        strides = Vector{Int64}(undef, N+1); strides[1]=0\n        prod = 1\n        @inbounds for i in 1:N\n            strides[i+1] = prod\n            prod *= size(X,i)\n        end\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_FWD_STRIDES, pointer(strides), length(strides))\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_BWD_STRIDES, pointer(strides), length(strides))\n    end\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    return cMKLFFTPlan{T,MKLFFT_FORWARD,false,N,R,Nothing}(desc,q,size(X),size(X),false,reg,nothing,nothing)\nend\nfunction plan_bfft(X::oneAPI.oneArray{T,N}, region) where {T<:Union{ComplexF32,ComplexF64},N}\n    R = length(region); reg = NTuple{R,Int}(region)\n    # For now, only support full transforms (all dimensions)\n    if reg != ntuple(identity, N)\n        error(\"Partial dimension FFT not yet supported. Region $reg must be $(ntuple(identity, N))\")\n    end\n    desc, q = _create_descriptor(size(X), T, true)\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_NOT_INPLACE)\n    if N > 1\n        strides = Vector{Int64}(undef, N+1); strides[1]=0; prod=1\n        @inbounds for i in 1:N\n            strides[i+1]=prod; prod*=size(X,i)\n        end\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_FWD_STRIDES, pointer(strides), length(strides))\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_BWD_STRIDES, pointer(strides), length(strides))\n    end\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    return cMKLFFTPlan{T,MKLFFT_INVERSE,false,N,R,Nothing}(desc,q,size(X),size(X),false,reg,nothing,nothing)\nend\n\n# In-place (provide separate methods)\nfunction plan_fft!(X::oneAPI.oneArray{T,N}, region) where {T<:Union{ComplexF32,ComplexF64},N}\n    R = length(region); reg = NTuple{R,Int}(region)\n    # For now, only support full transforms (all dimensions)\n    if reg != ntuple(identity, N)\n        error(\"Partial dimension FFT not yet supported. Region $reg must be $(ntuple(identity, N))\")\n    end\n    desc,q = _create_descriptor(size(X),T,true)\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_INPLACE)\n    if N > 1\n        strides = Vector{Int64}(undef, N+1); strides[1]=0; prod=1\n        @inbounds for i in 1:N\n            strides[i+1]=prod; prod*=size(X,i)\n        end\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_FWD_STRIDES, pointer(strides), length(strides))\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_BWD_STRIDES, pointer(strides), length(strides))\n    end\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    cMKLFFTPlan{T,MKLFFT_FORWARD,true,N,R,Nothing}(desc,q,size(X),size(X),false,reg,nothing,nothing)\nend\nfunction plan_bfft!(X::oneAPI.oneArray{T,N}, region) where {T<:Union{ComplexF32,ComplexF64},N}\n    R = length(region); reg = NTuple{R,Int}(region)\n    # For now, only support full transforms (all dimensions)\n    if reg != ntuple(identity, N)\n        error(\"Partial dimension FFT not yet supported. Region $reg must be $(ntuple(identity, N))\")\n    end\n    desc,q = _create_descriptor(size(X),T,true)\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_INPLACE)\n    if N > 1\n        strides = Vector{Int64}(undef, N+1); strides[1]=0; prod=1\n        @inbounds for i in 1:N\n            strides[i+1]=prod; prod*=size(X,i)\n        end\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_FWD_STRIDES, pointer(strides), length(strides))\n        onemklDftSetValueInt64Array(desc, ONEMKL_DFT_PARAM_BWD_STRIDES, pointer(strides), length(strides))\n    end\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    cMKLFFTPlan{T,MKLFFT_INVERSE,true,N,R,Nothing}(desc,q,size(X),size(X),false,reg,nothing,nothing)\nend\n\n# Real input methods - convert to complex like FFTW does\nfunction plan_fft(X::oneAPI.oneArray{T,N}, region) where {T<:Union{Float32,Float64},N}\n    CT = Complex{T}\n    # Create a complex plan by converting the real array to complex\n    X_complex = oneAPI.oneArray{CT}(undef, size(X))\n    plan_fft(X_complex, region)\nend\n\nfunction plan_bfft(X::oneAPI.oneArray{T,N}, region) where {T<:Union{Float32,Float64},N}\n    CT = Complex{T}\n    # Create a complex plan by converting the real array to complex\n    X_complex = oneAPI.oneArray{CT}(undef, size(X))\n    plan_bfft(X_complex, region)\nend\n\nfunction plan_fft!(X::oneAPI.oneArray{T,N}, region) where {T<:Union{Float32,Float64},N}\n    error(\"In-place FFT not supported for real input arrays. Use plan_fft instead.\")\nend\n\nfunction plan_bfft!(X::oneAPI.oneArray{T,N}, region) where {T<:Union{Float32,Float64},N}\n    error(\"In-place FFT not supported for real input arrays. Use plan_bfft instead.\")\nend\n\n# Real forward (out-of-place) - supports multi-dimensional transforms\nfunction plan_rfft(X::oneAPI.oneArray{T,N}, region) where {T<:Union{Float32,Float64},N}\n    # Convert region to tuple if it's a range\n    if isa(region, AbstractUnitRange)\n        region = tuple(region...)\n    end\n    R = length(region); reg = NTuple{R,Int}(region)\n\n    # For single dimension transforms, use the optimized oneMKL real FFT\n    if R == 1 && reg[1] == 1\n        # Only support transform along first dimension for 1D case\n        return _plan_rfft_1d(X, reg)\n    end\n\n    # For multi-dimensional transforms, use complex FFT approach\n    # This is mathematically equivalent and works around oneMKL limitations\n    return _plan_rfft_nd(X, reg)\nend\n\n# Single-dimension real FFT using oneMKL (optimized path)\nfunction _plan_rfft_1d(X::oneAPI.oneArray{T,N}, reg::NTuple{1,Int}) where {T<:Union{Float32,Float64},N}\n    # Create 1D descriptor for the transform dimension\n    desc,q = _create_descriptor((size(X, reg[1]),), T, false)\n    xdims = size(X)\n    # output along first dim becomes N/2+1\n    ydims = Base.setindex(xdims, div(xdims[1],2)+1, 1)\n    buffer = oneAPI.oneArray{Complex{T}}(undef, ydims)\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_NOT_INPLACE)\n\n    # Set up for batched 1D transforms along first dimension\n    if N > 1\n        # Number of 1D transforms = product of all other dimensions\n        num_transforms = prod(xdims[2:end])\n        onemklDftSetValueInt64(desc, ONEMKL_DFT_PARAM_NUMBER_OF_TRANSFORMS, Int64(num_transforms))\n        # Distance between consecutive transforms (stride along batching dimension)\n        onemklDftSetValueInt64(desc, ONEMKL_DFT_PARAM_FWD_DISTANCE, Int64(xdims[1]))\n        onemklDftSetValueInt64(desc, ONEMKL_DFT_PARAM_BWD_DISTANCE, Int64(ydims[1]))\n    end\n\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    R = length(reg)\n    rMKLFFTPlan{T,MKLFFT_FORWARD,false,N,R,typeof(buffer)}(desc,q,xdims,ydims,:rfft,reg,buffer,nothing)\nend\n\n# Multi-dimensional real FFT using complex FFT approach\nstruct ComplexBasedRealFFTPlan{T,N,R} <: MKLFFTPlan{T,MKLFFT_FORWARD,false}\n    complex_plan::cMKLFFTPlan{Complex{T},MKLFFT_FORWARD,false,N,R,Nothing}\n    sz::NTuple{N,Int}\n    osz::NTuple{N,Int}\n    region::NTuple{R,Int}\nend\n\nfunction _plan_rfft_nd(X::oneAPI.oneArray{T,N}, reg::NTuple{R,Int}) where {T<:Union{Float32,Float64},N,R}\n    # Create complex version for planning\n    X_complex = oneAPI.oneArray{Complex{T}}(undef, size(X))\n    complex_plan = plan_fft(X_complex, reg)\n\n    # Calculate output dimensions (real FFT output size)\n    xdims = size(X)\n    ydims = ntuple(N) do i\n        if i in reg && i == minimum(reg)  # First dimension in region gets reduced\n            div(xdims[i], 2) + 1\n        else\n            xdims[i]\n        end\n    end\n\n    ComplexBasedRealFFTPlan{T,N,R}(complex_plan, xdims, ydims, reg)\nend\n\n# Show method for complex-based plan\nfunction Base.show(io::IO, p::ComplexBasedRealFFTPlan{T}) where {T}\n    print(io, \"oneMKL FFT forward plan for \")\n    if isempty(p.sz); print(io, \"0-dimensional\") else print(io, join(p.sz, \"×\")) end\n    print(io, \" oneArray of \", T, \" (multi-dimensional via complex FFT)\")\nend\n\n# Execution for complex-based real FFT plan\nfunction Base.:*(p::ComplexBasedRealFFTPlan{T,N,R}, X::oneAPI.oneArray{T}) where {T,N,R}\n    # Convert to complex\n    X_complex = Complex{T}.(X)\n\n    # Perform complex FFT\n    Y_complex = p.complex_plan * X_complex\n\n    # Extract appropriate portion for real FFT result\n    # For real FFT, we only need roughly half the output due to conjugate symmetry\n    indices = ntuple(N) do i\n        if i in p.region && i == minimum(p.region)\n            # First dimension in region: take 1:(N÷2+1)\n            1:(div(p.sz[i], 2) + 1)\n        else\n            # Other dimensions: take all\n            1:p.sz[i]\n        end\n    end\n\n    Y = Y_complex[indices...]\n    return Y\nend\n\n\n\n# Real inverse (complex->real) requires complex input shape - supports multi-dimensional transforms\nfunction plan_brfft(X::oneAPI.oneArray{T,N}, d::Integer, region) where {T<:Union{ComplexF32,ComplexF64},N}\n    # Convert region to tuple if it's a range\n    if isa(region, AbstractUnitRange)\n        region = tuple(region...)\n    end\n    R = length(region); reg = NTuple{R,Int}(region)\n\n    # For single dimension transforms along first dim, use optimized oneMKL path\n    if R == 1 && reg[1] == 1\n        return _plan_brfft_1d(X, d, reg)\n    end\n\n    # For multi-dimensional transforms, use complex FFT approach\n    return _plan_brfft_nd(X, d, reg)\nend\n\n# Single-dimension real inverse FFT using oneMKL (optimized path)\nfunction _plan_brfft_1d(X::oneAPI.oneArray{T,N}, d::Integer, reg::NTuple{1,Int}) where {T<:Union{ComplexF32,ComplexF64},N}\n    # Extract underlying real type R from Complex{R}\n    @assert T <: Complex\n    RT = T.parameters[1]\n\n    # Create 1D descriptor for the transform dimension\n    desc,q = _create_descriptor((d,), RT, false)\n    xdims = size(X)\n    ydims = Base.setindex(xdims, d, 1)\n    buffer = oneAPI.oneArray{T}(undef, xdims) # copy for safety\n    onemklDftSetValueConfigValue(desc, ONEMKL_DFT_PARAM_PLACEMENT, ONEMKL_DFT_VALUE_NOT_INPLACE)\n\n    # For now, disable batching for real inverse FFTs due to oneMKL parameter conflicts\n    # Use loop-based approach instead for multi-dimensional arrays\n    if N > 1\n        @info \"Batched real inverse FFTs not yet supported by oneMKL - please use loop-based approach or 1D arrays\"\n    end\n\n    stc = onemklDftCommit(desc, q); stc == 0 || error(\"commit failed ($stc)\")\n    R = length(reg)\n    rMKLFFTPlan{T,MKLFFT_INVERSE,false,N,R,typeof(buffer)}(desc,q,xdims,ydims,:brfft,reg,buffer,nothing)\nend\n\n# Multi-dimensional real inverse FFT using complex FFT approach\nstruct ComplexBasedRealIFFTPlan{T,N,R} <: MKLFFTPlan{T,MKLFFT_INVERSE,false}\n    complex_plan::cMKLFFTPlan{T,MKLFFT_INVERSE,false,N,R,Nothing}\n    sz::NTuple{N,Int}\n    osz::NTuple{N,Int}\n    region::NTuple{R,Int}\n    d::Int  # Original size of the reduced dimension\nend\n\nfunction _plan_brfft_nd(X::oneAPI.oneArray{T,N}, d::Integer, reg::NTuple{R,Int}) where {T<:Union{ComplexF32,ComplexF64},N,R}\n    # Calculate the full complex array size (before real FFT reduction)\n    xdims = size(X)\n    full_complex_dims = ntuple(N) do i\n        if i in reg && i == minimum(reg)  # First dimension in region was reduced\n            d  # Restore original size\n        else\n            xdims[i]\n        end\n    end\n\n    # Create complex version for planning - use the full size\n    X_complex_full = oneAPI.oneArray{T}(undef, full_complex_dims)\n    complex_plan = plan_bfft(X_complex_full, reg)\n\n    ComplexBasedRealIFFTPlan{T,N,R}(complex_plan, xdims, full_complex_dims, reg, d)\nend\n\n# Show method for complex-based inverse plan\nfunction Base.show(io::IO, p::ComplexBasedRealIFFTPlan{T}) where {T}\n    print(io, \"oneMKL FFT inverse plan for \")\n    if isempty(p.sz); print(io, \"0-dimensional\") else print(io, join(p.sz, \"×\")) end\n    print(io, \" oneArray of \", T, \" (multi-dimensional via complex FFT)\")\nend\n\n# Execution for complex-based real inverse FFT plan\nfunction Base.:*(p::ComplexBasedRealIFFTPlan{T,N,R}, X::oneAPI.oneArray{T}) where {T,N,R}\n    # Reconstruct full complex array by exploiting conjugate symmetry\n    # This is a simplified approach - for full accuracy, we'd need to properly\n    # reconstruct the conjugate symmetric part\n\n    # For now, pad with zeros (this works for certain cases but isn't fully general)\n    xdims = size(X)\n    full_indices = ntuple(N) do i\n        if i in p.region && i == minimum(p.region)\n            # Extend the reduced dimension\n            1:p.d\n        else\n            1:xdims[i]\n        end\n    end\n\n    # Create full complex array and copy the available data\n    X_full = oneAPI.oneArray{T}(undef, p.osz)\n    fill!(X_full, zero(T))\n\n    # Copy the input data to the appropriate slice\n    # NOTE: This is a simplified approach that doesn't fully reconstruct\n    # conjugate symmetry. For full accuracy, proper conjugate symmetric\n    # reconstruction should be implemented.\n    copy_indices = ntuple(N) do i\n        if i in p.region && i == minimum(p.region)\n            1:xdims[i]  # Only the available part\n        else\n            1:xdims[i]\n        end\n    end\n\n    X_full[copy_indices...] = X\n\n    # Perform complex inverse FFT\n    Y_complex = p.complex_plan * X_full\n\n    # Extract real part (this is where the real output comes from)\n    return real.(Y_complex)\nend\n\n# Inverse plan for complex-based real FFT plans\nfunction plan_inv(p::ComplexBasedRealFFTPlan{T,N,R}) where {T,N,R}\n    # For real FFT inverse, we need plan_brfft functionality\n    # The first dimension in the region should be the one that was reduced\n    first_dim = minimum(p.region)\n    d = p.sz[first_dim]  # Original size of the reduced dimension\n\n    # Create inverse plan using our new multi-dimensional brfft\n    brfft_plan = _plan_brfft_nd(oneAPI.oneArray{Complex{T}}(undef, p.osz), d, p.region)\n    ScaledPlan(brfft_plan, 1/normalization_factor(p.sz, p.region))\nend\n\n# Inverse plan for complex-based real inverse FFT plans\nfunction plan_inv(p::ComplexBasedRealIFFTPlan{T,N,R}) where {T,N,R}\n    # Create forward plan\n    forward_plan = _plan_rfft_nd(oneAPI.oneArray{real(T)}(undef, p.osz), p.region)\n    ScaledPlan(forward_plan, 1/normalization_factor(p.osz, p.region))\nend\n\n\n\n# Convenience no-region methods use all dimensions in order\nplan_fft(X::oneAPI.oneArray) = plan_fft(X, ntuple(identity, ndims(X)))\nplan_bfft(X::oneAPI.oneArray) = plan_bfft(X, ntuple(identity, ndims(X)))\nplan_fft!(X::oneAPI.oneArray) = plan_fft!(X, ntuple(identity, ndims(X)))\nplan_bfft!(X::oneAPI.oneArray) = plan_bfft!(X, ntuple(identity, ndims(X)))\nplan_rfft(X::oneAPI.oneArray) = plan_rfft(X, ntuple(identity, ndims(X)))  # default all dims like Base.rfft\nplan_brfft(X::oneAPI.oneArray, d::Integer) = plan_brfft(X, d, ntuple(identity, ndims(X)))\n\n# Alias names to mirror AMDGPU / AbstractFFTs style\nconst plan_ifft = plan_bfft\nconst plan_ifft! = plan_bfft!\n# plan_irfft should be normalized, unlike plan_brfft\nplan_irfft(X::oneAPI.oneArray{T,N}, d::Integer, region) where {T,N} = begin\n    p = plan_brfft(X, d, region)\n    ScaledPlan(p, 1/normalization_factor(p.sz, p.region))\nend\nplan_irfft(X::oneAPI.oneArray{T,N}, d::Integer) where {T,N} = plan_irfft(X, d, (1,))\n\n# Inversion\nBase.inv(p::MKLFFTPlan) = plan_inv(p)\n\n# High-level wrappers operating like CPU FFTW versions.\nfunction fft(X::oneAPI.oneArray{T}) where {T<:Union{ComplexF32,ComplexF64}}\n    (plan_fft(X) * X)\nend\nfunction ifft(X::oneAPI.oneArray{T}) where {T<:Union{ComplexF32,ComplexF64}}\n    p = plan_bfft(X)\n    # Apply normalization for ifft (unlike bfft which is unnormalized)\n    scaling = one(T) / normalization_factor(size(X), ntuple(identity, ndims(X)))\n    scaling * (p * X)\nend\nfunction fft!(X::oneAPI.oneArray{T}) where {T<:Union{ComplexF32,ComplexF64}}\n    (plan_fft!(X) * X; X)\nend\nfunction ifft!(X::oneAPI.oneArray{T}) where {T<:Union{ComplexF32,ComplexF64}}\n    p = plan_bfft!(X)\n    # Apply normalization for ifft! (unlike bfft! which is unnormalized)\n    scaling = one(T) / normalization_factor(size(X), ntuple(identity, ndims(X)))\n    p * X\n    X .*= scaling\n    X\nend\nfunction rfft(X::oneAPI.oneArray{T}) where {T<:Union{Float32,Float64}}\n    (plan_rfft(X) * X)\nend\nfunction irfft(X::oneAPI.oneArray{T}, d::Integer) where {T<:Union{ComplexF32,ComplexF64}}\n    # Use the normalized plan_irfft instead of unnormalized plan_brfft\n    (plan_irfft(X, d) * X)\nend\n\n# Execution helpers\n_rawptr(a::oneAPI.oneArray{T}) where T = reinterpret(Ptr{Cvoid}, pointer(a))\n\nfunction _exec!(p::cMKLFFTPlan{T,MKLFFT_FORWARD,true}, X::oneAPI.oneArray{T}) where T\n    st = onemklDftComputeForward(p.handle, _rawptr(X)); st==0 || error(\"forward FFT failed ($st)\"); X\nend\nfunction _exec!(p::cMKLFFTPlan{T,MKLFFT_INVERSE,true}, X::oneAPI.oneArray{T}) where T\n    st = onemklDftComputeBackward(p.handle, _rawptr(X)); st==0 || error(\"inverse FFT failed ($st)\"); X\nend\nfunction _exec!(p::cMKLFFTPlan{T,K,false}, X::oneAPI.oneArray{T}, Y::oneAPI.oneArray{T}) where {T,K}\n    st = (K==MKLFFT_FORWARD ? onemklDftComputeForwardOutOfPlace : onemklDftComputeBackwardOutOfPlace)(p.handle, _rawptr(X), _rawptr(Y)); st==0 || error(\"FFT failed ($st)\"); Y\nend\n\n# Real forward\nfunction _exec!(p::rMKLFFTPlan{T,MKLFFT_FORWARD,false}, X::oneAPI.oneArray{T}, Y::oneAPI.oneArray{Complex{T}}) where T\n    st = onemklDftComputeForwardOutOfPlace(p.handle, _rawptr(X), _rawptr(Y)); st==0 || error(\"rfft failed ($st)\"); Y\nend\n# Real inverse (complex -> real)\nfunction _exec!(p::rMKLFFTPlan{T,MKLFFT_INVERSE,false}, X::oneAPI.oneArray{T}, Y::oneAPI.oneArray{R}) where {R,T<:Complex{R}}\n    st = onemklDftComputeBackwardOutOfPlace(p.handle, _rawptr(X), _rawptr(Y)); st==0 || error(\"brfft failed ($st)\"); Y\nend\n\n# Public API similar to AMDGPU\nfunction Base.:*(p::cMKLFFTPlan{T,K,true}, X::oneAPI.oneArray{T}) where {T,K}\n    _exec!(p,X)\nend\nfunction Base.:*(p::cMKLFFTPlan{T,K,false}, X::oneAPI.oneArray{T}) where {T,K}\n    Y = oneAPI.oneArray{T}(undef, p.osz); _exec!(p,X,Y)\nend\nfunction LinearAlgebra.mul!(Y::oneAPI.oneArray{T}, p::cMKLFFTPlan{T,K,false}, X::oneAPI.oneArray{T}) where {T,K}\n    _exec!(p,X,Y)\nend\n\n# Real forward\nfunction Base.:*(p::rMKLFFTPlan{T,MKLFFT_FORWARD,false}, X::oneAPI.oneArray{T}) where {T<:Union{Float32,Float64}}\n    Y = oneAPI.oneArray{Complex{T}}(undef, p.osz); _exec!(p,X,Y)\nend\nfunction LinearAlgebra.mul!(Y::oneAPI.oneArray{Complex{T}}, p::rMKLFFTPlan{T,MKLFFT_FORWARD,false}, X::oneAPI.oneArray{T}) where {T<:Union{Float32,Float64}}\n    _exec!(p,X,Y)\nend\n# Real inverse\nfunction Base.:*(p::rMKLFFTPlan{T,MKLFFT_INVERSE,false}, X::oneAPI.oneArray{T}) where {R,T<:Complex{R}}\n    Y = oneAPI.oneArray{R}(undef, p.osz); _exec!(p,X,Y)\nend\nfunction LinearAlgebra.mul!(Y::oneAPI.oneArray{R}, p::rMKLFFTPlan{T,MKLFFT_INVERSE,false}, X::oneAPI.oneArray{T}) where {R,T<:Complex{R}}\n    _exec!(p,X,Y)\nend\n\n# Support for applying complex plans to real arrays (convert real to complex first)\nfunction Base.:*(p::cMKLFFTPlan{T,K,false}, X::oneAPI.oneArray{R}) where {T,K,R<:Union{Float32,Float64}}\n    # Only allow if T is the complex version of R\n    if T != Complex{R}\n        error(\"Type mismatch: plan expects $(T) but got $(R)\")\n    end\n    # Convert real input to complex\n    X_complex = complex.(X)\n    p * X_complex\nend\n\nfunction LinearAlgebra.mul!(Y::oneAPI.oneArray{T}, p::cMKLFFTPlan{T,K,false}, X::oneAPI.oneArray{R}) where {T,K,R<:Union{Float32,Float64}}\n    # Only allow if T is the complex version of R\n    if T != Complex{R}\n        error(\"Type mismatch: plan expects $(T) but got $(R)\")\n    end\n    # Convert real input to complex\n    X_complex = complex.(X)\n    _exec!(p, X_complex, Y)\nend\n\nend # module FFT\n"
  },
  {
    "path": "lib/mkl/interfaces.jl",
    "content": "# interfacing with other packages\n\nusing LinearAlgebra: BlasComplex, BlasFloat, BlasReal, MulAddMul\n\n# legacy methods with final MulAddMul argument\nLinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSR{T}, B::oneVector{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} =\n    LinearAlgebra.generic_matvecmul!(C, tA, A, B, _add.alpha, _add.beta)\nLinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSC{T}, B::oneVector{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} =\n    LinearAlgebra.generic_matvecmul!(C, tA, A, B, _add.alpha, _add.beta)\nLinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} =\n    LinearAlgebra.generic_matmatmul!(C, tA, tB, A, B, _add.alpha, _add.beta)\nLinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSC{T}, B::oneMatrix{T}, _add::MulAddMul) where {T <: Union{Float16, ComplexF16, BlasFloat}} =\n    LinearAlgebra.generic_matmatmul!(C, tA, tB, A, B, _add.alpha, _add.beta)\n\nfunction LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSR{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasFloat}\n    tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA\n    return sparse_gemv!(tA, alpha, A, B, beta, C)\nend\n\nfunction LinearAlgebra.generic_matvecmul!(C::oneVector{T}, tA::AbstractChar, A::oneSparseMatrixCSC{T}, B::oneVector{T}, alpha::Number, beta::Number) where {T <: BlasReal}\n    tA = tA in ('S', 's', 'H', 'h') ? 'T' : flip_trans(tA)\n    return sparse_gemv!(tA, alpha, A, B, beta, C)\nend\n\nfunction LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasFloat}\n    tA = tA in ('S', 's', 'H', 'h') ? 'N' : tA\n    tB = tB in ('S', 's', 'H', 'h') ? 'N' : tB\n    return sparse_gemm!(tA, tB, alpha, A, B, beta, C)\nend\n\nfunction LinearAlgebra.generic_matmatmul!(C::oneMatrix{T}, tA, tB, A::oneSparseMatrixCSC{T}, B::oneMatrix{T}, alpha::Number, beta::Number) where {T <: BlasReal}\n    tA = tA in ('S', 's', 'H', 'h') ? 'T' : flip_trans(tA)\n    tB = tB in ('S', 's', 'H', 'h') ? 'N' : tB\n    return sparse_gemm!(tA, tB, alpha, A, B, beta, C)\nend\n\nfunction LinearAlgebra.generic_trimatdiv!(C::oneVector{T}, uploc, isunitc, tfun::Function, A::oneSparseMatrixCSR{T}, B::oneVector{T}) where {T <: BlasFloat}\n    return sparse_trsv!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), A, B, C)\nend\n\nfunction LinearAlgebra.generic_trimatdiv!(C::oneMatrix{T}, uploc, isunitc, tfun::Function, A::oneSparseMatrixCSR{T}, B::oneMatrix{T}) where {T <: BlasFloat}\n    return sparse_trsm!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', 'N', isunitc, one(T), A, B, C)\nend\n"
  },
  {
    "path": "lib/mkl/linalg.jl",
    "content": "# interfacing with LinearAlgebra standard library\n\nimport LinearAlgebra\nusing LinearAlgebra: Transpose, Adjoint,\n                     Hermitian, Symmetric,\n                     LowerTriangular, UnitLowerTriangular,\n                     UpperTriangular, UnitUpperTriangular,\n                     MulAddMul, wrap\n\n#\n# BLAS 1\n#\n\nLinearAlgebra.rmul!(x::oneStridedVecOrMat{T}, k::Number) where T<:Union{onemklHalf,onemklFloat} =\n    scal!(length(x), T(k), x)\n\n# Work around ambiguity with GPUArrays wrapper\nLinearAlgebra.rmul!(x::oneStridedVecOrMat{<:onemklFloat}, k::Real) =\n\tinvoke(LinearAlgebra.rmul!, Tuple{typeof(x), Number}, x, k)\n\nLinearAlgebra.norm(x::oneStridedVecOrMat{<:Union{Float16,ComplexF16,onemklFloat}}) = nrm2(length(x), x)\n\nfunction LinearAlgebra.dot(x::oneStridedVector{T}, y::oneStridedVector{T}) where T<:Union{Float16, Float32, Float64}\n    n = length(x)\n    n == length(y) || throw(DimensionMismatch(\"dot product arguments have lengths $(length(x)) and $(length(y))\"))\n    dot(n, x, y)\nend\n\nfunction LinearAlgebra.dot(x::oneStridedVector{T}, y::oneStridedVector{T}) where T<:Union{ComplexF16,ComplexF32, ComplexF64}\n    n = length(x)\n    n == length(y) || throw(DimensionMismatch(\"dot product arguments have lengths $(length(x)) and $(length(y))\"))\n    dotc(n, x, y)\nend\n\nfunction LinearAlgebra.:(*)(transx::Transpose{<:Any,<:oneStridedVector{T}}, y::oneStridedVector{T}) where T <:Union{ComplexF16, ComplexF32, ComplexF64}\n    x = transx.parent\n    n = length(x)\n    n == length(y) || throw(DimensionMismatch(\"dot product arguments have lengths $(length(x)) and $(length(y))\"))\n    oneMKL.dotu(n, x, y)\nend\n\nLinearAlgebra.BLAS.asum(x::oneStridedVecOrMat{<:onemklFloat}) = asum(length(x), x)\n\nfunction LinearAlgebra.axpy!(alpha::Number, x::oneStridedVecOrMat{T}, y::oneStridedVecOrMat{T}) where T<:Union{onemklHalf,onemklFloat}\n    length(x)==length(y) || throw(DimensionMismatch(\"axpy arguments have lengths $(length(x)) and $(length(y))\"))\n    axpy!(length(x), alpha, x, y)\nend\n\nfunction LinearAlgebra.axpby!(alpha::Number, x::oneStridedVecOrMat{T}, beta::Number, y::oneStridedVecOrMat{T}) where T<:onemklFloat\n    length(x)==length(y) || throw(DimensionMismatch(\"axpby arguments have lengths $(length(x)) and $(length(y))\"))\n    axpby!(length(x), alpha, x, beta, y)\nend\n\nfunction LinearAlgebra.rotate!(x::oneStridedVecOrMat{T}, y::oneStridedVecOrMat{T}, c::Number, s::Number) where T<:onemklFloat\n    nx = length(x)\n    ny = length(y)\n    nx==ny || throw(DimensionMismatch(\"rotate arguments have lengths $nx and $ny\"))\n    rot!(nx, x, y, c, s)\nend\n\nfunction LinearAlgebra.reflect!(x::oneStridedVecOrMat{T}, y::oneStridedVecOrMat{T}, c::Number, s::Number) where T<:onemklFloat\n    nx = length(x)\n    ny = length(y)\n    nx==ny || throw(DimensionMismatch(\"reflect arguments have lengths $nx and $ny\"))\n    rot!(nx, x, y, c, s)\n    scal!(ny, -one(real(T)), y)\n    x, y\nend\n\n#\n# BLAS 2\n\nLinearAlgebra.generic_matvecmul!(Y::oneVector, tA::AbstractChar, A::oneStridedMatrix, B::oneStridedVector, _add::MulAddMul) =\n    LinearAlgebra.generic_matvecmul!(Y, tA, A, B, _add.alpha, _add.beta)\nfunction LinearAlgebra.generic_matvecmul!(Y::oneVector, tA::AbstractChar, A::oneStridedMatrix, B::oneStridedVector, a::Number, b::Number)\n    mA, nA = tA == 'N' ? size(A) : reverse(size(A))\n\n    if nA != length(B)\n        throw(DimensionMismatch(\"second dimension of A, $nA, does not match length of B, $(length(B))\"))\n    end\n\n    if mA != length(Y)\n        throw(DimensionMismatch(\"first dimension of A, $mA, does not match length of Y, $(length(Y))\"))\n    end\n\n    if mA == 0\n        return Y\n    end\n\n    if nA == 0\n        return rmul!(Y, 0)\n    end\n\n    T = eltype(Y)\n    alpha, beta = promote(a, b, zero(T))\n    if alpha isa Union{Bool,T} && beta isa Union{Bool,T}\n        if T <: onemklFloat && eltype(A) == eltype(B) == T\n            if tA in ('N', 'T', 'C')\n                return gemv!(tA, alpha, A, B, beta, Y)\n            elseif tA in ('S', 's')\n                return symv!(tA == 'S' ? 'U' : 'L', alpha, A, B, beta, Y)\n            elseif tA in ('H', 'h')\n                return hemv!(tA == 'H' ? 'U' : 'L', alpha, A, B, beta, Y)\n            end\n        end\n    end\n    return LinearAlgebra.generic_matmatmul!(Y, tA, 'N', A, B, alpha, beta)\nend\n\n# triangular\n## multiplication\nLinearAlgebra.generic_trimatmul!(c::oneStridedVector{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, b::oneStridedVector{T}) where {T<:onemklFloat} =\n    trmv!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, A, c === b ? c : copyto!(c, b))\n## division\nLinearAlgebra.generic_trimatdiv!(C::oneStridedVector{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, B::oneStridedVector{T}) where {T<:onemklFloat} =\n    trsv!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, A, C === B ? C : copyto!(C, B))\n\n\n#\n# BLAS 3\n#\n\nLinearAlgebra.generic_matmatmul!(\n    C::oneStridedVecOrMat, tA, tB, A::oneStridedVecOrMat,\n    B::oneStridedVecOrMat, _add::MulAddMul,\n) = LinearAlgebra.generic_matmatmul!(C, tA, tB, A, B, _add.alpha, _add.beta)\nfunction LinearAlgebra.generic_matmatmul!(\n        C::oneStridedVecOrMat, tA, tB, A::oneStridedVecOrMat,\n        B::oneStridedVecOrMat, alpha::Number, beta::Number,\n    )\n    T = eltype(C)\n    mA, nA = size(A, tA == 'N' ? 1 : 2), size(A, tA == 'N' ? 2 : 1)\n    mB, nB = size(B, tB == 'N' ? 1 : 2), size(B, tB == 'N' ? 2 : 1)\n\n    nA != mB && throw(\n        DimensionMismatch(\n            \"A has dimensions ($mA,$nA) but B has dimensions ($mB,$nB)\"\n        )\n    )\n    (C === A || B === C) && throw(\n        ArgumentError(\n            \"output matrix must not be aliased with input matrix\"\n        )\n    )\n\n    if mA == 0 || nA == 0 || nB == 0\n        size(C) != (mA, nB) && throw(\n            DimensionMismatch(\n                \"C has dimensions $(size(C)), should have ($mA,$nB)\"\n            )\n        )\n        return LinearAlgebra.rmul!(C, 0)\n    end\n\n    T = eltype(C)\n\n    if alpha isa Union{Bool,T} && beta isa Union{Bool,T}\n        # TODO: should the gemm part above be included in this branch?\n        α, β = T(alpha), T(beta)\n        if (\n                all(in(('N', 'T', 'C')), (tA, tB)) && T <: Union{onemklFloat, onemklComplex, onemklHalf} &&\n                    A isa oneStridedArray{T} && B isa oneStridedArray{T}\n            )\n            return gemm!(tA, tB, α, A, B, β, C)\n        elseif (tA == 'S' || tA == 's') && tB == 'N'\n            return symm!('L', tA == 'S' ? 'U' : 'L', α, A, B, β, C)\n        elseif (tB == 'S' || tB == 's') && tA == 'N'\n            return symm!('R', tB == 'S' ? 'U' : 'L', α, B, A, β, C)\n        elseif (tA == 'H' || tA == 'h') && tB == 'N'\n            return hemm!('L', tA == 'H' ? 'U' : 'L', α, A, B, β, C)\n        elseif (tB == 'H' || tB == 'h') && tA == 'N'\n            return hemm!('R', tB == 'H' ? 'U' : 'L', α, B, A, β, C)\n        end\n    end\n\n    GPUArrays.generic_matmatmul!(C, wrap(A, tA), wrap(B, tB), alpha, beta)\nend\n\n# triangular\nLinearAlgebra.generic_trimatmul!(C::oneStridedMatrix{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, B::oneStridedMatrix{T}) where {T<:onemklFloat} =\n    trmm!('L', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), A, C === B ? C : copyto!(C, B))\nLinearAlgebra.generic_mattrimul!(C::oneStridedMatrix{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, B::oneStridedMatrix{T}) where {T<:onemklFloat} =\n    trmm!('R', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), B, C === A ? C : copyto!(C, A))\nLinearAlgebra.generic_trimatdiv!(C::oneStridedMatrix{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, B::oneStridedMatrix{T}) where {T<:onemklFloat} =\n    trsm!('L', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), A, C === B ? C : copyto!(C, B))\nLinearAlgebra.generic_mattridiv!(C::oneStridedMatrix{T}, uploc, isunitc, tfun::Function, A::oneStridedMatrix{T}, B::oneStridedMatrix{T}) where {T<:onemklFloat} =\n    trsm!('R', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), B, C === A ? C : copyto!(C, A))\n\n#\n# BLAS extensions\n#\n\n# Extend LinearAlgebra.BLAS.herk! to dispatch to oneAPI implementation\nfor (elty) in ([Float32, ComplexF32], [Float64, ComplexF64])\n    @eval begin\n        LinearAlgebra.BLAS.herk!(uplo::Char, trans::Char, alpha::$elty[1], A::oneStridedVecOrMat{$elty[2]}, beta::$elty[1], C::oneStridedMatrix{$elty[2]}) =\n            herk!(uplo, trans, alpha, A, beta, C)\n    end\nend\n\n# Extend LinearAlgebra.BLAS.syrk! to dispatch to oneAPI implementation\nfor (elty) in (Float32, Float64, ComplexF32, ComplexF64)\n    @eval begin\n        LinearAlgebra.BLAS.syrk!(uplo::Char, trans::Char, alpha::$elty, A::oneStridedVecOrMat{$elty}, beta::$elty, C::oneStridedMatrix{$elty}) =\n            syrk!(uplo, trans, alpha, A, beta, C)\n    end\nend\n"
  },
  {
    "path": "lib/mkl/oneMKL.jl",
    "content": "module oneMKL\n\nusing ..oneAPI\nusing ..oneAPI: unsafe_free!\nusing ..oneL0\n\nusing ..Support\n\nusing ..SYCL\nusing ..SYCL: syclQueue_t\n\nusing GPUArrays\n\nusing LinearAlgebra\nusing LinearAlgebra: checksquare\nusing LinearAlgebra.LAPACK: chkargsok, chklapackerror, chktrans, chkside, chkdiag, chkuplo\n\nusing SparseArrays\n\n# Exclude Float16 for now, since many oneMKL functions do not take Float16\nconst onemklFloat = Union{Float64,Float32,ComplexF64,ComplexF32}\nconst onemklComplex = Union{ComplexF32,ComplexF64}\nconst onemklHalf = Float16\n\ninclude(\"array.jl\")\ninclude(\"utils.jl\")\ninclude(\"wrappers_blas.jl\")\ninclude(\"wrappers_lapack.jl\")\ninclude(\"wrappers_sparse.jl\")\ninclude(\"linalg.jl\")\ninclude(\"interfaces.jl\")\ninclude(\"fft.jl\")\n\n# Register deferred sparse handle flush as a memory reclaim callback so that OOM\n# recovery (retry_reclaim) and proactive GC (_maybe_gc) can free MKL internal buffers\n# associated with sparse matrix handles that were deferred from finalizer threads.\noneL0.register_reclaim_callback!(flush_deferred_sparse_releases)\n\nfunction version()\n    major = Ref{Int64}()\n    minor = Ref{Int64}()\n    patch = Ref{Int64}()\n    onemkl_version(major, minor, patch)\n    return VersionNumber(major[], minor[], patch[])\nend\n\nfunction band(A::StridedArray, kl, ku)\n    m, n = size(A)\n    AB = zeros(eltype(A),kl+ku+1,n)\n    for j = 1:n\n        for i = max(1,j-ku):min(m,j+kl)\n            AB[ku+1-j+i,j] = A[i,j]\n        end\n    end\n    return AB\nend\n\n# convert band storage to general matrix\nfunction unband(AB::StridedArray,m,kl,ku)\n    bm, n = size(AB)\n    A = zeros(eltype(AB),m,n)\n    for j = 1:n\n        for i = max(1,j-ku):min(m,j+kl)\n            A[i,j] = AB[ku+1-j+i,j]\n        end\n    end\n    return A\nend\n\n# zero out elements not on matrix bands\nfunction bandex(A::AbstractMatrix,kl,ku)\n    m, n = size(A)\n    AB = band(A,kl,ku)\n    B = unband(AB,m,kl,ku)\n    return B\nend\n\nend\n"
  },
  {
    "path": "lib/mkl/utils.jl",
    "content": "#\n# Auxiliary\n#\n\nfunction Base.convert(::Type{onemklSide}, side::Char)\n    if side == 'L'\n        return ONEMKL_SIDE_LEFT\n    elseif side == 'R'\n        return ONEMKL_SIDE_RIGHT\n    else\n        throw(ArgumentError(\"Unknown transpose $side\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklTranspose}, trans::Char)\n    if trans == 'N'\n        return ONEMKL_TRANSPOSE_NONTRANS\n    elseif trans == 'T'\n        return ONEMKL_TRANSPOSE_TRANS\n    elseif trans == 'C'\n        return ONEMLK_TRANSPOSE_CONJTRANS\n    else\n        throw(ArgumentError(\"Unknown transpose $trans\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklUplo}, uplo::Char)\n    if uplo == 'U'\n        return ONEMKL_UPLO_UPPER\n    elseif uplo == 'L'\n        return ONEMKL_UPLO_LOWER\n    else\n        throw(ArgumentError(\"Unknown transpose $uplo\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklDiag}, diag::Char)\n    if diag == 'N'\n        return ONEMKL_DIAG_NONUNIT\n    elseif diag == 'U'\n        return ONEMKL_DIAG_UNIT\n    else\n        throw(ArgumentError(\"Unknown transpose $diag\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklIndex}, index::Char)\n    if index == 'O'\n        return ONEMKL_INDEX_ONE\n    elseif index == 'Z'\n        return ONEMKL_INDEX_ZERO\n    else\n        throw(ArgumentError(\"Unknown index $index\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklLayout}, index::Char)\n    if index == 'R'\n        return ONEMKL_LAYOUT_ROW\n    elseif index == 'C'\n        return ONEMKL_LAYOUT_COL\n    else\n        throw(ArgumentError(\"Unknown layout $layout\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklJobsvd}, job::Char)\n    if job == 'N'\n        return ONEMKL_JOBSVD_N\n    elseif job == 'A'\n        return ONEMKL_JOBSVD_A\n    elseif job == 'O'\n        return ONEMKL_JOBSVD_O\n    elseif job == 'S'\n        return ONEMKL_JOBSVD_S\n    else\n        throw(ArgumentError(\"Unknown job $job.\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklJob}, job::Char)\n    if job == 'N'\n        return ONEMKL_JOB_N\n    elseif job == 'V'\n        return ONEMKL_JOB_V\n    elseif job == 'U'\n        return ONEMKL_JOB_U\n    elseif job == 'A'\n        return ONEMKL_JOB_A\n    elseif job == 'S'\n        return ONEMKL_JOB_S\n    elseif job == 'O'\n        return ONEMKL_JOB_O\n    else\n        throw(ArgumentError(\"Unknown job $job.\"))\n    end\nend\n\nfunction Base.convert(::Type{onemklRangev}, range::Char)\n    if range == 'A'\n        return ONEMKL_RANGEV_A\n    elseif range == 'V'\n        return ONEMKL_RANGEV_V\n    elseif range == 'I'\n        return ONEMKL_RANGEV_I\n    else\n        throw(ArgumentError(\"Unknown eigenvalue solver range $range.\"))\n    end\nend\n\n# create a batch of pointers in device memory from a batch of device arrays\n@inline function unsafe_batch(batch::Vector{<:oneArray{T}}) where {T}\n    ptrs = pointer.(batch)\n    return oneArray(ptrs)\nend\n\nflip_trans(trans::Char) = trans == 'N' ? 'T' : 'N'\nflip_uplo(uplo::Char) = uplo == 'L' ? 'U' : 'L'\n"
  },
  {
    "path": "lib/mkl/wrappers_blas.jl",
    "content": "## (GE) general matrix-matrix multiplication batched\nfor (fname, elty) in\n        ((:onemklHgemm_batch, :Float16),\n         (:onemklSgemm_batch, :Float32),\n         (:onemklDgemm_batch, :Float64),\n         (:onemklCgemm_batch, :ComplexF32),\n         (:onemklZgemm_batch, :ComplexF64))\n    @eval begin\n        function gemm_batched!(transA::Char,\n                               transB::Char,\n                               alpha::Number,\n                               A::Vector{<:oneStridedMatrix{$elty}},\n                               B::Vector{<:oneStridedMatrix{$elty}},\n                               beta::Number,\n                               C::Vector{<:oneStridedMatrix{$elty}})\n            if length(A) != length(B) || length(A) != length(C)\n                throw(DimensionMismatch(\"\"))\n            end\n            for (As,Bs,Cs) in zip(A,B,C)\n                m = size(As, transA == 'N' ? 1 : 2)\n                k = size(As, transA == 'N' ? 2 : 1)\n                n = size(Bs, transB == 'N' ? 2 : 1)\n                if m != size(Cs,1) || n != size(Cs,2) || k != size(Bs, transB == 'N' ? 1 : 2)\n                    throw(DimensionMismatch(\"\"))\n                end\n            end\n\n            m = size(A[1], transA == 'N' ? 1 : 2)\n            k = size(A[1], transA == 'N' ? 2 : 1)\n            n = size(B[1], transB == 'N' ? 2 : 1)\n            lda = max(1,stride(A[1],2))\n            ldb = max(1,stride(B[1],2))\n            ldc = max(1,stride(C[1],2))\n            Aptrs = unsafe_batch(A)\n            Bptrs = unsafe_batch(B)\n            Cptrs = unsafe_batch(C)\n            bsize = length(A)\n            m_dev = oneVector{Int}(fill(m,bsize))\n            n_dev = oneVector{Int}(fill(n,bsize))\n            k_dev = oneVector{Int}(fill(k,bsize))\n            lda_dev = oneVector{Int}(fill(lda,bsize))\n            ldb_dev = oneVector{Int}(fill(ldb,bsize))\n            ldc_dev = oneVector{Int}(fill(ldc,bsize))\n            alpha_dev = oneVector{$elty}(fill(alpha,bsize))\n            beta_dev = oneVector{$elty}(fill(beta,bsize))\n            groupsize_dev = oneVector{Int}(fill(1,bsize))\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            $fname(sycl_queue(queue), transA, transB, m_dev, n_dev, k_dev, alpha_dev, Aptrs, lda_dev, Bptrs,\n                   ldb_dev, beta_dev, Cptrs, ldc_dev, length(A), groupsize_dev)\n            unsafe_free!(Cptrs)\n            unsafe_free!(Bptrs)\n            unsafe_free!(Aptrs)\n            unsafe_free!(m_dev)\n            unsafe_free!(n_dev)\n            unsafe_free!(k_dev)\n            unsafe_free!(lda_dev)\n            unsafe_free!(ldb_dev)\n            unsafe_free!(ldc_dev)\n            unsafe_free!(alpha_dev)\n            unsafe_free!(beta_dev)\n            unsafe_free!(groupsize_dev)\n            C\n        end\n    end\nend\n\nfunction gemm_batched(transA::Char, transB::Char, alpha::Number,\n                      A::Vector{<:oneStridedMatrix{T}}, B::Vector{<:oneStridedMatrix{T}}) where T\n    C = oneMatrix{T}[similar(B[1], (size(A[1], transA == 'N' ? 1 : 2),size(B[1], transB == 'N' ? 2 : 1))) for i in 1:length(A)]\n    gemm_batched!(transA, transB, alpha, A, B, zero(T), C )\nend\nfunction gemm_batched(transA::Char, transB::Char,\n                      A::Vector{<:oneStridedMatrix{T}}, B::Vector{<:oneStridedMatrix{T}}) where T\n    gemm_batched(transA, transB, one(T), A, B)\nend\n\n## (TR) triangular triangular matrix solution batched\nfor (fname, elty) in\n        ((:onemklDtrsm_batch, :Float64),\n         (:onemklStrsm_batch, :Float32),\n         (:onemklCtrsm_batch, :ComplexF32),\n         (:onemklZtrsm_batch, :ComplexF64))\n    @eval begin\n        function trsm_batched!(side::Char,\n                               uplo::Char,\n                               transa::Char,\n                               diag::Char,\n                               alpha::Number,\n                               A::Vector{<:oneStridedMatrix{$elty}},\n                               B::Vector{<:oneStridedMatrix{$elty}})\n            if length(A) != length(B)\n                throw(DimensionMismatch(\"\"))\n            end\n            for (As,Bs) in zip(A,B)\n                mA, nA = size(As)\n                m,n = size(Bs)\n                if mA != nA throw(DimensionMismatch(\"A must be square\")) end\n                if nA != (side == 'L' ? m : n) throw(DimensionMismatch(\"trsm_batched!\")) end\n            end\n\n            m,n = size(B[1])\n            lda = max(1,stride(A[1],2))\n            ldb = max(1,stride(B[1],2))\n            Aptrs = unsafe_batch(A)\n            Bptrs = unsafe_batch(B)\n            bsize = length(A)\n            m_dev = oneVector{Int}(fill(m,bsize))\n            n_dev = oneVector{Int}(fill(n,bsize))\n            lda_dev = oneVector{Int}(fill(lda,bsize))\n            ldb_dev = oneVector{Int}(fill(ldb,bsize))\n            alpha_dev = oneVector{$elty}(fill(alpha,bsize))\n            groupsize_dev = oneVector{Int}(fill(1,bsize))\n            queue = global_queue(context(A[1]), device(A[1]))\n            $fname(sycl_queue(queue), side, uplo, transa, diag, m_dev, n_dev, alpha_dev, Aptrs, lda_dev, Bptrs, ldb_dev, length(A), groupsize_dev)\n            unsafe_free!(Bptrs)\n            unsafe_free!(Aptrs)\n            unsafe_free!(m_dev)\n            unsafe_free!(n_dev)\n            unsafe_free!(lda_dev)\n            unsafe_free!(ldb_dev)\n            unsafe_free!(alpha_dev)\n            unsafe_free!(groupsize_dev)\n            B\n        end\n    end\nend\nfunction trsm_batched(side::Char, uplo::Char, transa::Char, diag::Char, alpha::Number,\n                      A::Vector{<:oneStridedMatrix{T}}, B::Vector{<:oneStridedMatrix{T}}) where T\n    trsm_batched!(side, uplo, transa, diag, alpha, A, copy(B) )\nend\n\n## (L3: symm) symmetric matrix-matrix and matrix-vector multiplication\nfor (fname, elty) in ((:onemklSsymm, :Float32),\n                      (:onemklDsymm, :Float64),\n                      (:onemklCsymm, :ComplexF32),\n                      (:onemklZsymm, :ComplexF64))\n    @eval begin\n        function symm!(side::Char,\n                       uplo::Char,\n                       alpha::Number,\n                       A::oneStridedVecOrMat{$elty},\n                       B::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       C::oneStridedVecOrMat{$elty})\n            k, nA = size(A)\n            if k != nA throw(DimensionMismatch(\"Matrix A must be square\")) end\n            m = side == 'L' ? k : size(B,1)\n            n = side == 'L' ? size(B,2) : k\n            if m != size(C,1) || n != size(C,2) || k != size(B, side == 'L' ? 1 : 2)\n                throw(DimensionMismatch(\"\"))\n            end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), side, uplo, m, n, alpha, A, lda, B, ldb,\n                   beta, C, ldc)\n            C\n        end\n    end\nend\nfunction symm(side::Char,\n                uplo::Char,\n                alpha::Number,\n                A::oneStridedVecOrMat{T},\n                B::oneStridedVecOrMat{T}) where T\n    symm!(side, uplo, alpha, A, B, zero(T), similar(B))\nend\nfunction symm(side::Char,\n                uplo::Char,\n                A::oneStridedVecOrMat{T},\n                B::oneStridedVecOrMat{T}) where T\n    symm(side, uplo, one(T), A, B)\nend\n\n## syrk\nfor (fname, elty) in ((:onemklSsyrk, :Float32),\n                      (:onemklDsyrk, :Float64),\n                      (:onemklCsyrk, :ComplexF32),\n                      (:onemklZsyrk, :ComplexF64))\n    @eval begin\n        function syrk!(uplo::Char,\n                       trans::Char,\n                       alpha::Number,\n                       A::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       C::oneStridedMatrix{$elty})\n            mC, n = size(C)\n            if mC != n throw(DimensionMismatch(\"C must be square\")) end\n            nn = size(A, trans == 'N' ? 1 : 2)\n            if nn != n throw(DimensionMismatch(\"syrk!\")) end\n            k  = size(A, trans == 'N' ? 2 : 1)\n            lda = max(1,stride(A,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), uplo, trans, n, k, alpha, A, lda, beta, C, ldc)\n            C\n        end\n    end\nend\nfunction syrk(uplo::Char,\n               trans::Char,\n               alpha::Number,\n               A::oneStridedVecOrMat{T}) where T\n        n = size(A, trans == 'N' ? 1 : 2)\n        syrk!(uplo, trans, alpha, A, zero(T), similar(A, (n, n)))\nend\nsyrk(uplo::Char, trans::Char, A::oneStridedVecOrMat) =\n    syrk(uplo, trans, one(eltype(A)), A)\n\n## syr2k\nfor (fname, elty) in ((:onemklDsyr2k,:Float64),\n                      (:onemklSsyr2k,:Float32),\n                      (:onemklZsyr2k,:ComplexF64),\n                      (:onemklCsyr2k,:ComplexF32))\n    @eval begin\n        function syr2k!(uplo::Char,\n                        trans::Char,\n                        alpha::Number,\n                        A::oneStridedVecOrMat{$elty},\n                        B::oneStridedVecOrMat{$elty},\n                        beta::Number,\n                        C::oneStridedVecOrMat{$elty})\n            m, n = size(C)\n            if m != n throw(DimensionMismatch(\"C must be square\")) end\n            nA = size(A, trans == 'N' ? 1 : 2)\n            nB = size(B, trans == 'N' ? 1 : 2)\n            if nA != n throw(DimensionMismatch(\"First dimension of op(A) must match C\")) end\n            if nB != n throw(DimensionMismatch(\"First dimension of op(B.') must match C\")) end\n            k  = size(A, trans == 'N' ? 2 : 1)\n            if k != size(B, trans == 'N' ? 2 : 1) throw(DimensionMismatch(\n                \"Inner dimensions of op(A) and op(B.') must match\")) end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc)\n            C\n        end\n    end\nend\nfunction syr2k(uplo::Char,\n               trans::Char,\n               alpha::Number,\n               A::oneStridedVecOrMat{T},\n               B::oneStridedVecOrMat{T}) where T\n        n = size(A, trans == 'N' ? 1 : 2)\n        syr2k!(uplo, trans, convert(T, alpha), A, B, zero(T), similar(A, (n, n)))\nend\nsyr2k(uplo::Char, trans::Char, A::oneStridedVecOrMat, B::oneStridedVecOrMat) =\n        syr2k(uplo, trans, one(eltype(A)), A, B)\n\n## herk\nfor (fname, elty) in ((:onemklZherk, :ComplexF64),\n                      (:onemklCherk, :ComplexF32))\n    @eval begin\n        function herk!(uplo::Char,\n                       trans::Char,\n                       alpha::Real,\n                       A::oneStridedVecOrMat{$elty},\n                       beta::Real,\n                       C::oneStridedMatrix{$elty})\n            mC, n = size(C)\n            if mC != n throw(DimensionMismatch(\"C must be square\")) end\n            nn = size(A, trans == 'N' ? 1 : 2)\n            if nn != n throw(DimensionMismatch(\"herk!\")) end\n            k  = size(A, trans == 'N' ? 2 : 1)\n            lda = max(1,stride(A,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), uplo, trans, n, k, alpha, A, lda, beta, C, ldc)\n            C\n        end\n   end\nend\nfunction herk(uplo::Char, trans::Char, alpha::Real, A::oneStridedVecOrMat{T}) where T\n    n = size(A, trans == 'N' ? 1 : 2)\n    herk!(uplo, trans, alpha, A, zero(real(T)), similar(A, (n,n)))\nend\nherk(uplo::Char, trans::Char, A::oneStridedVecOrMat{T}) where T =\n    herk(uplo, trans, one(real(T)), A)\n\n## her2k\nfor (fname, elty) in ((:onemklZher2k,:ComplexF64),\n                      (:onemklCher2k,:ComplexF32))\n    @eval begin\n        function her2k!(uplo::Char,\n                        trans::Char,\n                        alpha::Number,\n                        A::oneStridedVecOrMat{$elty},\n                        B::oneStridedVecOrMat{$elty},\n                        beta::Real,\n                        C::oneStridedMatrix{$elty})\n            m, n = size(C)\n            if m != n throw(DimensionMismatch(\"C must be square\")) end\n            nA = size(A, trans == 'N' ? 1 : 2)\n            nB = size(B, trans == 'N' ? 1 : 2)\n            if nA != n throw(DimensionMismatch(\"First dimension of op(A) must match C\")) end\n            if nB != n throw(DimensionMismatch(\"First dimension of op(B.') must match C\")) end\n            k  = size(A, trans == 'N' ? 2 : 1)\n            if k != size(B, trans == 'N' ? 2 : 1)\n                throw(DimensionMismatch(\"Inner dimensions of op(A) and op(B.') must match\"))\n            end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), uplo, trans, n, k, alpha, A, lda, B, ldb, beta, C, ldc)\n            C\n        end\n   end\nend\nfunction her2k(uplo::Char,\n                trans::Char,\n                alpha::Number,\n                A::oneStridedVecOrMat{T},\n                B::oneStridedVecOrMat{T}) where T\n    n = size(A, trans == 'N' ? 1 : 2)\n    her2k!(uplo, trans, alpha, A, B, zero(real(T)), similar(A, (n,n)))\nend\nher2k(uplo::Char, trans::Char,\n      A::oneStridedVecOrMat{T}, B::oneStridedVecOrMat{T}) where T =\n    her2k(uplo, trans, one(T), A, B)\n\n# level 2\n## gemv\nfor (fname, elty) in ((:onemklSgemv, :Float32),\n                      (:onemklDgemv, :Float64),\n                      (:onemklCgemv, :ComplexF32),\n                      (:onemklZgemv, :ComplexF64))\n    @eval begin\n        function gemv!(trans::Char,\n                       alpha::Number,\n                       a::oneStridedArray{$elty},\n                       x::oneStridedArray{$elty},\n                       beta::Number,\n                       y::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n             # handle trans\n             m,n = size(a)\n             # check dimensions\n             length(x) == (trans == 'N' ? n : m) && length(y) ==\n                          (trans == 'N' ? m : n) || throw(DimensionMismatch(\"\"))\n             # compute increments\n             lda = max(1,stride(a,2))\n             incx = stride(x,1)\n             incy = stride(y,1)\n             $fname(sycl_queue(queue), trans, m, n, alpha, a, lda, x, incx, beta, y, incy)\n             y\n        end\n    end\nend\nfunction gemv(trans::Char,\n              alpha::Number,\n              a::oneStridedArray{T},\n              x::oneStridedArray{T}) where T\n    gemv!(trans, alpha, a, x, zero(T), similar(x, size(a, (trans == 'N' ? 1 : 2))))\nend\n\nfunction gemv(trans::Char,\n              a::oneStridedArray{T},\n              x::oneStridedArray{T}) where T\n    gemv!(trans, one(T), a, x, zero(T), similar(x, size(a, (trans == 'N' ? 1 : 2))))\nend\n\n### hemv\nfor (fname, elty) in ((:onemklChemv,:ComplexF32),\n                      (:onemklZhemv,:ComplexF64))\n    @eval begin\n        function hemv!(uplo::Char,\n                       alpha::Number,\n                       A::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       y::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            if m != n throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\")) end\n            if m != length(x) || m != length(y) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, A, lda, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\nfunction hemv(uplo::Char, alpha::Number, A::oneStridedVecOrMat{T},\n                x::oneStridedVecOrMat{T}) where T\n    hemv!(uplo, alpha, A, x, zero(T), similar(x))\nend\nfunction hemv(uplo::Char, A::oneStridedVecOrMat{T},\n                x::oneStridedVecOrMat{T}) where T\n    hemv(uplo, one(T), A, x)\nend\n\n### hbmv, (HB) Hermitian banded matrix-vector multiplication\nfor (fname, elty) in ((:onemklChbmv,:ComplexF32),\n                      (:onemklZhbmv,:ComplexF64))\n    @eval begin\n\n        function hbmv!(uplo::Char,\n                       k::Integer,\n                       alpha::Number,\n                       A::oneStridedMatrix{$elty},\n                       x::oneStridedVector{$elty},\n                       beta::Number,\n                       y::oneStridedVector{$elty})\n            m, n = size(A)\n            if !(1<=(1+k)<=n) throw(DimensionMismatch(\"Incorrect number of bands\")) end\n            if m < 1+k throw(DimensionMismatch(\"Array A has fewer than 1+k rows\")) end\n            if n != length(x) || n != length(y) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, k, alpha, A, lda, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\nfunction hbmv(uplo::Char, k::Integer, alpha::Number,\n                A::oneStridedMatrix{T}, x::oneStridedVector{T}) where T\n    n = size(A,2)\n    hbmv!(uplo, k, alpha, A, x, zero(T), similar(x, n))\nend\nfunction hbmv(uplo::Char, k::Integer, A::oneStridedMatrix{T},\n                x::oneStridedVector{T}) where T\n    hbmv(uplo, k, one(T), A, x)\nend\n\n### her\nfor (fname, elty) in ((:onemklCher,:ComplexF32),\n                      (:onemklZher,:ComplexF64))\n    @eval begin\n        function her!(uplo::Char,\n                      alpha::Number,\n                      x::oneStridedVecOrMat{$elty},\n                      A::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            m == n || throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\"))\n            length(x) == n || throw(DimensionMismatch(\"Length of vector must be the same as the matrix dimensions\"))\n            incx = stride(x,1)\n            lda = max(1,stride(A,2))\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, x, incx, A, lda)\n            A\n        end\n    end\nend\n\n### her2\nfor (fname, elty) in ((:onemklCher2,:ComplexF32),\n                      (:onemklZher2,:ComplexF64))\n    @eval begin\n        function her2!(uplo::Char,\n                      alpha::Number,\n                      x::oneStridedVecOrMat{$elty},\n                      y::oneStridedVecOrMat{$elty},\n                      A::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            m == n || throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\"))\n            length(x) == n || throw(DimensionMismatch(\"Length of vector must be the same as the matrix dimensions\"))\n            length(y) == n || throw(DimensionMismatch(\"Length of vector must be the same as the matrix dimensions\"))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            lda = max(1,stride(A,2))\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, x, incx, y, incy, A, lda)\n            A\n        end\n    end\nend\n\n# level 1\n## axpy\nfor (fname, elty) in\n        ((:onemklDaxpy,:Float64),\n         (:onemklSaxpy,:Float32),\n         (:onemklHaxpy,:Float16),\n         (:onemklZaxpy,:ComplexF64),\n         (:onemklCaxpy,:ComplexF32))\n    @eval begin\n        function axpy!(n::Integer,\n                       alpha::Number,\n                       x::oneStridedArray{$elty},\n                       y::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            alpha = $elty(alpha)\n            $fname(sycl_queue(queue), n, alpha, x, stride(x,1), y, stride(y,1))\n            y\n        end\n    end\nend\n\n## axpby\nfor (fname, elty) in\n        ((:onemklDaxpby,:Float64),\n         (:onemklSaxpby,:Float32),\n         (:onemklZaxpby,:ComplexF64),\n         (:onemklCaxpby,:ComplexF32))\n    @eval begin\n        function axpby!(n::Integer,\n                        alpha::Number,\n                        x::oneStridedArray{$elty},\n                        beta::Number,\n                        y::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            alpha = $elty(alpha)\n            beta = $elty(beta)\n            $fname(sycl_queue(queue), n, alpha, x, stride(x,1), beta, y, stride(y,1))\n            y\n        end\n    end\nend\n\n## rot\nfor (fname, elty, cty, sty, supty) in ((:onemklSrot,:Float32,:Float32,:Float32,:Number),\n                                       (:onemklDrot,:Float64,:Float64,:Float64,:Number),\n                                       (:onemklCrot,:ComplexF32,:Float32,:ComplexF32,:Number),\n                                       (:onemklZrot,:ComplexF64,:Float64,:ComplexF64,:Number),\n                                       (:onemklCSrot,:ComplexF32,:Float32,:Float32,:Real),\n                                       (:onemklZDrot,:ComplexF64,:Float64,:Float64,:Real))\n    @eval begin\n        function rot!(n::Integer,\n                      x::oneStridedArray{$elty},\n                      y::oneStridedArray{$elty},\n                      c::Real,\n                      s::$supty)\n            queue = global_queue(context(x), device(x))\n            c = $cty(c)\n            s = $sty(s)\n            $fname(sycl_queue(queue), n, x, stride(x, 1), y, stride(y, 1), c, s)\n            x, y\n        end\n    end\nend\n\nfunction axpy!(n::Integer,\n            alpha::Number,\n            x::oneStridedArray{ComplexF16},\n            y::oneStridedArray{ComplexF16})\n    wide_x = widen.(x)\n    wide_y = widen.(y)\n    axpy!(n, alpha, wide_x, wide_y)\n    thin_y = convert(typeof(y), wide_y)\n    copyto!(y, thin_y)\n    return y\nend\n\n## scal\nfor (fname, elty) in\n    ((:onemklDscal,:Float64),\n     (:onemklSscal,:Float32),\n     (:onemklHscal,:Float16),\n     (:onemklZscal,:ComplexF64),\n     (:onemklCscal,:ComplexF32))\n    @eval begin\n        function scal!(n::Integer,\n                       alpha::$elty,\n                       x::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), n, alpha, x, stride(x,1))\n            x\n        end\n    end\nend\n\nfunction scal!(n::Integer,\n            alpha::Number,\n            x::oneStridedArray{ComplexF16})\n    wide_x = widen.(x)\n    scal!(n, convert(ComplexF32, alpha), wide_x)\n    thin_x = convert(typeof(x), wide_x)\n    copyto!(x, thin_x)\n    return x\nend\n\n## nrm2\nfor (fname, elty, ret_type) in\n    ((:onemklDnrm2, :Float64,:Float64),\n     (:onemklSnrm2, :Float32,:Float32),\n     (:onemklHnrm2, :Float16,:Float16),\n     (:onemklCnrm2, :ComplexF32,:Float32),\n     (:onemklZnrm2, :ComplexF64,:Float64))\n    @eval begin\n        function nrm2(n::Integer, x::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            result = oneArray{$ret_type}([0]);\n            $fname(sycl_queue(queue), n, x, stride(x,1), result)\n            res = Array(result)\n            return res[1]\n        end\n    end\nend\n\nnrm2(x::oneStridedArray) = nrm2(length(x), x)\n\nfunction nrm2(n::Integer, x::oneStridedArray{ComplexF16})\n    wide_x = widen.(x)\n    nrm = nrm2(n, wide_x)\n    return convert(Float16, nrm)\nend\n\n## dot\nfor (jname, fname, elty) in\n        ((:dot, :onemklSdot,:Float32),\n         (:dot, :onemklDdot,:Float64),\n         (:dot, :onemklHdot,:Float16),\n         (:dotc, :onemklCdotc, :ComplexF32),\n         (:dotc, :onemklZdotc, :ComplexF64),\n         (:dotu, :onemklCdotu, :ComplexF32),\n         (:dotu, :onemklZdotu, :ComplexF64))\n    @eval begin\n        function $jname(n::Integer,\n                         x::oneStridedArray{$elty},\n                         y::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            result = oneArray{$elty}([0]);\n            $fname(sycl_queue(queue), n, x, stride(x,1), y, stride(y,1), result)\n            res = Array(result)\n            return res[1]\n        end\n    end\nend\n\nfunction dotc(n::Integer, x::oneStridedArray{ComplexF16}, y::oneStridedArray{ComplexF16})\n    convert(ComplexF16, dotc(n, convert(oneArray{ComplexF32}, x), convert(oneArray{ComplexF32}, y)))\nend\n\nfunction dotu(n::Integer, x::oneStridedArray{ComplexF16}, y::oneStridedArray{ComplexF16})\n    convert(ComplexF16, dotu(n, convert(oneArray{ComplexF32}, x), convert(oneArray{ComplexF32}, y)))\nend\n\n# level 2\n# sbmv, symmetric banded matrix-vector multiplication\nfor (fname, elty) in ((:onemklSsbmv, :Float32),\n                      (:onemklDsbmv, :Float64))\n    @eval begin\n        function sbmv!(uplo::Char,\n                       k::Integer,\n                       alpha::Number,\n                       a::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       y::oneStridedVecOrMat{$elty})\n            m, n = size(a)\n            if !(1<=(1+k)<=n) throw(DimensionMismatch(\"Incorrect number of bands\")) end\n            if m < 1+k throw(DimensionMismatch(\"Array A has fewer than 1+k rows\")) end\n            if n != length(x) || n != length(y) throw(DimensionMismatch(\"\")) end\n            queue = global_queue(context(x), device(x))\n            lda = max(1, stride(a,2))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            alpha = $elty(alpha)\n            beta = $elty(beta)\n            $fname(sycl_queue(queue), uplo, n, k, alpha, a, lda, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\nfunction sbmv(uplo::Char, k::Integer, alpha::Number,\n                a::oneStridedArray{T}, x::oneStridedArray{T}) where T\n    n = size(a,2)\n    sbmv!(uplo, k, alpha, a, x, zero(T), similar(x, n))\nend\nfunction sbmv(uplo::Char, k::Integer, a::oneStridedArray{T},\n                x::oneStridedArray{T}) where T\n    sbmv(uplo, k, one(T), a, x)\nend\n\nfor (fname, elty, celty) in ((:onemklCSscal, :Float32, :ComplexF32),\n                             (:onemklZDscal, :Float64, :ComplexF64))\n    @eval begin\n        function scal!(n::Integer,\n                       alpha::$elty,\n                       x::oneStridedArray{$celty})\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), n, alpha, x, stride(x,1))\n        end\n    end\nend\n\n# level 2\n# ger\nfor (fname, elty) in ((:onemklSger, :Float32),\n                      (:onemklDger, :Float64),\n                      (:onemklCgerc, :ComplexF32),\n                      (:onemklZgerc, :ComplexF64))\n    @eval begin\n        function ger!(alpha::Number,\n                      x::oneStridedVecOrMat{$elty},\n                      y::oneStridedVecOrMat{$elty},\n                      a::oneStridedVecOrMat{$elty})\n            m,n = size(a)\n            m == length(x) || throw(DimensionMismatch(\"\"))\n            n == length(y) || throw(DimensionMismatch(\"\"))\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), m, n, alpha, x, stride(x,1), y, stride(y,1), a, max(1,stride(a,2)))\n            a\n        end\n    end\nend\n\n# spr\nfor (fname, elty) in ((:onemklSspr, :Float32),\n                      (:onemklDspr, :Float64))\n    @eval begin\n        function spr!(uplo::Char,\n                      alpha::Number,\n                      x::oneStridedVector{$elty},\n                      A::oneStridedVector{$elty})\n            n = round(Int, (sqrt(8*length(A))-1)/2)\n            length(x) == n || throw(DimensionMismatch(\"Length of vector must be the same as the matrix dimensions\"))\n            incx = stride(x,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, x, incx, A)\n            A\n        end\n    end\nend\n\n#symv\nfor (fname, elty) in ((:onemklSsymv,:Float32),\n                      (:onemklDsymv,:Float64))\n    # Note that the complex symv are not BLAS but auxiliary functions in LAPACK\n    @eval begin\n        function symv!(uplo::Char,\n                       alpha::Number,\n                       A::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       y::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            if m != n throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\")) end\n            if m != length(x) || m != length(y) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, A, lda, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\nfunction symv(uplo::Char, alpha::Number, A::oneStridedVecOrMat{T}, x::oneStridedVecOrMat{T}) where T\n        symv!(uplo, alpha, A, x, zero(T), similar(x))\nend\nfunction symv(uplo::Char, A::oneStridedVecOrMat{T}, x::oneStridedVecOrMat{T}) where T\n    symv(uplo, one(T), A, x)\nend\n\n# syr\nfor (fname, elty) in ((:onemklSsyr,:Float32),\n                      (:onemklDsyr,:Float64))\n    @eval begin\n        function syr!(uplo::Char,\n                      alpha::Number,\n                      x::oneStridedVecOrMat{$elty},\n                      A::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            m == n || throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\"))\n            length(x) == n || throw(DimensionMismatch(\"Length of vector must be the same as the matrix dimensions\"))\n            incx = stride(x,1)\n            lda = max(1,stride(A,2))\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, x, incx, A, lda)\n            A\n        end\n    end\nend\n\n#\n# BLAS\n#\n\n# level 1\n## copy\nfor (fname, elty) in\n        ((:onemklDcopy,:Float64),\n         (:onemklScopy,:Float32),\n         (:onemklZcopy,:ComplexF64),\n         (:onemklCcopy,:ComplexF32))\n    @eval begin\n        function copy!(n::Integer,\n                       x::oneStridedArray{$elty},\n                       y::oneStridedArray{$elty})\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), n, x, stride(x, 1), y, stride(y, 1))\n            y\n        end\n    end\nend\n\nfunction copy!(n::Integer, x::oneStridedArray{T}, y::oneStridedArray{T}) where {T <: Union{Float16, ComplexF16}}\n    copyto!(y,x)\nend\n\n## asum\nfor (fname, elty, ret_type) in\n    ((:onemklSasum, :Float32, :Float32),\n     (:onemklDasum, :Float64, :Float64),\n     (:onemklCasum, :ComplexF32, :Float32),\n     (:onemklZasum, :ComplexF64, :Float64))\n    @eval begin\n        function asum(n::Integer,\n                      x::oneStridedArray{$elty})\n            result = oneArray{$ret_type}([0])\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), n, x, stride(x, 1), result)\n            res = Array(result)\n            return res[1]\n        end\n    end\nend\n\n## iamax\nfor (fname, elty) in\n    ((:onemklDiamax_64,:Float64),\n     (:onemklSiamax_64,:Float32),\n     (:onemklZiamax_64,:ComplexF64),\n     (:onemklCiamax_64,:ComplexF32))\n    @eval begin\n        function iamax(x::oneStridedArray{$elty})\n            n = length(x)\n            queue = global_queue(context(x), device(x))\n            result = oneArray{Int64}([0]);\n            $fname(sycl_queue(queue), n, x, stride(x, 1), result, 'O')\n            return Array(result)[1]\n        end\n    end\nend\n\n## iamin\nfor (fname, elty) in\n    ((:onemklDiamin_64,:Float64),\n     (:onemklSiamin_64,:Float32),\n     (:onemklZiamin_64,:ComplexF64),\n     (:onemklCiamin_64,:ComplexF32))\n    @eval begin\n        function iamin(x::StridedArray{$elty})\n            n = length(x)\n            result = oneArray{Int64}([0]);\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue),n, x, stride(x, 1), result, 'O')\n            return Array(result)[1]\n        end\n    end\nend\n\n## swap\nfor (fname, elty) in ((:onemklSswap,:Float32),\n                      (:onemklDswap,:Float64),\n                      (:onemklCswap,:ComplexF32),\n                      (:onemklZswap,:ComplexF64))\n    @eval begin\n        function swap!(n::Integer,\n            x::oneStridedArray{$elty},\n            y::oneStridedArray{$elty})\n            # Assuming both memory allocated on same device & context\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), n, x, stride(x, 1), y, stride(y, 1))\n            x, y\n        end\n    end\nend\n\n# level 2\n# gbmv\nfor (fname, elty) in ((:onemklSgbmv, :Float32),\n                      (:onemklDgbmv, :Float64),\n                      (:onemklCgbmv, :ComplexF32),\n                      (:onemklZgbmv, :ComplexF64))\n    @eval begin\n        function gbmv!(trans::Char,\n                       m::Integer,\n                       kl::Integer,\n                       ku::Integer,\n                       alpha::Number,\n                       a::oneStridedArray{$elty},\n                       x::oneStridedArray{$elty},\n                       beta::Number,\n                       y::oneStridedArray{$elty})\n            n = size(a,2)\n            length(x) == (trans == 'N' ? n : m) && length(y) ==\n                         (trans == 'N' ? m : n) || throw(DimensionMismatch(\"\"))\n            queue = global_queue(context(x), device(x))\n            lda = max(1, stride(a,2))\n            incx = stride(x,1)\n            incy = stride(y,1)\n            $fname(sycl_queue(queue), trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\nfunction gbmv(trans::Char,\n              m::Integer,\n              kl::Integer,\n              ku::Integer,\n              alpha::Number,\n              a::oneStridedArray{T},\n              x::oneStridedArray{T}) where T\n    n = size(a,2)\n    leny = trans == 'N' ? m : n\n    queue = global_queue(context(x), device(x))\n    gbmv!(trans, m, kl, ku, alpha, a, x, zero(T), similar(x, leny))\nend\nfunction gbmv(trans::Char,\n              m::Integer,\n              kl::Integer,\n              ku::Integer,\n              a::oneStridedArray{T},\n              x::oneStridedArray{T}) where T\n    queue = global_queue(context(x), device(x))\n    gbmv(trans, m, kl, ku, one(T), a, x)\nend\n\n# spmv\nfor (fname, elty) in ((:onemklSspmv, :Float32),\n                      (:onemklDspmv, :Float64))\n    @eval begin\n        function spmv!(uplo::Char,\n                       alpha::Number,\n                       A::oneStridedVector{$elty},\n                       x::oneStridedVector{$elty},\n                       beta::Number,\n                       y::oneStridedVector{$elty})\n            n = round(Int, (sqrt(8*length(A))-1)/2)\n            if n != length(x) || n != length(y)\n                throw(DimensionMismatch(\"\"))\n            end\n            incx = stride(x,1)\n            incy = stride(y,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, n, alpha, A, x, incx, beta, y, incy)\n            y\n        end\n    end\nend\n\nfunction spmv(uplo::Char, alpha::Number,\n              A::oneStridedVector{T}, x::oneStridedVector{T}) where T\n    spmv!(uplo, alpha, A, x, zero(T), similar(x))\nend\n\nfunction spmv(uplo::Char, A::oneStridedVector{T}, x::oneStridedVector{T}) where T\n    spmv(uplo, one(T), A, x)\nend\n\n# tbsv, (TB) triangular banded matrix solve\nfor (fname, elty) in ((:onemklStbsv, :Float32),\n                      (:onemklDtbsv, :Float64),\n                      (:onemklCtbsv, :ComplexF32),\n                      (:onemklZtbsv, :ComplexF64))\n    @eval begin\n        function tbsv!(uplo::Char,\n                       trans::Char,\n                       diag::Char,\n                       k::Integer,\n                       A::oneStridedMatrix{$elty},\n                       x::oneStridedVector{$elty})\n            m, n = size(A)\n            if !(1<=(1+k)<=n) throw(DimensionMismatch(\"Incorrect number of bands\")) end\n            if m < 1+k throw(DimensionMismatch(\"Array A has fewer than 1+k rows\")) end\n            if n != length(x) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, trans, diag, n, k, A, lda, x, incx)\n            x\n        end\n    end\nend\nfunction tbsv(uplo::Char, trans::Char, diag::Char, k::Integer,\n              A::oneStridedMatrix{T}, x::oneStridedVector{T}) where T\n    tbsv!(uplo, trans, diag, k, A, copy(x))\nend\n\n# tbmv\n### tbmv, (TB) triangular banded matrix-vector multiplication\nfor (fname, elty) in ((:onemklStbmv,:Float32),\n                      (:onemklDtbmv,:Float64),\n                      (:onemklCtbmv,:ComplexF32),\n                      (:onemklZtbmv,:ComplexF64))\n    @eval begin\n        function tbmv!(uplo::Char,\n                       trans::Char,\n                       diag::Char,\n                       k::Integer,\n                       A::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            if !(1<=(1+k)<=n) throw(DimensionMismatch(\"Incorrect number of bands\")) end\n            if m < 1+k throw(DimensionMismatch(\"Array A has fewer than 1+k rows\")) end\n            if n != length(x) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, trans, diag, n, k, A, lda, x, incx)\n            x\n        end\n    end\nend\nfunction tbmv(uplo::Char,\n                trans::Char,\n                diag::Char,\n                k::Integer,\n                A::oneStridedVecOrMat{T},\n                x::oneStridedVecOrMat{T}) where T\n    tbmv!(uplo, trans, diag, k, A, copy(x))\nend\n\n### trmv, Triangular matrix-vector multiplication\nfor (fname, elty) in ((:onemklStrmv, :Float32),\n                      (:onemklDtrmv, :Float64),\n                      (:onemklCtrmv, :ComplexF32),\n                      (:onemklZtrmv, :ComplexF64))\n    @eval begin\n        function trmv!(uplo::Char,\n                       trans::Char,\n                       diag::Char,\n                       A::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            if m != n throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\")) end\n            if n != length(x)\n                throw(DimensionMismatch(\"length(x)=$(length(x)) does not match size(A)=$(size(A))\"))\n            end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, trans, diag, n, A, lda, x, incx)\n            x\n        end\n    end\nend\nfunction trmv(uplo::Char,\n              trans::Char,\n              diag::Char,\n              A::oneStridedVecOrMat{T},\n              x::oneStridedVecOrMat{T}) where T\n    trmv!(uplo, trans, diag, A, copy(x))\nend\n\n### trsv, Triangular matrix-vector solve\nfor (fname, elty) in ((:onemklStrsv, :Float32),\n                      (:onemklDtrsv, :Float64),\n                      (:onemklCtrsv, :ComplexF32),\n                      (:onemklZtrsv, :ComplexF64))\n    @eval begin\n        function trsv!(uplo::Char,\n                       trans::Char,\n                       diag::Char,\n                       A::oneStridedVecOrMat{$elty},\n                       x::oneStridedVecOrMat{$elty})\n            m, n = size(A)\n            if m != n throw(DimensionMismatch(\"Matrix A is $m by $n but must be square\")) end\n            if n != length(x)\n                throw(DimensionMismatch(\"length(x)=$(length(x)) does not match size(A)=$(size(A))\"))\n            end\n            lda = max(1,stride(A,2))\n            incx = stride(x,1)\n            queue = global_queue(context(x), device(x))\n            $fname(sycl_queue(queue), uplo, trans, diag, n, A, lda, x, incx)\n            x\n        end\n    end\nend\nfunction trsv(uplo::Char,\n                trans::Char,\n                diag::Char,\n                A::oneStridedVecOrMat{T},\n                x::oneStridedVecOrMat{T}) where T\n    trsv!(uplo, trans, diag, A, copy(x))\nend\n\n# level 3\n\nfor (mmname, smname, elty) in\n        ((:onemklDtrmm, :onemklDtrsm, :Float64),\n         (:onemklStrmm, :onemklStrsm, :Float32),\n         (:onemklZtrmm, :onemklZtrsm, :ComplexF64),\n         (:onemklCtrmm, :onemklCtrsm, :ComplexF32))\n    @eval begin\n        function trmm!(side::Char,\n                       uplo::Char,\n                       transa::Char,\n                       diag::Char,\n                       alpha::Number,\n                       A::oneStridedMatrix{$elty},\n                       B::oneStridedMatrix{$elty})\n            m, n = size(B)\n            mA, nA = size(A)\n            if mA != nA throw(DimensionMismatch(\"A must be square\")) end\n            if nA != (side == 'L' ? m : n) throw(DimensionMismatch(\"trmm!\")) end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            queue = global_queue(context(A), device(A))\n            $mmname(sycl_queue(queue), side, uplo, transa, diag, m, n, alpha, A, lda, B, ldb)\n            B\n        end\n\n        function trsm!(side::Char,\n                       uplo::Char,\n                       transa::Char,\n                       diag::Char,\n                       alpha::Number,\n                       A::oneStridedMatrix{$elty},\n                       B::oneStridedMatrix{$elty})\n            m, n = size(B)\n            mA, nA = size(A)\n            if mA != nA throw(DimensionMismatch(\"A must be square\")) end\n            if nA != (side == 'L' ? m : n) throw(DimensionMismatch(\"trsm!\")) end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            queue = global_queue(context(A), device(A))\n            $smname(sycl_queue(queue), side, uplo, transa, diag, m, n, alpha, A, lda, B, ldb)\n            B\n        end\n    end\nend\nfunction trmm(side::Char,\n              uplo::Char,\n              transa::Char,\n              diag::Char,\n              alpha::Number,\n              A::oneStridedMatrix{T},\n              B::oneStridedMatrix{T}) where T\n    trmm!(side, uplo, transa, diag, alpha, A, copy(B))\nend\nfunction trsm(side::Char,\n                uplo::Char,\n                transa::Char,\n                diag::Char,\n                alpha::Number,\n                A::oneStridedMatrix{T},\n                B::oneStridedMatrix{T}) where T\n    trsm!(side, uplo, transa, diag, alpha, A, copy(B))\nend\n\n## hemm\nfor (fname, elty) in ((:onemklZhemm,:ComplexF64),\n                      (:onemklChemm,:ComplexF32))\n    @eval begin\n        function hemm!(side::Char,\n                       uplo::Char,\n                       alpha::Number,\n                       A::oneStridedMatrix{$elty},\n                       B::oneStridedMatrix{$elty},\n                       beta::Number,\n                       C::oneStridedMatrix{$elty})\n            mA, nA = size(A)\n            m, n = size(B)\n            mC, nC = size(C)\n            if mA != nA throw(DimensionMismatch(\"A must be square\")) end\n            if ((m != mC) || (n != nC)) throw(DimensionMismatch(\"B and C must have same dimensions\")) end\n            if ((side == 'L') && (mA != m)) throw(DimensionMismatch(\"\")) end\n            if ((side == 'R') && (mA != n)) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), side, uplo, m, n, alpha, A, lda, B, ldb, beta, C, ldc)\n            C\n        end\n    end\nend\nfunction hemm(uplo::Char,\n                trans::Char,\n                alpha::Number,\n                A::oneStridedMatrix{T},\n                B::oneStridedMatrix{T}) where T\n    m,n = size(B)\n    hemm!( uplo, trans, alpha, A, B, zero(T), similar(B, (m,n) ) )\nend\nhemm(uplo::Char, trans::Char, A::oneStridedMatrix{T}, B::oneStridedMatrix{T}) where T=\n    hemm( uplo, trans, one(T), A, B)\n\nfor (fname, elty) in\n        ((:onemklDgemm,:Float64),\n         (:onemklSgemm,:Float32),\n         (:onemklHgemm,:Float16),\n         (:onemklZgemm,:ComplexF64),\n         (:onemklCgemm,:ComplexF32))\n    @eval begin\n        function gemm!(transA::Char,\n                       transB::Char,\n                       alpha::Number,\n                       A::oneStridedVecOrMat{$elty},\n                       B::oneStridedVecOrMat{$elty},\n                       beta::Number,\n                       C::oneStridedVecOrMat{$elty})\n            m = size(A, transA == 'N' ? 1 : 2)\n            k = size(A, transA == 'N' ? 2 : 1)\n            n = size(B, transB == 'N' ? 2 : 1)\n            if m != size(C,1) || n != size(C,2) || k != size(B, transB == 'N' ? 1 : 2)\n                throw(DimensionMismatch(\"\"))\n            end\n\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n\n            device(A) == device(B) == device(C) || error(\"Multi-device GEMM not supported\")\n            context(A) == context(B) == context(C) || error(\"Multi-context GEMM not supported\")\n            queue = global_queue(context(A), device(A))\n\n            alpha = $elty(alpha)\n            beta = $elty(beta)\n\n            $fname(sycl_queue(queue), transA, transB, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc)\n            C\n        end\n    end\nend\nfunction gemm(transA::Char,\n                transB::Char,\n                alpha::Number,\n                A::oneStridedVecOrMat{T},\n                B::oneStridedVecOrMat{T}) where T\n    gemm!(transA, transB, alpha, A, B, zero(T),\n            similar(B, (size(A, transA == 'N' ? 1 : 2),\n                        size(B, transB == 'N' ? 2 : 1))))\nend\nfunction gemm(transA::Char,\n                transB::Char,\n                A::oneStridedVecOrMat{T},\n                B::oneStridedVecOrMat{T}) where T\n    gemm(transA, transB, one(T), A, B)\nend\n\n## dgmm\nfor (fname, elty) in ((:onemklSdgmm, :Float32),\n                      (:onemklDdgmm, :Float64),\n                      (:onemklCdgmm, :ComplexF32),\n                      (:onemklZdgmm, :ComplexF64))\n    @eval begin\n        function dgmm!(mode::Char,\n                       A::oneStridedMatrix{$elty},\n                       X::oneStridedVector{$elty},\n                       C::oneStridedMatrix{$elty})\n            m, n = size(C)\n            mA, nA = size(A)\n            lx = length(X)\n            if ((mA != m) || (nA != n )) throw(DimensionMismatch(\"\")) end\n            if ((mode == 'L') && (lx != m)) throw(DimensionMismatch(\"\")) end\n            if ((mode == 'R') && (lx != n)) throw(DimensionMismatch(\"\")) end\n            lda = max(1,stride(A,2))\n            incx = stride(X,1)\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(A), device(A))\n            $fname(sycl_queue(queue), mode, m, n, A, lda, X, incx, C, ldc)\n            C\n        end\n    end\nend\nfunction dgmm(mode::Char, A::oneStridedMatrix{T}, X::oneStridedVector{T}) where T\n    m,n = size(A)\n    dgmm!( mode, A, X, similar(A, (m,n) ) )\nend\n\nfor (fname, elty) in\n        ((:onemklHgemm_batch_strided, Float16),\n         (:onemklSgemm_batch_strided, Float32),\n         (:onemklDgemm_batch_strided, Float64),\n         (:onemklCgemm_batch_strided, ComplexF32),\n         (:onemklZgemm_batch_strided, ComplexF64))\n    @eval begin\n        function gemm_strided_batched!(transA::Char,\n                                    transB::Char,\n                                    alpha::Number,\n                                    A::AbstractArray{$elty, 3},\n                                    B::AbstractArray{$elty, 3},\n                                    beta::Number,\n                                    C::AbstractArray{$elty, 3})\n            m = size(A, transA == 'N' ? 1 : 2)\n            k = size(A, transA == 'N' ? 2 : 1)\n            n = size(B, transB == 'N' ? 2 : 1)\n\n            @assert size(A, 3) == size(C, 3) || size(A, 3) == 1 \"batch size mismatch: A != C\"\n            @assert size(B, 3) == size(C, 3) || size(B, 3) == 1 \"batch size mismatch: B != C\"\n\n            if m != size(C,1) || n != size(C,2) || k != size(B, transB == 'N' ? 1 : 2)\n                throw(DimensionMismatch(\"\"))\n            end\n            lda = max(1,stride(A,2))\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n\n            strideA = size(A, 3) == 1 ? 0 : stride(A, 3)\n            strideB = size(B, 3) == 1 ? 0 : stride(B, 3)\n            strideC = stride(C, 3)\n            batchCount = size(C, 3)\n            queue = global_queue(context(A), device(A))\n            alpha = $elty(alpha)\n            beta = $elty(beta)\n            $fname(sycl_queue(queue), transA, transB, m, n, k, alpha, A, lda, strideA, B,\n                    ldb, strideB, beta, C, ldc, strideC, batchCount)\n            C\n        end\n    end\nend\nfunction gemm_strided_batched(transA::Char, transB::Char, alpha::Number,\n                              A::AbstractArray{T, 3}, B::AbstractArray{T, 3}) where T\n    C = similar(B, (size(A, transA == 'N' ? 1 : 2),\n                    size(B, transB == 'N' ? 2 : 1),\n                    max(size(A, 3), size(B, 3))))\n    gemm_strided_batched!(transA, transB, alpha, A, B, zero(T), C )\nend\nfunction gemm_strided_batched(transA::Char, transB::Char, A::AbstractArray{T, 3},\n                              B::AbstractArray{T,3}) where T\n    gemm_strided_batched(transA, transB, one(T), A, B)\nend\n"
  },
  {
    "path": "lib/mkl/wrappers_lapack.jl",
    "content": "# potrf\nfor (bname, fname, elty) in ((:onemklSpotrf_scratchpad_size, :onemklSpotrf, :Float32),\n                             (:onemklDpotrf_scratchpad_size, :onemklDpotrf, :Float64),\n                             (:onemklCpotrf_scratchpad_size, :onemklCpotrf, :ComplexF32),\n                             (:onemklZpotrf_scratchpad_size, :onemklZpotrf, :ComplexF64))\n    @eval begin\n        function potrf!(uplo::Char,\n                        A::oneStridedMatrix{$elty})\n            chkuplo(uplo)\n            n = checksquare(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, A, lda, scratchpad, scratchpad_size)\n\n            return A\n        end\n    end\nend\n\n# potrs\nfor (bname, fname, elty) in ((:onemklSpotrs_scratchpad_size, :onemklSpotrs, :Float32),\n                             (:onemklDpotrs_scratchpad_size, :onemklDpotrs, :Float64),\n                             (:onemklCpotrs_scratchpad_size, :onemklCpotrs, :ComplexF32),\n                             (:onemklZpotrs_scratchpad_size, :onemklZpotrs, :ComplexF64))\n    @eval begin\n        function potrs!(uplo::Char,\n                        A::oneStridedMatrix{$elty},\n                        B::oneStridedVecOrMat{$elty})\n            chkuplo(uplo)\n            n = checksquare(A)\n            if size(B, 1) != n\n                throw(DimensionMismatch(\"first dimension of B, $(size(B,1)), must match second dimension of A, $n\"))\n            end\n            nrhs = size(B,2)\n            lda  = max(1, stride(A, 2))\n            ldb  = max(1, stride(B, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, nrhs, lda, ldb)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, nrhs, A, lda, B, ldb, scratchpad, scratchpad_size)\n\n            return B\n        end\n    end\nend\n\n# potri\nfor (bname, fname, elty) in ((:onemklSpotri_scratchpad_size, :onemklSpotri, :Float32),\n                             (:onemklDpotri_scratchpad_size, :onemklDpotri, :Float64),\n                             (:onemklCpotri_scratchpad_size, :onemklCpotri, :ComplexF32),\n                             (:onemklZpotri_scratchpad_size, :onemklZpotri, :ComplexF64))\n    @eval begin\n        function potri!(uplo::Char,\n                        A::oneStridedMatrix{$elty})\n            chkuplo(uplo)\n            n = checksquare(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, A, lda, scratchpad, scratchpad_size)\n\n            return A\n        end\n    end\nend\n\n# sytrf\nfor (bname, fname, elty) in ((:onemklSsytrf_scratchpad_size, :onemklSsytrf, :Float32),\n                             (:onemklDsytrf_scratchpad_size, :onemklDsytrf, :Float64),\n                             (:onemklCsytrf_scratchpad_size, :onemklCsytrf, :ComplexF32),\n                             (:onemklZsytrf_scratchpad_size, :onemklZsytrf, :ComplexF64))\n    @eval begin\n        function sytrf!(uplo::Char,\n                        A::oneStridedMatrix{$elty},\n                        ipiv::oneStridedVector{Int64})\n            chkuplo(uplo)\n            n = checksquare(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, A, lda, ipiv, scratchpad, scratchpad_size)\n\n            return A, ipiv\n        end\n\n        function sytrf!(uplo::Char, A::oneStridedMatrix{$elty})\n            n = checksquare(A)\n            ipiv = oneVector{Int64}(undef, n)\n            sytrf!(uplo, A, ipiv)\n        end\n    end\nend\n\n# getrf\nfor (bname, fname, elty) in ((:onemklSgetrf_scratchpad_size, :onemklSgetrf, :Float32),\n                             (:onemklDgetrf_scratchpad_size, :onemklDgetrf, :Float64),\n                             (:onemklCgetrf_scratchpad_size, :onemklCgetrf, :ComplexF32),\n                             (:onemklZgetrf_scratchpad_size, :onemklZgetrf, :ComplexF64))\n    @eval begin\n        function getrf!(A::oneStridedMatrix{$elty})\n            m, n = size(A)\n            ipiv = oneVector{Int64}(undef, min(m, n))\n            getrf!(A, ipiv)\n        end\n\n        function getrf!(A::oneStridedMatrix{$elty}, ipiv::oneStridedVector{Int64})\n            m,n = size(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), m, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, A, lda, ipiv, scratchpad, scratchpad_size)\n\n            return A, ipiv\n        end\n    end\nend\n\n# getrs\nfor (bname, fname, elty) in ((:onemklSgetrs_scratchpad_size, :onemklSgetrs, :Float32),\n                             (:onemklDgetrs_scratchpad_size, :onemklDgetrs, :Float64),\n                             (:onemklCgetrs_scratchpad_size, :onemklCgetrs, :ComplexF32),\n                             (:onemklZgetrs_scratchpad_size, :onemklZgetrs, :ComplexF64))\n    @eval begin\n        function getrs!(trans::Char,\n                        A::oneStridedMatrix{$elty},\n                        ipiv::oneStridedVector{Int64},\n                        B::oneStridedVecOrMat{$elty})\n\n            # Support transa = 'C' for real matrices\n            trans = $elty <: Real && trans == 'C' ? 'T' : trans\n\n            chktrans(trans)\n            n = checksquare(A)\n            if size(B, 1) != n\n                throw(DimensionMismatch(\"first dimension of B, $(size(B,1)), must match dimension of A, $n\"))\n            end\n            if length(ipiv) != n\n                throw(DimensionMismatch(\"length of ipiv, $(length(ipiv)), must match dimension of A, $n\"))\n            end\n            nrhs = size(B, 2)\n            lda  = max(1, stride(A, 2))\n            ldb  = max(1, stride(B, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), trans, n, nrhs, lda, ldb)\n            scratchpad = oneVector{UInt8}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), trans, n, nrhs, A, lda, ipiv, B, ldb, scratchpad, scratchpad_size)\n\n            return B\n        end\n    end\nend\n\n# getri\nfor (bname, fname, elty) in ((:onemklSgetri_scratchpad_size, :onemklSgetri, :Float32),\n                             (:onemklDgetri_scratchpad_size, :onemklDgetri, :Float64),\n                             (:onemklCgetri_scratchpad_size, :onemklCgetri, :ComplexF32),\n                             (:onemklZgetri_scratchpad_size, :onemklZgetri, :ComplexF64))\n    @eval begin\n        function getri!(A::oneStridedMatrix{$elty}, ipiv::oneStridedVector{Int64})\n            n = checksquare(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), n, A, lda, ipiv, scratchpad, scratchpad_size)\n\n            return A\n        end\n    end\nend\n\n# geqrf\nfor (bname, fname, elty) in ((:onemklSgeqrf_scratchpad_size, :onemklSgeqrf, :Float32),\n                             (:onemklDgeqrf_scratchpad_size, :onemklDgeqrf, :Float64),\n                             (:onemklCgeqrf_scratchpad_size, :onemklCgeqrf, :ComplexF32),\n                             (:onemklZgeqrf_scratchpad_size, :onemklZgeqrf, :ComplexF64))\n    @eval begin\n        function geqrf!(A::oneStridedMatrix{$elty})\n            m, n = size(A)\n            tau = oneVector{$elty}(undef, min(m, n))\n            geqrf!(A, tau)\n        end\n\n        function geqrf!(A::oneStridedMatrix{$elty}, tau::oneVector{$elty})\n            m,n = size(A)\n            lda = max(1, stride(A, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), m, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, A, lda, tau, scratchpad, scratchpad_size)\n\n            return A, tau\n        end\n    end\nend\n\n# ormqr and unmqr\nfor (bname, fname, elty) in ((:onemklSormqr_scratchpad_size, :onemklSormqr, :Float32),\n                             (:onemklDormqr_scratchpad_size, :onemklDormqr, :Float64),\n                             (:onemklCunmqr_scratchpad_size, :onemklCunmqr, :ComplexF32),\n                             (:onemklZunmqr_scratchpad_size, :onemklZunmqr, :ComplexF64))\n    @eval begin\n        function ormqr!(\n            side::Char, trans::Char, A::oneStridedMatrix{$elty},\n            tau::oneStridedVector{$elty}, C::oneStridedVecOrMat{$elty})\n\n            trans = ($elty <: Real && trans == 'C') ? 'T' : trans\n            chkside(side)\n            chktrans(trans)\n\n            m, n = (ndims(C) == 2) ? size(C) : (size(C, 1), 1)\n            k = length(tau)\n            mA  = size(A, 1)\n\n            side == 'L' && m != mA && throw(DimensionMismatch(\n                \"for a left-sided multiplication, the first dimension of C, $m, must equal the second dimension of A, $mA\"))\n            side == 'R' && n != mA && throw(DimensionMismatch(\n                \"for a right-sided multiplication, the second dimension of C, $m, must equal the second dimension of A, $mA\"))\n            side == 'L' && k > m && throw(DimensionMismatch(\n                \"invalid number of reflectors: k = $k should be ≤ m = $m\"))\n            side == 'R' && k > n && throw(DimensionMismatch(\n                \"invalid number of reflectors: k = $k should be ≤ n = $n\"))\n\n            lda = max(1, stride(A, 2))\n            ldc = max(1, stride(C, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), side, trans, m, n, k, lda, ldc)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), side, trans, m, n, k, A, lda, tau, C, ldc, scratchpad, scratchpad_size)\n\n            return C\n        end\n    end\nend\n\n## orgqr and ungqr\nfor (bname, fname, elty) in ((:onemklSorgqr_scratchpad_size, :onemklSorgqr, :Float32),\n                             (:onemklDorgqr_scratchpad_size, :onemklDorgqr, :Float64),\n                             (:onemklCungqr_scratchpad_size, :onemklCungqr, :ComplexF32),\n                             (:onemklZungqr_scratchpad_size, :onemklZungqr, :ComplexF64))\n    @eval begin\n        function orgqr!(A::oneStridedMatrix{$elty}, tau::oneStridedVector{$elty})\n            m, n = size(A)\n            lda = max(1, stride(A, 2))\n            k = length(tau)\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), m, n, k, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, k, A, lda, tau, scratchpad, scratchpad_size)\n\n            return A\n        end\n    end\nend\n\n# gebrd\nfor (bname, fname, elty, relty) in ((:onemklSgebrd_scratchpad_size, :onemklSgebrd, :Float32, :Float32),\n                                    (:onemklDgebrd_scratchpad_size, :onemklDgebrd, :Float64, :Float64),\n                                    (:onemklCgebrd_scratchpad_size, :onemklCgebrd, :ComplexF32, :Float32),\n                                    (:onemklZgebrd_scratchpad_size, :onemklZgebrd, :ComplexF64, :Float64))\n    @eval begin\n        function gebrd!(A::oneStridedMatrix{$elty})\n            m, n = size(A)\n            lda  = max(1, stride(A, 2))\n\n            k = min(m, n)\n            D = oneVector{$relty}(undef, k)\n            E = oneVector{$relty}(undef, k-1)\n            tauq = oneVector{$elty}(undef, k)\n            taup = oneVector{$elty}(undef, k)\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), m, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, A, lda, D, E, tauq, taup, scratchpad, scratchpad_size)\n\n            A, D, E, tauq, taup\n        end\n    end\nend\n\n# gesvd\nfor (bname, fname, elty, relty) in ((:onemklSgesvd_scratchpad_size, :onemklSgesvd, :Float32, :Float32),\n                                    (:onemklDgesvd_scratchpad_size, :onemklDgesvd, :Float64, :Float64),\n                                    (:onemklCgesvd_scratchpad_size, :onemklCgesvd, :ComplexF32, :Float32),\n                                    (:onemklZgesvd_scratchpad_size, :onemklZgesvd, :ComplexF64, :Float64))\n    @eval begin\n        function gesvd!(jobu::Char,\n                        jobvt::Char,\n                        A::oneStridedMatrix{$elty})\n            m, n = size(A)\n            k = min(m, n)\n            lda = max(1, stride(A, 2))\n\n            U = if jobu === 'A'\n                oneMatrix{$elty}(undef, m, m)\n            elseif jobu === 'S'\n                oneMatrix{$elty}(undef, m, k)\n            elseif jobu === 'N' || jobu === 'O'\n                ZE_NULL\n            else\n                error(\"jobu must be one of 'A', 'S', 'O', or 'N'\")\n            end\n            ldu = U == ZE_NULL ? 1 : max(1, stride(U, 2))\n            S = oneVector{$relty}(undef, k)\n\n            Vt = if jobvt === 'A'\n                oneMatrix{$elty}(undef, n, n)\n            elseif jobvt === 'S'\n                oneMatrix{$elty}(undef, k, n)\n            elseif jobvt === 'N' || jobvt === 'O'\n                ZE_NULL\n            else\n                error(\"jobvt must be one of 'A', 'S', 'O', or 'N'\")\n            end\n            ldvt = Vt == ZE_NULL ? 1 : max(1, stride(Vt, 2))\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), jobu, jobvt, m, n, lda, ldu, ldvt)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), jobu, jobvt, m, n, A, lda, S, U, ldu, Vt, ldvt, scratchpad, scratchpad_size)\n\n            return U, S, Vt\n        end\n    end\nend\n\n# syevd and heevd\nfor (jname, bname, fname, elty, relty) in ((:syevd!, :onemklSsyevd_scratchpad_size, :onemklSsyevd, :Float32, :Float32),\n                                           (:syevd!, :onemklDsyevd_scratchpad_size, :onemklDsyevd, :Float64, :Float64),\n                                           (:heevd!, :onemklCheevd_scratchpad_size, :onemklCheevd, :ComplexF32, :Float32),\n                                           (:heevd!, :onemklZheevd_scratchpad_size, :onemklZheevd, :ComplexF64, :Float64))\n    @eval begin\n        function $jname(jobz::Char,\n                        uplo::Char,\n                        A::oneStridedMatrix{$elty})\n            chkuplo(uplo)\n            n = checksquare(A)\n            lda = max(1, stride(A, 2))\n            W = oneVector{$relty}(undef, n)\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), jobz, uplo, n, lda)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), jobz, uplo, n, A, lda, W, scratchpad, scratchpad_size)\n\n            if jobz == 'N'\n                return W\n            elseif jobz == 'V'\n                return W, A\n            end\n        end\n    end\nend\n\n# sygvd and hegvd\nfor (jname, bname, fname, elty, relty) in ((:sygvd!, :onemklSsygvd_scratchpad_size, :onemklSsygvd, :Float32, :Float32),\n                                           (:sygvd!, :onemklDsygvd_scratchpad_size, :onemklDsygvd, :Float64, :Float64),\n                                           (:hegvd!, :onemklChegvd_scratchpad_size, :onemklChegvd, :ComplexF32, :Float32),\n                                           (:hegvd!, :onemklZhegvd_scratchpad_size, :onemklZhegvd, :ComplexF64, :Float64))\n    @eval begin\n        function $jname(itype::Int,\n                        jobz::Char,\n                        uplo::Char,\n                        A::oneStridedMatrix{$elty},\n                        B::oneStridedMatrix{$elty})\n            chkuplo(uplo)\n            nA, nB = checksquare(A, B)\n            if nB != nA\n                throw(DimensionMismatch(\"Dimensions of A ($nA, $nA) and B ($nB, $nB) must match!\"))\n            end\n            n = nA\n            lda = max(1, stride(A, 2))\n            ldb = max(1, stride(B, 2))\n            W = oneVector{$relty}(undef, n)\n\n            queue = global_queue(context(A), device())\n            scratchpad_size = $bname(sycl_queue(queue), itype, jobz, uplo, n, lda, ldb)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), itype, jobz, uplo, n, A, lda, B, ldb, W, scratchpad, scratchpad_size)\n\n            if jobz == 'N'\n                return W\n            elseif jobz == 'V'\n                return W, A, B\n            end\n        end\n    end\nend\n\n# potrf_batch\nfor (bname, fname, elty) in ((:onemklSpotrf_batch_scratchpad_size, :onemklSpotrf_batch, :Float32),\n                             (:onemklDpotrf_batch_scratchpad_size, :onemklDpotrf_batch, :Float64),\n                             (:onemklCpotrf_batch_scratchpad_size, :onemklCpotrf_batch, :ComplexF32),\n                             (:onemklZpotrf_batch_scratchpad_size, :onemklZpotrf_batch, :ComplexF64))\n    @eval begin\n        function potrf_batched!(A::Vector{<:oneMatrix{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            uplo = [ONEMKL_UPLO_LOWER for i=1:group_count]\n            n = [checksquare(A[i]) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, lda, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, Aptrs, lda, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n\n            return A\n        end\n    end\nend\n\n# potrs_batch\nfor (bname, fname, elty) in ((:onemklSpotrs_batch_scratchpad_size, :onemklSpotrs_batch, :Float32),\n                             (:onemklDpotrs_batch_scratchpad_size, :onemklDpotrs_batch, :Float64),\n                             (:onemklCpotrs_batch_scratchpad_size, :onemklCpotrs_batch, :ComplexF32),\n                             (:onemklZpotrs_batch_scratchpad_size, :onemklZpotrs_batch, :ComplexF64))\n    @eval begin\n        function potrs_batched!(A::Vector{<:oneMatrix{$elty}}, B::Vector{<:oneMatrix{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            uplo = [ONEMKL_UPLO_LOWER for i=1:group_count]\n            n = [checksquare(A[i]) for i=1:group_count]\n            nrhs = [size(B[i], 2) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            ldb = [max(1, stride(B[i], 2)) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            Bptrs = unsafe_batch(B)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), uplo, n, nrhs, lda, ldb, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), uplo, n, nrhs, Aptrs, lda, Bptrs, ldb, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(Bptrs)\n\n            return A\n        end\n    end\nend\n\n# getrf_batch\nfor (bname, fname, elty) in ((:onemklSgetrf_batch_scratchpad_size, :onemklSgetrf_batch, :Float32),\n                             (:onemklDgetrf_batch_scratchpad_size, :onemklDgetrf_batch, :Float64),\n                             (:onemklCgetrf_batch_scratchpad_size, :onemklCgetrf_batch, :ComplexF32),\n                             (:onemklZgetrf_batch_scratchpad_size, :onemklZgetrf_batch, :ComplexF64))\n    @eval begin\n        function getrf_batched!(A::Vector{<:oneMatrix{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            m = [size(A[i], 1) for i=1:group_count]\n            n = [size(A[i], 2) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            ipiv = [oneVector{Int64}(undef, min(m[i], n[i])) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            ipivptrs = unsafe_batch(ipiv)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), m, n, lda, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, Aptrs, lda, ipivptrs, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(ipivptrs)\n\n            return ipiv, A\n        end\n    end\nend\n\n# getrs_batch\nfor (bname, fname, elty) in ((:onemklSgetrs_batch_scratchpad_size, :onemklSgetrs_batch, :Float32),\n                             (:onemklDgetrs_batch_scratchpad_size, :onemklDgetrs_batch, :Float64),\n                             (:onemklCgetrs_batch_scratchpad_size, :onemklCgetrs_batch, :ComplexF32),\n                             (:onemklZgetrs_batch_scratchpad_size, :onemklZgetrs_batch, :ComplexF64))\n    @eval begin\n        function getrs_batched!(A::Vector{<:oneMatrix{$elty}}, ipiv::Vector{<:oneVector{Int64}}, B::Vector{<:oneMatrix{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            trans = [ONEMKL_TRANSPOSE_NONTRANS for i=1:group_count]\n            n = [checksquare(A[i]) for i=1:group_count]\n            nrhs = [size(B[i], 2) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            ldb = [max(1, stride(B[i], 2)) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            Bptrs = unsafe_batch(B)\n            ipivptrs = unsafe_batch(ipiv)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), trans, n, nrhs, lda, ldb, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), trans, n, nrhs, Aptrs, lda, ipivptrs, Bptrs, ldb, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(Bptrs)\n            unsafe_free!(ipivptrs)\n\n            return B\n        end\n    end\nend\n\n# getri_batch\nfor (bname, fname, elty) in ((:onemklSgetri_batch_scratchpad_size, :onemklSgetri_batch, :Float32),\n                             (:onemklDgetri_batch_scratchpad_size, :onemklDgetri_batch, :Float64),\n                             (:onemklCgetri_batch_scratchpad_size, :onemklCgetri_batch, :ComplexF32),\n                             (:onemklZgetri_batch_scratchpad_size, :onemklZgetri_batch, :ComplexF64))\n    @eval begin\n        function getri_batched!(A::Vector{<:oneMatrix{$elty}}, ipiv::Vector{<:oneVector{Int64}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            n = [checksquare(A[i]) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            ipivptrs = unsafe_batch(ipiv)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), n, lda, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), n, Aptrs, lda, ipivptrs, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(ipivptrs)\n\n            return ipiv, A\n        end\n    end\nend\n\n# geqrf_batch\nfor (bname, fname, elty) in ((:onemklSgeqrf_batch_scratchpad_size, :onemklSgeqrf_batch, :Float32),\n                             (:onemklDgeqrf_batch_scratchpad_size, :onemklDgeqrf_batch, :Float64),\n                             (:onemklCgeqrf_batch_scratchpad_size, :onemklCgeqrf_batch, :ComplexF32),\n                             (:onemklZgeqrf_batch_scratchpad_size, :onemklZgeqrf_batch, :ComplexF64))\n    @eval begin\n        function geqrf_batched!(A::Vector{<:oneMatrix{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            m = [size(A[i], 1) for i=1:group_count]\n            n = [size(A[i], 2) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            tau = [oneVector{$elty}(undef, min(m[i], n[i])) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            tauptrs = unsafe_batch(tau)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), m, n, lda, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, Aptrs, lda, tauptrs, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(tauptrs)\n\n            return tau, A\n        end\n    end\nend\n\n# orgqr_batch and ungqr_batch\nfor (bname, fname, elty) in ((:onemklSorgqr_batch_scratchpad_size, :onemklSorgqr_batch, :Float32),\n                             (:onemklDorgqr_batch_scratchpad_size, :onemklDorgqr_batch, :Float64),\n                             (:onemklCungqr_batch_scratchpad_size, :onemklCungqr_batch, :ComplexF32),\n                             (:onemklZungqr_batch_scratchpad_size, :onemklZungqr_batch, :ComplexF64))\n    @eval begin\n        function orgqr_batched!(A::Vector{<:oneMatrix{$elty}}, tau::Vector{<:oneVector{$elty}})\n            group_count = length(A)\n            group_sizes = ones(Int64, group_count)\n            m = [size(A[i], 1) for i=1:group_count]\n            n = [size(A[i], 2) for i=1:group_count]\n            k = [min(m[i], n[i]) for i=1:group_count]\n            lda = [max(1, stride(A[i], 2)) for i=1:group_count]\n            Aptrs = unsafe_batch(A)\n            tauptrs = unsafe_batch(tau)\n\n            queue = global_queue(context(A[1]), device(A[1]))\n            scratchpad_size = $bname(sycl_queue(queue), m, n, k, lda, group_count, group_sizes)\n            scratchpad = oneVector{$elty}(undef, scratchpad_size)\n            $fname(sycl_queue(queue), m, n, k, Aptrs, lda, tauptrs, group_count, group_sizes, scratchpad, scratchpad_size)\n\n            unsafe_free!(Aptrs)\n            unsafe_free!(tauptrs)\n\n            return A\n        end\n    end\nend\n\n# LAPACK\nfor elty in (:Float32, :Float64, :ComplexF32, :ComplexF64)\n    @eval begin\n        LinearAlgebra.LAPACK.potrf!(uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.potrf!(uplo, A)\n        LinearAlgebra.LAPACK.potrs!(uplo::Char, A::oneStridedMatrix{$elty}, B::oneStridedVecOrMat{$elty}) = oneMKL.potrs!(uplo, A, B)\n        LinearAlgebra.LAPACK.sytrf!(uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.sytrf!(uplo, A)\n        LinearAlgebra.LAPACK.sytrf!(uplo::Char, A::oneStridedMatrix{$elty}, ipiv::oneStridedVector{Int64}) = oneMKL.sytrf!(uplo, A, ipiv)\n        LinearAlgebra.LAPACK.geqrf!(A::oneStridedMatrix{$elty}) = oneMKL.geqrf!(A)\n        LinearAlgebra.LAPACK.geqrf!(A::oneStridedMatrix{$elty}, tau::oneStridedVector{$elty}) = oneMKL.geqrf!(A, tau)\n        LinearAlgebra.LAPACK.getrf!(A::oneStridedMatrix{$elty}) = oneMKL.getrf!(A)\n        LinearAlgebra.LAPACK.getrf!(A::oneStridedMatrix{$elty}, ipiv::oneStridedVector{Int64}) = oneMKL.getrf!(A, ipiv)\n        LinearAlgebra.LAPACK.getrs!(trans::Char, A::oneStridedMatrix{$elty}, ipiv::oneStridedVector{Int64}, B::oneStridedVecOrMat{$elty}) = oneMKL.getrs!(trans, A, ipiv, B)\n        LinearAlgebra.LAPACK.ormqr!(side::Char, trans::Char, A::oneStridedMatrix{$elty}, tau::oneStridedVector{$elty}, C::oneStridedVecOrMat{$elty}) = oneMKL.ormqr!(side, trans, A, tau, C)\n        LinearAlgebra.LAPACK.orgqr!(A::oneStridedMatrix{$elty}, tau::oneStridedVector{$elty}) = oneMKL.orgqr!(A, tau)\n        LinearAlgebra.LAPACK.gebrd!(A::oneStridedMatrix{$elty}) = oneMKL.gebrd!(A)\n        LinearAlgebra.LAPACK.gesvd!(jobu::Char, jobvt::Char, A::oneStridedMatrix{$elty}) = oneMKL.gesvd!(jobu, jobvt, A)\n    end\nend\n\nfor elty in (:Float32, :Float64)\n    @eval begin\n        LinearAlgebra.LAPACK.syev!(jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.syevd!(jobz, uplo, A)\n        LinearAlgebra.LAPACK.sygvd!(itype::Int, jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}, B::oneStridedMatrix{$elty}) = oneMKL.sygvd!(itype, jobz, uplo, A, B)\n    end\nend\n\nfor elty in (:ComplexF32, :ComplexF64)\n    @eval begin\n        LinearAlgebra.LAPACK.syev!(jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.heevd!(jobz, uplo, A)\n        LinearAlgebra.LAPACK.sygvd!(itype::Int, jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}, B::oneStridedMatrix{$elty}) = oneMKL.hegvd!(itype, jobz, uplo, A, B)\n    end\nend\n\nfor elty in (:Float32, :Float64)\n    @eval begin\n        LinearAlgebra.LAPACK.syevd!(jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.syevd!(jobz, uplo, A)\n    end\nend\n\nfor elty in (:ComplexF32, :ComplexF64)\n    @eval begin\n        LinearAlgebra.LAPACK.syevd!(jobz::Char, uplo::Char, A::oneStridedMatrix{$elty}) = oneMKL.heevd!(jobz, uplo, A)\n    end\nend\n"
  },
  {
    "path": "lib/mkl/wrappers_sparse.jl",
    "content": "# Deferred release queue for sparse matrix handles.\n# Finalizers run on the GC thread, but onemklXsparse_release_matrix_handle submits\n# work to the SYCL queue. Using the same queue from the GC thread and the main thread\n# concurrently is not safe and causes ZE_RESULT_ERROR_DEVICE_LOST / ZE_RESULT_ERROR_UNKNOWN.\n# Instead, finalizers push handles here and they are released on the main thread.\nconst _deferred_sparse_handles = Vector{matrix_handle_t}()\nconst _deferred_sparse_handles_lock = ReentrantLock()\n\nfunction sparse_release_matrix_handle(A::oneAbstractSparseMatrix)\n    return if A.handle !== nothing\n        lock(_deferred_sparse_handles_lock) do\n            push!(_deferred_sparse_handles, A.handle)\n        end\n    end\nend\n\nfunction flush_deferred_sparse_releases()\n    handles = lock(_deferred_sparse_handles_lock) do\n        if isempty(_deferred_sparse_handles)\n            return matrix_handle_t[]\n        end\n        h = copy(_deferred_sparse_handles)\n        empty!(_deferred_sparse_handles)\n        return h\n    end\n    isempty(handles) && return\n    dev = device()\n    ctx = context()\n    queue = global_queue(ctx, dev)\n    for handle in handles\n        try\n            handle_ptr = Ref{matrix_handle_t}(handle)\n            onemklXsparse_release_matrix_handle(sycl_queue(queue), handle_ptr)\n        catch err\n            @warn \"Error releasing sparse matrix handle\" exception = err\n        end\n    end\n    return synchronize(queue)\nend\n\nfor (fname, elty, intty) in ((:onemklSsparse_set_csr_data   , :Float32   , :Int32),\n                             (:onemklSsparse_set_csr_data_64, :Float32   , :Int64),\n                             (:onemklDsparse_set_csr_data   , :Float64   , :Int32),\n                             (:onemklDsparse_set_csr_data_64, :Float64   , :Int64),\n                             (:onemklCsparse_set_csr_data   , :ComplexF32, :Int32),\n                             (:onemklCsparse_set_csr_data_64, :ComplexF32, :Int64),\n                             (:onemklZsparse_set_csr_data   , :ComplexF64, :Int32),\n                             (:onemklZsparse_set_csr_data_64, :ComplexF64, :Int64))\n    @eval begin\n\n        function oneSparseMatrixCSR(\n                rowPtr::oneVector{$intty}, colVal::oneVector{$intty},\n                nzVal::oneVector{$elty}, dims::NTuple{2, Int}\n            )\n            flush_deferred_sparse_releases()\n            handle_ptr = Ref{matrix_handle_t}()\n            onemklXsparse_init_matrix_handle(handle_ptr)\n            m, n = dims\n            nnzA = length(nzVal)\n            queue = global_queue(context(nzVal), device(nzVal))\n            # Don't update handle if matrix is empty\n            if m != 0 && n != 0\n                $fname(sycl_queue(queue), handle_ptr[], m, n, 'O', rowPtr, colVal, nzVal)\n                dA = oneSparseMatrixCSR{$elty, $intty}(handle_ptr[], rowPtr, colVal, nzVal, (m, n), nnzA)\n                finalizer(sparse_release_matrix_handle, dA)\n            else\n                dA = oneSparseMatrixCSR{$elty, $intty}(nothing, rowPtr, colVal, nzVal, (m, n), nnzA)\n            end\n            return dA\n        end\n\n        function oneSparseMatrixCSC(\n                colPtr::oneVector{$intty}, rowVal::oneVector{$intty},\n                nzVal::oneVector{$elty}, dims::NTuple{2, Int}\n            )\n            flush_deferred_sparse_releases()\n            queue = global_queue(context(nzVal), device(nzVal))\n            handle_ptr = Ref{matrix_handle_t}()\n            onemklXsparse_init_matrix_handle(handle_ptr)\n            m, n = dims\n            nnzA = length(nzVal)\n            # Don't update handle if matrix is empty\n            if m != 0 && n != 0\n                $fname(sycl_queue(queue), handle_ptr[], n, m, 'O', colPtr, rowVal, nzVal)  # CSC of A is CSR of Aᵀ\n                dA = oneSparseMatrixCSC{$elty, $intty}(handle_ptr[], colPtr, rowVal, nzVal, (m, n), nnzA)\n                finalizer(sparse_release_matrix_handle, dA)\n            else\n                dA = oneSparseMatrixCSC{$elty, $intty}(nothing, colPtr, rowVal, nzVal, (m, n), nnzA)\n            end\n            return dA\n        end\n\n\n        function oneSparseMatrixCSR(A::SparseMatrixCSC{$elty, $intty})\n            m, n = size(A)\n            At = SparseMatrixCSC(A |> transpose)\n            rowPtr = oneVector{$intty}(At.colptr)\n            colVal = oneVector{$intty}(At.rowval)\n            nzVal = oneVector{$elty}(At.nzval)\n            return oneSparseMatrixCSR(rowPtr, colVal, nzVal, (m, n))\n        end\n\n        function SparseArrays.SparseMatrixCSC(A::oneSparseMatrixCSR{$elty, $intty})\n            handle_ptr = Ref{matrix_handle_t}()\n            At = SparseMatrixCSC(reverse(A.dims)..., Vector(A.rowPtr), Vector(A.colVal), Vector(A.nzVal))\n            A_csc = SparseMatrixCSC(At |> transpose)\n            return A_csc\n        end\n\n        function oneSparseMatrixCSC(A::SparseMatrixCSC{$elty, $intty})\n            m, n = size(A)\n            colPtr = oneVector{$intty}(A.colptr)\n            rowVal = oneVector{$intty}(A.rowval)\n            nzVal = oneVector{$elty}(A.nzval)\n            return oneSparseMatrixCSC(colPtr, rowVal, nzVal, (m, n))\n        end\n\n        function SparseArrays.SparseMatrixCSC(A::oneSparseMatrixCSC{$elty, $intty})\n            handle_ptr = Ref{matrix_handle_t}()\n            A_csc = SparseMatrixCSC(A.dims..., Vector(A.colPtr), Vector(A.rowVal), Vector(A.nzVal))\n            return A_csc\n        end\n    end\nend\n\nfor (fname, elty, intty) in ((:onemklSsparse_set_coo_data   , :Float32   , :Int32),\n                             (:onemklSsparse_set_coo_data_64, :Float32   , :Int64),\n                             (:onemklDsparse_set_coo_data   , :Float64   , :Int32),\n                             (:onemklDsparse_set_coo_data_64, :Float64   , :Int64),\n                             (:onemklCsparse_set_coo_data   , :ComplexF32, :Int32),\n                             (:onemklCsparse_set_coo_data_64, :ComplexF32, :Int64),\n                             (:onemklZsparse_set_coo_data   , :ComplexF64, :Int32),\n                             (:onemklZsparse_set_coo_data_64, :ComplexF64, :Int64))\n    @eval begin\n        function oneSparseMatrixCOO(A::SparseMatrixCSC{$elty, $intty})\n            flush_deferred_sparse_releases()\n            handle_ptr = Ref{matrix_handle_t}()\n            onemklXsparse_init_matrix_handle(handle_ptr)\n            m, n = size(A)\n            row, col, val = findnz(A)\n            rowInd = oneVector{$intty}(row)\n            colInd = oneVector{$intty}(col)\n            nzVal = oneVector{$elty}(val)\n            nnzA = length(val)\n            queue = global_queue(context(nzVal), device(nzVal))\n            if m != 0 && n != 0\n                $fname(sycl_queue(queue), handle_ptr[], m, n, nnzA, 'O', rowInd, colInd, nzVal)\n                dA = oneSparseMatrixCOO{$elty, $intty}(handle_ptr[], rowInd, colInd, nzVal, (m, n), nnzA)\n                finalizer(sparse_release_matrix_handle, dA)\n            else\n                dA = oneSparseMatrixCOO{$elty, $intty}(nothing, rowInd, colInd, nzVal, (m, n), nnzA)\n            end\n            return dA\n        end\n\n        function SparseArrays.SparseMatrixCSC(A::oneSparseMatrixCOO{$elty, $intty})\n            handle_ptr = Ref{matrix_handle_t}()\n            A = sparse(Vector(A.rowInd), Vector(A.colInd), Vector(A.nzVal), A.dims...)\n            return A\n        end\n    end\nend\n\nfor SparseMatrix in (:oneSparseMatrixCSR, :oneSparseMatrixCOO)\n    for (fname, elty) in ((:onemklSsparse_gemv, :Float32),\n                          (:onemklDsparse_gemv, :Float64),\n                          (:onemklCsparse_gemv, :ComplexF32),\n                          (:onemklZsparse_gemv, :ComplexF64))\n        @eval begin\n            function sparse_gemv!(trans::Char,\n                                  alpha::Number,\n                                  A::$SparseMatrix{$elty},\n                                  x::oneStridedVector{$elty},\n                                  beta::Number,\n                                  y::oneStridedVector{$elty})\n\n                queue = global_queue(context(x), device(x))\n                $fname(sycl_queue(queue), trans, alpha, A.handle, x, beta, y)\n                y\n            end\n        end\n    end\n\n    @eval begin\n        function sparse_optimize_gemv!(trans::Char, A::$SparseMatrix)\n            queue = global_queue(context(A.nzVal), device(A.nzVal))\n            onemklXsparse_optimize_gemv(sycl_queue(queue), trans, A.handle)\n            return A\n        end\n    end\nend\n\nfor SparseMatrix in (:oneSparseMatrixCSC,)\n    # CSC(A) is represented by storing CSR(A^T). Map operations accordingly:\n    #  - trans = 'N': want A*x -> use op(S)='T' with S=A^T.\n    #  - trans = 'T': want A^T*x -> use op(S)='N' with S=A^T.\n    #  - trans = 'C': want A^H*x.\n    #      * For real eltypes, A^H == A^T -> use op(S)='N'.\n    #      * For complex eltypes, we cannot express A^H using a single op(S).\n    #        Use identity: conj(y_new) = conj(alpha) * A * conj(x) + conj(beta) * conj(y)\n    #        and compute with op(S)='T' (since S^T = A), conjugating x and y around the call.\n    for (fname, elty) in ((:onemklSsparse_gemv, :Float32),\n                          (:onemklDsparse_gemv, :Float64))\n        @eval begin\n            function sparse_gemv!(trans::Char,\n                                  alpha::Number,\n                                  A::$SparseMatrix{$elty},\n                                  x::oneStridedVector{$elty},\n                                  beta::Number,\n                                  y::oneStridedVector{$elty})\n\n                queue = global_queue(context(x), device(x))\n                m, n = size(A)\n                if m != 0 && n != 0\n                    $fname(sycl_queue(queue), flip_trans(trans), alpha, A.handle, x, beta, y)\n                end\n                y\n            end\n        end\n    end\n\n    # Special handling for CSC matrices since they are stored as transposed CSR\n    for (fname, elty) in (\n            (:onemklCsparse_gemv, :ComplexF32),\n            (:onemklZsparse_gemv, :ComplexF64),\n        )\n        @eval begin\n            function sparse_gemv!(\n                    trans::Char,\n                    alpha::Number,\n                    A::$SparseMatrix{$elty},\n                    x::oneStridedVector{$elty},\n                    beta::Number,\n                    y::oneStridedVector{$elty}\n                )\n\n                # Compute A^H*x via identity:\n                #   conj(y_new) = conj(alpha) * (A^T) * conj(x) + conj(beta) * conj(y)\n                # Since S=A^T and op='N' computes S*x = A^T*x, we can realize this with one call.\n\n                if trans == 'C'\n                    y .= conj.(y)\n                    x .= conj.(x)\n                    alpha = conj(alpha)\n                    beta = conj(beta)\n                end\n\n                queue = global_queue(context(x), device(x))\n                $fname(sycl_queue(queue), flip_trans(trans), alpha, A.handle, x, beta, y)\n\n                if trans == 'C'\n                    y .= conj.(y)\n                    # Restore x\n                    x .= conj.(x)\n                end\n                return y\n            end\n        end\n    end\n    @eval begin\n        function sparse_optimize_gemv!(trans::Char, A::$SparseMatrix)\n            # complex 'C' case is implemented using op='N' on S=A^T with conjugation trick\n            queue = global_queue(context(A.nzVal), device(A.nzVal))\n            onemklXsparse_optimize_gemv(sycl_queue(queue), flip_trans(trans), A.handle)\n            return A\n        end\n    end\nend\n\nfor (fname, elty) in ((:onemklSsparse_gemm, :Float32),\n        (:onemklDsparse_gemm, :Float64),\n        (:onemklCsparse_gemm, :ComplexF32),\n        (:onemklZsparse_gemm, :ComplexF64),\n    )\n    @eval begin\n        function sparse_gemm!(transa::Char,\n                transb::Char,\n                alpha::Number,\n                A::oneSparseMatrixCSR{$elty},\n                B::oneStridedMatrix{$elty},\n                beta::Number,\n                C::oneStridedMatrix{$elty}\n            )\n\n            mB, nB = size(B)\n            mC, nC = size(C)\n            (nB != nC) && (transb == 'N') && throw(ArgumentError(\"B and C must have the same number of columns.\"))\n            (mB != nC) && (transb != 'N') && throw(ArgumentError(\"Bᵀ and C must have the same number of columns.\"))\n            nrhs = size(B, 2)\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(C), device(C))\n            $fname(sycl_queue(queue), 'C', transa, transb, alpha, A.handle, B, nrhs, ldb, beta, C, ldc)\n            C\n        end\n    end\nend\n\nfunction sparse_optimize_gemm!(trans::Char, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_gemm(sycl_queue(queue), trans, A.handle)\n    return A\nend\n\nfunction sparse_optimize_gemm!(trans::Char, transB::Char, nrhs::Int, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_gemm_advanced(sycl_queue(queue), 'C', trans, transB, A.handle, nrhs)\n    return A\nend\n\nfor (fname, elty) in ((:onemklSsparse_gemm, :Float32),\n                      (:onemklDsparse_gemm, :Float64))\n    @eval begin\n        function sparse_gemm!(transa::Char,\n                              transb::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSC{$elty},\n                              B::oneStridedMatrix{$elty},\n                              beta::Number,\n                              C::oneStridedMatrix{$elty})\n\n            mB, nB = size(B)\n            mC, nC = size(C)\n            (nB != nC) && (transb == 'N') && throw(ArgumentError(\"B and C must have the same number of columns.\"))\n            (mB != nC) && (transb != 'N') && throw(ArgumentError(\"Bᵀ and C must have the same number of columns.\"))\n            nrhs = size(B, 2)\n            ldb = max(1,stride(B,2))\n            ldc = max(1,stride(C,2))\n            queue = global_queue(context(C), device(C))\n            $fname(sycl_queue(queue), 'C', flip_trans(transa), transb, alpha, A.handle, B, nrhs, ldb, beta, C, ldc)\n            C\n        end\n    end\nend\n\n# Special handling for CSC matrices since they are stored as transposed CSR (S = A^T)\nfor (fname, elty) in (\n        (:onemklCsparse_gemm, :ComplexF32),\n        (:onemklZsparse_gemm, :ComplexF64),\n    )\n    @eval begin\n        function sparse_gemm!(\n                transa::Char,\n                transb::Char,\n                alpha::Number,\n                A::oneSparseMatrixCSC{$elty},\n                B::oneStridedMatrix{$elty},\n                beta::Number,\n                C::oneStridedMatrix{$elty}\n            )\n\n            # Map op(A) to op(S) where S = A^T stored as CSR in the handle\n            # transa: 'N' -> op(S)='T'; 'T' -> op(S)='N'; 'C' ->\n            #   real: op(S)='N' (since A^H == A^T)\n            #   complex: use conjugation identity on B and C with op(S)='N'\n\n            mB, nB = size(B)\n            mC, nC = size(C)\n            (nB != nC) && (transb == 'N') && throw(ArgumentError(\"B and C must have the same number of columns.\"))\n            (mB != nC) && (transb != 'N') && throw(ArgumentError(\"Bᵀ and C must have the same number of columns.\"))\n            nrhs = size(B, 2)\n            ldb = max(1, stride(B, 2))\n            ldc = max(1, stride(C, 2))\n            queue = global_queue(context(C), device(C))\n\n            # Use identity: conj(C_new) = conj(alpha) * S * conj(opB(B)) + conj(beta) * conj(C)\n            # Prepare conj(C) in-place and conj(B) into a temporary if needed\n\n            # Determine how to supply opB under conjugation\n            # - transb == 'N': pass transb='N' and use conj(B)\n            # - transb == 'T': pass transb='T' and use conj(B)\n            # - transb == 'C': since conj(B^H) = B^T, pass transb='T' and use B as-is\n            local transb_eff\n            local Beff\n            if transa == 'C'\n                C .= conj.(C)\n                alpha = conj(alpha)\n                beta = conj(beta)\n                if transb == 'N'\n                    transb_eff = 'N'\n                    # Beff = similar(B)\n                    B .= conj.(B)\n                elseif transb == 'T'\n                    transb_eff = 'T'\n                    # Beff = similar(B)\n                    B .= conj.(B)\n                else\n                    # transb == 'C'\n                    transb_eff = 'T'\n                end\n            else\n                transb_eff = transb\n            end\n\n            $fname(sycl_queue(queue), 'C', flip_trans(transa), transb_eff, alpha, A.handle, B, nrhs, ldb, beta, C, ldc)\n\n            # Undo conjugation to obtain C_new\n            if transa == 'C'\n                C .= conj.(C)\n                if transb == 'N' || transb == 'T'\n                    # Restore B\n                    B .= conj.(B)\n                end\n            end\n            return C\n        end\n    end\nend\n\nfunction sparse_optimize_gemm!(trans::Char, A::oneSparseMatrixCSC)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_gemm(sycl_queue(queue), flip_trans(trans), A.handle)\n    return A\nend\n\nfunction sparse_optimize_gemm!(trans::Char, transB::Char, nrhs::Int, A::oneSparseMatrixCSC)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_gemm_advanced(sycl_queue(queue), 'C', flip_trans(trans), transB, A.handle, nrhs)\n    return A\nend\n\nfor (fname, elty) in ((:onemklSsparse_symv, :Float32),\n                      (:onemklDsparse_symv, :Float64),\n                      (:onemklCsparse_symv, :ComplexF32),\n                      (:onemklZsparse_symv, :ComplexF64))\n    @eval begin\n        function sparse_symv!(uplo::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSR{$elty},\n                              x::oneStridedVector{$elty},\n                              beta::Number,\n                              y::oneStridedVector{$elty})\n\n            queue = global_queue(context(y), device(y))\n            $fname(sycl_queue(queue), uplo, alpha, A.handle, x, beta, y)\n            y\n        end\n    end\nend\n\nfor (fname, elty) in ((:onemklSsparse_symv, :Float32),\n        (:onemklDsparse_symv, :Float64),\n        (:onemklCsparse_symv, :ComplexF32),\n        (:onemklZsparse_symv, :ComplexF64),\n    )\n    @eval begin\n        function sparse_symv!(uplo::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSC{$elty},\n                              x::oneStridedVector{$elty},\n                              beta::Number,\n                              y::oneStridedVector{$elty})\n\n            queue = global_queue(context(y), device(y))\n            $fname(sycl_queue(queue), flip_uplo(uplo), alpha, A.handle, x, beta, y)\n            y\n        end\n    end\nend\n\nfor (fname, elty) in ((:onemklSsparse_trmv, :Float32),\n                      (:onemklDsparse_trmv, :Float64),\n                      (:onemklCsparse_trmv, :ComplexF32),\n                      (:onemklZsparse_trmv, :ComplexF64))\n    @eval begin\n        function sparse_trmv!(uplo::Char,\n                              trans::Char,\n                              diag::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSR{$elty},\n                              x::oneStridedVector{$elty},\n                              beta::Number,\n                              y::oneStridedVector{$elty})\n\n            queue = global_queue(context(y), device(y))\n            $fname(sycl_queue(queue), uplo, trans, diag, alpha, A.handle, x, beta, y)\n            y\n        end\n    end\nend\n\nfunction sparse_optimize_trmv!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trmv(sycl_queue(queue), uplo, trans, diag, A.handle)\n    return A\nend\n\n# Special handling for CSC matrices since they are stored as transposed CSR\nfor (fname, elty) in (\n        (:onemklSsparse_trmv, :Float32),\n        (:onemklDsparse_trmv, :Float64),\n        (:onemklCsparse_trmv, :ComplexF32),\n        (:onemklZsparse_trmv, :ComplexF64),\n    )\n    @eval begin\n        function sparse_trmv!(\n                uplo::Char,\n                trans::Char,\n                diag::Char,\n                alpha::Number,\n                A::oneSparseMatrixCSC{$elty},\n                x::oneStridedVector{$elty},\n                beta::Number,\n                y::oneStridedVector{$elty}\n            )\n\n            # Intel oneAPI sparse trmv only supports nontrans operations.\n            # Since CSC(A) is stored as CSR(A^T), we cannot map CSC operations\n            # to CSR operations for triangular operations without transpose support.\n            throw(\n                ArgumentError(\n                    \"sparse_trmv! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                        \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                        \"Convert to oneSparseMatrixCSR format instead.\"\n                )\n            )\n            queue = global_queue(context(y), device(y))\n            $fname(sycl_queue(queue), uplo, flip_trans(trans), diag, alpha, A.handle, x, beta, y)\n            return y\n        end\n    end\nend\n\nfunction sparse_optimize_trmv!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSC)\n    throw(\n        ArgumentError(\n            \"sparse_optimize_trmv! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                \"Convert to oneSparseMatrixCSR format instead.\"\n        )\n    )\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trmv(sycl_queue(queue), uplo, flip_trans(trans), diag, A.handle)\n    return A\nend\n\nfor (fname, elty) in ((:onemklSsparse_trsv, :Float32),\n                      (:onemklDsparse_trsv, :Float64),\n                      (:onemklCsparse_trsv, :ComplexF32),\n                      (:onemklZsparse_trsv, :ComplexF64))\n    @eval begin\n        function sparse_trsv!(uplo::Char,\n                              trans::Char,\n                              diag::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSR{$elty},\n                              x::oneStridedVector{$elty},\n                              y::oneStridedVector{$elty})\n\n            queue = global_queue(context(y), device(y))\n            $fname(sycl_queue(queue), uplo, trans, diag, alpha, A.handle, x, y)\n            y\n        end\n    end\nend\n\nfunction sparse_optimize_trsv!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsv(sycl_queue(queue), uplo, trans, diag, A.handle)\n    return A\nend\n\nfor (fname, elty) in (\n        (:onemklSsparse_trsv, :Float32),\n        (:onemklDsparse_trsv, :Float64),\n        (:onemklCsparse_trsv, :ComplexF32),\n        (:onemklZsparse_trsv, :ComplexF64),\n    )\n    @eval begin\n        function sparse_trsv!(\n                uplo::Char,\n                trans::Char,\n                diag::Char,\n                alpha::Number,\n                A::oneSparseMatrixCSC{$elty},\n                x::oneStridedVector{$elty},\n                y::oneStridedVector{$elty}\n            )\n\n            throw(\n                ArgumentError(\n                    \"sparse_trsv! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                        \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                        \"Convert to oneSparseMatrixCSR format instead.\"\n                )\n            )\n            queue = global_queue(context(y), device(y))\n            onemklXsparse_optimize_trsv(sycl_queue(queue), uplo, flip_trans(trans), diag, A.handle)\n            return A\n        end\n    end\nend\n\nfunction sparse_optimize_trsv!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSC)\n    throw(\n        ArgumentError(\n            \"sparse_optimize_trsv! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                \"Convert to oneSparseMatrixCSR format instead.\"\n        )\n    )\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsv(sycl_queue(queue), uplo, flip_trans(trans), diag, A.handle)\n    return A\nend\n\nfor (fname, elty) in ((:onemklSsparse_trsm, :Float32),\n                      (:onemklDsparse_trsm, :Float64),\n                      (:onemklCsparse_trsm, :ComplexF32),\n                      (:onemklZsparse_trsm, :ComplexF64))\n    @eval begin\n        function sparse_trsm!(uplo::Char,\n                              transA::Char,\n                              transX::Char,\n                              diag::Char,\n                              alpha::Number,\n                              A::oneSparseMatrixCSR{$elty},\n                              X::oneStridedMatrix{$elty},\n                              Y::oneStridedMatrix{$elty})\n\n            mX, nX = size(X)\n            mY, nY = size(Y)\n            (mX != mY) && (transX == 'N') && throw(ArgumentError(\"X and Y must have the same number of rows.\"))\n            (nX != nY) && (transX == 'N') && throw(ArgumentError(\"X and Y must have the same number of columns.\"))\n            (nX != mY) && (transX != 'N') && throw(ArgumentError(\"Xᵀ and Y must have the same number of rows.\"))\n            (mX != nY) && (transX != 'N') && throw(ArgumentError(\"Xᵀ and Y must have the same number of columns.\"))\n            nrhs = size(X, 2)\n            ldx = max(1,stride(X,2))\n            ldy = max(1,stride(Y,2))\n            queue = global_queue(context(Y), device(Y))\n            $fname(sycl_queue(queue), 'C', transA, transX, uplo, diag, alpha, A.handle, X, nrhs, ldx, Y, ldy)\n            Y\n        end\n    end\nend\n\nfunction sparse_optimize_trsm!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsm(sycl_queue(queue), uplo, trans, diag, A.handle)\n    return A\nend\n\nfunction sparse_optimize_trsm!(uplo::Char, trans::Char, diag::Char, nrhs::Int, A::oneSparseMatrixCSR)\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsm_advanced(sycl_queue(queue), 'C', uplo, trans, diag, A.handle, nrhs)\n    return A\nend\n\n# Only transA = 'N' is supported with oneSparseMatrixCSR.\n# We can't use any trick to support sparse \"trsm\" for oneSparseMatrixCSC.\nfor (fname, elty) in (\n        (:onemklSsparse_trsm, :Float32),\n        (:onemklDsparse_trsm, :Float64),\n        (:onemklCsparse_trsm, :ComplexF32),\n        (:onemklZsparse_trsm, :ComplexF64),\n    )\n    @eval begin\n        function sparse_trsm!(\n                uplo::Char,\n                transA::Char,\n                transX::Char,\n                diag::Char,\n                alpha::Number,\n                A::oneSparseMatrixCSC{$elty},\n                X::oneStridedMatrix{$elty},\n                Y::oneStridedMatrix{$elty}\n            )\n\n            # Intel oneAPI sparse trsm only supports nontrans operations for the matrix A.\n            # Since CSC(A) is stored as CSR(A^T), we cannot map CSC operations\n            # to CSR operations for triangular solve operations without transpose support.\n            throw(\n                ArgumentError(\n                    \"sparse_trsm! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                        \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                        \"Convert to oneSparseMatrixCSR format instead.\"\n                )\n            )\n\n            mX, nX = size(X)\n            mY, nY = size(Y)\n            (mX != mY) && (transX == 'N') && throw(ArgumentError(\"X and Y must have the same number of rows.\"))\n            (nX != nY) && (transX == 'N') && throw(ArgumentError(\"X and Y must have the same number of columns.\"))\n            (nX != mY) && (transX != 'N') && throw(ArgumentError(\"Xᵀ and Y must have the same number of rows.\"))\n            (mX != nY) && (transX != 'N') && throw(ArgumentError(\"Xᵀ and Y must have the same number of columns.\"))\n            nrhs = size(X, 2)\n            ldx = max(1, stride(X, 2))\n            ldy = max(1, stride(Y, 2))\n            queue = global_queue(context(Y), device(Y))\n            $fname(sycl_queue(queue), 'C', flip_trans(transA), transX, uplo, diag, alpha, A.handle, X, nrhs, ldx, Y, ldy)\n            return Y\n        end\n    end\nend\n\nfunction sparse_optimize_trsm!(uplo::Char, trans::Char, diag::Char, A::oneSparseMatrixCSC)\n    throw(\n        ArgumentError(\n            \"sparse_optimize_trsm! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                \"Convert to oneSparseMatrixCSR format instead.\"\n        )\n    )\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsm(sycl_queue(queue), uplo, trans, diag, A.handle)\n    return A\nend\n\nfunction sparse_optimize_trsm!(uplo::Char, trans::Char, diag::Char, nrhs::Int, A::oneSparseMatrixCSC)\n    throw(\n        ArgumentError(\n            \"sparse_optimize_trsm! is not supported for oneSparseMatrixCSC due to Intel oneAPI limitations. \" *\n                \"Intel sparse library only supports nontrans operations for triangular matrix operations. \" *\n                \"Convert to oneSparseMatrixCSR format instead.\"\n        )\n    )\n    queue = global_queue(context(A.nzVal), device(A.nzVal))\n    onemklXsparse_optimize_trsm_advanced(sycl_queue(queue), 'C', uplo, trans, diag, A.handle, nrhs)\n    return A\nend\n"
  },
  {
    "path": "lib/support/Support.jl",
    "content": "module Support\n\nusing ..oneAPI\n\nusing ..oneL0\n\nusing ..oneL0:\n  ze_driver_handle_t, ze_device_handle_t, ze_context_handle_t,\n  ze_command_queue_handle_t, ze_event_handle_t\n\nusing oneAPI_Support_jll\n\ninclude(\"liboneapi_support.jl\")\n\n# export everything\nfor n in names(@__MODULE__; all=true)\n    if Base.isidentifier(n) && n ∉ (Symbol(@__MODULE__), :eval, :include)\n        @eval export $n\n    end\nend\n\nfunction __init__()\n    precompiling = ccall(:jl_generating_output, Cint, ()) != 0\n    precompiling && return\n    \n    if !oneAPI_Support_jll.is_available()\n        @error \"\"\"oneAPI support wrapper not available for your platform.\"\"\"\n        return\n    end\nend\n\nend\n"
  },
  {
    "path": "lib/support/liboneapi_support.jl",
    "content": "using CEnum: CEnum, @cenum\n\nmutable struct syclPlatform_st end\n\nconst syclPlatform_t = Ptr{syclPlatform_st}\n\nfunction syclPlatformCreate(obj, driver)\n    @ccall liboneapi_support.syclPlatformCreate(obj::Ptr{syclPlatform_t},\n                                                driver::ze_driver_handle_t)::Cint\nend\n\nfunction syclPlatformDestroy(obj)\n    @ccall liboneapi_support.syclPlatformDestroy(obj::syclPlatform_t)::Cint\nend\n\nmutable struct syclDevice_st end\n\nconst syclDevice_t = Ptr{syclDevice_st}\n\nfunction syclDeviceCreate(obj, platform, device)\n    @ccall liboneapi_support.syclDeviceCreate(obj::Ptr{syclDevice_t},\n                                              platform::syclPlatform_t,\n                                              device::ze_device_handle_t)::Cint\nend\n\nfunction syclDeviceDestroy(obj)\n    @ccall liboneapi_support.syclDeviceDestroy(obj::syclDevice_t)::Cint\nend\n\nmutable struct syclContext_st end\n\nconst syclContext_t = Ptr{syclContext_st}\n\nfunction syclContextCreate(obj, devices, ndevices, context, keep_ownership)\n    @ccall liboneapi_support.syclContextCreate(obj::Ptr{syclContext_t},\n                                               devices::Ptr{syclDevice_t},\n                                               ndevices::Csize_t,\n                                               context::ze_context_handle_t,\n                                               keep_ownership::Cint)::Cint\nend\n\nfunction syclContextDestroy(obj)\n    @ccall liboneapi_support.syclContextDestroy(obj::syclContext_t)::Cint\nend\n\nmutable struct syclQueue_st end\n\nconst syclQueue_t = Ptr{syclQueue_st}\n\nfunction syclQueueCreate(obj, context, device, queue, keep_ownership)\n    @ccall liboneapi_support.syclQueueCreate(obj::Ptr{syclQueue_t}, context::syclContext_t,\n                                             device::syclDevice_t,\n                                             queue::ze_command_queue_handle_t,\n                                             keep_ownership::Cint)::Cint\nend\n\nfunction syclQueueDestroy(obj)\n    @ccall liboneapi_support.syclQueueDestroy(obj::syclQueue_t)::Cint\nend\n\nfunction syclQueueWait(obj)\n    @ccall liboneapi_support.syclQueueWait(obj::syclQueue_t)::Cint\nend\n\nmutable struct syclEvent_st end\n\nconst syclEvent_t = Ptr{syclEvent_st}\n\nfunction syclEventCreate(obj, context, event, keep_ownership)\n    @ccall liboneapi_support.syclEventCreate(obj::Ptr{syclEvent_t}, context::syclContext_t,\n                                             event::ze_event_handle_t,\n                                             keep_ownership::Cint)::Cint\nend\n\nfunction syclEventDestroy(obj)\n    @ccall liboneapi_support.syclEventDestroy(obj::syclEvent_t)::Cint\nend\n\n@cenum onemklTranspose::UInt32 begin\n    ONEMKL_TRANSPOSE_NONTRANS = 0\n    ONEMKL_TRANSPOSE_TRANS = 1\n    ONEMLK_TRANSPOSE_CONJTRANS = 2\nend\n\n@cenum onemklUplo::UInt32 begin\n    ONEMKL_UPLO_UPPER = 0\n    ONEMKL_UPLO_LOWER = 1\nend\n\n@cenum onemklDiag::UInt32 begin\n    ONEMKL_DIAG_NONUNIT = 0\n    ONEMKL_DIAG_UNIT = 1\nend\n\n@cenum onemklSide::UInt32 begin\n    ONEMKL_SIDE_LEFT = 0\n    ONEMKL_SIDE_RIGHT = 1\nend\n\n@cenum onemklOffset::UInt32 begin\n    ONEMKL_OFFSET_ROW = 0\n    ONEMKL_OFFSET_COL = 1\n    ONEMKL_OFFSET_FIX = 2\nend\n\n@cenum onemklJob::UInt32 begin\n    ONEMKL_JOB_N = 0\n    ONEMKL_JOB_V = 1\n    ONEMKL_JOB_U = 2\n    ONEMKL_JOB_A = 3\n    ONEMKL_JOB_S = 4\n    ONEMKL_JOB_O = 5\nend\n\n@cenum onemklGenerate::UInt32 begin\n    ONEMKL_GENERATE_Q = 0\n    ONEMKL_GENERATE_P = 1\n    ONEMKL_GENERATE_N = 2\n    ONEMKL_GENERATE_V = 3\nend\n\n@cenum onemklCompz::UInt32 begin\n    ONEMKL_COMPZ_N = 0\n    ONEMKL_COMPZ_V = 1\n    ONEMKL_COMPZ_I = 2\nend\n\n@cenum onemklDirect::UInt32 begin\n    ONEMKL_DIRECT_F = 0\n    ONEMKL_DIRECT_B = 1\nend\n\n@cenum onemklStorev::UInt32 begin\n    ONEMKL_STOREV_C = 0\n    ONEMKL_STOREV_R = 1\nend\n\n@cenum onemklRangev::UInt32 begin\n    ONEMKL_RANGEV_A = 0\n    ONEMKL_RANGEV_V = 1\n    ONEMKL_RANGEV_I = 2\nend\n\n@cenum onemklOrder::UInt32 begin\n    ONEMKL_ORDER_B = 0\n    ONEMKL_ORDER_E = 1\nend\n\n@cenum onemklJobsvd::UInt32 begin\n    ONEMKL_JOBSVD_N = 0\n    ONEMKL_JOBSVD_A = 1\n    ONEMKL_JOBSVD_O = 2\n    ONEMKL_JOBSVD_S = 3\nend\n\n@cenum onemklLayout::UInt32 begin\n    ONEMKL_LAYOUT_ROW = 0\n    ONEMKL_LAYOUT_COL = 1\nend\n\n@cenum onemklIndex::UInt32 begin\n    ONEMKL_INDEX_ZERO = 0\n    ONEMKL_INDEX_ONE = 1\nend\n\n@cenum onemklProperty::UInt32 begin\n    ONEMKL_PROPERTY_SYMMETRIC = 0\n    ONEMKL_PROPERTY_SORTED = 1\nend\n\n@cenum onemklMatrixView::UInt32 begin\n    ONEMKL_MATRIX_VIEW_GENERAL = 0\nend\n\n@cenum onemklMatmatRequest::UInt32 begin\n    ONEMKL_MATMAT_REQUEST_GET_WORK_ESTIMATION_BUF_SIZE = 0\n    ONEMKL_MATMAT_REQUEST_WORK_ESTIMATION = 1\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_STRUCTURE_BUF_SIZE = 2\n    ONEMKL_MATMAT_REQUEST_COMPUTE_STRUCTURE = 3\n    ONEMKL_MATMAT_REQUEST_FINALIZE_STRUCTURE = 4\n    ONEMKL_MATMAT_REQUEST_GET_COMPUTE_BUF_SIZE = 5\n    ONEMKL_MATMAT_REQUEST_COMPUTE = 6\n    ONEMKL_MATMAT_REQUEST_GET_NNZ = 7\n    ONEMKL_MATMAT_REQUEST_FINALIZE = 8\nend\n\n@cenum onemklOmatconvertAlg::UInt32 begin\n    ONEMKL_OMATCONVERT_DEFAULT_ALG = 0\nend\n\n@cenum onemklOmataddAlg::UInt32 begin\n    ONEMKL_OMATADD_DEFAULT_ALG = 0\nend\n\nmutable struct matrix_handle end\n\nconst matrix_handle_t = Ptr{matrix_handle}\n\nmutable struct matmat_descr end\n\nconst matmat_descr_t = Ptr{matmat_descr}\n\nmutable struct omatconvert_descr end\n\nconst omatconvert_descr_t = Ptr{omatconvert_descr}\n\nmutable struct omatadd_descr end\n\nconst omatadd_descr_t = Ptr{omatadd_descr}\n\nfunction onemkl_version(major, minor, patch)\n    @ccall liboneapi_support.onemkl_version(major::Ptr{Int64}, minor::Ptr{Int64},\n                                            patch::Ptr{Int64})::Cvoid\nend\n\nfunction onemklHgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,\n                           beta, c, ldc, group_count, group_size)\n    @ccall liboneapi_support.onemklHgemm_batch(device_queue::syclQueue_t,\n                                               transa::onemklTranspose,\n                                               transb::onemklTranspose, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, k::ZePtr{Int64},\n                                               alpha::ZePtr{Float16},\n                                               a::ZePtr{Ptr{Float16}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{Float16}}, ldb::ZePtr{Int64},\n                                               beta::ZePtr{Float16}, c::ZePtr{Ptr{Float16}},\n                                               ldc::ZePtr{Int64}, group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklSgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,\n                           beta, c, ldc, group_count, group_size)\n    @ccall liboneapi_support.onemklSgemm_batch(device_queue::syclQueue_t,\n                                               transa::onemklTranspose,\n                                               transb::onemklTranspose, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, k::ZePtr{Int64},\n                                               alpha::ZePtr{Cfloat}, a::ZePtr{Ptr{Cfloat}},\n                                               lda::ZePtr{Int64}, b::ZePtr{Ptr{Cfloat}},\n                                               ldb::ZePtr{Int64}, beta::ZePtr{Cfloat},\n                                               c::ZePtr{Ptr{Cfloat}}, ldc::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklDgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,\n                           beta, c, ldc, group_count, group_size)\n    @ccall liboneapi_support.onemklDgemm_batch(device_queue::syclQueue_t,\n                                               transa::onemklTranspose,\n                                               transb::onemklTranspose, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, k::ZePtr{Int64},\n                                               alpha::ZePtr{Cdouble},\n                                               a::ZePtr{Ptr{Cdouble}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{Cdouble}}, ldb::ZePtr{Int64},\n                                               beta::ZePtr{Cdouble}, c::ZePtr{Ptr{Cdouble}},\n                                               ldc::ZePtr{Int64}, group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklCgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,\n                           beta, c, ldc, group_count, group_size)\n    @ccall liboneapi_support.onemklCgemm_batch(device_queue::syclQueue_t,\n                                               transa::onemklTranspose,\n                                               transb::onemklTranspose, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, k::ZePtr{Int64},\n                                               alpha::ZePtr{ComplexF32},\n                                               a::ZePtr{Ptr{ComplexF32}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{ComplexF32}}, ldb::ZePtr{Int64},\n                                               beta::ZePtr{ComplexF32},\n                                               c::ZePtr{Ptr{ComplexF32}}, ldc::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklZgemm_batch(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb,\n                           beta, c, ldc, group_count, group_size)\n    @ccall liboneapi_support.onemklZgemm_batch(device_queue::syclQueue_t,\n                                               transa::onemklTranspose,\n                                               transb::onemklTranspose, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, k::ZePtr{Int64},\n                                               alpha::ZePtr{ComplexF64},\n                                               a::ZePtr{Ptr{ComplexF64}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{ComplexF64}}, ldb::ZePtr{Int64},\n                                               beta::ZePtr{ComplexF64},\n                                               c::ZePtr{Ptr{ComplexF64}}, ldc::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklStrsm_batch(device_queue, left_right, upper_lower, transa, unit_diag, m, n,\n                           alpha, a, lda, b, ldb, group_count, group_size)\n    @ccall liboneapi_support.onemklStrsm_batch(device_queue::syclQueue_t,\n                                               left_right::onemklSide,\n                                               upper_lower::onemklUplo,\n                                               transa::onemklTranspose,\n                                               unit_diag::onemklDiag, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, alpha::ZePtr{Cfloat},\n                                               a::ZePtr{Ptr{Cfloat}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{Cfloat}}, ldb::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklDtrsm_batch(device_queue, left_right, upper_lower, transa, unit_diag, m, n,\n                           alpha, a, lda, b, ldb, group_count, group_size)\n    @ccall liboneapi_support.onemklDtrsm_batch(device_queue::syclQueue_t,\n                                               left_right::onemklSide,\n                                               upper_lower::onemklUplo,\n                                               transa::onemklTranspose,\n                                               unit_diag::onemklDiag, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, alpha::ZePtr{Cdouble},\n                                               a::ZePtr{Ptr{Cdouble}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{Cdouble}}, ldb::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklCtrsm_batch(device_queue, left_right, upper_lower, transa, unit_diag, m, n,\n                           alpha, a, lda, b, ldb, group_count, group_size)\n    @ccall liboneapi_support.onemklCtrsm_batch(device_queue::syclQueue_t,\n                                               left_right::onemklSide,\n                                               upper_lower::onemklUplo,\n                                               transa::onemklTranspose,\n                                               unit_diag::onemklDiag, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, alpha::ZePtr{ComplexF32},\n                                               a::ZePtr{Ptr{ComplexF32}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{ComplexF32}}, ldb::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklZtrsm_batch(device_queue, left_right, upper_lower, transa, unit_diag, m, n,\n                           alpha, a, lda, b, ldb, group_count, group_size)\n    @ccall liboneapi_support.onemklZtrsm_batch(device_queue::syclQueue_t,\n                                               left_right::onemklSide,\n                                               upper_lower::onemklUplo,\n                                               transa::onemklTranspose,\n                                               unit_diag::onemklDiag, m::ZePtr{Int64},\n                                               n::ZePtr{Int64}, alpha::ZePtr{ComplexF64},\n                                               a::ZePtr{Ptr{ComplexF64}}, lda::ZePtr{Int64},\n                                               b::ZePtr{Ptr{ComplexF64}}, ldb::ZePtr{Int64},\n                                               group_count::Int64,\n                                               group_size::ZePtr{Int64})::Cint\nend\n\nfunction onemklHgemm(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c,\n                     ldc)\n    @ccall liboneapi_support.onemklHgemm(device_queue::syclQueue_t, transa::onemklTranspose,\n                                         transb::onemklTranspose, m::Int64, n::Int64,\n                                         k::Int64, alpha::Ref{Float16}, a::ZePtr{Float16},\n                                         lda::Int64, b::ZePtr{Float16}, ldb::Int64,\n                                         beta::Ref{Float16}, c::ZePtr{Float16},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklSgemm(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c,\n                     ldc)\n    @ccall liboneapi_support.onemklSgemm(device_queue::syclQueue_t, transa::onemklTranspose,\n                                         transb::onemklTranspose, m::Int64, n::Int64,\n                                         k::Int64, alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                         lda::Int64, b::ZePtr{Cfloat}, ldb::Int64,\n                                         beta::Ref{Cfloat}, c::ZePtr{Cfloat},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklDgemm(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c,\n                     ldc)\n    @ccall liboneapi_support.onemklDgemm(device_queue::syclQueue_t, transa::onemklTranspose,\n                                         transb::onemklTranspose, m::Int64, n::Int64,\n                                         k::Int64, alpha::Ref{Cdouble}, a::ZePtr{Cdouble},\n                                         lda::Int64, b::ZePtr{Cdouble}, ldb::Int64,\n                                         beta::Ref{Cdouble}, c::ZePtr{Cdouble},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklCgemm(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c,\n                     ldc)\n    @ccall liboneapi_support.onemklCgemm(device_queue::syclQueue_t, transa::onemklTranspose,\n                                         transb::onemklTranspose, m::Int64, n::Int64,\n                                         k::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         b::ZePtr{ComplexF32}, ldb::Int64,\n                                         beta::Ref{ComplexF32}, c::ZePtr{ComplexF32},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklZgemm(device_queue, transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c,\n                     ldc)\n    @ccall liboneapi_support.onemklZgemm(device_queue::syclQueue_t, transa::onemklTranspose,\n                                         transb::onemklTranspose, m::Int64, n::Int64,\n                                         k::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         b::ZePtr{ComplexF64}, ldb::Int64,\n                                         beta::Ref{ComplexF64}, c::ZePtr{ComplexF64},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklSsymm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklSsymm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{Cfloat}, a::ZePtr{Cfloat}, lda::Int64,\n                                         b::ZePtr{Cfloat}, ldb::Int64, beta::Ref{Cfloat},\n                                         c::ZePtr{Cfloat}, ldc::Int64)::Cint\nend\n\nfunction onemklDsymm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklDsymm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{Cdouble}, a::ZePtr{Cdouble}, lda::Int64,\n                                         b::ZePtr{Cdouble}, ldb::Int64, beta::Ref{Cdouble},\n                                         c::ZePtr{Cdouble}, ldc::Int64)::Cint\nend\n\nfunction onemklCsymm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklCsymm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, b::ZePtr{ComplexF32}, ldb::Int64,\n                                         beta::Ref{ComplexF32}, c::ZePtr{ComplexF32},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklZsymm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklZsymm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, b::ZePtr{ComplexF64}, ldb::Int64,\n                                         beta::Ref{ComplexF64}, c::ZePtr{ComplexF64},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklChemm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklChemm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, b::ZePtr{ComplexF32}, ldb::Int64,\n                                         beta::Ref{ComplexF32}, c::ZePtr{ComplexF32},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklZhemm(device_queue, left_right, upper_lower, m, n, alpha, a, lda, b, ldb,\n                     beta, c, ldc)\n    @ccall liboneapi_support.onemklZhemm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, b::ZePtr{ComplexF64}, ldb::Int64,\n                                         beta::Ref{ComplexF64}, c::ZePtr{ComplexF64},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklSsyrk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklSsyrk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{Cfloat}, a::ZePtr{Cfloat}, lda::Int64,\n                                         beta::Ref{Cfloat}, c::ZePtr{Cfloat},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklDsyrk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklDsyrk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{Cdouble}, a::ZePtr{Cdouble}, lda::Int64,\n                                         beta::Ref{Cdouble}, c::ZePtr{Cdouble},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklCsyrk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklCsyrk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, beta::Ref{ComplexF32},\n                                         c::ZePtr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZsyrk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklZsyrk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, beta::Ref{ComplexF64},\n                                         c::ZePtr{ComplexF64}, ldc::Int64)::Cint\nend\n\nfunction onemklCherk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklCherk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, beta::Ref{ComplexF32},\n                                         c::ZePtr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZherk(device_queue, upper_lower, trans, n, k, alpha, a, lda, beta, c, ldc)\n    @ccall liboneapi_support.onemklZherk(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, n::Int64, k::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, beta::Ref{ComplexF64},\n                                         c::ZePtr{ComplexF64}, ldc::Int64)::Cint\nend\n\nfunction onemklSsyr2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklSsyr2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{Cfloat},\n                                          a::ZePtr{Cfloat}, lda::Int64, b::ZePtr{Cfloat},\n                                          ldb::Int64, beta::Ref{Cfloat}, c::ZePtr{Cfloat},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklDsyr2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklDsyr2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{Cdouble},\n                                          a::ZePtr{Cdouble}, lda::Int64, b::ZePtr{Cdouble},\n                                          ldb::Int64, beta::Ref{Cdouble}, c::ZePtr{Cdouble},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklCsyr2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklCsyr2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{ComplexF32},\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          b::ZePtr{ComplexF32}, ldb::Int64,\n                                          beta::Ref{ComplexF32}, c::ZePtr{ComplexF32},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklZsyr2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklZsyr2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{ComplexF64},\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          b::ZePtr{ComplexF64}, ldb::Int64,\n                                          beta::Ref{ComplexF64}, c::ZePtr{ComplexF64},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklCher2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklCher2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{ComplexF32},\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          b::ZePtr{ComplexF32}, ldb::Int64,\n                                          beta::Ref{ComplexF32}, c::ZePtr{ComplexF32},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklZher2k(device_queue, upper_lower, trans, n, k, alpha, a, lda, b, ldb, beta,\n                      c, ldc)\n    @ccall liboneapi_support.onemklZher2k(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, trans::onemklTranspose,\n                                          n::Int64, k::Int64, alpha::Ref{ComplexF64},\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          b::ZePtr{ComplexF64}, ldb::Int64,\n                                          beta::Ref{ComplexF64}, c::ZePtr{ComplexF64},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklStrmm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklStrmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{Cfloat}, a::ZePtr{Cfloat}, lda::Int64,\n                                         b::ZePtr{Cfloat}, ldb::Int64)::Cint\nend\n\nfunction onemklDtrmm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklDtrmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{Cdouble}, a::ZePtr{Cdouble}, lda::Int64,\n                                         b::ZePtr{Cdouble}, ldb::Int64)::Cint\nend\n\nfunction onemklCtrmm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklCtrmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, b::ZePtr{ComplexF32}, ldb::Int64)::Cint\nend\n\nfunction onemklZtrmm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklZtrmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, b::ZePtr{ComplexF64}, ldb::Int64)::Cint\nend\n\nfunction onemklStrmm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklStrmm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                                 lda::Int64, b::ZePtr{Cfloat}, ldb::Int64,\n                                                 beta::Ref{Cfloat}, c::ZePtr{Cfloat},\n                                                 ldc::Int64)::Cint\nend\n\nfunction onemklDtrmm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklDtrmm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{Cdouble}, a::ZePtr{Cdouble},\n                                                 lda::Int64, b::ZePtr{Cdouble}, ldb::Int64,\n                                                 beta::Ref{Cdouble}, c::ZePtr{Cdouble},\n                                                 ldc::Int64)::Cint\nend\n\nfunction onemklCtrmm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklCtrmm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{ComplexF32},\n                                                 a::ZePtr{ComplexF32}, lda::Int64,\n                                                 b::ZePtr{ComplexF32}, ldb::Int64,\n                                                 beta::Ref{ComplexF32},\n                                                 c::ZePtr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZtrmm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklZtrmm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{ComplexF64},\n                                                 a::ZePtr{ComplexF64}, lda::Int64,\n                                                 b::ZePtr{ComplexF64}, ldb::Int64,\n                                                 beta::Ref{ComplexF64},\n                                                 c::ZePtr{ComplexF64}, ldc::Int64)::Cint\nend\n\nfunction onemklStrsm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklStrsm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{Cfloat}, a::ZePtr{Cfloat}, lda::Int64,\n                                         b::ZePtr{Cfloat}, ldb::Int64)::Cint\nend\n\nfunction onemklDtrsm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklDtrsm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{Cdouble}, a::ZePtr{Cdouble}, lda::Int64,\n                                         b::ZePtr{Cdouble}, ldb::Int64)::Cint\nend\n\nfunction onemklCtrsm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklCtrsm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, b::ZePtr{ComplexF32}, ldb::Int64)::Cint\nend\n\nfunction onemklZtrsm(device_queue, left_right, upper_lower, trans, unit_diag, m, n, alpha,\n                     a, lda, b, ldb)\n    @ccall liboneapi_support.onemklZtrsm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         upper_lower::onemklUplo, trans::onemklTranspose,\n                                         unit_diag::onemklDiag, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, b::ZePtr{ComplexF64}, ldb::Int64)::Cint\nend\n\nfunction onemklStrsm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklStrsm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                                 lda::Int64, b::ZePtr{Cfloat}, ldb::Int64,\n                                                 beta::Ref{Cfloat}, c::ZePtr{Cfloat},\n                                                 ldc::Int64)::Cint\nend\n\nfunction onemklDtrsm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklDtrsm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{Cdouble}, a::ZePtr{Cdouble},\n                                                 lda::Int64, b::ZePtr{Cdouble}, ldb::Int64,\n                                                 beta::Ref{Cdouble}, c::ZePtr{Cdouble},\n                                                 ldc::Int64)::Cint\nend\n\nfunction onemklCtrsm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklCtrsm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{ComplexF32},\n                                                 a::ZePtr{ComplexF32}, lda::Int64,\n                                                 b::ZePtr{ComplexF32}, ldb::Int64,\n                                                 beta::Ref{ComplexF32},\n                                                 c::ZePtr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZtrsm_variant(device_queue, left_right, upper_lower, trans, unit_diag, m, n,\n                             alpha, a, lda, b, ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklZtrsm_variant(device_queue::syclQueue_t,\n                                                 left_right::onemklSide,\n                                                 upper_lower::onemklUplo,\n                                                 trans::onemklTranspose,\n                                                 unit_diag::onemklDiag, m::Int64, n::Int64,\n                                                 alpha::Ref{ComplexF64},\n                                                 a::ZePtr{ComplexF64}, lda::Int64,\n                                                 b::ZePtr{ComplexF64}, ldb::Int64,\n                                                 beta::Ref{ComplexF64},\n                                                 c::ZePtr{ComplexF64}, ldc::Int64)::Cint\nend\n\nfunction onemklSdgmm(device_queue, left_right, m, n, a, lda, x, incx, c, ldc)\n    @ccall liboneapi_support.onemklSdgmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         m::Int64, n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64, c::ZePtr{Cfloat},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklDdgmm(device_queue, left_right, m, n, a, lda, x, incx, c, ldc)\n    @ccall liboneapi_support.onemklDdgmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         m::Int64, n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64, c::ZePtr{Cdouble},\n                                         ldc::Int64)::Cint\nend\n\nfunction onemklCdgmm(device_queue, left_right, m, n, a, lda, x, incx, c, ldc)\n    @ccall liboneapi_support.onemklCdgmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         m::Int64, n::Int64, a::ZePtr{ComplexF32},\n                                         lda::Int64, x::ZePtr{ComplexF32}, incx::Int64,\n                                         c::ZePtr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZdgmm(device_queue, left_right, m, n, a, lda, x, incx, c, ldc)\n    @ccall liboneapi_support.onemklZdgmm(device_queue::syclQueue_t, left_right::onemklSide,\n                                         m::Int64, n::Int64, a::ZePtr{ComplexF64},\n                                         lda::Int64, x::ZePtr{ComplexF64}, incx::Int64,\n                                         c::ZePtr{ComplexF64}, ldc::Int64)::Cint\nend\n\nfunction onemklSgemv(device_queue, trans, m, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklSgemv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, alpha::Ref{Cfloat},\n                                         a::ZePtr{Cfloat}, lda::Int64, x::ZePtr{Cfloat},\n                                         incx::Int64, beta::Ref{Cfloat}, y::ZePtr{Cfloat},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklDgemv(device_queue, trans, m, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklDgemv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, alpha::Ref{Cdouble},\n                                         a::ZePtr{Cdouble}, lda::Int64, x::ZePtr{Cdouble},\n                                         incx::Int64, beta::Ref{Cdouble}, y::ZePtr{Cdouble},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklCgemv(device_queue, trans, m, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklCgemv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         beta::Ref{ComplexF32}, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZgemv(device_queue, trans, m, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZgemv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         beta::Ref{ComplexF64}, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklSgbmv(device_queue, trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y,\n                     incy)\n    @ccall liboneapi_support.onemklSgbmv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, kl::Int64, ku::Int64,\n                                         alpha::Ref{Cfloat}, a::ZePtr{Cfloat}, lda::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64, beta::Ref{Cfloat},\n                                         y::ZePtr{Cfloat}, incy::Int64)::Cint\nend\n\nfunction onemklDgbmv(device_queue, trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y,\n                     incy)\n    @ccall liboneapi_support.onemklDgbmv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, kl::Int64, ku::Int64,\n                                         alpha::Ref{Cdouble}, a::ZePtr{Cdouble}, lda::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64, beta::Ref{Cdouble},\n                                         y::ZePtr{Cdouble}, incy::Int64)::Cint\nend\n\nfunction onemklCgbmv(device_queue, trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y,\n                     incy)\n    @ccall liboneapi_support.onemklCgbmv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, kl::Int64, ku::Int64,\n                                         alpha::Ref{ComplexF32}, a::ZePtr{ComplexF32},\n                                         lda::Int64, x::ZePtr{ComplexF32}, incx::Int64,\n                                         beta::Ref{ComplexF32}, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZgbmv(device_queue, trans, m, n, kl, ku, alpha, a, lda, x, incx, beta, y,\n                     incy)\n    @ccall liboneapi_support.onemklZgbmv(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, kl::Int64, ku::Int64,\n                                         alpha::Ref{ComplexF64}, a::ZePtr{ComplexF64},\n                                         lda::Int64, x::ZePtr{ComplexF64}, incx::Int64,\n                                         beta::Ref{ComplexF64}, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklSger(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklSger(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                        alpha::Ref{Cfloat}, x::ZePtr{Cfloat}, incx::Int64,\n                                        y::ZePtr{Cfloat}, incy::Int64, a::ZePtr{Cfloat},\n                                        lda::Int64)::Cint\nend\n\nfunction onemklDger(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklDger(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                        alpha::Ref{Cdouble}, x::ZePtr{Cdouble}, incx::Int64,\n                                        y::ZePtr{Cdouble}, incy::Int64, a::ZePtr{Cdouble},\n                                        lda::Int64)::Cint\nend\n\nfunction onemklCgerc(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklCgerc(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, x::ZePtr{ComplexF32},\n                                         incx::Int64, y::ZePtr{ComplexF32}, incy::Int64,\n                                         a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZgerc(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklZgerc(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, x::ZePtr{ComplexF64},\n                                         incx::Int64, y::ZePtr{ComplexF64}, incy::Int64,\n                                         a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklCgeru(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklCgeru(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF32}, x::ZePtr{ComplexF32},\n                                         incx::Int64, y::ZePtr{ComplexF32}, incy::Int64,\n                                         a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZgeru(device_queue, m, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklZgeru(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                         alpha::Ref{ComplexF64}, x::ZePtr{ComplexF64},\n                                         incx::Int64, y::ZePtr{ComplexF64}, incy::Int64,\n                                         a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklChbmv(device_queue, upper_lower, n, k, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklChbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, k::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         beta::Ref{ComplexF32}, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZhbmv(device_queue, upper_lower, n, k, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZhbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, k::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         beta::Ref{ComplexF64}, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklChemv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklChemv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         beta::Ref{ComplexF32}, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZhemv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZhemv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         beta::Ref{ComplexF64}, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklCher(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklCher(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{ComplexF32},\n                                        x::ZePtr{ComplexF32}, incx::Int64,\n                                        a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZher(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklZher(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{ComplexF64},\n                                        x::ZePtr{ComplexF64}, incx::Int64,\n                                        a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklCher2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklCher2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64,\n                                         a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZher2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklZher2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64,\n                                         a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklChpmv(device_queue, upper_lower, n, alpha, a, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklChpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, x::ZePtr{ComplexF32},\n                                         incx::Int64, beta::Ref{ComplexF32},\n                                         y::ZePtr{ComplexF32}, incy::Int64)::Cint\nend\n\nfunction onemklZhpmv(device_queue, upper_lower, n, alpha, a, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZhpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, x::ZePtr{ComplexF64},\n                                         incx::Int64, beta::Ref{ComplexF64},\n                                         y::ZePtr{ComplexF64}, incy::Int64)::Cint\nend\n\nfunction onemklChpr(device_queue, upper_lower, n, alpha, x, incx, a)\n    @ccall liboneapi_support.onemklChpr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Float32}, x::ZePtr{ComplexF32},\n                                        incx::Int64, a::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZhpr(device_queue, upper_lower, n, alpha, x, incx, a)\n    @ccall liboneapi_support.onemklZhpr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Float64}, x::ZePtr{ComplexF64},\n                                        incx::Int64, a::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklChpr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a)\n    @ccall liboneapi_support.onemklChpr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64,\n                                         a::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZhpr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a)\n    @ccall liboneapi_support.onemklZhpr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64,\n                                         a::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsbmv(device_queue, upper_lower, n, k, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklSsbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, k::Int64, alpha::Ref{Cfloat},\n                                         a::ZePtr{Cfloat}, lda::Int64, x::ZePtr{Cfloat},\n                                         incx::Int64, beta::Ref{Cfloat}, y::ZePtr{Cfloat},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklDsbmv(device_queue, upper_lower, n, k, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklDsbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, k::Int64, alpha::Ref{Cdouble},\n                                         a::ZePtr{Cdouble}, lda::Int64, x::ZePtr{Cdouble},\n                                         incx::Int64, beta::Ref{Cdouble}, y::ZePtr{Cdouble},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklSsymv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklSsymv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                         lda::Int64, x::ZePtr{Cfloat}, incx::Int64,\n                                         beta::Ref{Cfloat}, y::ZePtr{Cfloat},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklDsymv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklDsymv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cdouble}, a::ZePtr{Cdouble},\n                                         lda::Int64, x::ZePtr{Cdouble}, incx::Int64,\n                                         beta::Ref{Cdouble}, y::ZePtr{Cdouble},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklCsymv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklCsymv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         beta::Ref{ComplexF32}, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZsymv(device_queue, upper_lower, n, alpha, a, lda, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZsymv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         beta::Ref{ComplexF64}, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklSsyr(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklSsyr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Cfloat}, x::ZePtr{Cfloat},\n                                        incx::Int64, a::ZePtr{Cfloat}, lda::Int64)::Cint\nend\n\nfunction onemklDsyr(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklDsyr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                        incx::Int64, a::ZePtr{Cdouble}, lda::Int64)::Cint\nend\n\nfunction onemklCsyr(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklCsyr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{ComplexF32},\n                                        x::ZePtr{ComplexF32}, incx::Int64,\n                                        a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZsyr(device_queue, upper_lower, n, alpha, x, incx, a, lda)\n    @ccall liboneapi_support.onemklZsyr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{ComplexF64},\n                                        x::ZePtr{ComplexF64}, incx::Int64,\n                                        a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklSsyr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklSsyr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cfloat}, x::ZePtr{Cfloat},\n                                         incx::Int64, y::ZePtr{Cfloat}, incy::Int64,\n                                         a::ZePtr{Cfloat}, lda::Int64)::Cint\nend\n\nfunction onemklDsyr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklDsyr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                         incx::Int64, y::ZePtr{Cdouble}, incy::Int64,\n                                         a::ZePtr{Cdouble}, lda::Int64)::Cint\nend\n\nfunction onemklCsyr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklCsyr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF32},\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64,\n                                         a::ZePtr{ComplexF32}, lda::Int64)::Cint\nend\n\nfunction onemklZsyr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a, lda)\n    @ccall liboneapi_support.onemklZsyr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{ComplexF64},\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64,\n                                         a::ZePtr{ComplexF64}, lda::Int64)::Cint\nend\n\nfunction onemklSspmv(device_queue, upper_lower, n, alpha, a, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklSspmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                         x::ZePtr{Cfloat}, incx::Int64, beta::Ref{Cfloat},\n                                         y::ZePtr{Cfloat}, incy::Int64)::Cint\nend\n\nfunction onemklDspmv(device_queue, upper_lower, n, alpha, a, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklDspmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cdouble}, a::ZePtr{Cdouble},\n                                         x::ZePtr{Cdouble}, incx::Int64, beta::Ref{Cdouble},\n                                         y::ZePtr{Cdouble}, incy::Int64)::Cint\nend\n\nfunction onemklSspr(device_queue, upper_lower, n, alpha, x, incx, a)\n    @ccall liboneapi_support.onemklSspr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Cfloat}, x::ZePtr{Cfloat},\n                                        incx::Int64, a::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDspr(device_queue, upper_lower, n, alpha, x, incx, a)\n    @ccall liboneapi_support.onemklDspr(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                        n::Int64, alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                        incx::Int64, a::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklSspr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a)\n    @ccall liboneapi_support.onemklSspr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cfloat}, x::ZePtr{Cfloat},\n                                         incx::Int64, y::ZePtr{Cfloat}, incy::Int64,\n                                         a::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDspr2(device_queue, upper_lower, n, alpha, x, incx, y, incy, a)\n    @ccall liboneapi_support.onemklDspr2(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         n::Int64, alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                         incx::Int64, y::ZePtr{Cdouble}, incy::Int64,\n                                         a::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklStbmv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklStbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64)::Cint\nend\n\nfunction onemklDtbmv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklDtbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64)::Cint\nend\n\nfunction onemklCtbmv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklCtbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::ZePtr{ComplexF32},\n                                         lda::Int64, x::ZePtr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklZtbmv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklZtbmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::ZePtr{ComplexF64},\n                                         lda::Int64, x::ZePtr{ComplexF64},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklStbsv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklStbsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                         x::Ptr{Cfloat}, incx::Int64)::Cint\nend\n\nfunction onemklDtbsv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklDtbsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::Ptr{Cdouble}, lda::Int64,\n                                         x::Ptr{Cdouble}, incx::Int64)::Cint\nend\n\nfunction onemklCtbsv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklCtbsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                         x::Ptr{ComplexF32}, incx::Int64)::Cint\nend\n\nfunction onemklZtbsv(device_queue, upper_lower, trans, unit_diag, n, k, a, lda, x, incx)\n    @ccall liboneapi_support.onemklZtbsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, k::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                         x::Ptr{ComplexF32}, incx::Int64)::Cint\nend\n\nfunction onemklStpmv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklStpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{Cfloat}, x::Ptr{Cfloat},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklDtpmv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklDtpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{Cdouble}, x::Ptr{Cdouble},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklCtpmv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklCtpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{ComplexF32}, x::Ptr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklZtpmv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklZtpmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{ComplexF32}, x::Ptr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklStpsv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklStpsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{Cfloat}, x::Ptr{Cfloat},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklDtpsv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklDtpsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{Cdouble}, x::Ptr{Cdouble},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklCtpsv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklCtpsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{ComplexF32}, x::Ptr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklZtpsv(device_queue, upper_lower, trans, unit_diag, n, a, x, incx)\n    @ccall liboneapi_support.onemklZtpsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::Ptr{ComplexF32}, x::Ptr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklStrmv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklStrmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64)::Cint\nend\n\nfunction onemklDtrmv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklDtrmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64)::Cint\nend\n\nfunction onemklCtrmv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklCtrmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64)::Cint\nend\n\nfunction onemklZtrmv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklZtrmv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64)::Cint\nend\n\nfunction onemklStrsv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklStrsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64)::Cint\nend\n\nfunction onemklDtrsv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklDtrsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64)::Cint\nend\n\nfunction onemklCtrsv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklCtrsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64)::Cint\nend\n\nfunction onemklZtrsv(device_queue, upper_lower, trans, unit_diag, n, a, lda, x, incx)\n    @ccall liboneapi_support.onemklZtrsv(device_queue::syclQueue_t, upper_lower::onemklUplo,\n                                         trans::onemklTranspose, unit_diag::onemklDiag,\n                                         n::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64)::Cint\nend\n\nfunction onemklCdotc(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklCdotc(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64,\n                                         result::RefOrZeRef{ComplexF32})::Cint\nend\n\nfunction onemklZdotc(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklZdotc(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64,\n                                         result::RefOrZeRef{ComplexF64})::Cint\nend\n\nfunction onemklCdotu(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklCdotu(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64,\n                                         result::RefOrZeRef{ComplexF32})::Cint\nend\n\nfunction onemklZdotu(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklZdotu(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64,\n                                         result::RefOrZeRef{ComplexF64})::Cint\nend\n\nfunction onemklSiamax(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklSiamax(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{Cfloat}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklSiamax_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklSiamax_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{Cfloat}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklDiamax(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklDiamax(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{Cdouble}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklDiamax_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklDiamax_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{Cdouble}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklCiamax(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklCiamax(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{ComplexF32}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklCiamax_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklCiamax_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{ComplexF32}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklZiamax(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklZiamax(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{ComplexF64}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklZiamax_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklZiamax_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{ComplexF64}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklSiamin(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklSiamin(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{Cfloat}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklSiamin_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklSiamin_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{Cfloat}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklDiamin(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklDiamin(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{Cdouble}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklDiamin_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklDiamin_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{Cdouble}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklCiamin(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklCiamin(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{ComplexF32}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklCiamin_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklCiamin_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{ComplexF32}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklZiamin(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklZiamin(device_queue::syclQueue_t, n::Int64,\n                                          x::ZePtr{ComplexF64}, incx::Int64,\n                                          result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklZiamin_64(device_queue, n, x, incx, result, base)\n    @ccall liboneapi_support.onemklZiamin_64(device_queue::syclQueue_t, n::Int64,\n                                             x::ZePtr{ComplexF64}, incx::Int64,\n                                             result::ZePtr{Int64}, base::onemklIndex)::Cint\nend\n\nfunction onemklSasum(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklSasum(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64,\n                                         result::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDasum(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklDasum(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64,\n                                         result::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCasum(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklCasum(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         result::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklZasum(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklZasum(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         result::ZePtr{Float64})::Cint\nend\n\nfunction onemklHaxpy(device_queue, n, alpha, x, incx, y, incy)\n    @ccall liboneapi_support.onemklHaxpy(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Float16}, x::ZePtr{Float16},\n                                         incx::Int64, y::ZePtr{Float16}, incy::Int64)::Cint\nend\n\nfunction onemklSaxpy(device_queue, n, alpha, x, incx, y, incy)\n    @ccall liboneapi_support.onemklSaxpy(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Cfloat}, x::ZePtr{Cfloat}, incx::Int64,\n                                         y::ZePtr{Cfloat}, incy::Int64)::Cint\nend\n\nfunction onemklDaxpy(device_queue, n, alpha, x, incx, y, incy)\n    @ccall liboneapi_support.onemklDaxpy(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                         incx::Int64, y::ZePtr{Cdouble}, incy::Int64)::Cint\nend\n\nfunction onemklCaxpy(device_queue, n, alpha, x, incx, y, incy)\n    @ccall liboneapi_support.onemklCaxpy(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{ComplexF32}, x::ZePtr{ComplexF32},\n                                         incx::Int64, y::ZePtr{ComplexF32},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklZaxpy(device_queue, n, alpha, x, incx, y, incy)\n    @ccall liboneapi_support.onemklZaxpy(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{ComplexF64}, x::ZePtr{ComplexF64},\n                                         incx::Int64, y::ZePtr{ComplexF64},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklSaxpby(device_queue, n, alpha, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklSaxpby(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{Cfloat}, x::ZePtr{Cfloat}, incx::Int64,\n                                          beta::Ref{Cfloat}, y::ZePtr{Cfloat},\n                                          incy::Int64)::Cint\nend\n\nfunction onemklDaxpby(device_queue, n, alpha, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklDaxpby(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                          incx::Int64, beta::Ref{Cdouble},\n                                          y::ZePtr{Cdouble}, incy::Int64)::Cint\nend\n\nfunction onemklCaxpby(device_queue, n, alpha, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklCaxpby(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{ComplexF32}, x::ZePtr{ComplexF32},\n                                          incx::Int64, beta::Ref{ComplexF32},\n                                          y::ZePtr{ComplexF32}, incy::Int64)::Cint\nend\n\nfunction onemklZaxpby(device_queue, n, alpha, x, incx, beta, y, incy)\n    @ccall liboneapi_support.onemklZaxpby(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{ComplexF64}, x::ZePtr{ComplexF64},\n                                          incx::Int64, beta::Ref{ComplexF64},\n                                          y::ZePtr{ComplexF64}, incy::Int64)::Cint\nend\n\nfunction onemklScopy(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklScopy(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64, y::ZePtr{Cfloat},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklDcopy(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklDcopy(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64, y::ZePtr{Cdouble},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklCcopy(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklCcopy(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64)::Cint\nend\n\nfunction onemklZcopy(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklZcopy(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64)::Cint\nend\n\nfunction onemklHdot(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklHdot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Float16}, incx::Int64, y::ZePtr{Float16},\n                                        incy::Int64, result::RefOrZeRef{Float16})::Cint\nend\n\nfunction onemklSdot(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklSdot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Cfloat}, incx::Int64, y::ZePtr{Cfloat},\n                                        incy::Int64, result::RefOrZeRef{Cfloat})::Cint\nend\n\nfunction onemklDdot(device_queue, n, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklDdot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Cdouble}, incx::Int64, y::ZePtr{Cdouble},\n                                        incy::Int64, result::RefOrZeRef{Cdouble})::Cint\nend\n\nfunction onemklSsdsdot(device_queue, n, sb, x, incx, y, incy, result)\n    @ccall liboneapi_support.onemklSsdsdot(device_queue::syclQueue_t, n::Int64,\n                                           sb::Ref{Float32}, x::ZePtr{Float32}, incx::Int64,\n                                           y::ZePtr{Float32}, incy::Int64,\n                                           result::Ref{Float32})::Cint\nend\n\nfunction onemklHnrm2(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklHnrm2(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Float16}, incx::Int64,\n                                         result::RefOrZeRef{Float16})::Cint\nend\n\nfunction onemklSnrm2(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklSnrm2(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64,\n                                         result::RefOrZeRef{Cfloat})::Cint\nend\n\nfunction onemklDnrm2(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklDnrm2(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64,\n                                         result::RefOrZeRef{Cdouble})::Cint\nend\n\nfunction onemklCnrm2(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklCnrm2(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         result::RefOrZeRef{Cfloat})::Cint\nend\n\nfunction onemklZnrm2(device_queue, n, x, incx, result)\n    @ccall liboneapi_support.onemklZnrm2(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         result::RefOrZeRef{Cdouble})::Cint\nend\n\nfunction onemklHrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklHrot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Float16}, incx::Int64, y::ZePtr{Float16},\n                                        incy::Int64, c::Ref{Float16}, s::Ref{Float16})::Cint\nend\n\nfunction onemklSrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklSrot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Cfloat}, incx::Int64, y::ZePtr{Cfloat},\n                                        incy::Int64, c::Ref{Cfloat}, s::Ref{Cfloat})::Cint\nend\n\nfunction onemklDrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklDrot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{Cdouble}, incx::Int64, y::ZePtr{Cdouble},\n                                        incy::Int64, c::Ref{Cdouble}, s::Ref{Cdouble})::Cint\nend\n\nfunction onemklCSrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklCSrot(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64, c::Ref{Float32},\n                                         s::Ref{Float32})::Cint\nend\n\nfunction onemklCrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklCrot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{ComplexF32}, incx::Int64,\n                                        y::ZePtr{ComplexF32}, incy::Int64, c::Ref{Float32},\n                                        s::Ref{ComplexF32})::Cint\nend\n\nfunction onemklZDrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklZDrot(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64, c::Ref{Float64},\n                                         s::Ref{Float64})::Cint\nend\n\nfunction onemklZrot(device_queue, n, x, incx, y, incy, c, s)\n    @ccall liboneapi_support.onemklZrot(device_queue::syclQueue_t, n::Int64,\n                                        x::ZePtr{ComplexF64}, incx::Int64,\n                                        y::ZePtr{ComplexF64}, incy::Int64, c::Ref{Float64},\n                                        s::Ref{ComplexF64})::Cint\nend\n\nfunction onemklSrotg(device_queue, a, b, c, s)\n    @ccall liboneapi_support.onemklSrotg(device_queue::syclQueue_t, a::Ptr{Cfloat},\n                                         b::Ptr{Cfloat}, c::Ptr{Cfloat},\n                                         s::Ptr{Cfloat})::Cint\nend\n\nfunction onemklDrotg(device_queue, a, b, c, s)\n    @ccall liboneapi_support.onemklDrotg(device_queue::syclQueue_t, a::Ptr{Cdouble},\n                                         b::Ptr{Cdouble}, c::Ptr{Cdouble},\n                                         s::Ptr{Cdouble})::Cint\nend\n\nfunction onemklCrotg(device_queue, a, b, c, s)\n    @ccall liboneapi_support.onemklCrotg(device_queue::syclQueue_t, a::Ptr{ComplexF32},\n                                         b::Ptr{ComplexF32}, c::Ptr{Cfloat},\n                                         s::Ptr{ComplexF32})::Cint\nend\n\nfunction onemklZrotg(device_queue, a, b, c, s)\n    @ccall liboneapi_support.onemklZrotg(device_queue::syclQueue_t, a::Ptr{ComplexF32},\n                                         b::Ptr{ComplexF32}, c::Ptr{Cdouble},\n                                         s::Ptr{ComplexF32})::Cint\nend\n\nfunction onemklSrotm(device_queue, n, x, incx, y, incy, param)\n    @ccall liboneapi_support.onemklSrotm(device_queue::syclQueue_t, n::Int64,\n                                         x::Ptr{Cfloat}, incx::Int64, y::Ptr{Cfloat},\n                                         incy::Int64, param::Ptr{Cfloat})::Cint\nend\n\nfunction onemklDrotm(device_queue, n, x, incx, y, incy, param)\n    @ccall liboneapi_support.onemklDrotm(device_queue::syclQueue_t, n::Int64,\n                                         x::Ptr{Cdouble}, incx::Int64, y::Ptr{Cdouble},\n                                         incy::Int64, param::Ptr{Cdouble})::Cint\nend\n\nfunction onemklSrotmg(device_queue, d1, d2, x1, y1, param)\n    @ccall liboneapi_support.onemklSrotmg(device_queue::syclQueue_t, d1::Ptr{Cfloat},\n                                          d2::Ptr{Cfloat}, x1::Ptr{Cfloat}, y1::Ptr{Cfloat},\n                                          param::Ptr{Cfloat})::Cint\nend\n\nfunction onemklDrotmg(device_queue, d1, d2, x1, y1, param)\n    @ccall liboneapi_support.onemklDrotmg(device_queue::syclQueue_t, d1::Ptr{Cdouble},\n                                          d2::Ptr{Cdouble}, x1::Ptr{Cdouble},\n                                          y1::Ptr{Cdouble}, param::Ptr{Cdouble})::Cint\nend\n\nfunction onemklHscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklHscal(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Float16}, x::ZePtr{Float16},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklSscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklSscal(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Cfloat}, x::ZePtr{Cfloat},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklDscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklDscal(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{Cdouble}, x::ZePtr{Cdouble},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklCSscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklCSscal(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{Float32}, x::ZePtr{ComplexF32},\n                                          incx::Int64)::Cint\nend\n\nfunction onemklZDscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklZDscal(device_queue::syclQueue_t, n::Int64,\n                                          alpha::Ref{Float64}, x::ZePtr{ComplexF64},\n                                          incx::Int64)::Cint\nend\n\nfunction onemklCscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklCscal(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{ComplexF32}, x::ZePtr{ComplexF32},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklZscal(device_queue, n, alpha, x, incx)\n    @ccall liboneapi_support.onemklZscal(device_queue::syclQueue_t, n::Int64,\n                                         alpha::Ref{ComplexF64}, x::ZePtr{ComplexF64},\n                                         incx::Int64)::Cint\nend\n\nfunction onemklSswap(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklSswap(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cfloat}, incx::Int64, y::ZePtr{Cfloat},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklDswap(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklDswap(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{Cdouble}, incx::Int64, y::ZePtr{Cdouble},\n                                         incy::Int64)::Cint\nend\n\nfunction onemklCswap(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklCswap(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF32}, incx::Int64,\n                                         y::ZePtr{ComplexF32}, incy::Int64)::Cint\nend\n\nfunction onemklZswap(device_queue, n, x, incx, y, incy)\n    @ccall liboneapi_support.onemklZswap(device_queue::syclQueue_t, n::Int64,\n                                         x::ZePtr{ComplexF64}, incx::Int64,\n                                         y::ZePtr{ComplexF64}, incy::Int64)::Cint\nend\n\nfunction onemklHgemm_batch_strided(device_queue, transa, transb, m, n, k, alpha, a, lda,\n                                   stride_a, b, ldb, stride_b, beta, c, ldc, stride_c,\n                                   batch_size)\n    @ccall liboneapi_support.onemklHgemm_batch_strided(device_queue::syclQueue_t,\n                                                       transa::onemklTranspose,\n                                                       transb::onemklTranspose, m::Int64,\n                                                       n::Int64, k::Int64,\n                                                       alpha::Ref{Float16},\n                                                       a::ZePtr{Float16}, lda::Int64,\n                                                       stride_a::Int64, b::ZePtr{Float16},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       beta::Ref{Float16},\n                                                       c::ZePtr{Float16}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSgemm_batch_strided(device_queue, transa, transb, m, n, k, alpha, a, lda,\n                                   stride_a, b, ldb, stride_b, beta, c, ldc, stride_c,\n                                   batch_size)\n    @ccall liboneapi_support.onemklSgemm_batch_strided(device_queue::syclQueue_t,\n                                                       transa::onemklTranspose,\n                                                       transb::onemklTranspose, m::Int64,\n                                                       n::Int64, k::Int64,\n                                                       alpha::Ref{Cfloat}, a::ZePtr{Cfloat},\n                                                       lda::Int64, stride_a::Int64,\n                                                       b::ZePtr{Cfloat}, ldb::Int64,\n                                                       stride_b::Int64, beta::Ref{Cfloat},\n                                                       c::ZePtr{Cfloat}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDgemm_batch_strided(device_queue, transa, transb, m, n, k, alpha, a, lda,\n                                   stride_a, b, ldb, stride_b, beta, c, ldc, stride_c,\n                                   batch_size)\n    @ccall liboneapi_support.onemklDgemm_batch_strided(device_queue::syclQueue_t,\n                                                       transa::onemklTranspose,\n                                                       transb::onemklTranspose, m::Int64,\n                                                       n::Int64, k::Int64,\n                                                       alpha::Ref{Cdouble},\n                                                       a::ZePtr{Cdouble}, lda::Int64,\n                                                       stride_a::Int64, b::ZePtr{Cdouble},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       beta::Ref{Cdouble},\n                                                       c::ZePtr{Cdouble}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCgemm_batch_strided(device_queue, transa, transb, m, n, k, alpha, a, lda,\n                                   stride_a, b, ldb, stride_b, beta, c, ldc, stride_c,\n                                   batch_size)\n    @ccall liboneapi_support.onemklCgemm_batch_strided(device_queue::syclQueue_t,\n                                                       transa::onemklTranspose,\n                                                       transb::onemklTranspose, m::Int64,\n                                                       n::Int64, k::Int64,\n                                                       alpha::Ref{ComplexF32},\n                                                       a::ZePtr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64,\n                                                       b::ZePtr{ComplexF32}, ldb::Int64,\n                                                       stride_b::Int64,\n                                                       beta::Ref{ComplexF32},\n                                                       c::ZePtr{ComplexF32}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZgemm_batch_strided(device_queue, transa, transb, m, n, k, alpha, a, lda,\n                                   stride_a, b, ldb, stride_b, beta, c, ldc, stride_c,\n                                   batch_size)\n    @ccall liboneapi_support.onemklZgemm_batch_strided(device_queue::syclQueue_t,\n                                                       transa::onemklTranspose,\n                                                       transb::onemklTranspose, m::Int64,\n                                                       n::Int64, k::Int64,\n                                                       alpha::Ref{ComplexF64},\n                                                       a::ZePtr{ComplexF64}, lda::Int64,\n                                                       stride_a::Int64,\n                                                       b::ZePtr{ComplexF64}, ldb::Int64,\n                                                       stride_b::Int64,\n                                                       beta::Ref{ComplexF64},\n                                                       c::ZePtr{ComplexF64}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSsyrk_batch_strided(device_queue, upper_lower, trans, n, k, alpha, a, lda,\n                                   stride_a, beta, c, ldc, stride_c, batch_size)\n    @ccall liboneapi_support.onemklSsyrk_batch_strided(device_queue::syclQueue_t,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose, n::Int64,\n                                                       k::Int64, alpha::Ptr{Cfloat},\n                                                       a::Ptr{Cfloat}, lda::Int64,\n                                                       stride_a::Int64, beta::Ptr{Cfloat},\n                                                       c::Ptr{Cfloat}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDsyrk_batch_strided(device_queue, upper_lower, trans, n, k, alpha, a, lda,\n                                   stride_a, beta, c, ldc, stride_c, batch_size)\n    @ccall liboneapi_support.onemklDsyrk_batch_strided(device_queue::syclQueue_t,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose, n::Int64,\n                                                       k::Int64, alpha::Ptr{Cdouble},\n                                                       a::Ptr{Cdouble}, lda::Int64,\n                                                       stride_a::Int64, beta::Ptr{Cdouble},\n                                                       c::Ptr{Cdouble}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCsyrk_batch_strided(device_queue, upper_lower, trans, n, k, alpha, a, lda,\n                                   stride_a, beta, c, ldc, stride_c, batch_size)\n    @ccall liboneapi_support.onemklCsyrk_batch_strided(device_queue::syclQueue_t,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose, n::Int64,\n                                                       k::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64,\n                                                       beta::Ptr{ComplexF32},\n                                                       c::Ptr{ComplexF32}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZsyrk_batch_strided(device_queue, upper_lower, trans, n, k, alpha, a, lda,\n                                   stride_a, beta, c, ldc, stride_c, batch_size)\n    @ccall liboneapi_support.onemklZsyrk_batch_strided(device_queue::syclQueue_t,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose, n::Int64,\n                                                       k::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64,\n                                                       beta::Ptr{ComplexF32},\n                                                       c::Ptr{ComplexF32}, ldc::Int64,\n                                                       stride_c::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklStrsm_batch_strided(device_queue, left_right, upper_lower, trans, unit_diag,\n                                   m, n, alpha, a, lda, stride_a, b, ldb, stride_b,\n                                   batch_size)\n    @ccall liboneapi_support.onemklStrsm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose,\n                                                       unit_diag::onemklDiag, m::Int64,\n                                                       n::Int64, alpha::Ptr{Cfloat},\n                                                       a::Ptr{Cfloat}, lda::Int64,\n                                                       stride_a::Int64, b::Ptr{Cfloat},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDtrsm_batch_strided(device_queue, left_right, upper_lower, trans, unit_diag,\n                                   m, n, alpha, a, lda, stride_a, b, ldb, stride_b,\n                                   batch_size)\n    @ccall liboneapi_support.onemklDtrsm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose,\n                                                       unit_diag::onemklDiag, m::Int64,\n                                                       n::Int64, alpha::Ptr{Cdouble},\n                                                       a::Ptr{Cdouble}, lda::Int64,\n                                                       stride_a::Int64, b::Ptr{Cdouble},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCtrsm_batch_strided(device_queue, left_right, upper_lower, trans, unit_diag,\n                                   m, n, alpha, a, lda, stride_a, b, ldb, stride_b,\n                                   batch_size)\n    @ccall liboneapi_support.onemklCtrsm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose,\n                                                       unit_diag::onemklDiag, m::Int64,\n                                                       n::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64, b::Ptr{ComplexF32},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZtrsm_batch_strided(device_queue, left_right, upper_lower, trans, unit_diag,\n                                   m, n, alpha, a, lda, stride_a, b, ldb, stride_b,\n                                   batch_size)\n    @ccall liboneapi_support.onemklZtrsm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide,\n                                                       upper_lower::onemklUplo,\n                                                       trans::onemklTranspose,\n                                                       unit_diag::onemklDiag, m::Int64,\n                                                       n::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64, b::Ptr{ComplexF32},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSgemv_batch_strided(device_queue, trans, m, n, alpha, a, lda, stridea, x,\n                                   incx, stridex, beta, y, incy, stridey, batch_size)\n    @ccall liboneapi_support.onemklSgemv_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, alpha::Ptr{Cfloat},\n                                                       a::Ptr{Cfloat}, lda::Int64,\n                                                       stridea::Int64, x::Ptr{Cfloat},\n                                                       incx::Int64, stridex::Int64,\n                                                       beta::Ptr{Cfloat}, y::Ptr{Cfloat},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDgemv_batch_strided(device_queue, trans, m, n, alpha, a, lda, stridea, x,\n                                   incx, stridex, beta, y, incy, stridey, batch_size)\n    @ccall liboneapi_support.onemklDgemv_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, alpha::Ptr{Cdouble},\n                                                       a::Ptr{Cdouble}, lda::Int64,\n                                                       stridea::Int64, x::Ptr{Cdouble},\n                                                       incx::Int64, stridex::Int64,\n                                                       beta::Ptr{Cdouble}, y::Ptr{Cdouble},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCgemv_batch_strided(device_queue, trans, m, n, alpha, a, lda, stridea, x,\n                                   incx, stridex, beta, y, incy, stridey, batch_size)\n    @ccall liboneapi_support.onemklCgemv_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stridea::Int64, x::Ptr{ComplexF32},\n                                                       incx::Int64, stridex::Int64,\n                                                       beta::Ptr{ComplexF32},\n                                                       y::Ptr{ComplexF32}, incy::Int64,\n                                                       stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZgemv_batch_strided(device_queue, trans, m, n, alpha, a, lda, stridea, x,\n                                   incx, stridex, beta, y, incy, stridey, batch_size)\n    @ccall liboneapi_support.onemklZgemv_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, alpha::Ptr{ComplexF32},\n                                                       a::Ptr{ComplexF32}, lda::Int64,\n                                                       stridea::Int64, x::Ptr{ComplexF32},\n                                                       incx::Int64, stridex::Int64,\n                                                       beta::Ptr{ComplexF32},\n                                                       y::Ptr{ComplexF32}, incy::Int64,\n                                                       stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSdgmm_batch_strided(device_queue, left_right, m, n, a, lda, stridea, x, incx,\n                                   stridex, c, ldc, stridec, batch_size)\n    @ccall liboneapi_support.onemklSdgmm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide, m::Int64,\n                                                       n::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                                       stridea::Int64, x::Ptr{Cfloat},\n                                                       incx::Int64, stridex::Int64,\n                                                       c::Ptr{Cfloat}, ldc::Int64,\n                                                       stridec::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDdgmm_batch_strided(device_queue, left_right, m, n, a, lda, stridea, x, incx,\n                                   stridex, c, ldc, stridec, batch_size)\n    @ccall liboneapi_support.onemklDdgmm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide, m::Int64,\n                                                       n::Int64, a::Ptr{Cdouble},\n                                                       lda::Int64, stridea::Int64,\n                                                       x::Ptr{Cdouble}, incx::Int64,\n                                                       stridex::Int64, c::Ptr{Cdouble},\n                                                       ldc::Int64, stridec::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCdgmm_batch_strided(device_queue, left_right, m, n, a, lda, stridea, x, incx,\n                                   stridex, c, ldc, stridec, batch_size)\n    @ccall liboneapi_support.onemklCdgmm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide, m::Int64,\n                                                       n::Int64, a::Ptr{ComplexF32},\n                                                       lda::Int64, stridea::Int64,\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, c::Ptr{ComplexF32},\n                                                       ldc::Int64, stridec::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZdgmm_batch_strided(device_queue, left_right, m, n, a, lda, stridea, x, incx,\n                                   stridex, c, ldc, stridec, batch_size)\n    @ccall liboneapi_support.onemklZdgmm_batch_strided(device_queue::syclQueue_t,\n                                                       left_right::onemklSide, m::Int64,\n                                                       n::Int64, a::Ptr{ComplexF32},\n                                                       lda::Int64, stridea::Int64,\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, c::Ptr{ComplexF32},\n                                                       ldc::Int64, stridec::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSaxpy_batch_strided(device_queue, n, alpha, x, incx, stridex, y, incy,\n                                   stridey, batch_size)\n    @ccall liboneapi_support.onemklSaxpy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       alpha::Ptr{Cfloat}, x::Ptr{Cfloat},\n                                                       incx::Int64, stridex::Int64,\n                                                       y::Ptr{Cfloat}, incy::Int64,\n                                                       stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDaxpy_batch_strided(device_queue, n, alpha, x, incx, stridex, y, incy,\n                                   stridey, batch_size)\n    @ccall liboneapi_support.onemklDaxpy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       alpha::Ptr{Cdouble}, x::Ptr{Cdouble},\n                                                       incx::Int64, stridex::Int64,\n                                                       y::Ptr{Cdouble}, incy::Int64,\n                                                       stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCaxpy_batch_strided(device_queue, n, alpha, x, incx, stridex, y, incy,\n                                   stridey, batch_size)\n    @ccall liboneapi_support.onemklCaxpy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       alpha::Ptr{ComplexF32},\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{ComplexF32},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZaxpy_batch_strided(device_queue, n, alpha, x, incx, stridex, y, incy,\n                                   stridey, batch_size)\n    @ccall liboneapi_support.onemklZaxpy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       alpha::Ptr{ComplexF32},\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{ComplexF32},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklScopy_batch_strided(device_queue, n, x, incx, stridex, y, incy, stridey,\n                                   batch_size)\n    @ccall liboneapi_support.onemklScopy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       x::Ptr{Cfloat}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{Cfloat},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklDcopy_batch_strided(device_queue, n, x, incx, stridex, y, incy, stridey,\n                                   batch_size)\n    @ccall liboneapi_support.onemklDcopy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       x::Ptr{Cdouble}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{Cdouble},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklCcopy_batch_strided(device_queue, n, x, incx, stridex, y, incy, stridey,\n                                   batch_size)\n    @ccall liboneapi_support.onemklCcopy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{ComplexF32},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklZcopy_batch_strided(device_queue, n, x, incx, stridex, y, incy, stridey,\n                                   batch_size)\n    @ccall liboneapi_support.onemklZcopy_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                       x::Ptr{ComplexF32}, incx::Int64,\n                                                       stridex::Int64, y::Ptr{ComplexF32},\n                                                       incy::Int64, stridey::Int64,\n                                                       batch_size::Int64)::Cint\nend\n\nfunction onemklSgemmt(device_queue, upper_lower, transa, transb, n, k, alpha, a, lda, b,\n                      ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklSgemmt(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, transa::onemklTranspose,\n                                          transb::onemklTranspose, n::Int64, k::Int64,\n                                          alpha::Ptr{Cfloat}, a::Ptr{Cfloat}, lda::Int64,\n                                          b::Ptr{Cfloat}, ldb::Int64, beta::Ptr{Cfloat},\n                                          c::Ptr{Cfloat}, ldc::Int64)::Cint\nend\n\nfunction onemklDgemmt(device_queue, upper_lower, transa, transb, n, k, alpha, a, lda, b,\n                      ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklDgemmt(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, transa::onemklTranspose,\n                                          transb::onemklTranspose, n::Int64, k::Int64,\n                                          alpha::Ptr{Cdouble}, a::Ptr{Cdouble}, lda::Int64,\n                                          b::Ptr{Cdouble}, ldb::Int64, beta::Ptr{Cdouble},\n                                          c::Ptr{Cdouble}, ldc::Int64)::Cint\nend\n\nfunction onemklCgemmt(device_queue, upper_lower, transa, transb, n, k, alpha, a, lda, b,\n                      ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklCgemmt(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, transa::onemklTranspose,\n                                          transb::onemklTranspose, n::Int64, k::Int64,\n                                          alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          beta::Ptr{ComplexF32}, c::Ptr{ComplexF32},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklZgemmt(device_queue, upper_lower, transa, transb, n, k, alpha, a, lda, b,\n                      ldb, beta, c, ldc)\n    @ccall liboneapi_support.onemklZgemmt(device_queue::syclQueue_t,\n                                          upper_lower::onemklUplo, transa::onemklTranspose,\n                                          transb::onemklTranspose, n::Int64, k::Int64,\n                                          alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          beta::Ptr{ComplexF32}, c::Ptr{ComplexF32},\n                                          ldc::Int64)::Cint\nend\n\nfunction onemklSimatcopy(device_queue, trans, m, n, alpha, ab, lda, ldb)\n    @ccall liboneapi_support.onemklSimatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{Cfloat}, ab::Ptr{Cfloat},\n                                             lda::Int64, ldb::Int64)::Cint\nend\n\nfunction onemklDimatcopy(device_queue, trans, m, n, alpha, ab, lda, ldb)\n    @ccall liboneapi_support.onemklDimatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{Cdouble}, ab::Ptr{Cdouble},\n                                             lda::Int64, ldb::Int64)::Cint\nend\n\nfunction onemklCimatcopy(device_queue, trans, m, n, alpha, ab, lda, ldb)\n    @ccall liboneapi_support.onemklCimatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{ComplexF32}, ab::Ptr{ComplexF32},\n                                             lda::Int64, ldb::Int64)::Cint\nend\n\nfunction onemklZimatcopy(device_queue, trans, m, n, alpha, ab, lda, ldb)\n    @ccall liboneapi_support.onemklZimatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{ComplexF32}, ab::Ptr{ComplexF32},\n                                             lda::Int64, ldb::Int64)::Cint\nend\n\nfunction onemklSomatcopy(device_queue, trans, m, n, alpha, a, lda, b, ldb)\n    @ccall liboneapi_support.onemklSomatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{Cfloat}, a::Ptr{Cfloat}, lda::Int64,\n                                             b::Ptr{Cfloat}, ldb::Int64)::Cint\nend\n\nfunction onemklDomatcopy(device_queue, trans, m, n, alpha, a, lda, b, ldb)\n    @ccall liboneapi_support.onemklDomatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{Cdouble}, a::Ptr{Cdouble},\n                                             lda::Int64, b::Ptr{Cdouble}, ldb::Int64)::Cint\nend\n\nfunction onemklComatcopy(device_queue, trans, m, n, alpha, a, lda, b, ldb)\n    @ccall liboneapi_support.onemklComatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                             lda::Int64, b::Ptr{ComplexF32},\n                                             ldb::Int64)::Cint\nend\n\nfunction onemklZomatcopy(device_queue, trans, m, n, alpha, a, lda, b, ldb)\n    @ccall liboneapi_support.onemklZomatcopy(device_queue::syclQueue_t,\n                                             trans::onemklTranspose, m::Int64, n::Int64,\n                                             alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                             lda::Int64, b::Ptr{ComplexF32},\n                                             ldb::Int64)::Cint\nend\n\nfunction onemklSomatadd(device_queue, transa, transb, m, n, alpha, a, lda, beta, b, ldb, c,\n                        ldc)\n    @ccall liboneapi_support.onemklSomatadd(device_queue::syclQueue_t,\n                                            transa::onemklTranspose,\n                                            transb::onemklTranspose, m::Int64, n::Int64,\n                                            alpha::Ptr{Cfloat}, a::Ptr{Cfloat}, lda::Int64,\n                                            beta::Ptr{Cfloat}, b::Ptr{Cfloat}, ldb::Int64,\n                                            c::Ptr{Cfloat}, ldc::Int64)::Cint\nend\n\nfunction onemklDomatadd(device_queue, transa, transb, m, n, alpha, a, lda, beta, b, ldb, c,\n                        ldc)\n    @ccall liboneapi_support.onemklDomatadd(device_queue::syclQueue_t,\n                                            transa::onemklTranspose,\n                                            transb::onemklTranspose, m::Int64, n::Int64,\n                                            alpha::Ptr{Cdouble}, a::Ptr{Cdouble},\n                                            lda::Int64, beta::Ptr{Cdouble}, b::Ptr{Cdouble},\n                                            ldb::Int64, c::Ptr{Cdouble}, ldc::Int64)::Cint\nend\n\nfunction onemklComatadd(device_queue, transa, transb, m, n, alpha, a, lda, beta, b, ldb, c,\n                        ldc)\n    @ccall liboneapi_support.onemklComatadd(device_queue::syclQueue_t,\n                                            transa::onemklTranspose,\n                                            transb::onemklTranspose, m::Int64, n::Int64,\n                                            alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                            lda::Int64, beta::Ptr{ComplexF32},\n                                            b::Ptr{ComplexF32}, ldb::Int64,\n                                            c::Ptr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklZomatadd(device_queue, transa, transb, m, n, alpha, a, lda, beta, b, ldb, c,\n                        ldc)\n    @ccall liboneapi_support.onemklZomatadd(device_queue::syclQueue_t,\n                                            transa::onemklTranspose,\n                                            transb::onemklTranspose, m::Int64, n::Int64,\n                                            alpha::Ptr{ComplexF32}, a::Ptr{ComplexF32},\n                                            lda::Int64, beta::Ptr{ComplexF32},\n                                            b::Ptr{ComplexF32}, ldb::Int64,\n                                            c::Ptr{ComplexF32}, ldc::Int64)::Cint\nend\n\nfunction onemklSimatcopy_batch_strided(device_queue, trans, m, n, alpha, ab, lda, ldb,\n                                       stride, batch_size)\n    @ccall liboneapi_support.onemklSimatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{Cfloat},\n                                                           ab::Ptr{Cfloat}, lda::Int64,\n                                                           ldb::Int64, stride::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklDimatcopy_batch_strided(device_queue, trans, m, n, alpha, ab, lda, ldb,\n                                       stride, batch_size)\n    @ccall liboneapi_support.onemklDimatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{Cdouble},\n                                                           ab::Ptr{Cdouble}, lda::Int64,\n                                                           ldb::Int64, stride::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklCimatcopy_batch_strided(device_queue, trans, m, n, alpha, ab, lda, ldb,\n                                       stride, batch_size)\n    @ccall liboneapi_support.onemklCimatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{ComplexF32},\n                                                           ab::Ptr{ComplexF32}, lda::Int64,\n                                                           ldb::Int64, stride::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklZimatcopy_batch_strided(device_queue, trans, m, n, alpha, ab, lda, ldb,\n                                       stride, batch_size)\n    @ccall liboneapi_support.onemklZimatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{ComplexF32},\n                                                           ab::Ptr{ComplexF32}, lda::Int64,\n                                                           ldb::Int64, stride::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklSomatcopy_batch_strided(device_queue, trans, m, n, alpha, a, lda, stride_a,\n                                       b, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklSomatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{Cfloat},\n                                                           a::Ptr{Cfloat}, lda::Int64,\n                                                           stride_a::Int64, b::Ptr{Cfloat},\n                                                           ldb::Int64, stride_b::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklDomatcopy_batch_strided(device_queue, trans, m, n, alpha, a, lda, stride_a,\n                                       b, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklDomatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{Cdouble},\n                                                           a::Ptr{Cdouble}, lda::Int64,\n                                                           stride_a::Int64, b::Ptr{Cdouble},\n                                                           ldb::Int64, stride_b::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklComatcopy_batch_strided(device_queue, trans, m, n, alpha, a, lda, stride_a,\n                                       b, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklComatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{ComplexF32},\n                                                           a::Ptr{ComplexF32}, lda::Int64,\n                                                           stride_a::Int64,\n                                                           b::Ptr{ComplexF32}, ldb::Int64,\n                                                           stride_b::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklZomatcopy_batch_strided(device_queue, trans, m, n, alpha, a, lda, stride_a,\n                                       b, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklZomatcopy_batch_strided(device_queue::syclQueue_t,\n                                                           trans::onemklTranspose, m::Int64,\n                                                           n::Int64, alpha::Ptr{ComplexF32},\n                                                           a::Ptr{ComplexF32}, lda::Int64,\n                                                           stride_a::Int64,\n                                                           b::Ptr{ComplexF32}, ldb::Int64,\n                                                           stride_b::Int64,\n                                                           batch_size::Int64)::Cint\nend\n\nfunction onemklSomatadd_batch_strided(device_queue, transa, transb, m, n, alpha, a, lda,\n                                      stride_a, beta, b, ldb, stride_b, c, ldc, stride_c,\n                                      batch_size)\n    @ccall liboneapi_support.onemklSomatadd_batch_strided(device_queue::syclQueue_t,\n                                                          transa::onemklTranspose,\n                                                          transb::onemklTranspose, m::Int64,\n                                                          n::Int64, alpha::Ptr{Cfloat},\n                                                          a::Ptr{Cfloat}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          beta::Ptr{Cfloat}, b::Ptr{Cfloat},\n                                                          ldb::Int64, stride_b::Int64,\n                                                          c::Ptr{Cfloat}, ldc::Int64,\n                                                          stride_c::Int64,\n                                                          batch_size::Int64)::Cint\nend\n\nfunction onemklDomatadd_batch_strided(device_queue, transa, transb, m, n, alpha, a, lda,\n                                      stride_a, beta, b, ldb, stride_b, c, ldc, stride_c,\n                                      batch_size)\n    @ccall liboneapi_support.onemklDomatadd_batch_strided(device_queue::syclQueue_t,\n                                                          transa::onemklTranspose,\n                                                          transb::onemklTranspose, m::Int64,\n                                                          n::Int64, alpha::Ptr{Cdouble},\n                                                          a::Ptr{Cdouble}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          beta::Ptr{Cdouble},\n                                                          b::Ptr{Cdouble}, ldb::Int64,\n                                                          stride_b::Int64, c::Ptr{Cdouble},\n                                                          ldc::Int64, stride_c::Int64,\n                                                          batch_size::Int64)::Cint\nend\n\nfunction onemklComatadd_batch_strided(device_queue, transa, transb, m, n, alpha, a, lda,\n                                      stride_a, beta, b, ldb, stride_b, c, ldc, stride_c,\n                                      batch_size)\n    @ccall liboneapi_support.onemklComatadd_batch_strided(device_queue::syclQueue_t,\n                                                          transa::onemklTranspose,\n                                                          transb::onemklTranspose, m::Int64,\n                                                          n::Int64, alpha::Ptr{ComplexF32},\n                                                          a::Ptr{ComplexF32}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          beta::Ptr{ComplexF32},\n                                                          b::Ptr{ComplexF32}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          c::Ptr{ComplexF32}, ldc::Int64,\n                                                          stride_c::Int64,\n                                                          batch_size::Int64)::Cint\nend\n\nfunction onemklZomatadd_batch_strided(device_queue, transa, transb, m, n, alpha, a, lda,\n                                      stride_a, beta, b, ldb, stride_b, c, ldc, stride_c,\n                                      batch_size)\n    @ccall liboneapi_support.onemklZomatadd_batch_strided(device_queue::syclQueue_t,\n                                                          transa::onemklTranspose,\n                                                          transb::onemklTranspose, m::Int64,\n                                                          n::Int64, alpha::Ptr{ComplexF32},\n                                                          a::Ptr{ComplexF32}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          beta::Ptr{ComplexF32},\n                                                          b::Ptr{ComplexF32}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          c::Ptr{ComplexF32}, ldc::Int64,\n                                                          stride_c::Int64,\n                                                          batch_size::Int64)::Cint\nend\n\nfunction onemklSpotrf(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrf(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrf(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrf(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotrs(device_queue, uplo, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, nrhs::Int64, a::ZePtr{Cfloat},\n                                          lda::Int64, b::ZePtr{Cfloat}, ldb::Int64,\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrs(device_queue, uplo, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, nrhs::Int64, a::ZePtr{Cdouble},\n                                          lda::Int64, b::ZePtr{Cdouble}, ldb::Int64,\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrs(device_queue, uplo, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, nrhs::Int64, a::ZePtr{ComplexF32},\n                                          lda::Int64, b::ZePtr{ComplexF32}, ldb::Int64,\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrs(device_queue, uplo, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, nrhs::Int64, a::ZePtr{ComplexF64},\n                                          lda::Int64, b::ZePtr{ComplexF64}, ldb::Int64,\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotri(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotri(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotri(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotri(device_queue, uplo, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklStrtri(device_queue, uplo, diag, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklStrtri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          diag::onemklDiag, n::Int64, a::ZePtr{Cfloat},\n                                          lda::Int64, scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDtrtri(device_queue, uplo, diag, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDtrtri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          diag::onemklDiag, n::Int64, a::ZePtr{Cdouble},\n                                          lda::Int64, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCtrtri(device_queue, uplo, diag, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCtrtri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          diag::onemklDiag, n::Int64, a::ZePtr{ComplexF32},\n                                          lda::Int64, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZtrtri(device_queue, uplo, diag, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZtrtri(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          diag::onemklDiag, n::Int64, a::ZePtr{ComplexF64},\n                                          lda::Int64, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgesv(device_queue, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklSgesv(device_queue::syclQueue_t, n::Int64, nrhs::Int64,\n                                         a::ZePtr{Cfloat}, lda::Int64, ipiv::ZePtr{Cfloat},\n                                         b::ZePtr{Cfloat}, ldb::Int64,\n                                         scratchpad::ZePtr{Cfloat},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgesv(device_queue, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklDgesv(device_queue::syclQueue_t, n::Int64, nrhs::Int64,\n                                         a::ZePtr{Cdouble}, lda::Int64,\n                                         ipiv::ZePtr{Cdouble}, b::ZePtr{Cdouble},\n                                         ldb::Int64, scratchpad::ZePtr{Cdouble},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgesv(device_queue, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklCgesv(device_queue::syclQueue_t, n::Int64, nrhs::Int64,\n                                         a::ZePtr{ComplexF32}, lda::Int64,\n                                         ipiv::ZePtr{ComplexF32}, b::ZePtr{ComplexF32},\n                                         ldb::Int64, scratchpad::ZePtr{ComplexF32},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgesv(device_queue, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklZgesv(device_queue::syclQueue_t, n::Int64, nrhs::Int64,\n                                         a::ZePtr{ComplexF64}, lda::Int64,\n                                         ipiv::ZePtr{ComplexF64}, b::ZePtr{ComplexF64},\n                                         ldb::Int64, scratchpad::ZePtr{ComplexF64},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgebrd(device_queue, m, n, a, lda, d, e, tauq, taup, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCgebrd(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          d::ZePtr{Float32}, e::ZePtr{ComplexF32},\n                                          tauq::ZePtr{ComplexF32}, taup::ZePtr{ComplexF32},\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgebrd(device_queue, m, n, a, lda, d, e, tauq, taup, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDgebrd(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Float64}, lda::Int64, d::ZePtr{Float64},\n                                          e::ZePtr{Float64}, tauq::ZePtr{Float64},\n                                          taup::ZePtr{Float64}, scratchpad::ZePtr{Float64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgebrd(device_queue, m, n, a, lda, d, e, tauq, taup, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSgebrd(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Float32}, lda::Int64, d::ZePtr{Float32},\n                                          e::ZePtr{Float32}, tauq::ZePtr{Float32},\n                                          taup::ZePtr{Float32}, scratchpad::ZePtr{Float32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgebrd(device_queue, m, n, a, lda, d, e, tauq, taup, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZgebrd(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          d::ZePtr{Float64}, e::ZePtr{ComplexF64},\n                                          tauq::ZePtr{ComplexF64}, taup::ZePtr{ComplexF64},\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgeqrf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgeqrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          tau::ZePtr{ComplexF32},\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgeqrf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgeqrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Cdouble}, lda::Int64,\n                                          tau::ZePtr{Cdouble}, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgeqrf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgeqrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Cfloat}, lda::Int64, tau::ZePtr{Cfloat},\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgeqrf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgeqrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          tau::ZePtr{ComplexF64},\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgesvd(device_queue, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgesvd(device_queue::syclQueue_t, jobu::onemklJobsvd,\n                                          jobvt::onemklJobsvd, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          s::ZePtr{Float32}, u::ZePtr{ComplexF32},\n                                          ldu::Int64, vt::ZePtr{ComplexF32}, ldvt::Int64,\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgesvd(device_queue, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgesvd(device_queue::syclQueue_t, jobu::onemklJobsvd,\n                                          jobvt::onemklJobsvd, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          s::ZePtr{Float64}, u::ZePtr{ComplexF64},\n                                          ldu::Int64, vt::ZePtr{ComplexF64}, ldvt::Int64,\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgesvd(device_queue, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgesvd(device_queue::syclQueue_t, jobu::onemklJobsvd,\n                                          jobvt::onemklJobsvd, m::Int64, n::Int64,\n                                          a::ZePtr{Float64}, lda::Int64, s::ZePtr{Float64},\n                                          u::ZePtr{Float64}, ldu::Int64, vt::ZePtr{Float64},\n                                          ldvt::Int64, scratchpad::ZePtr{Float64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgesvd(device_queue, jobu, jobvt, m, n, a, lda, s, u, ldu, vt, ldvt,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgesvd(device_queue::syclQueue_t, jobu::onemklJobsvd,\n                                          jobvt::onemklJobsvd, m::Int64, n::Int64,\n                                          a::ZePtr{Float32}, lda::Int64, s::ZePtr{Float32},\n                                          u::ZePtr{Float32}, ldu::Int64, vt::ZePtr{Float32},\n                                          ldvt::Int64, scratchpad::ZePtr{Float32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgesvda_batch_strided(device_queue, iparm, irank, m, n, a, lda, stride_a, s,\n                                     stride_s, u, ldu, stride_u, vt, ldvt, stride_vt,\n                                     tolerance, residual, batch_size, scratchpad,\n                                     scratchpad_size)\n    @ccall liboneapi_support.onemklCgesvda_batch_strided(device_queue::syclQueue_t,\n                                                         iparm::Ptr{Int64},\n                                                         irank::Ptr{Int64}, m::Int64,\n                                                         n::Int64, a::Ptr{ComplexF32},\n                                                         lda::Int64, stride_a::Int64,\n                                                         s::Ptr{Cfloat}, stride_s::Int64,\n                                                         u::Ptr{ComplexF32}, ldu::Int64,\n                                                         stride_u::Int64,\n                                                         vt::Ptr{ComplexF32}, ldvt::Int64,\n                                                         stride_vt::Int64,\n                                                         tolerance::Ptr{Cfloat},\n                                                         residual::Ptr{Cfloat},\n                                                         batch_size::Int64,\n                                                         scratchpad::Ptr{ComplexF32},\n                                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgesvda_batch_strided(device_queue, iparm, irank, m, n, a, lda, stride_a, s,\n                                     stride_s, u, ldu, stride_u, vt, ldvt, stride_vt,\n                                     tolerance, residual, batch_size, scratchpad,\n                                     scratchpad_size)\n    @ccall liboneapi_support.onemklDgesvda_batch_strided(device_queue::syclQueue_t,\n                                                         iparm::Ptr{Int64},\n                                                         irank::Ptr{Int64}, m::Int64,\n                                                         n::Int64, a::Ptr{Cdouble},\n                                                         lda::Int64, stride_a::Int64,\n                                                         s::Ptr{Cdouble}, stride_s::Int64,\n                                                         u::Ptr{Cdouble}, ldu::Int64,\n                                                         stride_u::Int64, vt::Ptr{Cdouble},\n                                                         ldvt::Int64, stride_vt::Int64,\n                                                         tolerance::Ptr{Cdouble},\n                                                         residual::Ptr{Cdouble},\n                                                         batch_size::Int64,\n                                                         scratchpad::Ptr{Cdouble},\n                                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgesvda_batch_strided(device_queue, iparm, irank, m, n, a, lda, stride_a, s,\n                                     stride_s, u, ldu, stride_u, vt, ldvt, stride_vt,\n                                     tolerance, residual, batch_size, scratchpad,\n                                     scratchpad_size)\n    @ccall liboneapi_support.onemklSgesvda_batch_strided(device_queue::syclQueue_t,\n                                                         iparm::Ptr{Int64},\n                                                         irank::Ptr{Int64}, m::Int64,\n                                                         n::Int64, a::Ptr{Cfloat},\n                                                         lda::Int64, stride_a::Int64,\n                                                         s::Ptr{Cfloat}, stride_s::Int64,\n                                                         u::Ptr{Cfloat}, ldu::Int64,\n                                                         stride_u::Int64, vt::Ptr{Cfloat},\n                                                         ldvt::Int64, stride_vt::Int64,\n                                                         tolerance::Ptr{Cfloat},\n                                                         residual::Ptr{Cfloat},\n                                                         batch_size::Int64,\n                                                         scratchpad::Ptr{Cfloat},\n                                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgesvda_batch_strided(device_queue, iparm, irank, m, n, a, lda, stride_a, s,\n                                     stride_s, u, ldu, stride_u, vt, ldvt, stride_vt,\n                                     tolerance, residual, batch_size, scratchpad,\n                                     scratchpad_size)\n    @ccall liboneapi_support.onemklZgesvda_batch_strided(device_queue::syclQueue_t,\n                                                         iparm::Ptr{Int64},\n                                                         irank::Ptr{Int64}, m::Int64,\n                                                         n::Int64, a::Ptr{ComplexF32},\n                                                         lda::Int64, stride_a::Int64,\n                                                         s::Ptr{Cdouble}, stride_s::Int64,\n                                                         u::Ptr{ComplexF32}, ldu::Int64,\n                                                         stride_u::Int64,\n                                                         vt::Ptr{ComplexF32}, ldvt::Int64,\n                                                         stride_vt::Int64,\n                                                         tolerance::Ptr{Cdouble},\n                                                         residual::Ptr{Cdouble},\n                                                         batch_size::Int64,\n                                                         scratchpad::Ptr{ComplexF32},\n                                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrf(device_queue, m, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrf(device_queue, m, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Cdouble}, lda::Int64, ipiv::ZePtr{Int64},\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrf(device_queue, m, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{Cfloat}, lda::Int64, ipiv::ZePtr{Int64},\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrf(device_queue, m, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrf_batch(device_queue, m, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrf_batch(device_queue, m, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{Cdouble}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrf_batch(device_queue, m, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{Cfloat}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrf_batch(device_queue, m, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{ComplexF64}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrf_batch_strided(device_queue, m, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrf_batch_strided(device_queue, m, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{Cdouble},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrf_batch_strided(device_queue, m, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{Cfloat},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrf_batch_strided(device_queue, m, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrfnp(device_queue, m, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrfnp(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                            a::Ptr{ComplexF32}, lda::Int64,\n                                            scratchpad::Ptr{ComplexF32},\n                                            scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrfnp(device_queue, m, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrfnp(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                            a::Ptr{Cdouble}, lda::Int64,\n                                            scratchpad::Ptr{Cdouble},\n                                            scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrfnp(device_queue, m, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrfnp(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                            a::Ptr{Cfloat}, lda::Int64,\n                                            scratchpad::Ptr{Cfloat},\n                                            scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrfnp(device_queue, m, n, a, lda, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrfnp(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                            a::Ptr{ComplexF32}, lda::Int64,\n                                            scratchpad::Ptr{ComplexF32},\n                                            scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrfnp_batch(device_queue, m, n, a, lda, group_count, group_sizes,\n                              scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrfnp_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                  n::Ptr{Int64}, a::Ptr{Ptr{ComplexF32}},\n                                                  lda::Ptr{Int64}, group_count::Int64,\n                                                  group_sizes::Ptr{Int64},\n                                                  scratchpad::Ptr{ComplexF32},\n                                                  scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrfnp_batch(device_queue, m, n, a, lda, group_count, group_sizes,\n                              scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrfnp_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                  n::Ptr{Int64}, a::Ptr{Ptr{Cdouble}},\n                                                  lda::Ptr{Int64}, group_count::Int64,\n                                                  group_sizes::Ptr{Int64},\n                                                  scratchpad::Ptr{Cdouble},\n                                                  scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrfnp_batch(device_queue, m, n, a, lda, group_count, group_sizes,\n                              scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrfnp_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                  n::Ptr{Int64}, a::Ptr{Ptr{Cfloat}},\n                                                  lda::Ptr{Int64}, group_count::Int64,\n                                                  group_sizes::Ptr{Int64},\n                                                  scratchpad::Ptr{Cfloat},\n                                                  scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrfnp_batch(device_queue, m, n, a, lda, group_count, group_sizes,\n                              scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrfnp_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                  n::Ptr{Int64}, a::Ptr{Ptr{ComplexF32}},\n                                                  lda::Ptr{Int64}, group_count::Int64,\n                                                  group_sizes::Ptr{Int64},\n                                                  scratchpad::Ptr{ComplexF32},\n                                                  scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrfnp_batch_strided(device_queue, m, n, a, lda, stride_a, batch_size,\n                                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrfnp_batch_strided(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          a::Ptr{ComplexF32}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{ComplexF32},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrfnp_batch_strided(device_queue, m, n, a, lda, stride_a, batch_size,\n                                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrfnp_batch_strided(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          a::Ptr{Cdouble}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{Cdouble},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrfnp_batch_strided(device_queue, m, n, a, lda, stride_a, batch_size,\n                                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrfnp_batch_strided(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          a::Ptr{Cfloat}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{Cfloat},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrfnp_batch_strided(device_queue, m, n, a, lda, stride_a, batch_size,\n                                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrfnp_batch_strided(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          a::Ptr{ComplexF32}, lda::Int64,\n                                                          stride_a::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{ComplexF32},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetri(device_queue, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetri(device_queue::syclQueue_t, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetri(device_queue, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetri(device_queue::syclQueue_t, n::Int64,\n                                          a::ZePtr{Cdouble}, lda::Int64, ipiv::ZePtr{Int64},\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetri(device_queue, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetri(device_queue::syclQueue_t, n::Int64,\n                                          a::ZePtr{Cfloat}, lda::Int64, ipiv::ZePtr{Int64},\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetri(device_queue, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetri(device_queue::syclQueue_t, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrs(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrs(device_queue::syclQueue_t, trans::onemklTranspose,\n                                          n::Int64, nrhs::Int64, a::ZePtr{ComplexF32},\n                                          lda::Int64, ipiv::ZePtr{Int64},\n                                          b::ZePtr{ComplexF32}, ldb::Int64,\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrs(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrs(device_queue::syclQueue_t, trans::onemklTranspose,\n                                          n::Int64, nrhs::Int64, a::ZePtr{Cdouble},\n                                          lda::Int64, ipiv::ZePtr{Int64}, b::ZePtr{Cdouble},\n                                          ldb::Int64, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrs(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrs(device_queue::syclQueue_t, trans::onemklTranspose,\n                                          n::Int64, nrhs::Int64, a::ZePtr{Cfloat},\n                                          lda::Int64, ipiv::ZePtr{Int64}, b::ZePtr{Cfloat},\n                                          ldb::Int64, scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrs(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrs(device_queue::syclQueue_t, trans::onemklTranspose,\n                                          n::Int64, nrhs::Int64, a::ZePtr{ComplexF64},\n                                          lda::Int64, ipiv::ZePtr{Int64},\n                                          b::ZePtr{ComplexF64}, ldb::Int64,\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrs_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, ipiv,\n                                    stride_ipiv, b, ldb, stride_b, batch_size, scratchpad,\n                                    scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrs_batch_strided(device_queue::syclQueue_t,\n                                                        trans::onemklTranspose, n::Int64,\n                                                        nrhs::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        b::Ptr{ComplexF32}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrs_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, ipiv,\n                                    stride_ipiv, b, ldb, stride_b, batch_size, scratchpad,\n                                    scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrs_batch_strided(device_queue::syclQueue_t,\n                                                        trans::onemklTranspose, n::Int64,\n                                                        nrhs::Int64, a::Ptr{Cdouble},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64, b::Ptr{Cdouble},\n                                                        ldb::Int64, stride_b::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrs_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, ipiv,\n                                    stride_ipiv, b, ldb, stride_b, batch_size, scratchpad,\n                                    scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrs_batch_strided(device_queue::syclQueue_t,\n                                                        trans::onemklTranspose, n::Int64,\n                                                        nrhs::Int64, a::Ptr{Cfloat},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64, b::Ptr{Cfloat},\n                                                        ldb::Int64, stride_b::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrs_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, ipiv,\n                                    stride_ipiv, b, ldb, stride_b, batch_size, scratchpad,\n                                    scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrs_batch_strided(device_queue::syclQueue_t,\n                                                        trans::onemklTranspose, n::Int64,\n                                                        nrhs::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        b::Ptr{ComplexF32}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrsnp_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, b,\n                                      ldb, stride_b, batch_size, scratchpad,\n                                      scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrsnp_batch_strided(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, a::Ptr{ComplexF32},\n                                                          lda::Int64, stride_a::Int64,\n                                                          b::Ptr{ComplexF32}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{ComplexF32},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrsnp_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, b,\n                                      ldb, stride_b, batch_size, scratchpad,\n                                      scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrsnp_batch_strided(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, a::Ptr{Cdouble},\n                                                          lda::Int64, stride_a::Int64,\n                                                          b::Ptr{Cdouble}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{Cdouble},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrsnp_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, b,\n                                      ldb, stride_b, batch_size, scratchpad,\n                                      scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrsnp_batch_strided(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, a::Ptr{Cfloat},\n                                                          lda::Int64, stride_a::Int64,\n                                                          b::Ptr{Cfloat}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{Cfloat},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrsnp_batch_strided(device_queue, trans, n, nrhs, a, lda, stride_a, b,\n                                      ldb, stride_b, batch_size, scratchpad,\n                                      scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrsnp_batch_strided(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, a::Ptr{ComplexF32},\n                                                          lda::Int64, stride_a::Int64,\n                                                          b::Ptr{ComplexF32}, ldb::Int64,\n                                                          stride_b::Int64,\n                                                          batch_size::Int64,\n                                                          scratchpad::Ptr{ComplexF32},\n                                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCheev(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCheev(device_queue::syclQueue_t, jobz::onemklCompz,\n                                         uplo::onemklUplo, n::Int64, a::Ptr{ComplexF32},\n                                         lda::Int64, w::Ptr{Cfloat},\n                                         scratchpad::Ptr{ComplexF32},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZheev(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZheev(device_queue::syclQueue_t, jobz::onemklCompz,\n                                         uplo::onemklUplo, n::Int64, a::Ptr{ComplexF32},\n                                         lda::Int64, w::Ptr{Cdouble},\n                                         scratchpad::Ptr{ComplexF32},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCheevd(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCheevd(device_queue::syclQueue_t, jobz::onemklJob,\n                                          uplo::onemklUplo, n::Int64, a::ZePtr{ComplexF32},\n                                          lda::Int64, w::ZePtr{Float32},\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZheevd(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZheevd(device_queue::syclQueue_t, jobz::onemklJob,\n                                          uplo::onemklUplo, n::Int64, a::ZePtr{ComplexF64},\n                                          lda::Int64, w::ZePtr{Float64},\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCheevx(device_queue, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m,\n                      w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCheevx(device_queue::syclQueue_t, jobz::onemklCompz,\n                                          range::onemklRangev, uplo::onemklUplo, n::Int64,\n                                          a::Ptr{ComplexF32}, lda::Int64, vl::Ptr{Cfloat},\n                                          vu::Ptr{Cfloat}, il::Int64, iu::Int64,\n                                          abstol::Ptr{Cfloat}, m::Ptr{Int64},\n                                          w::Ptr{Cfloat}, z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZheevx(device_queue, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m,\n                      w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZheevx(device_queue::syclQueue_t, jobz::onemklCompz,\n                                          range::onemklRangev, uplo::onemklUplo, n::Int64,\n                                          a::Ptr{ComplexF32}, lda::Int64, vl::Ptr{Cdouble},\n                                          vu::Ptr{Cdouble}, il::Int64, iu::Int64,\n                                          abstol::Ptr{Cdouble}, m::Ptr{Int64},\n                                          w::Ptr{Cdouble}, z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklChegvd(device_queue, itype, jobz, uplo, n, a, lda, b, ldb, w, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklChegvd(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklJob, uplo::onemklUplo, n::Int64,\n                                          a::ZePtr{ComplexF32}, lda::Int64,\n                                          b::ZePtr{ComplexF32}, ldb::Int64,\n                                          w::ZePtr{Float32}, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZhegvd(device_queue, itype, jobz, uplo, n, a, lda, b, ldb, w, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZhegvd(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklJob, uplo::onemklUplo, n::Int64,\n                                          a::ZePtr{ComplexF64}, lda::Int64,\n                                          b::ZePtr{ComplexF64}, ldb::Int64,\n                                          w::ZePtr{Float64}, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklChegvx(device_queue, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il,\n                      iu, abstol, m, w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklChegvx(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklCompz, range::onemklRangev,\n                                          uplo::onemklUplo, n::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          vl::Ptr{Cfloat}, vu::Ptr{Cfloat}, il::Int64,\n                                          iu::Int64, abstol::Ptr{Cfloat}, m::Ptr{Int64},\n                                          w::Ptr{Cfloat}, z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZhegvx(device_queue, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il,\n                      iu, abstol, m, w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZhegvx(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklCompz, range::onemklRangev,\n                                          uplo::onemklUplo, n::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          vl::Ptr{Cdouble}, vu::Ptr{Cdouble}, il::Int64,\n                                          iu::Int64, abstol::Ptr{Cdouble}, m::Ptr{Int64},\n                                          w::Ptr{Cdouble}, z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklChetrd(device_queue, uplo, n, a, lda, d, e, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklChetrd(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          d::Ptr{Cfloat}, e::Ptr{Cfloat},\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZhetrd(device_queue, uplo, n, a, lda, d, e, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZhetrd(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          d::Ptr{Cdouble}, e::Ptr{Cdouble},\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklChetrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklChetrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          ipiv::Ptr{Int64}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZhetrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZhetrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          ipiv::Ptr{Int64}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSorgbr(device_queue, vec, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSorgbr(device_queue::syclQueue_t, vec::onemklGenerate,\n                                          m::Int64, n::Int64, k::Int64, a::Ptr{Cfloat},\n                                          lda::Int64, tau::Ptr{Cfloat},\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDorgbr(device_queue, vec, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDorgbr(device_queue::syclQueue_t, vec::onemklGenerate,\n                                          m::Int64, n::Int64, k::Int64, a::Ptr{Cdouble},\n                                          lda::Int64, tau::Ptr{Cdouble},\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDorgqr(device_queue, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDorgqr(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                          tau::ZePtr{Cdouble}, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSorgqr(device_queue, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSorgqr(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                          tau::ZePtr{Cfloat}, scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDormqr(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDormqr(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                          tau::ZePtr{Cdouble}, c::ZePtr{Cdouble},\n                                          ldc::Int64, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSormqr(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSormqr(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                          tau::ZePtr{Cfloat}, c::ZePtr{Cfloat}, ldc::Int64,\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCsteqr(device_queue, compz, n, d, e, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCsteqr(device_queue::syclQueue_t, compz::onemklCompz,\n                                          n::Int64, d::Ptr{Cfloat}, e::Ptr{Cfloat},\n                                          z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsteqr(device_queue, compz, n, d, e, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsteqr(device_queue::syclQueue_t, compz::onemklCompz,\n                                          n::Int64, d::Ptr{Cdouble}, e::Ptr{Cdouble},\n                                          z::Ptr{Cdouble}, ldz::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsteqr(device_queue, compz, n, d, e, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsteqr(device_queue::syclQueue_t, compz::onemklCompz,\n                                          n::Int64, d::Ptr{Cfloat}, e::Ptr{Cfloat},\n                                          z::Ptr{Cfloat}, ldz::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZsteqr(device_queue, compz, n, d, e, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZsteqr(device_queue::syclQueue_t, compz::onemklCompz,\n                                          n::Int64, d::Ptr{Cdouble}, e::Ptr{Cdouble},\n                                          z::Ptr{ComplexF32}, ldz::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsyev(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsyev(device_queue::syclQueue_t, jobz::onemklCompz,\n                                         uplo::onemklUplo, n::Int64, a::Ptr{Cdouble},\n                                         lda::Int64, w::Ptr{Cdouble},\n                                         scratchpad::Ptr{Cdouble},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsyev(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsyev(device_queue::syclQueue_t, jobz::onemklCompz,\n                                         uplo::onemklUplo, n::Int64, a::Ptr{Cfloat},\n                                         lda::Int64, w::Ptr{Cfloat},\n                                         scratchpad::Ptr{Cfloat},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsyevd(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsyevd(device_queue::syclQueue_t, jobz::onemklJob,\n                                          uplo::onemklUplo, n::Int64, a::ZePtr{Cdouble},\n                                          lda::Int64, w::ZePtr{Cdouble},\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsyevd(device_queue, jobz, uplo, n, a, lda, w, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsyevd(device_queue::syclQueue_t, jobz::onemklJob,\n                                          uplo::onemklUplo, n::Int64, a::ZePtr{Cfloat},\n                                          lda::Int64, w::ZePtr{Cfloat},\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsyevx(device_queue, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m,\n                      w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsyevx(device_queue::syclQueue_t, jobz::onemklCompz,\n                                          range::onemklRangev, uplo::onemklUplo, n::Int64,\n                                          a::Ptr{Cdouble}, lda::Int64, vl::Ptr{Cdouble},\n                                          vu::Ptr{Cdouble}, il::Int64, iu::Int64,\n                                          abstol::Ptr{Cdouble}, m::Ptr{Int64},\n                                          w::Ptr{Cdouble}, z::Ptr{Cdouble}, ldz::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsyevx(device_queue, jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m,\n                      w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsyevx(device_queue::syclQueue_t, jobz::onemklCompz,\n                                          range::onemklRangev, uplo::onemklUplo, n::Int64,\n                                          a::Ptr{Cfloat}, lda::Int64, vl::Ptr{Cfloat},\n                                          vu::Ptr{Cfloat}, il::Int64, iu::Int64,\n                                          abstol::Ptr{Cfloat}, m::Ptr{Int64},\n                                          w::Ptr{Cfloat}, z::Ptr{Cfloat}, ldz::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsygvd(device_queue, itype, jobz, uplo, n, a, lda, b, ldb, w, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDsygvd(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklJob, uplo::onemklUplo, n::Int64,\n                                          a::ZePtr{Cdouble}, lda::Int64, b::ZePtr{Cdouble},\n                                          ldb::Int64, w::ZePtr{Cdouble},\n                                          scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsygvd(device_queue, itype, jobz, uplo, n, a, lda, b, ldb, w, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSsygvd(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklJob, uplo::onemklUplo, n::Int64,\n                                          a::ZePtr{Cfloat}, lda::Int64, b::ZePtr{Cfloat},\n                                          ldb::Int64, w::ZePtr{Cfloat},\n                                          scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsygvx(device_queue, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il,\n                      iu, abstol, m, w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsygvx(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklCompz, range::onemklRangev,\n                                          uplo::onemklUplo, n::Int64, a::Ptr{Cdouble},\n                                          lda::Int64, b::Ptr{Cdouble}, ldb::Int64,\n                                          vl::Ptr{Cdouble}, vu::Ptr{Cdouble}, il::Int64,\n                                          iu::Int64, abstol::Ptr{Cdouble}, m::Ptr{Int64},\n                                          w::Ptr{Cdouble}, z::Ptr{Cdouble}, ldz::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsygvx(device_queue, itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il,\n                      iu, abstol, m, w, z, ldz, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsygvx(device_queue::syclQueue_t, itype::Int64,\n                                          jobz::onemklCompz, range::onemklRangev,\n                                          uplo::onemklUplo, n::Int64, a::Ptr{Cfloat},\n                                          lda::Int64, b::Ptr{Cfloat}, ldb::Int64,\n                                          vl::Ptr{Cfloat}, vu::Ptr{Cfloat}, il::Int64,\n                                          iu::Int64, abstol::Ptr{Cfloat}, m::Ptr{Int64},\n                                          w::Ptr{Cfloat}, z::Ptr{Cfloat}, ldz::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsytrd(device_queue, uplo, n, a, lda, d, e, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsytrd(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{Cdouble}, lda::Int64,\n                                          d::Ptr{Cdouble}, e::Ptr{Cdouble},\n                                          tau::Ptr{Cdouble}, scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsytrd(device_queue, uplo, n, a, lda, d, e, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsytrd(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                          d::Ptr{Cfloat}, e::Ptr{Cfloat}, tau::Ptr{Cfloat},\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCtrtrs(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCtrtrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          trans::onemklTranspose, diag::onemklDiag,\n                                          n::Int64, nrhs::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDtrtrs(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDtrtrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          trans::onemklTranspose, diag::onemklDiag,\n                                          n::Int64, nrhs::Int64, a::Ptr{Cdouble},\n                                          lda::Int64, b::Ptr{Cdouble}, ldb::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklStrtrs(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklStrtrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          trans::onemklTranspose, diag::onemklDiag,\n                                          n::Int64, nrhs::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                          b::Ptr{Cfloat}, ldb::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZtrtrs(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZtrtrs(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          trans::onemklTranspose, diag::onemklDiag,\n                                          n::Int64, nrhs::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, b::Ptr{ComplexF32}, ldb::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCungbr(device_queue, vec, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCungbr(device_queue::syclQueue_t, vec::onemklGenerate,\n                                          m::Int64, n::Int64, k::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, tau::Ptr{ComplexF32},\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZungbr(device_queue, vec, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZungbr(device_queue::syclQueue_t, vec::onemklGenerate,\n                                          m::Int64, n::Int64, k::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, tau::Ptr{ComplexF32},\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCungqr(device_queue, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCungqr(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                          tau::ZePtr{ComplexF32},\n                                          scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZungqr(device_queue, m, n, k, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZungqr(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                          tau::ZePtr{ComplexF64},\n                                          scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCunmqr(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCunmqr(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                          tau::ZePtr{ComplexF32}, c::ZePtr{ComplexF32},\n                                          ldc::Int64, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZunmqr(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZunmqr(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                          tau::ZePtr{ComplexF64}, c::ZePtr{ComplexF64},\n                                          ldc::Int64, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgerqf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgerqf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::Ptr{Cfloat}, lda::Int64, tau::Ptr{Cfloat},\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgerqf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgerqf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::Ptr{Cdouble}, lda::Int64, tau::Ptr{Cdouble},\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgerqf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgerqf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgerqf(device_queue, m, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgerqf(device_queue::syclQueue_t, m::Int64, n::Int64,\n                                          a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSormrq(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklSormrq(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                          tau::Ptr{Cfloat}, c::Ptr{Cfloat}, ldc::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDormrq(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklDormrq(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::Ptr{Cdouble}, lda::Int64,\n                                          tau::Ptr{Cdouble}, c::Ptr{Cdouble}, ldc::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCunmrq(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklCunmrq(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, c::Ptr{ComplexF32},\n                                          ldc::Int64, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZunmrq(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc, scratchpad,\n                      scratchpad_size)\n    @ccall liboneapi_support.onemklZunmrq(device_queue::syclQueue_t, side::onemklSide,\n                                          trans::onemklTranspose, m::Int64, n::Int64,\n                                          k::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, c::Ptr{ComplexF32},\n                                          ldc::Int64, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSsytrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSsytrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cfloat}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDsytrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDsytrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{Cdouble}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCsytrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCsytrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF32}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZsytrf(device_queue, uplo, n, a, lda, ipiv, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZsytrf(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::ZePtr{ComplexF64}, lda::Int64,\n                                          ipiv::ZePtr{Int64}, scratchpad::ZePtr{ComplexF64},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSorgtr(device_queue, uplo, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSorgtr(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                          tau::Ptr{Cfloat}, scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDorgtr(device_queue, uplo, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDorgtr(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{Cdouble}, lda::Int64,\n                                          tau::Ptr{Cdouble}, scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCungtr(device_queue, uplo, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCungtr(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZungtr(device_queue, uplo, n, a, lda, tau, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZungtr(device_queue::syclQueue_t, uplo::onemklUplo,\n                                          n::Int64, a::Ptr{ComplexF32}, lda::Int64,\n                                          tau::Ptr{ComplexF32}, scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSormtr(device_queue, side, uplo, trans, m, n, a, lda, tau, c, ldc,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSormtr(device_queue::syclQueue_t, side::onemklSide,\n                                          uplo::onemklUplo, trans::onemklTranspose,\n                                          m::Int64, n::Int64, a::Ptr{Cfloat}, lda::Int64,\n                                          tau::Ptr{Cfloat}, c::Ptr{Cfloat}, ldc::Int64,\n                                          scratchpad::Ptr{Cfloat},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDormtr(device_queue, side, uplo, trans, m, n, a, lda, tau, c, ldc,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDormtr(device_queue::syclQueue_t, side::onemklSide,\n                                          uplo::onemklUplo, trans::onemklTranspose,\n                                          m::Int64, n::Int64, a::Ptr{Cdouble}, lda::Int64,\n                                          tau::Ptr{Cdouble}, c::Ptr{Cdouble}, ldc::Int64,\n                                          scratchpad::Ptr{Cdouble},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCunmtr(device_queue, side, uplo, trans, m, n, a, lda, tau, c, ldc,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCunmtr(device_queue::syclQueue_t, side::onemklSide,\n                                          uplo::onemklUplo, trans::onemklTranspose,\n                                          m::Int64, n::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, tau::Ptr{ComplexF32},\n                                          c::Ptr{ComplexF32}, ldc::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZunmtr(device_queue, side, uplo, trans, m, n, a, lda, tau, c, ldc,\n                      scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZunmtr(device_queue::syclQueue_t, side::onemklSide,\n                                          uplo::onemklUplo, trans::onemklTranspose,\n                                          m::Int64, n::Int64, a::Ptr{ComplexF32},\n                                          lda::Int64, tau::Ptr{ComplexF32},\n                                          c::Ptr{ComplexF32}, ldc::Int64,\n                                          scratchpad::Ptr{ComplexF32},\n                                          scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgels(device_queue, trans, m, n, nrhs, a, lda, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklSgels(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, nrhs::Int64, a::Ptr{Cfloat},\n                                         lda::Int64, b::Ptr{Cfloat}, ldb::Int64,\n                                         scratchpad::Ptr{Cfloat},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgels(device_queue, trans, m, n, nrhs, a, lda, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklDgels(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, nrhs::Int64, a::Ptr{Cdouble},\n                                         lda::Int64, b::Ptr{Cdouble}, ldb::Int64,\n                                         scratchpad::Ptr{Cdouble},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgels(device_queue, trans, m, n, nrhs, a, lda, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklCgels(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, nrhs::Int64,\n                                         a::Ptr{ComplexF32}, lda::Int64, b::Ptr{ComplexF32},\n                                         ldb::Int64, scratchpad::Ptr{ComplexF32},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgels(device_queue, trans, m, n, nrhs, a, lda, b, ldb, scratchpad,\n                     scratchpad_size)\n    @ccall liboneapi_support.onemklZgels(device_queue::syclQueue_t, trans::onemklTranspose,\n                                         m::Int64, n::Int64, nrhs::Int64,\n                                         a::Ptr{ComplexF32}, lda::Int64, b::Ptr{ComplexF32},\n                                         ldb::Int64, scratchpad::Ptr{ComplexF32},\n                                         scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotrf_batch(device_queue, uplo, n, a, lda, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrf_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrf_batch(device_queue, uplo, n, a, lda, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrf_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrf_batch(device_queue, uplo, n, a, lda, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrf_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrf_batch(device_queue, uplo, n, a, lda, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrf_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF64}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotrs_batch(device_queue, uplo, n, nrhs, a, lda, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{Cfloat}},\n                                                lda::Ptr{Int64}, b::ZePtr{Ptr{Cfloat}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrs_batch(device_queue, uplo, n, nrhs, a, lda, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{Cdouble}},\n                                                lda::Ptr{Int64}, b::ZePtr{Ptr{Cdouble}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrs_batch(device_queue, uplo, n, nrhs, a, lda, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64}, b::ZePtr{Ptr{ComplexF32}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrs_batch(device_queue, uplo, n, nrhs, a, lda, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{ComplexF64}},\n                                                lda::Ptr{Int64}, b::ZePtr{Ptr{ComplexF64}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgeinv_batch(device_queue, n, a, lda, group_count, group_sizes, scratchpad,\n                            scratchpad_size)\n    @ccall liboneapi_support.onemklSgeinv_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::Ptr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgeinv_batch(device_queue, n, a, lda, group_count, group_sizes, scratchpad,\n                            scratchpad_size)\n    @ccall liboneapi_support.onemklDgeinv_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::Ptr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgeinv_batch(device_queue, n, a, lda, group_count, group_sizes, scratchpad,\n                            scratchpad_size)\n    @ccall liboneapi_support.onemklCgeinv_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgeinv_batch(device_queue, n, a, lda, group_count, group_sizes, scratchpad,\n                            scratchpad_size)\n    @ccall liboneapi_support.onemklZgeinv_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetrs_batch(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetrs_batch(device_queue::syclQueue_t,\n                                                trans::Ptr{onemklTranspose}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{Cfloat}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                b::ZePtr{Ptr{Cfloat}}, ldb::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetrs_batch(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetrs_batch(device_queue::syclQueue_t,\n                                                trans::Ptr{onemklTranspose}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{Cdouble}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                b::ZePtr{Ptr{Cdouble}}, ldb::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetrs_batch(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetrs_batch(device_queue::syclQueue_t,\n                                                trans::Ptr{onemklTranspose}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                b::ZePtr{Ptr{ComplexF32}}, ldb::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetrs_batch(device_queue, trans, n, nrhs, a, lda, ipiv, b, ldb, group_count,\n                            group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetrs_batch(device_queue::syclQueue_t,\n                                                trans::Ptr{onemklTranspose}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::ZePtr{Ptr{ComplexF64}},\n                                                lda::Ptr{Int64}, ipiv::ZePtr{Ptr{Int64}},\n                                                b::ZePtr{Ptr{ComplexF64}}, ldb::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetri_batch(device_queue, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetri_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                                ipiv::ZePtr{Ptr{Int64}}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetri_batch(device_queue, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetri_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                                ipiv::ZePtr{Ptr{Int64}}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetri_batch(device_queue, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetri_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                ipiv::ZePtr{Ptr{Int64}}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetri_batch(device_queue, n, a, lda, ipiv, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetri_batch(device_queue::syclQueue_t, n::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF64}}, lda::Ptr{Int64},\n                                                ipiv::ZePtr{Ptr{Int64}}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgeqrf_batch(device_queue, m, n, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgeqrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{Cfloat}},\n                                                lda::Ptr{Int64}, tau::ZePtr{Ptr{Cfloat}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgeqrf_batch(device_queue, m, n, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgeqrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{Cdouble}},\n                                                lda::Ptr{Int64}, tau::ZePtr{Ptr{Cdouble}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgeqrf_batch(device_queue, m, n, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgeqrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{ComplexF32}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgeqrf_batch(device_queue, m, n, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgeqrf_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, a::ZePtr{Ptr{ComplexF64}},\n                                                lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{ComplexF64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSorgqr_batch(device_queue, m, n, k, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSorgqr_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{Cfloat}}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDorgqr_batch(device_queue, m, n, k, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDorgqr_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::ZePtr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{Cdouble}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCungqr_batch(device_queue, m, n, k, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCungqr_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{ComplexF32}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZungqr_batch(device_queue, m, n, k, a, lda, tau, group_count, group_sizes,\n                            scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZungqr_batch(device_queue::syclQueue_t, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::ZePtr{Ptr{ComplexF64}}, lda::Ptr{Int64},\n                                                tau::ZePtr{Ptr{ComplexF64}},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::ZePtr{ComplexF64},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSormqr_batch(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSormqr_batch(device_queue::syclQueue_t,\n                                                side::Ptr{onemklSide},\n                                                trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::Ptr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                                tau::Ptr{Ptr{Cfloat}}, c::Ptr{Ptr{Cfloat}},\n                                                ldc::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDormqr_batch(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDormqr_batch(device_queue::syclQueue_t,\n                                                side::Ptr{onemklSide},\n                                                trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::Ptr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                                tau::Ptr{Ptr{Cdouble}},\n                                                c::Ptr{Ptr{Cdouble}}, ldc::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCunmqr_batch(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCunmqr_batch(device_queue::syclQueue_t,\n                                                side::Ptr{onemklSide},\n                                                trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                tau::Ptr{Ptr{ComplexF32}},\n                                                c::Ptr{Ptr{ComplexF32}}, ldc::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZunmqr_batch(device_queue, side, trans, m, n, k, a, lda, tau, c, ldc,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZunmqr_batch(device_queue::syclQueue_t,\n                                                side::Ptr{onemklSide},\n                                                trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                                n::Ptr{Int64}, k::Ptr{Int64},\n                                                a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                                tau::Ptr{Ptr{ComplexF32}},\n                                                c::Ptr{Ptr{ComplexF32}}, ldc::Ptr{Int64},\n                                                group_count::Int64, group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklStrtrs_batch(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklStrtrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo},\n                                                trans::Ptr{onemklTranspose},\n                                                diag::Ptr{onemklDiag}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::Ptr{Ptr{Cfloat}},\n                                                lda::Ptr{Int64}, b::Ptr{Ptr{Cfloat}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cfloat},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDtrtrs_batch(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDtrtrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo},\n                                                trans::Ptr{onemklTranspose},\n                                                diag::Ptr{onemklDiag}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::Ptr{Ptr{Cdouble}},\n                                                lda::Ptr{Int64}, b::Ptr{Ptr{Cdouble}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{Cdouble},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCtrtrs_batch(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCtrtrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo},\n                                                trans::Ptr{onemklTranspose},\n                                                diag::Ptr{onemklDiag}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::Ptr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64}, b::Ptr{Ptr{ComplexF32}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZtrtrs_batch(device_queue, uplo, trans, diag, n, nrhs, a, lda, b, ldb,\n                            group_count, group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZtrtrs_batch(device_queue::syclQueue_t,\n                                                uplo::Ptr{onemklUplo},\n                                                trans::Ptr{onemklTranspose},\n                                                diag::Ptr{onemklDiag}, n::Ptr{Int64},\n                                                nrhs::Ptr{Int64}, a::Ptr{Ptr{ComplexF32}},\n                                                lda::Ptr{Int64}, b::Ptr{Ptr{ComplexF32}},\n                                                ldb::Ptr{Int64}, group_count::Int64,\n                                                group_sizes::Ptr{Int64},\n                                                scratchpad::Ptr{ComplexF32},\n                                                scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgels_batch(device_queue, trans, m, n, nrhs, a, lda, b, ldb, group_count,\n                           group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgels_batch(device_queue::syclQueue_t,\n                                               trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                               n::Ptr{Int64}, nrhs::Ptr{Int64},\n                                               a::Ptr{Ptr{Cfloat}}, lda::Ptr{Int64},\n                                               b::Ptr{Ptr{Cfloat}}, ldb::Ptr{Int64},\n                                               group_count::Int64, group_sizes::Ptr{Int64},\n                                               scratchpad::Ptr{Cfloat},\n                                               scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgels_batch(device_queue, trans, m, n, nrhs, a, lda, b, ldb, group_count,\n                           group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgels_batch(device_queue::syclQueue_t,\n                                               trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                               n::Ptr{Int64}, nrhs::Ptr{Int64},\n                                               a::Ptr{Ptr{Cdouble}}, lda::Ptr{Int64},\n                                               b::Ptr{Ptr{Cdouble}}, ldb::Ptr{Int64},\n                                               group_count::Int64, group_sizes::Ptr{Int64},\n                                               scratchpad::Ptr{Cdouble},\n                                               scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgels_batch(device_queue, trans, m, n, nrhs, a, lda, b, ldb, group_count,\n                           group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgels_batch(device_queue::syclQueue_t,\n                                               trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                               n::Ptr{Int64}, nrhs::Ptr{Int64},\n                                               a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                               b::Ptr{Ptr{ComplexF32}}, ldb::Ptr{Int64},\n                                               group_count::Int64, group_sizes::Ptr{Int64},\n                                               scratchpad::Ptr{ComplexF32},\n                                               scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgels_batch(device_queue, trans, m, n, nrhs, a, lda, b, ldb, group_count,\n                           group_sizes, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgels_batch(device_queue::syclQueue_t,\n                                               trans::Ptr{onemklTranspose}, m::Ptr{Int64},\n                                               n::Ptr{Int64}, nrhs::Ptr{Int64},\n                                               a::Ptr{Ptr{ComplexF32}}, lda::Ptr{Int64},\n                                               b::Ptr{Ptr{ComplexF32}}, ldb::Ptr{Int64},\n                                               group_count::Int64, group_sizes::Ptr{Int64},\n                                               scratchpad::Ptr{ComplexF32},\n                                               scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotrf_batch_strided(device_queue, uplo, n, a, lda, stride_a, batch_size,\n                                    scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrf_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        a::Ptr{Cfloat}, lda::Int64,\n                                                        stride_a::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrf_batch_strided(device_queue, uplo, n, a, lda, stride_a, batch_size,\n                                    scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrf_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        a::Ptr{Cdouble}, lda::Int64,\n                                                        stride_a::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrf_batch_strided(device_queue, uplo, n, a, lda, stride_a, batch_size,\n                                    scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrf_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrf_batch_strided(device_queue, uplo, n, a, lda, stride_a, batch_size,\n                                    scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrf_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSpotrs_batch_strided(device_queue, uplo, n, nrhs, a, lda, stride_a, b, ldb,\n                                    stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSpotrs_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        nrhs::Int64, a::Ptr{Cfloat},\n                                                        lda::Int64, stride_a::Int64,\n                                                        b::Ptr{Cfloat}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDpotrs_batch_strided(device_queue, uplo, n, nrhs, a, lda, stride_a, b, ldb,\n                                    stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDpotrs_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        nrhs::Int64, a::Ptr{Cdouble},\n                                                        lda::Int64, stride_a::Int64,\n                                                        b::Ptr{Cdouble}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCpotrs_batch_strided(device_queue, uplo, n, nrhs, a, lda, stride_a, b, ldb,\n                                    stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCpotrs_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        nrhs::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        b::Ptr{ComplexF32}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZpotrs_batch_strided(device_queue, uplo, n, nrhs, a, lda, stride_a, b, ldb,\n                                    stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZpotrs_batch_strided(device_queue::syclQueue_t,\n                                                        uplo::onemklUplo, n::Int64,\n                                                        nrhs::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        b::Ptr{ComplexF32}, ldb::Int64,\n                                                        stride_b::Int64, batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgeqrf_batch_strided(device_queue, m, n, a, lda, stride_a, tau, stride_tau,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgeqrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{Cfloat},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{Cfloat}, stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgeqrf_batch_strided(device_queue, m, n, a, lda, stride_a, tau, stride_tau,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgeqrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{Cdouble},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{Cdouble},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgeqrf_batch_strided(device_queue, m, n, a, lda, stride_a, tau, stride_tau,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgeqrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{ComplexF32},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgeqrf_batch_strided(device_queue, m, n, a, lda, stride_a, tau, stride_tau,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgeqrf_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, a::Ptr{ComplexF32},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{ComplexF32},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSorgqr_batch_strided(device_queue, m, n, k, a, lda, stride_a, tau,\n                                    stride_tau, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSorgqr_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, k::Int64, a::Ptr{Cfloat},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{Cfloat}, stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDorgqr_batch_strided(device_queue, m, n, k, a, lda, stride_a, tau,\n                                    stride_tau, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDorgqr_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, k::Int64, a::Ptr{Cdouble},\n                                                        lda::Int64, stride_a::Int64,\n                                                        tau::Ptr{Cdouble},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCungqr_batch_strided(device_queue, m, n, k, a, lda, stride_a, tau,\n                                    stride_tau, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCungqr_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, k::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64,\n                                                        tau::Ptr{ComplexF32},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZungqr_batch_strided(device_queue, m, n, k, a, lda, stride_a, tau,\n                                    stride_tau, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZungqr_batch_strided(device_queue::syclQueue_t, m::Int64,\n                                                        n::Int64, k::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64,\n                                                        tau::Ptr{ComplexF32},\n                                                        stride_tau::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgetri_batch_strided(device_queue, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgetri_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                        a::Ptr{Cfloat}, lda::Int64,\n                                                        stride_a::Int64, ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cfloat},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgetri_batch_strided(device_queue, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgetri_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                        a::Ptr{Cdouble}, lda::Int64,\n                                                        stride_a::Int64, ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{Cdouble},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgetri_batch_strided(device_queue, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgetri_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64, ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgetri_batch_strided(device_queue, n, a, lda, stride_a, ipiv, stride_ipiv,\n                                    batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgetri_batch_strided(device_queue::syclQueue_t, n::Int64,\n                                                        a::Ptr{ComplexF32}, lda::Int64,\n                                                        stride_a::Int64, ipiv::Ptr{Int64},\n                                                        stride_ipiv::Int64,\n                                                        batch_size::Int64,\n                                                        scratchpad::Ptr{ComplexF32},\n                                                        scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgels_batch_strided(device_queue, trans, m, n, nrhs, _a, lda, stride_a, _b,\n                                   ldb, stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklSgels_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, nrhs::Int64,\n                                                       _a::Ptr{Cfloat}, lda::Int64,\n                                                       stride_a::Int64, _b::Ptr{Cfloat},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64,\n                                                       scratchpad::Ptr{Cfloat},\n                                                       scratchpad_size::Int64)::Cint\nend\n\nfunction onemklDgels_batch_strided(device_queue, trans, m, n, nrhs, _a, lda, stride_a, _b,\n                                   ldb, stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklDgels_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, nrhs::Int64,\n                                                       _a::Ptr{Cdouble}, lda::Int64,\n                                                       stride_a::Int64, _b::Ptr{Cdouble},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64,\n                                                       scratchpad::Ptr{Cdouble},\n                                                       scratchpad_size::Int64)::Cint\nend\n\nfunction onemklCgels_batch_strided(device_queue, trans, m, n, nrhs, _a, lda, stride_a, _b,\n                                   ldb, stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklCgels_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, nrhs::Int64,\n                                                       _a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64, _b::Ptr{ComplexF32},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64,\n                                                       scratchpad::Ptr{ComplexF32},\n                                                       scratchpad_size::Int64)::Cint\nend\n\nfunction onemklZgels_batch_strided(device_queue, trans, m, n, nrhs, _a, lda, stride_a, _b,\n                                   ldb, stride_b, batch_size, scratchpad, scratchpad_size)\n    @ccall liboneapi_support.onemklZgels_batch_strided(device_queue::syclQueue_t,\n                                                       trans::onemklTranspose, m::Int64,\n                                                       n::Int64, nrhs::Int64,\n                                                       _a::Ptr{ComplexF32}, lda::Int64,\n                                                       stride_a::Int64, _b::Ptr{ComplexF32},\n                                                       ldb::Int64, stride_b::Int64,\n                                                       batch_size::Int64,\n                                                       scratchpad::Ptr{ComplexF32},\n                                                       scratchpad_size::Int64)::Cint\nend\n\nfunction onemklSgebrd_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklSgebrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDgebrd_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklDgebrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCgebrd_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklCgebrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZgebrd_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklZgebrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSgels_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklSgels_scratchpad_size(device_queue::syclQueue_t,\n                                                         trans::onemklTranspose, m::Int64,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklDgels_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklDgels_scratchpad_size(device_queue::syclQueue_t,\n                                                         trans::onemklTranspose, m::Int64,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklCgels_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklCgels_scratchpad_size(device_queue::syclQueue_t,\n                                                         trans::onemklTranspose, m::Int64,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklZgels_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklZgels_scratchpad_size(device_queue::syclQueue_t,\n                                                         trans::onemklTranspose, m::Int64,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklSgeqrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklSgeqrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDgeqrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklDgeqrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCgeqrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklCgeqrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZgeqrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklZgeqrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSgerqf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklSgerqf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDgerqf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklDgerqf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCgerqf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklCgerqf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZgerqf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklZgerqf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSgesv_scratchpad_size(device_queue, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklSgesv_scratchpad_size(device_queue::syclQueue_t,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklDgesv_scratchpad_size(device_queue, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklDgesv_scratchpad_size(device_queue::syclQueue_t,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklCgesv_scratchpad_size(device_queue, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklCgesv_scratchpad_size(device_queue::syclQueue_t,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklZgesv_scratchpad_size(device_queue, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklZgesv_scratchpad_size(device_queue::syclQueue_t,\n                                                         n::Int64, nrhs::Int64, lda::Int64,\n                                                         ldb::Int64)::Int64\nend\n\nfunction onemklSgesvd_scratchpad_size(device_queue, jobu, jobvt, m, n, lda, ldu, ldvt)\n    @ccall liboneapi_support.onemklSgesvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobu::onemklJobsvd,\n                                                          jobvt::onemklJobsvd, m::Int64,\n                                                          n::Int64, lda::Int64, ldu::Int64,\n                                                          ldvt::Int64)::Int64\nend\n\nfunction onemklDgesvd_scratchpad_size(device_queue, jobu, jobvt, m, n, lda, ldu, ldvt)\n    @ccall liboneapi_support.onemklDgesvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobu::onemklJobsvd,\n                                                          jobvt::onemklJobsvd, m::Int64,\n                                                          n::Int64, lda::Int64, ldu::Int64,\n                                                          ldvt::Int64)::Int64\nend\n\nfunction onemklCgesvd_scratchpad_size(device_queue, jobu, jobvt, m, n, lda, ldu, ldvt)\n    @ccall liboneapi_support.onemklCgesvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobu::onemklJobsvd,\n                                                          jobvt::onemklJobsvd, m::Int64,\n                                                          n::Int64, lda::Int64, ldu::Int64,\n                                                          ldvt::Int64)::Int64\nend\n\nfunction onemklZgesvd_scratchpad_size(device_queue, jobu, jobvt, m, n, lda, ldu, ldvt)\n    @ccall liboneapi_support.onemklZgesvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobu::onemklJobsvd,\n                                                          jobvt::onemklJobsvd, m::Int64,\n                                                          n::Int64, lda::Int64, ldu::Int64,\n                                                          ldvt::Int64)::Int64\nend\n\nfunction onemklSgetrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklSgetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDgetrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklDgetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCgetrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklCgetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZgetrf_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklZgetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSgetrfnp_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklSgetrfnp_scratchpad_size(device_queue::syclQueue_t,\n                                                            m::Int64, n::Int64,\n                                                            lda::Int64)::Int64\nend\n\nfunction onemklDgetrfnp_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklDgetrfnp_scratchpad_size(device_queue::syclQueue_t,\n                                                            m::Int64, n::Int64,\n                                                            lda::Int64)::Int64\nend\n\nfunction onemklCgetrfnp_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklCgetrfnp_scratchpad_size(device_queue::syclQueue_t,\n                                                            m::Int64, n::Int64,\n                                                            lda::Int64)::Int64\nend\n\nfunction onemklZgetrfnp_scratchpad_size(device_queue, m, n, lda)\n    @ccall liboneapi_support.onemklZgetrfnp_scratchpad_size(device_queue::syclQueue_t,\n                                                            m::Int64, n::Int64,\n                                                            lda::Int64)::Int64\nend\n\nfunction onemklSgetri_scratchpad_size(device_queue, n, lda)\n    @ccall liboneapi_support.onemklSgetri_scratchpad_size(device_queue::syclQueue_t,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklDgetri_scratchpad_size(device_queue, n, lda)\n    @ccall liboneapi_support.onemklDgetri_scratchpad_size(device_queue::syclQueue_t,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklCgetri_scratchpad_size(device_queue, n, lda)\n    @ccall liboneapi_support.onemklCgetri_scratchpad_size(device_queue::syclQueue_t,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklZgetri_scratchpad_size(device_queue, n, lda)\n    @ccall liboneapi_support.onemklZgetri_scratchpad_size(device_queue::syclQueue_t,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklSgetrs_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklSgetrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklDgetrs_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklDgetrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklCgetrs_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklCgetrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklZgetrs_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklZgetrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          trans::onemklTranspose, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklCheev_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklCheev_scratchpad_size(device_queue::syclQueue_t,\n                                                         jobz::onemklCompz,\n                                                         uplo::onemklUplo, n::Int64,\n                                                         lda::Int64)::Int64\nend\n\nfunction onemklZheev_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklZheev_scratchpad_size(device_queue::syclQueue_t,\n                                                         jobz::onemklCompz,\n                                                         uplo::onemklUplo, n::Int64,\n                                                         lda::Int64)::Int64\nend\n\nfunction onemklCheevd_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklCheevd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklJob, uplo::onemklUplo,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklZheevd_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklZheevd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklJob, uplo::onemklUplo,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklCheevx_scratchpad_size(device_queue, jobz, range, uplo, n, lda, vl, vu, il,\n                                      iu, abstol, ldz)\n    @ccall liboneapi_support.onemklCheevx_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, vl::Ptr{Cfloat},\n                                                          vu::Ptr{Cfloat}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cfloat},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklZheevx_scratchpad_size(device_queue, jobz, range, uplo, n, lda, vl, vu, il,\n                                      iu, abstol, ldz)\n    @ccall liboneapi_support.onemklZheevx_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, vl::Ptr{Cdouble},\n                                                          vu::Ptr{Cdouble}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cdouble},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklChegvd_scratchpad_size(device_queue, itype, jobz, uplo, n, lda, ldb)\n    @ccall liboneapi_support.onemklChegvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklJob,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64)::Int64\nend\n\nfunction onemklZhegvd_scratchpad_size(device_queue, itype, jobz, uplo, n, lda, ldb)\n    @ccall liboneapi_support.onemklZhegvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklJob,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64)::Int64\nend\n\nfunction onemklChegvx_scratchpad_size(device_queue, itype, jobz, range, uplo, n, lda, ldb,\n                                      vl, vu, il, iu, abstol, ldz)\n    @ccall liboneapi_support.onemklChegvx_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64,\n                                                          vl::Ptr{Cfloat}, vu::Ptr{Cfloat},\n                                                          il::Int64, iu::Int64,\n                                                          abstol::Ptr{Cfloat},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklZhegvx_scratchpad_size(device_queue, itype, jobz, range, uplo, n, lda, ldb,\n                                      vl, vu, il, iu, abstol, ldz)\n    @ccall liboneapi_support.onemklZhegvx_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64,\n                                                          vl::Ptr{Cdouble},\n                                                          vu::Ptr{Cdouble}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cdouble},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklChetrd_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklChetrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZhetrd_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZhetrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklChetrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklChetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZhetrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZhetrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSorgbr_scratchpad_size(device_queue, vect, m, n, k, lda)\n    @ccall liboneapi_support.onemklSorgbr_scratchpad_size(device_queue::syclQueue_t,\n                                                          vect::onemklGenerate, m::Int64,\n                                                          n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDorgbr_scratchpad_size(device_queue, vect, m, n, k, lda)\n    @ccall liboneapi_support.onemklDorgbr_scratchpad_size(device_queue::syclQueue_t,\n                                                          vect::onemklGenerate, m::Int64,\n                                                          n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSorgqr_scratchpad_size(device_queue, m, n, k, lda)\n    @ccall liboneapi_support.onemklSorgqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDorgqr_scratchpad_size(device_queue, m, n, k, lda)\n    @ccall liboneapi_support.onemklDorgqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSorgtr_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklSorgtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDorgtr_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklDorgtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSormqr_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklSormqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklDormqr_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklDormqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklSormrq_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklSormrq_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklDormrq_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklDormrq_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklSormtr_scratchpad_size(device_queue, side, uplo, trans, m, n, lda, ldc)\n    @ccall liboneapi_support.onemklSormtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklDormtr_scratchpad_size(device_queue, side, uplo, trans, m, n, lda, ldc)\n    @ccall liboneapi_support.onemklDormtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklSpotrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklSpotrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDpotrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklDpotrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCpotrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklCpotrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZpotrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZpotrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSpotri_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklSpotri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDpotri_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklDpotri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCpotri_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklCpotri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZpotri_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZpotri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSpotrs_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklSpotrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklDpotrs_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklDpotrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklCpotrs_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklCpotrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklZpotrs_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklZpotrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklSsteqr_scratchpad_size(device_queue, compz, n, ldz)\n    @ccall liboneapi_support.onemklSsteqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          compz::onemklCompz, n::Int64,\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklDsteqr_scratchpad_size(device_queue, compz, n, ldz)\n    @ccall liboneapi_support.onemklDsteqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          compz::onemklCompz, n::Int64,\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklCsteqr_scratchpad_size(device_queue, compz, n, ldz)\n    @ccall liboneapi_support.onemklCsteqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          compz::onemklCompz, n::Int64,\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklZsteqr_scratchpad_size(device_queue, compz, n, ldz)\n    @ccall liboneapi_support.onemklZsteqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          compz::onemklCompz, n::Int64,\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklSsyev_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklSsyev_scratchpad_size(device_queue::syclQueue_t,\n                                                         jobz::onemklCompz,\n                                                         uplo::onemklUplo, n::Int64,\n                                                         lda::Int64)::Int64\nend\n\nfunction onemklDsyev_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklDsyev_scratchpad_size(device_queue::syclQueue_t,\n                                                         jobz::onemklCompz,\n                                                         uplo::onemklUplo, n::Int64,\n                                                         lda::Int64)::Int64\nend\n\nfunction onemklSsyevd_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklSsyevd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklJob, uplo::onemklUplo,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklDsyevd_scratchpad_size(device_queue, jobz, uplo, n, lda)\n    @ccall liboneapi_support.onemklDsyevd_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklJob, uplo::onemklUplo,\n                                                          n::Int64, lda::Int64)::Int64\nend\n\nfunction onemklSsyevx_scratchpad_size(device_queue, jobz, range, uplo, n, lda, vl, vu, il,\n                                      iu, abstol, ldz)\n    @ccall liboneapi_support.onemklSsyevx_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, vl::Ptr{Cfloat},\n                                                          vu::Ptr{Cfloat}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cfloat},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklDsyevx_scratchpad_size(device_queue, jobz, range, uplo, n, lda, vl, vu, il,\n                                      iu, abstol, ldz)\n    @ccall liboneapi_support.onemklDsyevx_scratchpad_size(device_queue::syclQueue_t,\n                                                          jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, vl::Ptr{Cdouble},\n                                                          vu::Ptr{Cdouble}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cdouble},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklSsygvd_scratchpad_size(device_queue, itype, jobz, uplo, n, lda, ldb)\n    @ccall liboneapi_support.onemklSsygvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklJob,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64)::Int64\nend\n\nfunction onemklDsygvd_scratchpad_size(device_queue, itype, jobz, uplo, n, lda, ldb)\n    @ccall liboneapi_support.onemklDsygvd_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklJob,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64)::Int64\nend\n\nfunction onemklSsygvx_scratchpad_size(device_queue, itype, jobz, range, uplo, n, lda, ldb,\n                                      vl, vu, il, iu, abstol, ldz)\n    @ccall liboneapi_support.onemklSsygvx_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64,\n                                                          vl::Ptr{Cfloat}, vu::Ptr{Cfloat},\n                                                          il::Int64, iu::Int64,\n                                                          abstol::Ptr{Cfloat},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklDsygvx_scratchpad_size(device_queue, itype, jobz, range, uplo, n, lda, ldb,\n                                      vl, vu, il, iu, abstol, ldz)\n    @ccall liboneapi_support.onemklDsygvx_scratchpad_size(device_queue::syclQueue_t,\n                                                          itype::Int64, jobz::onemklCompz,\n                                                          range::onemklRangev,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64, ldb::Int64,\n                                                          vl::Ptr{Cdouble},\n                                                          vu::Ptr{Cdouble}, il::Int64,\n                                                          iu::Int64, abstol::Ptr{Cdouble},\n                                                          ldz::Int64)::Int64\nend\n\nfunction onemklSsytrd_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklSsytrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDsytrd_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklDsytrd_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklSsytrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklSsytrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDsytrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklDsytrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCsytrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklCsytrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZsytrf_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZsytrf_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklStrtri_scratchpad_size(device_queue, uplo, diag, n, lda)\n    @ccall liboneapi_support.onemklStrtri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          diag::onemklDiag, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklDtrtri_scratchpad_size(device_queue, uplo, diag, n, lda)\n    @ccall liboneapi_support.onemklDtrtri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          diag::onemklDiag, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCtrtri_scratchpad_size(device_queue, uplo, diag, n, lda)\n    @ccall liboneapi_support.onemklCtrtri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          diag::onemklDiag, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZtrtri_scratchpad_size(device_queue, uplo, diag, n, lda)\n    @ccall liboneapi_support.onemklZtrtri_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          diag::onemklDiag, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklStrtrs_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklStrtrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose,\n                                                          diag::onemklDiag, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklDtrtrs_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklDtrtrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose,\n                                                          diag::onemklDiag, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklCtrtrs_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklCtrtrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose,\n                                                          diag::onemklDiag, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklZtrtrs_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda, ldb)\n    @ccall liboneapi_support.onemklZtrtrs_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose,\n                                                          diag::onemklDiag, n::Int64,\n                                                          nrhs::Int64, lda::Int64,\n                                                          ldb::Int64)::Int64\nend\n\nfunction onemklCungbr_scratchpad_size(device_queue, vect, m, n, k, lda)\n    @ccall liboneapi_support.onemklCungbr_scratchpad_size(device_queue::syclQueue_t,\n                                                          vect::onemklGenerate, m::Int64,\n                                                          n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZungbr_scratchpad_size(device_queue, vect, m, n, k, lda)\n    @ccall liboneapi_support.onemklZungbr_scratchpad_size(device_queue::syclQueue_t,\n                                                          vect::onemklGenerate, m::Int64,\n                                                          n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCungqr_scratchpad_size(device_queue, m, n, k, lda)\n    @ccall liboneapi_support.onemklCungqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZungqr_scratchpad_size(device_queue, m, n, k, lda)\n    @ccall liboneapi_support.onemklZungqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          m::Int64, n::Int64, k::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCungtr_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklCungtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklZungtr_scratchpad_size(device_queue, uplo, n, lda)\n    @ccall liboneapi_support.onemklZungtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          uplo::onemklUplo, n::Int64,\n                                                          lda::Int64)::Int64\nend\n\nfunction onemklCunmqr_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklCunmqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklZunmqr_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklZunmqr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklCunmrq_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklCunmrq_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklZunmrq_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc)\n    @ccall liboneapi_support.onemklZunmrq_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, k::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklCunmtr_scratchpad_size(device_queue, side, uplo, trans, m, n, lda, ldc)\n    @ccall liboneapi_support.onemklCunmtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklZunmtr_scratchpad_size(device_queue, side, uplo, trans, m, n, lda, ldc)\n    @ccall liboneapi_support.onemklZunmtr_scratchpad_size(device_queue::syclQueue_t,\n                                                          side::onemklSide,\n                                                          uplo::onemklUplo,\n                                                          trans::onemklTranspose, m::Int64,\n                                                          n::Int64, lda::Int64,\n                                                          ldc::Int64)::Int64\nend\n\nfunction onemklSgeinv_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklSgeinv_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgeinv_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklDgeinv_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgeinv_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklCgeinv_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgeinv_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklZgeinv_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgels_batch_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb,\n                                           group_count, group_sizes)\n    @ccall liboneapi_support.onemklSgels_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                               trans::Ptr{onemklTranspose},\n                                                               m::Ptr{Int64}, n::Ptr{Int64},\n                                                               nrhs::Ptr{Int64},\n                                                               lda::Ptr{Int64},\n                                                               ldb::Ptr{Int64},\n                                                               group_count::Int64,\n                                                               group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgels_batch_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb,\n                                           group_count, group_sizes)\n    @ccall liboneapi_support.onemklDgels_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                               trans::Ptr{onemklTranspose},\n                                                               m::Ptr{Int64}, n::Ptr{Int64},\n                                                               nrhs::Ptr{Int64},\n                                                               lda::Ptr{Int64},\n                                                               ldb::Ptr{Int64},\n                                                               group_count::Int64,\n                                                               group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgels_batch_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb,\n                                           group_count, group_sizes)\n    @ccall liboneapi_support.onemklCgels_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                               trans::Ptr{onemklTranspose},\n                                                               m::Ptr{Int64}, n::Ptr{Int64},\n                                                               nrhs::Ptr{Int64},\n                                                               lda::Ptr{Int64},\n                                                               ldb::Ptr{Int64},\n                                                               group_count::Int64,\n                                                               group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgels_batch_scratchpad_size(device_queue, trans, m, n, nrhs, lda, ldb,\n                                           group_count, group_sizes)\n    @ccall liboneapi_support.onemklZgels_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                               trans::Ptr{onemklTranspose},\n                                                               m::Ptr{Int64}, n::Ptr{Int64},\n                                                               nrhs::Ptr{Int64},\n                                                               lda::Ptr{Int64},\n                                                               ldb::Ptr{Int64},\n                                                               group_count::Int64,\n                                                               group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgels_batch_strided_scratchpad_size(device_queue, trans, m, n, nrhs, lda,\n                                                   stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklSgels_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                       trans::onemklTranspose,\n                                                                       m::Int64, n::Int64,\n                                                                       nrhs::Int64,\n                                                                       lda::Int64,\n                                                                       stride_a::Int64,\n                                                                       ldb::Int64,\n                                                                       stride_b::Int64,\n                                                                       batch_size::Int64)::Int64\nend\n\nfunction onemklDgels_batch_strided_scratchpad_size(device_queue, trans, m, n, nrhs, lda,\n                                                   stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklDgels_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                       trans::onemklTranspose,\n                                                                       m::Int64, n::Int64,\n                                                                       nrhs::Int64,\n                                                                       lda::Int64,\n                                                                       stride_a::Int64,\n                                                                       ldb::Int64,\n                                                                       stride_b::Int64,\n                                                                       batch_size::Int64)::Int64\nend\n\nfunction onemklCgels_batch_strided_scratchpad_size(device_queue, trans, m, n, nrhs, lda,\n                                                   stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklCgels_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                       trans::onemklTranspose,\n                                                                       m::Int64, n::Int64,\n                                                                       nrhs::Int64,\n                                                                       lda::Int64,\n                                                                       stride_a::Int64,\n                                                                       ldb::Int64,\n                                                                       stride_b::Int64,\n                                                                       batch_size::Int64)::Int64\nend\n\nfunction onemklZgels_batch_strided_scratchpad_size(device_queue, trans, m, n, nrhs, lda,\n                                                   stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklZgels_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                       trans::onemklTranspose,\n                                                                       m::Int64, n::Int64,\n                                                                       nrhs::Int64,\n                                                                       lda::Int64,\n                                                                       stride_a::Int64,\n                                                                       ldb::Int64,\n                                                                       stride_b::Int64,\n                                                                       batch_size::Int64)::Int64\nend\n\nfunction onemklSgeqrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklSgeqrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgeqrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklDgeqrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgeqrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklCgeqrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgeqrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklZgeqrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgeqrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklSgeqrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDgeqrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklDgeqrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCgeqrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklCgeqrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZgeqrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklZgeqrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSgesvda_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                     stride_s, ldu, stride_u, ldvt,\n                                                     stride_vt, batch_size)\n    @ccall liboneapi_support.onemklSgesvda_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                         m::Int64, n::Int64,\n                                                                         lda::Int64,\n                                                                         stride_a::Int64,\n                                                                         stride_s::Int64,\n                                                                         ldu::Int64,\n                                                                         stride_u::Int64,\n                                                                         ldvt::Int64,\n                                                                         stride_vt::Int64,\n                                                                         batch_size::Int64)::Int64\nend\n\nfunction onemklDgesvda_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                     stride_s, ldu, stride_u, ldvt,\n                                                     stride_vt, batch_size)\n    @ccall liboneapi_support.onemklDgesvda_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                         m::Int64, n::Int64,\n                                                                         lda::Int64,\n                                                                         stride_a::Int64,\n                                                                         stride_s::Int64,\n                                                                         ldu::Int64,\n                                                                         stride_u::Int64,\n                                                                         ldvt::Int64,\n                                                                         stride_vt::Int64,\n                                                                         batch_size::Int64)::Int64\nend\n\nfunction onemklCgesvda_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                     stride_s, ldu, stride_u, ldvt,\n                                                     stride_vt, batch_size)\n    @ccall liboneapi_support.onemklCgesvda_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                         m::Int64, n::Int64,\n                                                                         lda::Int64,\n                                                                         stride_a::Int64,\n                                                                         stride_s::Int64,\n                                                                         ldu::Int64,\n                                                                         stride_u::Int64,\n                                                                         ldvt::Int64,\n                                                                         stride_vt::Int64,\n                                                                         batch_size::Int64)::Int64\nend\n\nfunction onemklZgesvda_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                     stride_s, ldu, stride_u, ldvt,\n                                                     stride_vt, batch_size)\n    @ccall liboneapi_support.onemklZgesvda_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                         m::Int64, n::Int64,\n                                                                         lda::Int64,\n                                                                         stride_a::Int64,\n                                                                         stride_s::Int64,\n                                                                         ldu::Int64,\n                                                                         stride_u::Int64,\n                                                                         ldvt::Int64,\n                                                                         stride_vt::Int64,\n                                                                         batch_size::Int64)::Int64\nend\n\nfunction onemklSgetrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklSgetrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDgetrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklDgetrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCgetrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklCgetrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZgetrf_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklZgetrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSgetrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklSgetrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgetrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklDgetrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgetrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklCgetrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgetrf_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklZgetrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgetrfnp_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                      batch_size)\n    @ccall liboneapi_support.onemklSgetrfnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          m::Int64,\n                                                                          n::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklDgetrfnp_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                      batch_size)\n    @ccall liboneapi_support.onemklDgetrfnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          m::Int64,\n                                                                          n::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklCgetrfnp_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                      batch_size)\n    @ccall liboneapi_support.onemklCgetrfnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          m::Int64,\n                                                                          n::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklZgetrfnp_batch_strided_scratchpad_size(device_queue, m, n, lda, stride_a,\n                                                      batch_size)\n    @ccall liboneapi_support.onemklZgetrfnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          m::Int64,\n                                                                          n::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklSgetrfnp_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                              group_sizes)\n    @ccall liboneapi_support.onemklSgetrfnp_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                  m::Ptr{Int64},\n                                                                  n::Ptr{Int64},\n                                                                  lda::Ptr{Int64},\n                                                                  group_count::Int64,\n                                                                  group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgetrfnp_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                              group_sizes)\n    @ccall liboneapi_support.onemklDgetrfnp_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                  m::Ptr{Int64},\n                                                                  n::Ptr{Int64},\n                                                                  lda::Ptr{Int64},\n                                                                  group_count::Int64,\n                                                                  group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgetrfnp_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                              group_sizes)\n    @ccall liboneapi_support.onemklCgetrfnp_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                  m::Ptr{Int64},\n                                                                  n::Ptr{Int64},\n                                                                  lda::Ptr{Int64},\n                                                                  group_count::Int64,\n                                                                  group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgetrfnp_batch_scratchpad_size(device_queue, m, n, lda, group_count,\n                                              group_sizes)\n    @ccall liboneapi_support.onemklZgetrfnp_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                  m::Ptr{Int64},\n                                                                  n::Ptr{Int64},\n                                                                  lda::Ptr{Int64},\n                                                                  group_count::Int64,\n                                                                  group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgetri_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklSgetri_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgetri_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklDgetri_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgetri_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklCgetri_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgetri_batch_scratchpad_size(device_queue, n, lda, group_count, group_sizes)\n    @ccall liboneapi_support.onemklZgetri_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgetri_batch_strided_scratchpad_size(device_queue, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklSgetri_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDgetri_batch_strided_scratchpad_size(device_queue, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklDgetri_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCgetri_batch_strided_scratchpad_size(device_queue, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklCgetri_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZgetri_batch_strided_scratchpad_size(device_queue, n, lda, stride_a,\n                                                    stride_ipiv, batch_size)\n    @ccall liboneapi_support.onemklZgetri_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSgetrs_batch_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklSgetrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                trans::Ptr{onemklTranspose},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDgetrs_batch_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklDgetrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                trans::Ptr{onemklTranspose},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCgetrs_batch_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklCgetrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                trans::Ptr{onemklTranspose},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZgetrs_batch_scratchpad_size(device_queue, trans, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklZgetrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                trans::Ptr{onemklTranspose},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSgetrs_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                    stride_a, stride_ipiv, ldb, stride_b,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklSgetrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        trans::onemklTranspose,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDgetrs_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                    stride_a, stride_ipiv, ldb, stride_b,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklDgetrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        trans::onemklTranspose,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCgetrs_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                    stride_a, stride_ipiv, ldb, stride_b,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklCgetrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        trans::onemklTranspose,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZgetrs_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                    stride_a, stride_ipiv, ldb, stride_b,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklZgetrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        trans::onemklTranspose,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_ipiv::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSgetrsnp_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                      stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklSgetrsnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          trans::onemklTranspose,\n                                                                          n::Int64,\n                                                                          nrhs::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          ldb::Int64,\n                                                                          stride_b::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklDgetrsnp_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                      stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklDgetrsnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          trans::onemklTranspose,\n                                                                          n::Int64,\n                                                                          nrhs::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          ldb::Int64,\n                                                                          stride_b::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklCgetrsnp_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                      stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklCgetrsnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          trans::onemklTranspose,\n                                                                          n::Int64,\n                                                                          nrhs::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          ldb::Int64,\n                                                                          stride_b::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklZgetrsnp_batch_strided_scratchpad_size(device_queue, trans, n, nrhs, lda,\n                                                      stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklZgetrsnp_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                          trans::onemklTranspose,\n                                                                          n::Int64,\n                                                                          nrhs::Int64,\n                                                                          lda::Int64,\n                                                                          stride_a::Int64,\n                                                                          ldb::Int64,\n                                                                          stride_b::Int64,\n                                                                          batch_size::Int64)::Int64\nend\n\nfunction onemklSorgqr_batch_scratchpad_size(device_queue, m, n, k, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklSorgqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDorgqr_batch_scratchpad_size(device_queue, m, n, k, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklDorgqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSorgqr_batch_strided_scratchpad_size(device_queue, m, n, k, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklSorgqr_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        k::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDorgqr_batch_strided_scratchpad_size(device_queue, m, n, k, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklDorgqr_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        k::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSormqr_batch_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklSormqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                side::Ptr{onemklSide},\n                                                                trans::Ptr{onemklTranspose},\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldc::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDormqr_batch_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklDormqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                side::Ptr{onemklSide},\n                                                                trans::Ptr{onemklTranspose},\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldc::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSpotrf_batch_scratchpad_size(device_queue, uplo, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklSpotrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDpotrf_batch_scratchpad_size(device_queue, uplo, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklDpotrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCpotrf_batch_scratchpad_size(device_queue, uplo, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklCpotrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZpotrf_batch_scratchpad_size(device_queue, uplo, n, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklZpotrf_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSpotrf_batch_strided_scratchpad_size(device_queue, uplo, n, lda, stride_a,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklSpotrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDpotrf_batch_strided_scratchpad_size(device_queue, uplo, n, lda, stride_a,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklDpotrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCpotrf_batch_strided_scratchpad_size(device_queue, uplo, n, lda, stride_a,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklCpotrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZpotrf_batch_strided_scratchpad_size(device_queue, uplo, n, lda, stride_a,\n                                                    batch_size)\n    @ccall liboneapi_support.onemklZpotrf_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklSpotrs_batch_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklSpotrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDpotrs_batch_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklDpotrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCpotrs_batch_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklCpotrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZpotrs_batch_scratchpad_size(device_queue, uplo, n, nrhs, lda, ldb,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklZpotrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklSpotrs_batch_strided_scratchpad_size(device_queue, uplo, n, nrhs, lda,\n                                                    stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklSpotrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklDpotrs_batch_strided_scratchpad_size(device_queue, uplo, n, nrhs, lda,\n                                                    stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklDpotrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCpotrs_batch_strided_scratchpad_size(device_queue, uplo, n, nrhs, lda,\n                                                    stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklCpotrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZpotrs_batch_strided_scratchpad_size(device_queue, uplo, n, nrhs, lda,\n                                                    stride_a, ldb, stride_b, batch_size)\n    @ccall liboneapi_support.onemklZpotrs_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        uplo::onemklUplo,\n                                                                        n::Int64,\n                                                                        nrhs::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        ldb::Int64,\n                                                                        stride_b::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklStrtrs_batch_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda,\n                                            ldb, group_count, group_sizes)\n    @ccall liboneapi_support.onemklStrtrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                trans::Ptr{onemklTranspose},\n                                                                diag::Ptr{onemklDiag},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklDtrtrs_batch_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda,\n                                            ldb, group_count, group_sizes)\n    @ccall liboneapi_support.onemklDtrtrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                trans::Ptr{onemklTranspose},\n                                                                diag::Ptr{onemklDiag},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCtrtrs_batch_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda,\n                                            ldb, group_count, group_sizes)\n    @ccall liboneapi_support.onemklCtrtrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                trans::Ptr{onemklTranspose},\n                                                                diag::Ptr{onemklDiag},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZtrtrs_batch_scratchpad_size(device_queue, uplo, trans, diag, n, nrhs, lda,\n                                            ldb, group_count, group_sizes)\n    @ccall liboneapi_support.onemklZtrtrs_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                uplo::Ptr{onemklUplo},\n                                                                trans::Ptr{onemklTranspose},\n                                                                diag::Ptr{onemklDiag},\n                                                                n::Ptr{Int64},\n                                                                nrhs::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldb::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCungqr_batch_scratchpad_size(device_queue, m, n, k, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklCungqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZungqr_batch_scratchpad_size(device_queue, m, n, k, lda, group_count,\n                                            group_sizes)\n    @ccall liboneapi_support.onemklZungqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklCungqr_batch_strided_scratchpad_size(device_queue, m, n, k, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklCungqr_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        k::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklZungqr_batch_strided_scratchpad_size(device_queue, m, n, k, lda, stride_a,\n                                                    stride_tau, batch_size)\n    @ccall liboneapi_support.onemklZungqr_batch_strided_scratchpad_size(device_queue::syclQueue_t,\n                                                                        m::Int64, n::Int64,\n                                                                        k::Int64,\n                                                                        lda::Int64,\n                                                                        stride_a::Int64,\n                                                                        stride_tau::Int64,\n                                                                        batch_size::Int64)::Int64\nend\n\nfunction onemklCunmqr_batch_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklCunmqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                side::Ptr{onemklSide},\n                                                                trans::Ptr{onemklTranspose},\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldc::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklZunmqr_batch_scratchpad_size(device_queue, side, trans, m, n, k, lda, ldc,\n                                            group_count, group_sizes)\n    @ccall liboneapi_support.onemklZunmqr_batch_scratchpad_size(device_queue::syclQueue_t,\n                                                                side::Ptr{onemklSide},\n                                                                trans::Ptr{onemklTranspose},\n                                                                m::Ptr{Int64},\n                                                                n::Ptr{Int64},\n                                                                k::Ptr{Int64},\n                                                                lda::Ptr{Int64},\n                                                                ldc::Ptr{Int64},\n                                                                group_count::Int64,\n                                                                group_sizes::Ptr{Int64})::Int64\nend\n\nfunction onemklXsparse_init_matrix_handle(p_spMat)\n    @ccall liboneapi_support.onemklXsparse_init_matrix_handle(p_spMat::Ptr{matrix_handle_t})::Cint\nend\n\nfunction onemklXsparse_release_matrix_handle(device_queue, p_spMat)\n    @ccall liboneapi_support.onemklXsparse_release_matrix_handle(device_queue::syclQueue_t,\n                                                                 p_spMat::Ptr{matrix_handle_t})::Cint\nend\n\nfunction onemklSsparse_set_csr_data(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklSsparse_set_csr_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        index::onemklIndex,\n                                                        row_ptr::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklSsparse_set_csr_data_64(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                       col_ind, values)\n    @ccall liboneapi_support.onemklSsparse_set_csr_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           index::onemklIndex,\n                                                           row_ptr::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_set_csr_data(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklDsparse_set_csr_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        index::onemklIndex,\n                                                        row_ptr::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklDsparse_set_csr_data_64(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                       col_ind, values)\n    @ccall liboneapi_support.onemklDsparse_set_csr_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           index::onemklIndex,\n                                                           row_ptr::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_set_csr_data(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklCsparse_set_csr_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        index::onemklIndex,\n                                                        row_ptr::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklCsparse_set_csr_data_64(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                       col_ind, values)\n    @ccall liboneapi_support.onemklCsparse_set_csr_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           index::onemklIndex,\n                                                           row_ptr::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_set_csr_data(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklZsparse_set_csr_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        index::onemklIndex,\n                                                        row_ptr::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklZsparse_set_csr_data_64(device_queue, spMat, nrows, ncols, index, row_ptr,\n                                       col_ind, values)\n    @ccall liboneapi_support.onemklZsparse_set_csr_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           index::onemklIndex,\n                                                           row_ptr::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_set_coo_data(device_queue, spMat, nrows, ncols, nnz, index, row_ind,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklSsparse_set_coo_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        nnz::Int32, index::onemklIndex,\n                                                        row_ind::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklSsparse_set_coo_data_64(device_queue, spMat, nrows, ncols, nnz, index,\n                                       row_ind, col_ind, values)\n    @ccall liboneapi_support.onemklSsparse_set_coo_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           nnz::Int64, index::onemklIndex,\n                                                           row_ind::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_set_coo_data(device_queue, spMat, nrows, ncols, nnz, index, row_ind,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklDsparse_set_coo_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        nnz::Int32, index::onemklIndex,\n                                                        row_ind::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklDsparse_set_coo_data_64(device_queue, spMat, nrows, ncols, nnz, index,\n                                       row_ind, col_ind, values)\n    @ccall liboneapi_support.onemklDsparse_set_coo_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           nnz::Int64, index::onemklIndex,\n                                                           row_ind::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_set_coo_data(device_queue, spMat, nrows, ncols, nnz, index, row_ind,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklCsparse_set_coo_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        nnz::Int32, index::onemklIndex,\n                                                        row_ind::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklCsparse_set_coo_data_64(device_queue, spMat, nrows, ncols, nnz, index,\n                                       row_ind, col_ind, values)\n    @ccall liboneapi_support.onemklCsparse_set_coo_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           nnz::Int64, index::onemklIndex,\n                                                           row_ind::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_set_coo_data(device_queue, spMat, nrows, ncols, nnz, index, row_ind,\n                                    col_ind, values)\n    @ccall liboneapi_support.onemklZsparse_set_coo_data(device_queue::syclQueue_t,\n                                                        spMat::matrix_handle_t,\n                                                        nrows::Int32, ncols::Int32,\n                                                        nnz::Int32, index::onemklIndex,\n                                                        row_ind::ZePtr{Int32},\n                                                        col_ind::ZePtr{Int32},\n                                                        values::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklZsparse_set_coo_data_64(device_queue, spMat, nrows, ncols, nnz, index,\n                                       row_ind, col_ind, values)\n    @ccall liboneapi_support.onemklZsparse_set_coo_data_64(device_queue::syclQueue_t,\n                                                           spMat::matrix_handle_t,\n                                                           nrows::Int64, ncols::Int64,\n                                                           nnz::Int64, index::onemklIndex,\n                                                           row_ind::ZePtr{Int64},\n                                                           col_ind::ZePtr{Int64},\n                                                           values::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklXsparse_init_matmat_descr(p_desc)\n    @ccall liboneapi_support.onemklXsparse_init_matmat_descr(p_desc::Ptr{matmat_descr_t})::Cint\nend\n\nfunction onemklXsparse_release_matmat_descr(p_desc)\n    @ccall liboneapi_support.onemklXsparse_release_matmat_descr(p_desc::Ptr{matmat_descr_t})::Cint\nend\n\nfunction onemklXsparse_init_omatconvert_descr(device_queue, p_descr)\n    @ccall liboneapi_support.onemklXsparse_init_omatconvert_descr(device_queue::syclQueue_t,\n                                                                  p_descr::Ptr{omatconvert_descr_t})::Cint\nend\n\nfunction onemklXsparse_release_omatconvert_descr(device_queue, descr)\n    @ccall liboneapi_support.onemklXsparse_release_omatconvert_descr(device_queue::syclQueue_t,\n                                                                     descr::omatconvert_descr_t)::Cint\nend\n\nfunction onemklXsparse_init_omatadd_descr(device_queue, p_omatadd_desc)\n    @ccall liboneapi_support.onemklXsparse_init_omatadd_descr(device_queue::syclQueue_t,\n                                                              p_omatadd_desc::Ptr{omatadd_descr_t})::Cint\nend\n\nfunction onemklXsparse_release_omatadd_descr(device_queue, omatadd_desc)\n    @ccall liboneapi_support.onemklXsparse_release_omatadd_descr(device_queue::syclQueue_t,\n                                                                 omatadd_desc::omatadd_descr_t)::Cint\nend\n\nfunction onemklXsparse_omatcopy(device_queue, transpose_val, spMat_in, spMat_out)\n    @ccall liboneapi_support.onemklXsparse_omatcopy(device_queue::syclQueue_t,\n                                                    transpose_val::onemklTranspose,\n                                                    spMat_in::matrix_handle_t,\n                                                    spMat_out::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_sort_matrix(device_queue, spMat)\n    @ccall liboneapi_support.onemklXsparse_sort_matrix(device_queue::syclQueue_t,\n                                                       spMat::matrix_handle_t)::Cint\nend\n\nfunction onemklSsparse_update_diagonal_values(device_queue, spMat, length, new_diag_values)\n    @ccall liboneapi_support.onemklSsparse_update_diagonal_values(device_queue::syclQueue_t,\n                                                                  spMat::matrix_handle_t,\n                                                                  length::Int64,\n                                                                  new_diag_values::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_update_diagonal_values(device_queue, spMat, length, new_diag_values)\n    @ccall liboneapi_support.onemklDsparse_update_diagonal_values(device_queue::syclQueue_t,\n                                                                  spMat::matrix_handle_t,\n                                                                  length::Int64,\n                                                                  new_diag_values::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_update_diagonal_values(device_queue, spMat, length, new_diag_values)\n    @ccall liboneapi_support.onemklCsparse_update_diagonal_values(device_queue::syclQueue_t,\n                                                                  spMat::matrix_handle_t,\n                                                                  length::Int64,\n                                                                  new_diag_values::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_update_diagonal_values(device_queue, spMat, length, new_diag_values)\n    @ccall liboneapi_support.onemklZsparse_update_diagonal_values(device_queue::syclQueue_t,\n                                                                  spMat::matrix_handle_t,\n                                                                  length::Int64,\n                                                                  new_diag_values::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklXsparse_optimize_gemv(device_queue, opA, A)\n    @ccall liboneapi_support.onemklXsparse_optimize_gemv(device_queue::syclQueue_t,\n                                                         opA::onemklTranspose,\n                                                         A::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_optimize_trmv(device_queue, uplo_val, opA, diag_val, A)\n    @ccall liboneapi_support.onemklXsparse_optimize_trmv(device_queue::syclQueue_t,\n                                                         uplo_val::onemklUplo,\n                                                         opA::onemklTranspose,\n                                                         diag_val::onemklDiag,\n                                                         A::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_optimize_trsv(device_queue, uplo_val, opA, diag_val, A)\n    @ccall liboneapi_support.onemklXsparse_optimize_trsv(device_queue::syclQueue_t,\n                                                         uplo_val::onemklUplo,\n                                                         opA::onemklTranspose,\n                                                         diag_val::onemklDiag,\n                                                         A::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_optimize_gemm(device_queue, opA, A)\n    @ccall liboneapi_support.onemklXsparse_optimize_gemm(device_queue::syclQueue_t,\n                                                         opA::onemklTranspose,\n                                                         A::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_optimize_gemm_advanced(device_queue, layout_val, opA, opB, A,\n                                              columns)\n    @ccall liboneapi_support.onemklXsparse_optimize_gemm_advanced(device_queue::syclQueue_t,\n                                                                  layout_val::onemklLayout,\n                                                                  opA::onemklTranspose,\n                                                                  opB::onemklTranspose,\n                                                                  A::matrix_handle_t,\n                                                                  columns::Int64)::Cint\nend\n\nfunction onemklXsparse_optimize_trsm(device_queue, uplo_val, opA, diag_val, A)\n    @ccall liboneapi_support.onemklXsparse_optimize_trsm(device_queue::syclQueue_t,\n                                                         uplo_val::onemklUplo,\n                                                         opA::onemklTranspose,\n                                                         diag_val::onemklDiag,\n                                                         A::matrix_handle_t)::Cint\nend\n\nfunction onemklXsparse_optimize_trsm_advanced(device_queue, layout_val, uplo_val, opA,\n                                              diag_val, A, columns)\n    @ccall liboneapi_support.onemklXsparse_optimize_trsm_advanced(device_queue::syclQueue_t,\n                                                                  layout_val::onemklLayout,\n                                                                  uplo_val::onemklUplo,\n                                                                  opA::onemklTranspose,\n                                                                  diag_val::onemklDiag,\n                                                                  A::matrix_handle_t,\n                                                                  columns::Int64)::Cint\nend\n\nfunction onemklSsparse_gemv(device_queue, opA, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklSsparse_gemv(device_queue::syclQueue_t,\n                                                opA::onemklTranspose, alpha::Ref{Cfloat},\n                                                A::matrix_handle_t, x::ZePtr{Cfloat},\n                                                beta::Ref{Cfloat}, y::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_gemv(device_queue, opA, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklDsparse_gemv(device_queue::syclQueue_t,\n                                                opA::onemklTranspose, alpha::Ref{Cdouble},\n                                                A::matrix_handle_t, x::ZePtr{Cdouble},\n                                                beta::Ref{Cdouble}, y::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_gemv(device_queue, opA, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklCsparse_gemv(device_queue::syclQueue_t,\n                                                opA::onemklTranspose,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF32}, beta::Ref{ComplexF32},\n                                                y::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_gemv(device_queue, opA, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklZsparse_gemv(device_queue::syclQueue_t,\n                                                opA::onemklTranspose,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF64}, beta::Ref{ComplexF64},\n                                                y::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_gemvdot(device_queue, opA, alpha, A, x, beta, y, d)\n    @ccall liboneapi_support.onemklSsparse_gemvdot(device_queue::syclQueue_t,\n                                                   opA::onemklTranspose, alpha::Ref{Cfloat},\n                                                   A::matrix_handle_t, x::ZePtr{Cfloat},\n                                                   beta::Ref{Cfloat}, y::ZePtr{Cfloat},\n                                                   d::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_gemvdot(device_queue, opA, alpha, A, x, beta, y, d)\n    @ccall liboneapi_support.onemklDsparse_gemvdot(device_queue::syclQueue_t,\n                                                   opA::onemklTranspose,\n                                                   alpha::Ref{Cdouble}, A::matrix_handle_t,\n                                                   x::ZePtr{Cdouble}, beta::Ref{Cdouble},\n                                                   y::ZePtr{Cdouble},\n                                                   d::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_gemvdot(device_queue, opA, alpha, A, x, beta, y, d)\n    @ccall liboneapi_support.onemklCsparse_gemvdot(device_queue::syclQueue_t,\n                                                   opA::onemklTranspose,\n                                                   alpha::Ref{ComplexF32},\n                                                   A::matrix_handle_t, x::ZePtr{ComplexF32},\n                                                   beta::Ref{ComplexF32},\n                                                   y::ZePtr{ComplexF32},\n                                                   d::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_gemvdot(device_queue, opA, alpha, A, x, beta, y, d)\n    @ccall liboneapi_support.onemklZsparse_gemvdot(device_queue::syclQueue_t,\n                                                   opA::onemklTranspose,\n                                                   alpha::Ref{ComplexF64},\n                                                   A::matrix_handle_t, x::ZePtr{ComplexF64},\n                                                   beta::Ref{ComplexF64},\n                                                   y::ZePtr{ComplexF64},\n                                                   d::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_symv(device_queue, uplo_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklSsparse_symv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, alpha::Ref{Cfloat},\n                                                A::matrix_handle_t, x::ZePtr{Cfloat},\n                                                beta::Ref{Cfloat}, y::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_symv(device_queue, uplo_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklDsparse_symv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, alpha::Ref{Cdouble},\n                                                A::matrix_handle_t, x::ZePtr{Cdouble},\n                                                beta::Ref{Cdouble}, y::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_symv(device_queue, uplo_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklCsparse_symv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF32}, beta::Ref{ComplexF32},\n                                                y::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_symv(device_queue, uplo_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklZsparse_symv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF64}, beta::Ref{ComplexF64},\n                                                y::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_trmv(device_queue, uplo_val, opA, diag_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklSsparse_trmv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag, alpha::Ref{Cfloat},\n                                                A::matrix_handle_t, x::ZePtr{Cfloat},\n                                                beta::Ref{Cfloat}, y::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_trmv(device_queue, uplo_val, opA, diag_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklDsparse_trmv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag, alpha::Ref{Cdouble},\n                                                A::matrix_handle_t, x::ZePtr{Cdouble},\n                                                beta::Ref{Cdouble}, y::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_trmv(device_queue, uplo_val, opA, diag_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklCsparse_trmv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF32}, beta::Ref{ComplexF32},\n                                                y::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_trmv(device_queue, uplo_val, opA, diag_val, alpha, A, x, beta, y)\n    @ccall liboneapi_support.onemklZsparse_trmv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF64}, beta::Ref{ComplexF64},\n                                                y::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_trsv(device_queue, uplo_val, opA, diag_val, alpha, A, x, y)\n    @ccall liboneapi_support.onemklSsparse_trsv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag, alpha::Ref{Cfloat},\n                                                A::matrix_handle_t, x::ZePtr{Cfloat},\n                                                y::ZePtr{Cfloat})::Cint\nend\n\nfunction onemklDsparse_trsv(device_queue, uplo_val, opA, diag_val, alpha, A, x, y)\n    @ccall liboneapi_support.onemklDsparse_trsv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag, alpha::Ref{Cdouble},\n                                                A::matrix_handle_t, x::ZePtr{Cdouble},\n                                                y::ZePtr{Cdouble})::Cint\nend\n\nfunction onemklCsparse_trsv(device_queue, uplo_val, opA, diag_val, alpha, A, x, y)\n    @ccall liboneapi_support.onemklCsparse_trsv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF32},\n                                                y::ZePtr{ComplexF32})::Cint\nend\n\nfunction onemklZsparse_trsv(device_queue, uplo_val, opA, diag_val, alpha, A, x, y)\n    @ccall liboneapi_support.onemklZsparse_trsv(device_queue::syclQueue_t,\n                                                uplo_val::onemklUplo, opA::onemklTranspose,\n                                                diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                x::ZePtr{ComplexF64},\n                                                y::ZePtr{ComplexF64})::Cint\nend\n\nfunction onemklSsparse_gemm(device_queue, layout_val, opA, opX, alpha, A, X, columns, ldx,\n                            beta, Y, ldy)\n    @ccall liboneapi_support.onemklSsparse_gemm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                alpha::Ref{Cfloat}, A::matrix_handle_t,\n                                                X::ZePtr{Cfloat}, columns::Int64,\n                                                ldx::Int64, beta::Ref{Cfloat},\n                                                Y::ZePtr{Cfloat}, ldy::Int64)::Cint\nend\n\nfunction onemklDsparse_gemm(device_queue, layout_val, opA, opX, alpha, A, X, columns, ldx,\n                            beta, Y, ldy)\n    @ccall liboneapi_support.onemklDsparse_gemm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                alpha::Ref{Cdouble}, A::matrix_handle_t,\n                                                X::ZePtr{Cdouble}, columns::Int64,\n                                                ldx::Int64, beta::Ref{Cdouble},\n                                                Y::ZePtr{Cdouble}, ldy::Int64)::Cint\nend\n\nfunction onemklCsparse_gemm(device_queue, layout_val, opA, opX, alpha, A, X, columns, ldx,\n                            beta, Y, ldy)\n    @ccall liboneapi_support.onemklCsparse_gemm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                X::ZePtr{ComplexF32}, columns::Int64,\n                                                ldx::Int64, beta::Ref{ComplexF32},\n                                                Y::ZePtr{ComplexF32}, ldy::Int64)::Cint\nend\n\nfunction onemklZsparse_gemm(device_queue, layout_val, opA, opX, alpha, A, X, columns, ldx,\n                            beta, Y, ldy)\n    @ccall liboneapi_support.onemklZsparse_gemm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                X::ZePtr{ComplexF64}, columns::Int64,\n                                                ldx::Int64, beta::Ref{ComplexF64},\n                                                Y::ZePtr{ComplexF64}, ldy::Int64)::Cint\nend\n\nfunction onemklSsparse_trsm(device_queue, layout_val, opA, opX, uplo_val, diag_val, alpha,\n                            A, X, columns, ldx, Y, ldy)\n    @ccall liboneapi_support.onemklSsparse_trsm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                uplo_val::onemklUplo, diag_val::onemklDiag,\n                                                alpha::Ref{Cfloat}, A::matrix_handle_t,\n                                                X::ZePtr{Cfloat}, columns::Int64,\n                                                ldx::Int64, Y::ZePtr{Cfloat},\n                                                ldy::Int64)::Cint\nend\n\nfunction onemklDsparse_trsm(device_queue, layout_val, opA, opX, uplo_val, diag_val, alpha,\n                            A, X, columns, ldx, Y, ldy)\n    @ccall liboneapi_support.onemklDsparse_trsm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                uplo_val::onemklUplo, diag_val::onemklDiag,\n                                                alpha::Ref{Cdouble}, A::matrix_handle_t,\n                                                X::ZePtr{Cdouble}, columns::Int64,\n                                                ldx::Int64, Y::ZePtr{Cdouble},\n                                                ldy::Int64)::Cint\nend\n\nfunction onemklCsparse_trsm(device_queue, layout_val, opA, opX, uplo_val, diag_val, alpha,\n                            A, X, columns, ldx, Y, ldy)\n    @ccall liboneapi_support.onemklCsparse_trsm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                uplo_val::onemklUplo, diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF32}, A::matrix_handle_t,\n                                                X::ZePtr{ComplexF32}, columns::Int64,\n                                                ldx::Int64, Y::ZePtr{ComplexF32},\n                                                ldy::Int64)::Cint\nend\n\nfunction onemklZsparse_trsm(device_queue, layout_val, opA, opX, uplo_val, diag_val, alpha,\n                            A, X, columns, ldx, Y, ldy)\n    @ccall liboneapi_support.onemklZsparse_trsm(device_queue::syclQueue_t,\n                                                layout_val::onemklLayout,\n                                                opA::onemklTranspose, opX::onemklTranspose,\n                                                uplo_val::onemklUplo, diag_val::onemklDiag,\n                                                alpha::Ref{ComplexF64}, A::matrix_handle_t,\n                                                X::ZePtr{ComplexF64}, columns::Int64,\n                                                ldx::Int64, Y::ZePtr{ComplexF64},\n                                                ldy::Int64)::Cint\nend\n\nfunction onemklXsparse_set_matmat_data(descr, viewA, opA, viewB, opB, viewC)\n    @ccall liboneapi_support.onemklXsparse_set_matmat_data(descr::matmat_descr_t,\n                                                           viewA::onemklMatrixView,\n                                                           opA::onemklTranspose,\n                                                           viewB::onemklMatrixView,\n                                                           opB::onemklTranspose,\n                                                           viewC::onemklMatrixView)::Cint\nend\n\nfunction onemklSsparse_matmatd(device_queue, c_layout, opA, opB, alpha, A, B, beta, C,\n                               c_nrows, c_ncols, ldc)\n    @ccall liboneapi_support.onemklSsparse_matmatd(device_queue::syclQueue_t,\n                                                   c_layout::onemklLayout,\n                                                   opA::onemklTranspose,\n                                                   opB::onemklTranspose, alpha::Ref{Cfloat},\n                                                   A::matrix_handle_t, B::matrix_handle_t,\n                                                   beta::Ref{Cfloat}, C::Ptr{Cfloat},\n                                                   c_nrows::Int64, c_ncols::Int64,\n                                                   ldc::Int64)::Cint\nend\n\nfunction onemklDsparse_matmatd(device_queue, c_layout, opA, opB, alpha, A, B, beta, C,\n                               c_nrows, c_ncols, ldc)\n    @ccall liboneapi_support.onemklDsparse_matmatd(device_queue::syclQueue_t,\n                                                   c_layout::onemklLayout,\n                                                   opA::onemklTranspose,\n                                                   opB::onemklTranspose,\n                                                   alpha::Ref{Cdouble}, A::matrix_handle_t,\n                                                   B::matrix_handle_t, beta::Ref{Cdouble},\n                                                   C::Ptr{Cdouble}, c_nrows::Int64,\n                                                   c_ncols::Int64, ldc::Int64)::Cint\nend\n\nfunction onemklCsparse_matmatd(device_queue, c_layout, opA, opB, alpha, A, B, beta, C,\n                               c_nrows, c_ncols, ldc)\n    @ccall liboneapi_support.onemklCsparse_matmatd(device_queue::syclQueue_t,\n                                                   c_layout::onemklLayout,\n                                                   opA::onemklTranspose,\n                                                   opB::onemklTranspose,\n                                                   alpha::Ref{ComplexF32},\n                                                   A::matrix_handle_t, B::matrix_handle_t,\n                                                   beta::Ref{ComplexF32},\n                                                   C::Ptr{ComplexF32}, c_nrows::Int64,\n                                                   c_ncols::Int64, ldc::Int64)::Cint\nend\n\nfunction onemklZsparse_matmatd(device_queue, c_layout, opA, opB, alpha, A, B, beta, C,\n                               c_nrows, c_ncols, ldc)\n    @ccall liboneapi_support.onemklZsparse_matmatd(device_queue::syclQueue_t,\n                                                   c_layout::onemklLayout,\n                                                   opA::onemklTranspose,\n                                                   opB::onemklTranspose,\n                                                   alpha::Ref{ComplexF64},\n                                                   A::matrix_handle_t, B::matrix_handle_t,\n                                                   beta::Ref{ComplexF64},\n                                                   C::Ptr{ComplexF32}, c_nrows::Int64,\n                                                   c_ncols::Int64, ldc::Int64)::Cint\nend\n\nfunction onemklXsparse_matmat(device_queue, A, B, C, req, descr, sizeTempBuffer, tempBuffer)\n    @ccall liboneapi_support.onemklXsparse_matmat(device_queue::syclQueue_t,\n                                                  A::matrix_handle_t, B::matrix_handle_t,\n                                                  C::matrix_handle_t,\n                                                  req::onemklMatmatRequest,\n                                                  descr::matmat_descr_t,\n                                                  sizeTempBuffer::Ptr{Int64},\n                                                  tempBuffer::ZePtr{Cvoid})::Cint\nend\n\nfunction onemklDestroy()\n    @ccall liboneapi_support.onemklDestroy()::Cint\nend\n\n@cenum onemklDftPrecision::UInt32 begin\n    ONEMKL_DFT_PRECISION_SINGLE = 0\n    ONEMKL_DFT_PRECISION_DOUBLE = 1\nend\n\n@cenum onemklDftDomain::UInt32 begin\n    ONEMKL_DFT_DOMAIN_REAL = 0\n    ONEMKL_DFT_DOMAIN_COMPLEX = 1\nend\n\n@cenum onemklDftConfigParam::UInt32 begin\n    ONEMKL_DFT_PARAM_FORWARD_DOMAIN = 0\n    ONEMKL_DFT_PARAM_DIMENSION = 1\n    ONEMKL_DFT_PARAM_LENGTHS = 2\n    ONEMKL_DFT_PARAM_PRECISION = 3\n    ONEMKL_DFT_PARAM_FORWARD_SCALE = 4\n    ONEMKL_DFT_PARAM_BACKWARD_SCALE = 5\n    ONEMKL_DFT_PARAM_NUMBER_OF_TRANSFORMS = 6\n    ONEMKL_DFT_PARAM_COMPLEX_STORAGE = 7\n    ONEMKL_DFT_PARAM_PLACEMENT = 8\n    ONEMKL_DFT_PARAM_INPUT_STRIDES = 9\n    ONEMKL_DFT_PARAM_OUTPUT_STRIDES = 10\n    ONEMKL_DFT_PARAM_FWD_DISTANCE = 11\n    ONEMKL_DFT_PARAM_BWD_DISTANCE = 12\n    ONEMKL_DFT_PARAM_WORKSPACE = 13\n    ONEMKL_DFT_PARAM_WORKSPACE_ESTIMATE_BYTES = 14\n    ONEMKL_DFT_PARAM_WORKSPACE_BYTES = 15\n    ONEMKL_DFT_PARAM_FWD_STRIDES = 16\n    ONEMKL_DFT_PARAM_BWD_STRIDES = 17\n    ONEMKL_DFT_PARAM_WORKSPACE_PLACEMENT = 18\n    ONEMKL_DFT_PARAM_WORKSPACE_EXTERNAL_BYTES = 19\nend\n\n@cenum onemklDftConfigValue::UInt32 begin\n    ONEMKL_DFT_VALUE_COMMITTED = 0\n    ONEMKL_DFT_VALUE_UNCOMMITTED = 1\n    ONEMKL_DFT_VALUE_COMPLEX_COMPLEX = 2\n    ONEMKL_DFT_VALUE_REAL_REAL = 3\n    ONEMKL_DFT_VALUE_INPLACE = 4\n    ONEMKL_DFT_VALUE_NOT_INPLACE = 5\n    ONEMKL_DFT_VALUE_WORKSPACE_AUTOMATIC = 6\n    ONEMKL_DFT_VALUE_ALLOW = 7\n    ONEMKL_DFT_VALUE_AVOID = 8\n    ONEMKL_DFT_VALUE_WORKSPACE_INTERNAL = 9\n    ONEMKL_DFT_VALUE_WORKSPACE_EXTERNAL = 10\nend\n\nmutable struct onemklDftDescriptor_st end\n\nconst onemklDftDescriptor_t = Ptr{onemklDftDescriptor_st}\n\nfunction onemklDftCreate1D(desc, precision, domain, length)\n    @ccall liboneapi_support.onemklDftCreate1D(desc::Ptr{onemklDftDescriptor_t},\n                                               precision::onemklDftPrecision,\n                                               domain::onemklDftDomain, length::Int64)::Cint\nend\n\nfunction onemklDftCreateND(desc, precision, domain, dim, lengths)\n    @ccall liboneapi_support.onemklDftCreateND(desc::Ptr{onemklDftDescriptor_t},\n                                               precision::onemklDftPrecision,\n                                               domain::onemklDftDomain, dim::Int64,\n                                               lengths::Ptr{Int64})::Cint\nend\n\nfunction onemklDftDestroy(desc)\n    @ccall liboneapi_support.onemklDftDestroy(desc::onemklDftDescriptor_t)::Cint\nend\n\nfunction onemklDftCommit(desc, queue)\n    @ccall liboneapi_support.onemklDftCommit(desc::onemklDftDescriptor_t,\n                                             queue::syclQueue_t)::Cint\nend\n\nfunction onemklDftSetValueInt64(desc, param, value)\n    @ccall liboneapi_support.onemklDftSetValueInt64(desc::onemklDftDescriptor_t,\n                                                    param::onemklDftConfigParam,\n                                                    value::Int64)::Cint\nend\n\nfunction onemklDftSetValueDouble(desc, param, value)\n    @ccall liboneapi_support.onemklDftSetValueDouble(desc::onemklDftDescriptor_t,\n                                                     param::onemklDftConfigParam,\n                                                     value::Cdouble)::Cint\nend\n\nfunction onemklDftSetValueInt64Array(desc, param, values, n)\n    @ccall liboneapi_support.onemklDftSetValueInt64Array(desc::onemklDftDescriptor_t,\n                                                         param::onemklDftConfigParam,\n                                                         values::Ptr{Int64}, n::Int64)::Cint\nend\n\nfunction onemklDftSetValueConfigValue(desc, param, value)\n    @ccall liboneapi_support.onemklDftSetValueConfigValue(desc::onemklDftDescriptor_t,\n                                                          param::onemklDftConfigParam,\n                                                          value::onemklDftConfigValue)::Cint\nend\n\nfunction onemklDftGetValueInt64(desc, param, value)\n    @ccall liboneapi_support.onemklDftGetValueInt64(desc::onemklDftDescriptor_t,\n                                                    param::onemklDftConfigParam,\n                                                    value::Ptr{Int64})::Cint\nend\n\nfunction onemklDftGetValueDouble(desc, param, value)\n    @ccall liboneapi_support.onemklDftGetValueDouble(desc::onemklDftDescriptor_t,\n                                                     param::onemklDftConfigParam,\n                                                     value::Ptr{Cdouble})::Cint\nend\n\nfunction onemklDftGetValueInt64Array(desc, param, values, n)\n    @ccall liboneapi_support.onemklDftGetValueInt64Array(desc::onemklDftDescriptor_t,\n                                                         param::onemklDftConfigParam,\n                                                         values::Ptr{Int64},\n                                                         n::Ptr{Int64})::Cint\nend\n\nfunction onemklDftGetValueConfigValue(desc, param, value)\n    @ccall liboneapi_support.onemklDftGetValueConfigValue(desc::onemklDftDescriptor_t,\n                                                          param::onemklDftConfigParam,\n                                                          value::Ptr{onemklDftConfigValue})::Cint\nend\n\nfunction onemklDftComputeForward(desc, inout)\n    @ccall liboneapi_support.onemklDftComputeForward(desc::onemklDftDescriptor_t,\n                                                     inout::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeForwardOutOfPlace(desc, in, out)\n    @ccall liboneapi_support.onemklDftComputeForwardOutOfPlace(desc::onemklDftDescriptor_t,\n                                                               in::Ptr{Cvoid},\n                                                               out::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeBackward(desc, inout)\n    @ccall liboneapi_support.onemklDftComputeBackward(desc::onemklDftDescriptor_t,\n                                                      inout::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeBackwardOutOfPlace(desc, in, out)\n    @ccall liboneapi_support.onemklDftComputeBackwardOutOfPlace(desc::onemklDftDescriptor_t,\n                                                                in::Ptr{Cvoid},\n                                                                out::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeForwardBuffer(desc, inout)\n    @ccall liboneapi_support.onemklDftComputeForwardBuffer(desc::onemklDftDescriptor_t,\n                                                           inout::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeForwardOutOfPlaceBuffer(desc, in, out)\n    @ccall liboneapi_support.onemklDftComputeForwardOutOfPlaceBuffer(desc::onemklDftDescriptor_t,\n                                                                     in::Ptr{Cvoid},\n                                                                     out::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeBackwardBuffer(desc, inout)\n    @ccall liboneapi_support.onemklDftComputeBackwardBuffer(desc::onemklDftDescriptor_t,\n                                                            inout::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftComputeBackwardOutOfPlaceBuffer(desc, in, out)\n    @ccall liboneapi_support.onemklDftComputeBackwardOutOfPlaceBuffer(desc::onemklDftDescriptor_t,\n                                                                      in::Ptr{Cvoid},\n                                                                      out::Ptr{Cvoid})::Cint\nend\n\nfunction onemklDftQueryParamIndices(out, n)\n    @ccall liboneapi_support.onemklDftQueryParamIndices(out::Ptr{Int64}, n::Int64)::Cint\nend\n\nconst ONEMKL_DFT_STATUS_SUCCESS = 0\n\nconst ONEMKL_DFT_STATUS_ERROR = -1\n\nconst ONEMKL_DFT_STATUS_INVALID_ARGUMENT = -2\n\nconst ONEMKL_DFT_STATUS_BAD_STATE = -3\n"
  },
  {
    "path": "lib/sycl/SYCL.jl",
    "content": "module SYCL\n\nusing ..oneAPI\n\nusing ..oneL0\n\nusing ..Support\n\nexport syclPlatform, syclDevice, syclContext, syclQueue, syclEvent\n\nmutable struct syclPlatform\n  handle::syclPlatform_t\n\n  function syclPlatform(drv::ZeDriver)\n    handle = Ref{syclPlatform_t}()\n    syclPlatformCreate(handle, drv)\n    obj = new(handle[])\n    finalizer(obj) do sycl_platform\n      syclPlatformDestroy(sycl_platform)\n    end\n  end\nend\n\nBase.unsafe_convert(::Type{syclPlatform_t}, sycl_platform::syclPlatform) =\n  sycl_platform.handle\n\nmutable struct syclDevice\n  handle::syclDevice_t\n  ze_dev::ZeDevice\n\n  function syclDevice(platform::syclPlatform, ze_dev::ZeDevice)\n    handle = Ref{syclDevice_t}()\n    syclDeviceCreate(handle, platform, ze_dev)\n    obj = new(handle[], ze_dev)\n    finalizer(obj) do dev\n      syclDeviceDestroy(dev)\n    end\n  end\nend\n\nBase.unsafe_convert(::Type{syclDevice_t}, dev::syclDevice) =\n  dev.handle\n\nmutable struct syclContext\n  handle::syclContext_t\n  devs::Vector{syclDevice}\n  ze_ctx::ZeContext\n\n  function syclContext(devs::Vector{syclDevice}, ze_ctx::ZeContext)\n    handle = Ref{syclContext_t}()\n    syclContextCreate(handle, devs, length(devs), ze_ctx, true)\n    obj = new(handle[], devs, ze_ctx)\n    finalizer(obj) do ctx\n      onemklDestroy()\n      syclContextDestroy(ctx)\n    end\n  end\nend\n\nBase.unsafe_convert(::Type{syclContext_t}, ctx::syclContext) =\n  ctx.handle\n\nmutable struct syclQueue\n  handle::syclQueue_t\n  ctx::syclContext\n  dev::syclDevice\n  ze_queue::ZeCommandQueue\n\n  function syclQueue(ctx::syclContext, dev::syclDevice, ze_queue::ZeCommandQueue)\n    handle = Ref{syclQueue_t}()\n    syclQueueCreate(handle, ctx, dev, ze_queue, true)\n    obj = new(handle[], ctx, dev, ze_queue)\n    finalizer(obj) do queue\n      syclQueueDestroy(queue)\n    end\n  end\nend\n\nBase.unsafe_convert(::Type{syclQueue_t}, queue::syclQueue) =\n  queue.handle\n\nmutable struct syclEvent\n  handle::syclEvent_t\n  ctx::syclContext\n  ze_event::ZeEvent\n\n  function syclEvent(ctx::syclContext, ze_event::ZeEvent)\n    handle = Ref{syclEvent_t}()\n    syclEventCreate(handle, ctx, ze_event, true)\n    obj = new(handle[], ctx, ze_event)\n    finalizer(obj) do event\n      syclEventDestroy(event)\n    end\n  end\nend\n\nBase.unsafe_convert(::Type{syclEvent_t}, event::syclEvent) =\n  event.handle\n\nend\n"
  },
  {
    "path": "lib/utils/APIUtils.jl",
    "content": "module APIUtils\n\n# helpers that facilitate working with C APIs\nusing GPUToolbox: @checked, @debug_ccall\nexport @checked, @debug_ccall\ninclude(\"enum.jl\")\n\nend\n"
  },
  {
    "path": "lib/utils/enum.jl",
    "content": "export @enum_without_prefix\n\n\n## redeclare enum values without a prefix\n\n# this is useful when enum values from an underlying C library, typically prefixed for the\n# lack of namespacing in C, are to be used in Julia where we do have module namespacing.\nmacro enum_without_prefix(enum, prefix)\n    if isa(enum, Symbol)\n        mod = __module__\n    elseif Meta.isexpr(enum, :(.))\n        mod = getfield(__module__, enum.args[1])\n        enum = enum.args[2].value\n    else\n        error(\"Do not know how to refer to $enum\")\n    end\n    enum = getfield(mod, enum)\n    prefix = String(prefix)\n\n    ex = quote end\n    for instance in instances(enum)\n        name = String(Symbol(instance))\n        @assert startswith(name, prefix)\n        push!(ex.args, :(const $(Symbol(name[length(prefix)+1:end])) = $(mod).$(Symbol(name))))\n    end\n\n    return esc(ex)\nend\n"
  },
  {
    "path": "res/Project.toml",
    "content": "[deps]\nClang = \"40e3b903-d033-50b4-a0cc-940c62c95e31\"\nJuliaFormatter = \"98e50ef6-434e-11e9-1051-2b60c6c9e899\"\noneAPI_Level_Zero_Headers_jll = \"f4bc562b-d309-54f8-9efb-476e56f0410d\"\n"
  },
  {
    "path": "res/libze_prologue.jl",
    "content": "# outlined functionality to avoid GC frame allocation\n@noinline function throw_api_error(res)\n    if res == RESULT_ERROR_OUT_OF_HOST_MEMORY || res == RESULT_ERROR_OUT_OF_DEVICE_MEMORY\n        throw(OutOfGPUMemoryError())\n    else\n        throw(ZeError(res))\n    end\nend\n\nfunction check(f)\n    res = retry_reclaim(err -> err == RESULT_ERROR_OUT_OF_HOST_MEMORY ||\n                               err == RESULT_ERROR_OUT_OF_DEVICE_MEMORY) do\n        f()\n    end\n\n    if res != RESULT_SUCCESS\n        throw_api_error(res)\n    end\n\n    return\nend\n"
  },
  {
    "path": "res/local.jl",
    "content": "## generate preferences for loading a local copy of the oneAPI toolchain\n\n#\n# discovery\n#\n\nimport Libdl\n\nfunction scan_library!(output, lib, locations=String[])\n    name = Libdl.find_library(lib, locations)\n    if name != \"\"\n        path = Libdl.dlopen(name) do handle\n            Libdl.dlpath(handle)\n        end\n        println(\"- found $lib at $path\")\n        output[lib] = path\n    else\n        println(\"- did not find $lib\")\n    end\nend\n\n# NOTE: some JLLs also provide binaries (e.g. ocloc, iga64, etc),\n#       but we don't scan for them if our toolchain does not use them\n\nigc = Dict()\nprintln(\"Trying to find local IGC...\")\nfor lib = [\"libigc\", \"libiga64\", \"libigdfcl\", \"libopencl-clang\"]\n    scan_library!(igc, lib)\nend\n\ngmmlib = Dict()\nprintln(\"\\nTrying to find local gmmlib...\")\nscan_library!(gmmlib, \"libigdgmm\")\n\nneo = Dict()\nprintln(\"\\nTrying to find local NEO...\")\n## version suffixed\nscan_library!(neo, \"libze_intel_gpu.so.1\")\n## in intel-opencl subdirectory\nlocations = String[]\nif haskey(igc, \"libigc\")\n    push!(locations, joinpath(dirname(igc[\"libigc\"]), \"intel-opencl\"))\nend\nscan_library!(neo, \"libigdrcl\", locations)\n\nloader = Dict()\nprintln(\"\\nTrying to find local oneAPI loader...\")\nscan_library!(loader, \"libze_loader\")\nscan_library!(loader, \"libze_validation_layer\")\n\n\n#\n# setting preferences\n#\n\nprintln(\"\\nWriting preferences:\\n\")\n\nusing Pkg\n\n# use a temporary environment to install packages we need\nPkg.activate(; temp=true)\nPkg.add([\"Preferences\", \"NEO_jll\", \"oneAPI_Level_Zero_Loader_jll\"])\nusing Preferences\nusing NEO_jll, oneAPI_Level_Zero_Loader_jll\n\n# activate the global environment, where we'll set the preferences\nPkg.activate()\n\n# work around Preferences.jl#34\nif !isfile(Base.active_project())\n    mkpath(dirname(Base.active_project()))\n    touch(Base.active_project())\nend\n\nfunction set_preferences(mod, entries)\n    for (lib, path) in entries\n        binding = replace(split(lib, '.')[1], \"-\" => \"_\")\n        if binding == \"libiga64\"\n            binding = \"libiga\"  # sigh\n        end\n        set_preferences!(mod, binding * \"_path\" => path)\n    end\nend\n\nset_preferences(NEO_jll, neo)\nset_preferences(NEO_jll.libigc_jll, igc)\nset_preferences(NEO_jll.gmmlib_jll, gmmlib)\nset_preferences(oneAPI_Level_Zero_Loader_jll, loader)\n\nprintln(\"\"\"\n\nPrefences have been written to `$(joinpath(dirname(Base.active_project()), \"LocalPreferences.toml\"))`.\nPlease modify the file to your liking, and remove the oneAPI-related preferences (or the entire file) to revert to the original binaries.\"\"\")\n"
  },
  {
    "path": "res/support.toml",
    "content": "[general]\nlibrary_name = \"liboneapi_support\"\noutput_file_path = \"../lib/support/liboneapi_support.jl\"\n\n\n[codegen]\nuse_ccall_macro = true\n\n[api.onemklXgemm_batch.argtypes]\n4 = \"ZePtr{Int64}\"\n5 = \"ZePtr{Int64}\"\n6 = \"ZePtr{Int64}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{Ptr{T}}\"\n9 = \"ZePtr{Int64}\"\n10 = \"ZePtr{Ptr{T}}\"\n11 = \"ZePtr{Int64}\"\n12 = \"ZePtr{T}\"\n13 = \"ZePtr{Ptr{T}}\"\n14 = \"ZePtr{Int64}\"\n16 = \"ZePtr{Int64}\"\n\n[api.onemklXtrsm_batch.argtypes]\n6 = \"ZePtr{Int64}\"\n7 = \"ZePtr{Int64}\"\n8 = \"ZePtr{T}\"\n9 = \"ZePtr{Ptr{T}}\"\n10 = \"ZePtr{Int64}\"\n11 = \"ZePtr{Ptr{T}}\"\n12 = \"ZePtr{Int64}\"\n14 = \"ZePtr{Int64}\"\n\n[api.onemklXgemm_batch_strided.argtypes]\n7 = \"Ref{T}\"\n8 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n14 = \"Ref{T}\"\n15 = \"ZePtr{T}\"\n\n[api.onemklXgemm.argtypes]\n7 = \"Ref{T}\"\n8 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n12 = \"Ref{T}\"\n13 = \"ZePtr{T}\"\n\n[api.onemklXsymm.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n11 = \"Ref{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXsyrk.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"Ref{T}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXsyr2k.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n11 = \"Ref{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXtrmm.argtypes]\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXtrmm_variant.argtypes]\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n13 = \"Ref{T}\"\n14 = \"ZePtr{T}\"\n\n[api.onemklXtrsm.argtypes]\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXtrsm_variant.argtypes]\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n13 = \"Ref{T}\"\n14 = \"ZePtr{T}\"\n\n[api.onemklXhemm.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n11 = \"Ref{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXherk.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"Ref{T}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXher2k.argtypes]\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n11 = \"Ref{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXgbmv.argtypes]\n7 = \"Ref{T}\"\n8 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n12 = \"Ref{T}\"\n13 = \"ZePtr{T}\"\n\n[api.onemklXgemv.argtypes]\n5 = \"Ref{T}\"\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n10 = \"Ref{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXdot.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n7 = \"RefOrZeRef{T}\"\n\n[api.onemklXdotc.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n7 = \"RefOrZeRef{T}\"\n\n[api.onemklXdotu.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n7 = \"RefOrZeRef{T}\"\n\n[api.onemklXasum.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n\n[api.onemklCasum.argtypes]\n3 = \"ZePtr{ComplexF32}\"\n5 = \"ZePtr{Cfloat}\"\n\n[api.onemklZasum.argtypes]\n3 = \"ZePtr{ComplexF64}\"\n5 = \"ZePtr{Float64}\"\n\n[api.onemklXaxpy.argtypes]\n3 = \"Ref{T}\"\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n\n[api.onemklXaxpby.argtypes]\n3 = \"Ref{T}\"\n4 = \"ZePtr{T}\"\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXrot.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n7 = \"Ref{T}\"\n8 = \"Ref{T}\"\n\n[api.onemklCrot.argtypes]\n3 = \"ZePtr{ComplexF32}\"\n5 = \"ZePtr{ComplexF32}\"\n7 = \"Ref{Float32}\"\n8 = \"Ref{ComplexF32}\"\n\n[api.onemklZrot.argtypes]\n3 = \"ZePtr{ComplexF64}\"\n5 = \"ZePtr{ComplexF64}\"\n7 = \"Ref{Float64}\"\n8 = \"Ref{ComplexF64}\"\n\n[api.onemklCSrot.argtypes]\n3 = \"ZePtr{ComplexF32}\"\n5 = \"ZePtr{ComplexF32}\"\n7 = \"Ref{Float32}\"\n8 = \"Ref{Float32}\"\n\n[api.onemklZDrot.argtypes]\n3 = \"ZePtr{ComplexF64}\"\n5 = \"ZePtr{ComplexF64}\"\n7 = \"Ref{Float64}\"\n8 = \"Ref{Float64}\"\n\n[api.onemklXscal.argtypes]\n3 = \"Ref{T}\"\n4 = \"ZePtr{T}\"\n\n[api.onemklCSscal.argtypes]\n3 = \"Ref{Float32}\"\n4 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZDscal.argtypes]\n3 = \"Ref{Float64}\"\n4 = \"ZePtr{ComplexF64}\"\n\n[api.onemklXger.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXgerc.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXhemv.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"Ref{T}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXhbmv.argtypes]\n5 = \"Ref{T}\"\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n10 = \"Ref{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXher.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXher2.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXsbmv.argtypes]\n5 = \"Ref{T}\"\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n10 = \"Ref{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXsymv.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"Ref{T}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXsyr.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXtbmv.argtypes]\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXtrmv.argtypes]\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXtrsv.argtypes]\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXnrm2.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"RefOrZeRef{T}\"\n\n[api.onemklCnrm2.argtypes]\n3 = \"ZePtr{ComplexF32}\"\n5 = \"RefOrZeRef{Cfloat}\"\n\n[api.onemklZnrm2.argtypes]\n3 = \"ZePtr{ComplexF64}\"\n5 = \"RefOrZeRef{Cdouble}\"\n\n[api.onemklXcopy.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n\n[api.onemklXiamax.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{Int64}\"\n\n[api.onemklXiamax_64.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{Int64}\"\n\n[api.onemklXiamin.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{Int64}\"\n\n[api.onemklXiamin_64.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{Int64}\"\n\n[api.onemklXswap.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{T}\"\n\n[api.onemklXdgmm.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXgeru.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXhpmv.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklChpr.argtypes]\n4 = \"Ref{Float32}\"\n5 = \"ZePtr{ComplexF32}\"\n7 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZhpr.argtypes]\n4 = \"Ref{Float64}\"\n5 = \"ZePtr{ComplexF64}\"\n7 = \"ZePtr{ComplexF64}\"\n\n[api.onemklXhpr2.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXsyr2.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXspmv.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXspr.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXspr2.argtypes]\n4 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklSsdsdot.argtypes]\n3 = \"Ref{Float32}\"\n4 = \"ZePtr{Float32}\"\n6 = \"ZePtr{Float32}\"\n8 = \"Ref{Float32}\"\n\n[api.onemklXsparse_set_csr_data.argtypes]\n6 = \"ZePtr{Int32}\"\n7 = \"ZePtr{Int32}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXsparse_set_csr_data_64.argtypes]\n6 = \"ZePtr{Int64}\"\n7 = \"ZePtr{Int64}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXsparse_set_coo_data.argtypes]\n7 = \"ZePtr{Int32}\"\n8 = \"ZePtr{Int32}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXsparse_set_coo_data_64.argtypes]\n7 = \"ZePtr{Int64}\"\n8 = \"ZePtr{Int64}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXsparse_gemv.argtypes]\n3 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXsparse_symv.argtypes]\n3 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXsparse_trmv.argtypes]\n5 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n8 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXsparse_trsv.argtypes]\n5 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXsparse_update_diagonal_values.argtypes]\n4 = \"ZePtr{T}\"\n\n[api.onemklXsparse_gemvdot.argtypes]\n3 = \"Ref{T}\"\n5 = \"ZePtr{T}\"\n6 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXsparse_gemm.argtypes]\n5 = \"Ref{T}\"\n7 = \"ZePtr{T}\"\n10 = \"Ref{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXsparse_matmat.argtypes]\n8 = \"ZePtr{Cvoid}\"\n\n[api.onemklXpotrf.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n\n[api.onemklXpotrs.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXpotri.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n\n[api.onemklXsytrf.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{Int64}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXgetrf.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{Int64}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXgetrs.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{Int64}\"\n8 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXgetri.argtypes]\n3 = \"ZePtr{T}\"\n5 = \"ZePtr{Int64}\"\n6 = \"ZePtr{T}\"\n\n[api.onemklXgeqrf.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXormqr.argtypes]\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXunmqr.argtypes]\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXorgqr.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXungqr.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklSgebrd.argtypes]\n4 = \"ZePtr{Float32}\"\n6 = \"ZePtr{Float32}\"\n7 = \"ZePtr{Float32}\"\n8 = \"ZePtr{Float32}\"\n9 = \"ZePtr{Float32}\"\n10 = \"ZePtr{Float32}\"\n\n[api.onemklDgebrd.argtypes]\n4 = \"ZePtr{Float64}\"\n6 = \"ZePtr{Float64}\"\n7 = \"ZePtr{Float64}\"\n8 = \"ZePtr{Float64}\"\n9 = \"ZePtr{Float64}\"\n10 = \"ZePtr{Float64}\"\n\n[api.onemklCgebrd.argtypes]\n4 = \"ZePtr{ComplexF32}\"\n6 = \"ZePtr{Float32}\"\n7 = \"ZePtr{ComplexF32}\"\n8 = \"ZePtr{ComplexF32}\"\n9 = \"ZePtr{ComplexF32}\"\n10 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZgebrd.argtypes]\n4 = \"ZePtr{ComplexF64}\"\n6 = \"ZePtr{Float64}\"\n7 = \"ZePtr{ComplexF64}\"\n8 = \"ZePtr{ComplexF64}\"\n9 = \"ZePtr{ComplexF64}\"\n10 = \"ZePtr{ComplexF64}\"\n\n[api.onemklSgesvd.argtypes]\n6 = \"ZePtr{Float32}\"\n8 = \"ZePtr{Float32}\"\n9 = \"ZePtr{Float32}\"\n11 = \"ZePtr{Float32}\"\n13 = \"ZePtr{Float32}\"\n\n[api.onemklDgesvd.argtypes]\n6 = \"ZePtr{Float64}\"\n8 = \"ZePtr{Float64}\"\n9 = \"ZePtr{Float64}\"\n11 = \"ZePtr{Float64}\"\n13 = \"ZePtr{Float64}\"\n\n[api.onemklCgesvd.argtypes]\n6 = \"ZePtr{ComplexF32}\"\n8 = \"ZePtr{Float32}\"\n9 = \"ZePtr{ComplexF32}\"\n11 = \"ZePtr{ComplexF32}\"\n13 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZgesvd.argtypes]\n6 = \"ZePtr{ComplexF64}\"\n8 = \"ZePtr{Float64}\"\n9 = \"ZePtr{ComplexF64}\"\n11 = \"ZePtr{ComplexF64}\"\n13 = \"ZePtr{ComplexF64}\"\n\n[api.onemklXtrtri.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n\n[api.onemklXgesv.argtypes]\n4 = \"ZePtr{T}\"\n6 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXgetrf_batch.argtypes]\n4 = \"ZePtr{Ptr{T}}\"\n6 = \"ZePtr{Ptr{Int64}}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXgetrs_batch.argtypes]\n5 = \"ZePtr{Ptr{T}}\"\n7 = \"ZePtr{Ptr{Int64}}\"\n8 = \"ZePtr{Ptr{T}}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXgetri_batch.argtypes]\n3 = \"ZePtr{Ptr{T}}\"\n5 = \"ZePtr{Ptr{Int64}}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXgeqrf_batch.argtypes]\n4 = \"ZePtr{Ptr{T}}\"\n6 = \"ZePtr{Ptr{T}}\"\n9 = \"ZePtr{T}\"\n\n[api.onemklXorgqr_batch.argtypes]\n5 = \"ZePtr{Ptr{T}}\"\n7 = \"ZePtr{Ptr{T}}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXungqr_batch.argtypes]\n5 = \"ZePtr{Ptr{T}}\"\n7 = \"ZePtr{Ptr{T}}\"\n10 = \"ZePtr{T}\"\n\n[api.onemklXpotrf_batch.argtypes]\n4 = \"ZePtr{Ptr{T}}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklXpotrs_batch.argtypes]\n5 = \"ZePtr{Ptr{T}}\"\n7 = \"ZePtr{Ptr{T}}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklXsyevd.argtypes]\n5 = \"ZePtr{T}\"\n7 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n\n[api.onemklCheevd.argtypes]\n5 = \"ZePtr{ComplexF32}\"\n7 = \"ZePtr{Float32}\"\n8 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZheevd.argtypes]\n5 = \"ZePtr{ComplexF64}\"\n7 = \"ZePtr{Float64}\"\n8 = \"ZePtr{ComplexF64}\"\n\n[api.onemklXsygvd.argtypes]\n6 = \"ZePtr{T}\"\n8 = \"ZePtr{T}\"\n10 = \"ZePtr{T}\"\n11 = \"ZePtr{T}\"\n\n[api.onemklChegvd.argtypes]\n6 = \"ZePtr{ComplexF32}\"\n8 = \"ZePtr{ComplexF32}\"\n10 = \"ZePtr{Float32}\"\n11 = \"ZePtr{ComplexF32}\"\n\n[api.onemklZhegvd.argtypes]\n6 = \"ZePtr{ComplexF64}\"\n8 = \"ZePtr{ComplexF64}\"\n10 = \"ZePtr{Float64}\"\n11 = \"ZePtr{ComplexF64}\"\n\n[api.onemklXsparse_trsm.argtypes]\n7 = \"Ref{T}\"\n9 = \"ZePtr{T}\"\n12 = \"ZePtr{T}\"\n\n[api.onemklXsparse_matmatd.argtypes]\n5 = \"Ref{T}\"\n8 = \"Ref{T}\"\n"
  },
  {
    "path": "res/wrap.jl",
    "content": "# script to parse oneAPI headers and generate Julia wrappers\n\n\n#\n# Parsing\n#\n\nusing Clang\nusing Clang.Generators\n\nusing JuliaFormatter\n\nfunction wrap(name, headers...; defines=[], include_dirs=[], dependents=true)\n    @info \"Wrapping $name\"\n\n    args = get_default_args()\n    for include_dir in include_dirs\n        push!(args, \"-isystem$include_dir\")\n    end\n\n    options = load_options(joinpath(@__DIR__, \"$(name).toml\"))\n\n    # create context\n    ctx = create_context([headers...], args, options)\n\n    # run generator\n    build!(ctx, BUILDSTAGE_NO_PRINTING)\n\n    # if requested, only wrap stuff from the list of headers\n    # (i.e., not from included ones)\n    if !dependents\n        function rewrite!(dag::ExprDAG)\n            replace!(get_nodes(dag)) do node\n                path = normpath(Clang.get_filename(node.cursor))\n                if !in(path, headers)\n                    return ExprNode(node.id, Generators.Skip(), node.cursor, Expr[], node.adj)\n                end\n                return node\n            end\n        end\n        rewrite!(ctx.dag)\n    end\n\n    rewriter!(ctx, options)\n\n    build!(ctx, BUILDSTAGE_PRINTING_ONLY)\n\n    format_file(options[\"general\"][\"output_file_path\"], YASStyle())\n\n    return\nend\n\nfunction rewriter!(ctx, options)\n    for node in get_nodes(ctx.dag)\n        if Generators.is_function(node) && !Generators.is_variadic_function(node)\n            expr = node.exprs[1]\n            call_expr = expr.args[2].args[1].args[3]    # assumes `@ccall`\n\n            target_expr = call_expr.args[1].args[1]\n            fn = String(target_expr.args[2].value)\n\n            # rewrite pointer argument types\n            arg_exprs = call_expr.args[1].args[2:end]\n            if haskey(options, \"api\") && haskey(options[\"api\"], fn)\n                argtypes = get(options[\"api\"][fn], \"argtypes\", Dict())\n                for (arg, typ) in argtypes\n                    i = parse(Int, arg)\n                    arg_exprs[i].args[2] = Meta.parse(typ)\n                end\n            elseif startswith(fn, \"onemkl\")\n                # oneMKL contains many almost-identical functions, e.g., `onemkl[SDCZH]gemm`,\n                # for which we only register a single `onemklXgemm` with `T` placeholders.\n                generic_fn = \"onemklX\" * fn[8:end]\n                if haskey(options[\"api\"], generic_fn)\n                    argtypes = get(options[\"api\"][generic_fn], \"argtypes\", Dict())\n\n                    typcode = fn[7]\n                    T = typcode == 'S' ? \"Cfloat\" :\n                        typcode == 'D' ? \"Cdouble\" :\n                        typcode == 'C' ? \"ComplexF32\" :\n                        typcode == 'H' ? \"Float16\" :\n                        typcode == 'Z' ? \"ComplexF64\" : error(\"unknown type code $typcode\")\n\n                    for (arg, typ) in argtypes\n                        i = parse(Int, arg)\n                        actual_typ = replace(typ, r\"\\bT\\b\" => T)\n                        arg_exprs[i].args[2] = Meta.parse(actual_typ)\n                    end\n                end\n            end\n\n            # insert `@checked` before each function with a `ccall` returning a checked type`\n            rettyp = call_expr.args[2]\n            checked_types = if haskey(options, \"api\")\n                get(options[\"api\"], \"checked_rettypes\", String[])\n            else\n                String[]\n            end\n            if rettyp isa Symbol && String(rettyp) in checked_types\n                node.exprs[1] = Expr(:macrocall, Symbol(\"@checked\"), nothing, expr)\n            end\n        end\n    end\nend\n\n\n#\n# Main application\n#\n\nusing oneAPI_Level_Zero_Headers_jll\n\nfunction main()\n    wrap(\"ze\", oneAPI_Level_Zero_Headers_jll.ze_api)\n    wrap(\n            \"support\",\n            joinpath(dirname(@__DIR__), \"deps\", \"src\", \"sycl.h\"),\n            joinpath(dirname(@__DIR__), \"deps\", \"src\", \"onemkl.h\"),\n            joinpath(dirname(@__DIR__), \"deps\", \"src\", \"onemkl_dft.h\");\n            dependents=false,\n            include_dirs=[dirname(dirname(oneAPI_Level_Zero_Headers_jll.ze_api))]\n        )\nend\n\nisinteractive() || main()\n"
  },
  {
    "path": "res/ze.toml",
    "content": "[general]\nlibrary_name = \"libze_loader\"\noutput_file_path = \"../lib/level-zero/libze.jl\"\nprologue_file_path = \"./libze_prologue.jl\"\n\n\n[codegen]\nuse_ccall_macro = true\n\n[api]\nchecked_rettypes = [ \"ze_result_t\" ]\n\n\n[api.zeCommandListAppendMemoryCopy.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeCommandListAppendMemoryFill.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeCommandListAppendMemoryCopyRegion.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n6 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeCommandListAppendMemoryCopyFromContext.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n4 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeCommandListAppendMemoryPrefetch.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeCommandListAppendMemAdvise.argtypes]\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemFree.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemFreeExt.argtypes]\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemGetAllocProperties.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemGetAddressRange.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemGetIpcHandle.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeMemOpenIpcHandle.argtypes]\n5 = \"Ptr{PtrOrZePtr{Cvoid}}\"\n\n[api.zeMemCloseIpcHandle.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeContextEvictMemory.argtypes]\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeContextMakeMemoryResident.argtypes]\n3 = \"PtrOrZePtr{Cvoid}\"\n\n[api.zeVirtualMemFree.argtypes]\n2 = \"PtrOrZePtr{Cvoid}\"\n"
  },
  {
    "path": "src/accumulate.jl",
    "content": "import oneAPI\nimport oneAPI: oneArray, oneAPIBackend\nimport AcceleratedKernels as AK\n\n# Use a smaller block size on Intel GPUs to work around a scan correctness issue\n# with the Blelloch parallel prefix sum at larger block sizes (>=128).\nconst _ACCUMULATE_BLOCK_SIZE = 64\n\n# Accumulate operations using AcceleratedKernels\nBase.accumulate!(op, B::oneArray, A::oneArray; init = zero(eltype(A)),\n                 block_size = _ACCUMULATE_BLOCK_SIZE, kwargs...) =\n    AK.accumulate!(op, B, A, oneAPIBackend(); init, block_size, kwargs...)\n\nBase.accumulate(op, A::oneArray; init = zero(eltype(A)),\n                block_size = _ACCUMULATE_BLOCK_SIZE, kwargs...) =\n    AK.accumulate(op, A, oneAPIBackend(); init, block_size, kwargs...)\n\nBase.cumsum(src::oneArray; block_size = _ACCUMULATE_BLOCK_SIZE, kwargs...) =\n    AK.cumsum(src, oneAPIBackend(); block_size, kwargs...)\nBase.cumprod(src::oneArray; block_size = _ACCUMULATE_BLOCK_SIZE, kwargs...) =\n    AK.cumprod(src, oneAPIBackend(); block_size, kwargs...)\n"
  },
  {
    "path": "src/array.jl",
    "content": "export oneArray, oneVector, oneMatrix, oneVecOrMat,\n       is_device, is_shared, is_host\n\n\n## array type\n\nfunction hasfieldcount(@nospecialize(dt))\n    try\n        fieldcount(dt)\n    catch\n        return false\n    end\n    return true\nend\n\nfunction contains_eltype(T, X)\n    if T === X\n      return true\n    elseif T isa Union\n        for U in Base.uniontypes(T)\n            contains_eltype(U, X) && return true\n        end\n    elseif hasfieldcount(T)\n        for U in fieldtypes(T)\n            contains_eltype(U, X) && return true\n        end\n    end\n    return false\nend\n\nfunction check_eltype(T)\n  Base.allocatedinline(T) || error(\"oneArray only supports element types that are stored inline\")\n  Base.isbitsunion(T) && error(\"oneArray does not yet support isbits-union arrays\")\n  if oneL0.module_properties(device()).fp16flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP16 !=\n      oneL0.ZE_DEVICE_MODULE_FLAG_FP16\n    contains_eltype(T, Float16) && error(\"Float16 is not supported on this device\")\n  end\n  if oneL0.module_properties(device()).fp64flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP64 !=\n      oneL0.ZE_DEVICE_MODULE_FLAG_FP64\n    contains_eltype(T, Float64) && error(\"Float64 is not supported on this device\")\n  end\nend\n\n\"\"\"\n    oneArray{T,N,B} <: AbstractGPUArray{T,N}\n\nN-dimensional dense array type for Intel GPU programming using oneAPI and Level Zero.\n\n# Type Parameters\n- `T`: Element type (must be stored inline, no isbits-unions)\n- `N`: Number of dimensions\n- `B`: Buffer type, one of:\n  - `oneL0.DeviceBuffer`: GPU device memory (default, not CPU-accessible)\n  - `oneL0.SharedBuffer`: Unified shared memory (CPU and GPU accessible)\n  - `oneL0.HostBuffer`: Pinned host memory (CPU-accessible, GPU-visible)\n\n# Memory Types\n\n- **Device memory** (default): Fastest GPU access, not directly accessible from CPU\n- **Shared memory**: Accessible from both CPU and GPU, with unified virtual addressing\n- **Host memory**: CPU memory that's visible to the GPU, useful for staging\n\nUse [`is_device`](@ref), [`is_shared`](@ref), [`is_host`](@ref) to query memory type.\n\n# Examples\n```julia\n# Create arrays with different memory types\nA = oneArray{Float32,2}(undef, 10, 10)                    # Device memory (default)\nB = oneArray{Float32,2,oneL0.SharedBuffer}(undef, 10, 10) # Shared memory\nC = oneArray{Float32,2,oneL0.HostBuffer}(undef, 10, 10)   # Host memory\n\n# From existing array\nD = oneArray(rand(Float32, 10, 10))  # Creates device memory array\n\n# Using do-block for automatic cleanup\nresult = oneArray{Float32}(100) do arr\n    # Use arr...\n    Array(arr)  # Copy result back before cleanup\nend\n```\n\nSee also: [`oneVector`](@ref), [`oneMatrix`](@ref), [`is_device`](@ref), [`is_shared`](@ref)\n\"\"\"\nmutable struct oneArray{T,N,B} <: AbstractGPUArray{T,N}\n  data::DataRef{B}\n\n  maxsize::Int  # maximum data size; excluding any selector bytes\n  offset::Int   # offset of the data in the buffer, in bytes\n  dims::Dims{N}\n\n  function oneArray{T,N,B}(::UndefInitializer, dims::Dims{N}) where {T,N,B}\n    check_eltype(T)\n    maxsize = prod(dims) * sizeof(T)\n    bufsize = if Base.isbitsunion(T)\n      # type tag array past the data\n      maxsize + prod(dims)\n    else\n      maxsize\n    end\n\n    ctx = context()\n    dev = device()\n    alignment = Base.datatype_alignment(T)\n    data = GPUArrays.cached_alloc((oneArray, B, ctx, dev, bufsize, alignment)) do\n        buf = allocate(B, ctx, dev, bufsize, alignment)\n        data = DataRef(buf) do buf\n          release(buf)\n        end\n    end\n    obj = new{T,N,B}(data, maxsize, 0, dims)\n    finalizer(unsafe_free!, obj)\n  end\n\n  function oneArray{T,N}(data::DataRef{B}, dims::Dims{N};\n                         maxsize::Int=prod(dims) * sizeof(T), offset::Int=0) where {T,N,B}\n    check_eltype(T)\n    if sizeof(T) == 0\n      offset == 0 || error(\"Singleton arrays cannot have a nonzero offset\")\n      maxsize == 0 || error(\"Singleton arrays cannot have a size\")\n    end\n    obj = new{T,N,B}(copy(data), maxsize, offset, dims)\n    finalizer(unsafe_free!, obj)\n  end\nend\n\nGPUArrays.storage(a::oneArray) = a.data\n\n\n## alias detection\n\nBase.dataids(A::oneArray) = (UInt(pointer(A)),)\n\nBase.unaliascopy(A::oneArray) = copy(A)\n\nfunction Base.mightalias(A::oneArray, B::oneArray)\n  rA = pointer(A):pointer(A)+sizeof(A)\n  rB = pointer(B):pointer(B)+sizeof(B)\n  return first(rA) <= first(rB) < last(rA) || first(rB) <= first(rA) < last(rB)\nend\n\n\n## convenience constructors\n\nconst oneVector{T} = oneArray{T,1}\nconst oneMatrix{T} = oneArray{T,2}\nconst oneVecOrMat{T} = Union{oneVector{T},oneMatrix{T}}\n\n# default to non-unified memory\noneArray{T,N}(::UndefInitializer, dims::Dims{N}) where {T,N} =\n  oneArray{T,N,oneL0.DeviceBuffer}(undef, dims)\n\n# buffer, type and dimensionality specified\noneArray{T,N,B}(::UndefInitializer, dims::NTuple{N,Integer}) where {T,N,B} =\n  oneArray{T,N,B}(undef, convert(Tuple{Vararg{Int}}, dims))\noneArray{T,N,B}(::UndefInitializer, dims::Vararg{Integer,N}) where {T,N,B} =\n  oneArray{T,N,B}(undef, convert(Tuple{Vararg{Int}}, dims))\n\n# type and dimensionality specified\noneArray{T,N}(::UndefInitializer, dims::NTuple{N,Integer}) where {T,N} =\n  oneArray{T,N}(undef, convert(Tuple{Vararg{Int}}, dims))\noneArray{T,N}(::UndefInitializer, dims::Vararg{Integer,N}) where {T,N} =\n  oneArray{T,N}(undef, convert(Tuple{Vararg{Int}}, dims))\n\n# only type specified\noneArray{T}(::UndefInitializer, dims::NTuple{N,Integer}) where {T,N} =\n  oneArray{T,N}(undef, convert(Tuple{Vararg{Int}}, dims))\noneArray{T}(::UndefInitializer, dims::Vararg{Integer,N}) where {T,N} =\n  oneArray{T,N}(undef, convert(Tuple{Vararg{Int}}, dims))\n\n# empty vector constructor\noneArray{T,1,B}() where {T,B} = oneArray{T,1,B}(undef, 0)\noneArray{T,1}() where {T} = oneArray{T,1}(undef, 0)\n\n# do-block constructors\nfor (ctor, tvars) in (:oneArray => (),\n                      :(oneArray{T}) => (:T,),\n                      :(oneArray{T,N}) => (:T, :N),\n                      :(oneArray{T,N,B}) => (:T, :N, :B))\n  @eval begin\n    function $ctor(f::Function, args...) where {$(tvars...)}\n      xs = $ctor(args...)\n      try\n        f(xs)\n      finally\n        unsafe_free!(xs)\n      end\n    end\n  end\nend\n\nBase.similar(a::oneArray{T,N,B}) where {T,N,B} =\n  oneArray{T,N,B}(undef, size(a))\nBase.similar(a::oneArray{T,<:Any,B}, dims::Base.Dims{N}) where {T,N,B} =\n  oneArray{T,N,B}(undef, dims)\nBase.similar(a::oneArray{<:Any,<:Any,B}, ::Type{T}, dims::Base.Dims{N}) where {T,N,B} =\n  oneArray{T,N,B}(undef, dims)\n\nfunction Base.copy(a::oneArray{T,N}) where {T,N}\n  b = similar(a)\n  @inbounds copyto!(b, a)\nend\n\n\n## array interface\n\nBase.elsize(::Type{<:oneArray{T}}) where {T} = sizeof(T)\n\nBase.size(x::oneArray) = x.dims\nBase.sizeof(x::oneArray) = Base.elsize(x) * length(x)\n\nfunction context(A::oneArray)\n  return oneL0.context(A.data[])\nend\n\nfunction device(A::oneArray)\n  return oneL0.device(A.data[])\nend\n\nbuftype(x::oneArray) = buftype(typeof(x))\nbuftype(::Type{<:oneArray{<:Any,<:Any,B}}) where {B} = @isdefined(B) ? B : Any\n\n\"\"\"\n    is_device(a::oneArray) -> Bool\n\nCheck if the array is stored in device memory (not directly CPU-accessible).\n\nDevice memory provides the fastest GPU access but cannot be directly accessed from the CPU.\n\nSee also: [`is_shared`](@ref), [`is_host`](@ref)\n\"\"\"\nis_device(a::oneArray) = isa(a.data[], oneL0.DeviceBuffer)\n\n\"\"\"\n    is_shared(a::oneArray) -> Bool\n\nCheck if the array is stored in shared (unified) memory.\n\nShared memory is accessible from both CPU and GPU with unified virtual addressing.\n\nSee also: [`is_device`](@ref), [`is_host`](@ref)\n\"\"\"\nis_shared(a::oneArray) = isa(a.data[], oneL0.SharedBuffer)\n\n\"\"\"\n    is_host(a::oneArray) -> Bool\n\nCheck if the array is stored in pinned host memory.\n\nHost memory resides on the CPU but is visible to the GPU, useful for staging data.\n\nSee also: [`is_device`](@ref), [`is_shared`](@ref)\n\"\"\"\nis_host(a::oneArray) = isa(a.data[], oneL0.HostBuffer)\n\n## derived types\n\nexport oneDenseArray, oneDenseVector, oneDenseMatrix, oneDenseVecOrMat,\n       oneStridedArray, oneStridedVector, oneStridedMatrix, oneStridedVecOrMat,\n       oneWrappedArray, oneWrappedVector, oneWrappedMatrix, oneWrappedVecOrMat\n\n# dense arrays: stored contiguously in memory\n#\n# all common dense wrappers are currently represented as oneArray objects.\n# this simplifies common use cases, and greatly improves load time.\nconst oneDenseArray{T,N} = oneArray{T,N}\nconst oneDenseVector{T} = oneDenseArray{T,1}\nconst oneDenseMatrix{T} = oneDenseArray{T,2}\nconst oneDenseVecOrMat{T} = Union{oneDenseVector{T}, oneDenseMatrix{T}}\n# XXX: these dummy aliases (oneDenseArray=oneArray) break alias printing, as\n#      `Base.print_without_params` only handles the case of a single alias.\n\n# strided arrays\nconst oneStridedSubArray{T,N,I<:Tuple{Vararg{Union{Base.RangeIndex, Base.ReshapedUnitRange,\n                                             Base.AbstractCartesianIndex}}}} =\n  SubArray{T,N,<:oneArray,I}\nconst oneStridedArray{T,N} = Union{oneArray{T,N}, oneStridedSubArray{T,N}}\nconst oneStridedVector{T} = oneStridedArray{T,1}\nconst oneStridedMatrix{T} = oneStridedArray{T,2}\nconst oneStridedVecOrMat{T} = Union{oneStridedVector{T}, oneStridedMatrix{T}}\n\n@inline function Base.pointer(x::oneStridedArray{T}, i::Integer=1; type=oneL0.DeviceBuffer) where T\n    PT = if type == oneL0.DeviceBuffer\n      ZePtr{T}\n    elseif type == oneL0.HostBuffer\n      Ptr{T}\n    else\n      error(\"unknown memory type\")\n    end\n    Base.unsafe_convert(PT, x) + Base._memory_offset(x, i)\nend\n\n# anything that's (secretly) backed by a oneArray\nconst oneWrappedArray{T,N} = Union{oneArray{T,N}, WrappedArray{T,N,oneArray,oneArray{T,N}}}\nconst oneWrappedVector{T} = oneWrappedArray{T,1}\nconst oneWrappedMatrix{T} = oneWrappedArray{T,2}\nconst oneWrappedVecOrMat{T} = Union{oneWrappedVector{T}, oneWrappedMatrix{T}}\n\n\n## interop with other arrays\n\n@inline function oneArray{T,N,B}(xs::AbstractArray{<:Any,N}) where {T,N,B}\n  A = oneArray{T,N,B}(undef, size(xs))\n  copyto!(A, convert(Array{T}, xs))\n  return A\nend\n\n@inline oneArray{T,N}(xs::AbstractArray{<:Any,N}) where {T,N} =\n  oneArray{T,N,oneL0.DeviceBuffer}(xs)\n\n@inline oneArray{T,N}(xs::oneArray{<:Any,N,B}) where {T,N,B} =\n  oneArray{T,N,B}(xs)\n\n# underspecified constructors\noneArray{T}(xs::AbstractArray{S,N}) where {T,N,S} = oneArray{T,N}(xs)\n(::Type{oneArray{T,N} where T})(x::AbstractArray{S,N}) where {S,N} = oneArray{S,N}(x)\noneArray(A::AbstractArray{T,N}) where {T,N} = oneArray{T,N}(A)\n\n# idempotency\noneArray{T,N,B}(xs::oneArray{T,N,B}) where {T,N,B} = xs\noneArray{T,N}(xs::oneArray{T,N,B}) where {T,N,B} = xs\n\n# Level Zero references\noneL0.ZeRef(x::Any) = oneL0.ZeRefArray(oneArray([x]))\noneL0.ZeRef{T}(x) where {T} = oneL0.ZeRefArray{T}(oneArray(T[x]))\noneL0.ZeRef{T}() where {T} = oneL0.ZeRefArray(oneArray{T}(undef, 1))\n\n\n## conversions\n\nBase.convert(::Type{T}, x::T) where T <: oneArray = x\n\n\n## interop with libraries\n\nfunction Base.unsafe_convert(::Type{Ptr{T}}, x::oneArray{T}) where {T}\n  buf = x.data[]\n  if is_device(x)\n    throw(ArgumentError(\"cannot take the CPU address of a $(typeof(x))\"))\n  end\n  convert(Ptr{T}, x.data[]) + x.offset\nend\n\nfunction Base.unsafe_convert(::Type{ZePtr{T}}, x::oneArray{T}) where {T}\n  convert(ZePtr{T}, x.data[]) + x.offset\nend\n\n\n## indexing\n\n# Host-accessible arrays can be indexed from CPU, bypassing GPUArrays restrictions\nfunction Base.getindex(x::oneArray{<:Any, <:Any, <:Union{oneL0.HostBuffer, oneL0.SharedBuffer}}, I::Int)\n    @boundscheck checkbounds(x, I)\n    return unsafe_load(pointer(x, I; type = oneL0.HostBuffer))\nend\n\nfunction Base.setindex!(x::oneArray{<:Any, <:Any, <:Union{oneL0.HostBuffer, oneL0.SharedBuffer}}, v, I::Int)\n    @boundscheck checkbounds(x, I)\n    return unsafe_store!(pointer(x, I; type = oneL0.HostBuffer), v)\nend\n\n\n## interop with GPU arrays\n\nfunction Base.unsafe_convert(::Type{oneDeviceArray{T,N,AS.CrossWorkgroup}}, a::oneArray{T,N}) where {T,N}\n  oneDeviceArray{T,N,AS.CrossWorkgroup}(size(a), reinterpret(LLVMPtr{T,AS.CrossWorkgroup}, pointer(a)),\n                                a.maxsize - a.offset)\nend\n\n\n## memory copying\n\ntypetagdata(a::Array, i=1) = ccall(:jl_array_typetagdata, Ptr{UInt8}, (Any,), a) + i - 1\nfunction typetagdata(a::oneArray, i=1)\n  # for zero-size element types (e.g. singleton unions), the byte offset\n  # is always zero, so the corresponding element offset is also zero\n  elem_offset = iszero(Base.elsize(a)) ? 0 : a.offset ÷ Base.elsize(a)\n  return convert(ZePtr{UInt8}, a.data[]) + a.maxsize + elem_offset + i - 1\nend\n\nfunction Base.copyto!(dest::oneArray{T}, doffs::Integer, src::Array{T}, soffs::Integer,\n                      n::Integer) where T\n  n==0 && return dest\n  @boundscheck checkbounds(dest, doffs)\n  @boundscheck checkbounds(dest, doffs+n-1)\n  @boundscheck checkbounds(src, soffs)\n  @boundscheck checkbounds(src, soffs+n-1)\n  unsafe_copyto!(context(dest), device(), dest, doffs, src, soffs, n)\n  return dest\nend\n\nBase.copyto!(dest::oneDenseArray{T}, src::Array{T}) where {T} =\n    copyto!(dest, 1, src, 1, length(src))\n\nfunction Base.copyto!(dest::Array{T}, doffs::Integer, src::oneDenseArray{T}, soffs::Integer,\n                      n::Integer) where T\n  n==0 && return dest\n  @boundscheck checkbounds(dest, doffs)\n  @boundscheck checkbounds(dest, doffs+n-1)\n  @boundscheck checkbounds(src, soffs)\n  @boundscheck checkbounds(src, soffs+n-1)\n  unsafe_copyto!(context(src), device(), dest, doffs, src, soffs, n)\n  return dest\nend\n\nBase.copyto!(dest::Array{T}, src::oneDenseArray{T}) where {T} =\n    copyto!(dest, 1, src, 1, length(src))\n\nfunction Base.copyto!(dest::oneDenseArray{T}, doffs::Integer, src::oneDenseArray{T}, soffs::Integer,\n                      n::Integer) where T\n  n==0 && return dest\n  @boundscheck checkbounds(dest, doffs)\n  @boundscheck checkbounds(dest, doffs+n-1)\n  @boundscheck checkbounds(src, soffs)\n  @boundscheck checkbounds(src, soffs+n-1)\n  @assert context(dest) == context(src)\n  unsafe_copyto!(context(dest), device(), dest, doffs, src, soffs, n)\n  return dest\nend\n\nBase.copyto!(dest::oneDenseArray{T}, src::oneDenseArray{T}) where {T} =\n    copyto!(dest, 1, src, 1, length(src))\n\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice,\n                             dest::oneDenseArray{T}, doffs, src::Array{T}, soffs, n) where T\n  GC.@preserve src dest unsafe_copyto!(ctx, dev, pointer(dest, doffs), pointer(src, soffs), n)\n  if Base.isbitsunion(T)\n    # copy selector bytes\n    error(\"oneArray does not yet support isbits-union arrays\")\n  end\n  return dest\nend\n\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice,\n                             dest::Array{T}, doffs, src::oneDenseArray{T}, soffs, n) where T\n  GC.@preserve src dest unsafe_copyto!(ctx, dev, pointer(dest, doffs), pointer(src, soffs), n)\n  if Base.isbitsunion(T)\n    # copy selector bytes\n    error(\"oneArray does not yet support isbits-union arrays\")\n  end\n\n  # copies to the host are synchronizing\n  synchronize(global_queue(context(src), device()))\n\n  return dest\nend\n\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice,\n                             dest::oneDenseArray{T}, doffs, src::oneDenseArray{T}, soffs, n) where T\n  GC.@preserve src dest unsafe_copyto!(ctx, dev, pointer(dest, doffs), pointer(src, soffs), n)\n  if Base.isbitsunion(T)\n    # copy selector bytes\n    error(\"oneArray does not yet support isbits-union arrays\")\n  end\n  return dest\nend\n\n# between Array and host-accessible oneArray\n\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice,\n                             dest::oneDenseArray{T,<:Any,<:Union{oneL0.SharedBuffer,oneL0.HostBuffer}}, doffs, src::Array{T}, soffs, n) where T\n  # maintain queue-ordered semantics\n  synchronize(global_queue(ctx, dev))\n\n  if Base.isbitsunion(T)\n    # copy selector bytes\n    error(\"oneArray does not yet support isbits-union arrays\")\n  end\n  GC.@preserve src dest begin\n    ptr = pointer(dest, doffs)\n    unsafe_copyto!(pointer(dest, doffs; type=oneL0.HostBuffer), pointer(src, soffs), n)\n    if Base.isbitsunion(T)\n      # copy selector bytes\n      error(\"oneArray does not yet support isbits-union arrays\")\n    end\n  end\n\n  return dest\nend\n\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice,\n                             dest::Array{T}, doffs, src::oneDenseArray{T,<:Any,<:Union{oneL0.SharedBuffer,oneL0.HostBuffer}}, soffs, n) where T\n  # maintain queue-ordered semantics\n  synchronize(global_queue(ctx, dev))\n\n  if Base.isbitsunion(T)\n    # copy selector bytes\n    error(\"oneArray does not yet support isbits-union arrays\")\n  end\n  GC.@preserve src dest begin\n    ptr = pointer(dest, doffs)\n    unsafe_copyto!(pointer(dest, doffs), pointer(src, soffs; type=oneL0.HostBuffer), n)\n    if Base.isbitsunion(T)\n      # copy selector bytes\n      error(\"oneArray does not yet support isbits-union arrays\")\n    end\n  end\n\n  return dest\nend\n\n\n## gpu array adaptor\n\n# We don't convert isbits types in `adapt`, since they are already\n# considered GPU-compatible.\n\nAdapt.adapt_storage(::Type{oneArray}, xs::AT) where {AT<:AbstractArray} =\n  isbitstype(AT) ? xs : convert(oneArray, xs)\n\n# if an element type is specified, convert to it\nAdapt.adapt_storage(::Type{<:oneArray{T}}, xs::AT) where {T, AT<:AbstractArray} =\n  isbitstype(AT) ? xs : convert(oneArray{T}, xs)\n\n\n## utilities\n\nzeros(T::Type, dims...) = fill!(oneArray{T}(undef, dims...), zero(T))\nones(T::Type, dims...) = fill!(oneArray{T}(undef, dims...), one(T))\nzeros(dims...) = zeros(Float64, dims...)\nones(dims...) = ones(Float64, dims...)\nfill(v, dims...) = fill!(oneArray{typeof(v)}(undef, dims...), v)\nfill(v, dims::Dims) = fill!(oneArray{typeof(v)}(undef, dims...), v)\n\nfunction Base.fill!(A::oneDenseArray{T}, val) where T\n  length(A) == 0 && return A\n  val = convert(T, val)\n  sizeof(T) == 0 && return A\n\n  # execute! is async, so we need to allocate the pattern in USM memory\n  # and keep it alive until the operation completes.\n  buf = oneL0.host_alloc(context(A), sizeof(T), Base.datatype_alignment(T))\n  unsafe_store!(convert(Ptr{T}, buf), val)\n  unsafe_fill!(context(A), device(), pointer(A), convert(ZePtr{T}, buf), length(A))\n  synchronize(global_queue(context(A), device()))\n  oneL0.free(buf)\n  A\nend\n\n\n## derived arrays\n\nfunction GPUArrays.derive(::Type{T}, a::oneArray, dims::Dims{N}, offset::Int) where {T,N}\n  if sizeof(T) == 0\n    Base.elsize(a) == 0 || error(\"Cannot derive a singleton array from non-singleton inputs\")\n  end\n  offset = a.offset + offset * sizeof(T)\n  oneArray{T,N}(a.data, dims; a.maxsize, offset)\nend\n\n\n## views\n\ndevice(a::SubArray) = device(parent(a))\ncontext(a::SubArray) = context(parent(a))\n\n# pointer conversions\nfunction Base.unsafe_convert(::Type{ZePtr{T}}, V::SubArray{T,N,P,<:Tuple{Vararg{Base.RangeIndex}}}) where {T,N,P}\n    return Base.unsafe_convert(ZePtr{T}, parent(V)) +\n           Base._memory_offset(V.parent, map(first, V.indices)...)\nend\nfunction Base.unsafe_convert(::Type{ZePtr{T}}, V::SubArray{T,N,P,<:Tuple{Vararg{Union{Base.RangeIndex,Base.ReshapedUnitRange}}}}) where {T,N,P}\n   return Base.unsafe_convert(ZePtr{T}, parent(V)) +\n          (Base.first_index(V)-1)*sizeof(T)\nend\n\n\n## PermutedDimsArray\n\ndevice(a::Base.PermutedDimsArray) = device(parent(a))\ncontext(a::Base.PermutedDimsArray) = context(parent(a))\n\nBase.unsafe_convert(::Type{ZePtr{T}}, A::PermutedDimsArray) where {T} =\n    Base.unsafe_convert(ZePtr{T}, parent(A))\n\n\n## unsafe_wrap\n\n\"\"\"\n    unsafe_wrap(Array, arr::oneArray{_,_,oneL0.SharedBuffer})\n\nWrap a Julia `Array` around the buffer that backs a `oneArray`. This is only possible if the\nGPU array is backed by a shared buffer, i.e. if it was created with `oneArray{T}(undef, ...)`.\n\"\"\"\nfunction Base.unsafe_wrap(::Type{Array}, arr::oneArray{T,N,oneL0.SharedBuffer}) where {T,N}\n  # TODO: can we make this more convenient by increasing the buffer's refcount and using\n  #       a finalizer on the Array? does that work when taking views etc of the Array?\n  ptr = reinterpret(Ptr{T}, pointer(arr))\n  unsafe_wrap(Array, ptr, size(arr))\nend\n\n\n## resizing\n\n\"\"\"\n  resize!(a::oneVector, n::Integer)\n\nResize `a` to contain `n` elements. If `n` is smaller than the current collection length,\nthe first `n` elements will be retained. If `n` is larger, the new elements are not\nguaranteed to be initialized.\n\"\"\"\nfunction Base.resize!(a::oneVector{T}, n::Integer) where {T}\n    # TODO: add additional space to allow for quicker resizing\n    maxsize = n * sizeof(T)\n    bufsize = if isbitstype(T)\n        maxsize\n    else\n        # type tag array past the data\n        maxsize + n\n    end\n\n    # replace the data with a new one. this 'unshares' the array.\n    # as a result, we can safely support resizing unowned buffers.\n    ctx = context(a)\n    dev = device(a)\n    buf = allocate(buftype(a), ctx, dev, bufsize, Base.datatype_alignment(T))\n    ptr = convert(ZePtr{T}, buf)\n    m = min(length(a), n)\n    if m > 0\n        unsafe_copyto!(ctx, dev, ptr, pointer(a), m)\n    end\n    new_data = DataRef(buf) do buf\n        free(buf)\n    end\n    unsafe_free!(a)\n\n    a.data = new_data\n    a.dims = (n,)\n    a.maxsize = maxsize\n    a.offset = 0\n\n    a\nend\n"
  },
  {
    "path": "src/broadcast.jl",
    "content": "import Base.Broadcast: BroadcastStyle, Broadcasted\n\nstruct oneArrayStyle{N,B} <: AbstractGPUArrayStyle{N} end\noneArrayStyle{M,B}(::Val{N}) where {N,M,B} = oneArrayStyle{N,B}()\n\n# identify the broadcast style of a (wrapped) oneArray\nBroadcastStyle(::Type{<:oneArray{T, N, B}}) where {T, N, B} = oneArrayStyle{N, B}()\nBroadcastStyle(W::Type{<:oneWrappedArray{T, N}}) where {T, N} =\n    oneArrayStyle{N, buftype(Adapt.unwrap_type(W))}()\n\n# when we are dealing with different buffer styles, we cannot know\n# which one is better, so use shared memory\nBroadcastStyle(\n        ::oneArrayStyle{N, B1},\n        ::oneArrayStyle{N, B2},\n    ) where {N,B1,B2} =\n    oneArrayStyle{N, oneL0.SharedBuffer}()\n\n# allocation of output arrays\nBase.similar(bc::Broadcasted{oneArrayStyle{N,B}}, ::Type{T}, dims) where {T,N,B} =\n    similar(oneArray{T,length(dims),B}, dims)\n"
  },
  {
    "path": "src/compiler/compilation.jl",
    "content": "## gpucompiler interface implementation\n\nstruct oneAPICompilerParams <: AbstractCompilerParams end\nconst oneAPICompilerConfig = CompilerConfig{SPIRVCompilerTarget, oneAPICompilerParams}\nconst oneAPICompilerJob = CompilerJob{SPIRVCompilerTarget,oneAPICompilerParams}\n\nGPUCompiler.runtime_module(::oneAPICompilerJob) = oneAPI\n\nGPUCompiler.method_table_view(job::oneAPICompilerJob) =\n    GPUCompiler.StackedMethodTable(job.world, method_table, SPIRVIntrinsics.method_table)\n\n# filter out OpenCL built-ins\n# TODO: eagerly lower these using the translator API\nGPUCompiler.isintrinsic(job::oneAPICompilerJob, fn::String) =\n    invoke(GPUCompiler.isintrinsic,\n           Tuple{CompilerJob{SPIRVCompilerTarget}, typeof(fn)},\n           job, fn) ||\n    in(fn, known_intrinsics) ||\n    contains(fn, \"__spirv_\")\n\nfunction GPUCompiler.finish_module!(job::oneAPICompilerJob, mod::LLVM.Module,\n                                    entry::LLVM.Function)\n    entry = invoke(GPUCompiler.finish_module!,\n                   Tuple{CompilerJob{SPIRVCompilerTarget}, typeof(mod), typeof(entry)},\n                   job, mod, entry)\n\n    # OpenCL 2.0\n    push!(metadata(mod)[\"opencl.ocl.version\"],\n          MDNode([ConstantInt(Int32(2)),\n                  ConstantInt(Int32(0))]))\n\n    # SPIR-V 1.5\n    push!(metadata(mod)[\"opencl.spirv.version\"],\n          MDNode([ConstantInt(Int32(1)),\n                  ConstantInt(Int32(5))]))\n\n    return entry\nend\n\n# finish_ir! runs later in the pipeline, after optimizations that create nested insertvalue\nfunction GPUCompiler.finish_ir!(job::oneAPICompilerJob, mod::LLVM.Module,\n                                entry::LLVM.Function)\n    entry = invoke(GPUCompiler.finish_ir!,\n                   Tuple{CompilerJob{SPIRVCompilerTarget}, typeof(mod), typeof(entry)},\n                   job, mod, entry)\n\n    # FIX: Flatten nested insertvalue instructions to work around SPIR-V bug\n    # See: https://github.com/JuliaGPU/oneAPI.jl/issues/259\n    # Intel's SPIR-V runtime has a bug where OpCompositeInsert with nested\n    # indices (e.g., \"1 0\") corrupts adjacent struct fields.\n    flatten_nested_insertvalue!(mod)\n\n    return entry\nend\n\n# Flatten nested insertvalue instructions\n# This works around a bug in Intel's SPIR-V runtime where OpCompositeInsert\n# with nested array indices corrupts adjacent struct fields.\nfunction flatten_nested_insertvalue!(mod::LLVM.Module)\n    changed = false\n    count = 0\n\n    for f in functions(mod)\n        isempty(blocks(f)) && continue\n\n        for bb in blocks(f)\n            # Collect instructions to process (can't modify while iterating)\n            to_process = LLVM.Instruction[]\n\n            for inst in instructions(bb)\n                # Check if this is an insertvalue with nested indices\n                if LLVM.API.LLVMGetInstructionOpcode(inst) == LLVM.API.LLVMInsertValue\n                    num_indices = LLVM.API.LLVMGetNumIndices(inst)\n                    if num_indices > 1\n                        push!(to_process, inst)\n                    end\n                end\n            end\n\n            # Flatten each nested insertvalue\n            for inst in to_process\n                try\n                    flatten_insert!(inst)\n                    changed = true\n                    count += 1\n                catch e\n                    @warn \"Failed to flatten nested insertvalue\" exception=(e, catch_backtrace())\n                end\n            end\n        end\n    end\n\n    return changed\nend\n\nfunction flatten_insert!(inst::LLVM.Instruction)\n    # Transform: insertvalue %base, %val, i, j, k...\n    # Into:      extractvalue %base, i\n    #            insertvalue %extracted, %val, j, k...\n    #            insertvalue %base, %modified, i\n\n    composite = LLVM.operands(inst)[1]\n    value = LLVM.operands(inst)[2]\n\n    num_indices = LLVM.API.LLVMGetNumIndices(inst)\n    idx_ptr = LLVM.API.LLVMGetIndices(inst)\n    indices = unsafe_wrap(Array, idx_ptr, num_indices)\n\n    builder = LLVM.IRBuilder()\n    LLVM.position!(builder, inst)\n\n    # Strategy: Recursively extract and insert for each nesting level\n    # For insertvalue %base, %val, i, j, k\n    # Do: %tmp1 = extractvalue %base, i\n    #     %tmp2 = extractvalue %tmp1, j\n    #     %tmp3 = insertvalue %tmp2, %val, k\n    #     %tmp4 = insertvalue %tmp1, %tmp3, j\n    #     %result = insertvalue %base, %tmp4, i\n\n    # But that's complex. Simpler approach for 2-3 levels:\n    # Just do one level of flattening at a time\n    first_idx = indices[1]\n    rest_indices = indices[2:end]\n\n    # Extract the first level\n    extracted = LLVM.extract_value!(builder, composite, first_idx)\n\n    # Now insert into the extracted value using remaining indices\n    # The LLVM IR builder will handle this correctly\n    inserted = extracted\n    if length(rest_indices) == 1\n        # Simple case: just one more level\n        inserted = LLVM.insert_value!(builder, extracted, value, rest_indices[1])\n    else\n        # Multiple levels: need to extract down, insert, then insert back up\n        # For now, recursively extract to the deepest level\n        temps = [extracted]\n        for i in 1:(length(rest_indices)-1)\n            temp = LLVM.extract_value!(builder, temps[end], rest_indices[i])\n            push!(temps, temp)\n        end\n\n        # Insert the value at the deepest level\n        inserted = LLVM.insert_value!(builder, temps[end], value, rest_indices[end])\n\n        # Insert back up the chain\n        for i in (length(rest_indices)-1):-1:1\n            inserted = LLVM.insert_value!(builder, temps[i], inserted, rest_indices[i])\n        end\n    end\n\n    # Insert the modified structure back into the original\n    result = LLVM.insert_value!(builder, composite, inserted, first_idx)\n\n    LLVM.replace_uses!(inst, result)\n    LLVM.API.LLVMInstructionEraseFromParent(inst)\n    LLVM.dispose(builder)\nend\n\n\n## compiler implementation (cache, configure, compile, and link)\n\n# cache of compilation caches, per device\nconst _compiler_caches = Dict{ZeDevice, Dict{Any, Any}}()\nfunction compiler_cache(dev::ZeDevice)\n    cache = get(_compiler_caches, dev, nothing)\n    if cache === nothing\n        cache = Dict{Any, Any}()\n        _compiler_caches[dev] = cache\n    end\n    return cache\nend\n\n# cache of compiler configurations, per device (but additionally configurable via kwargs)\nconst _toolchain = Ref{Any}()\nconst _compiler_configs = Dict{UInt, oneAPICompilerConfig}()\nfunction compiler_config(dev; kwargs...)\n    h = hash(dev, hash(kwargs))\n    config = get(_compiler_configs, h, nothing)\n    if config === nothing\n        config = _compiler_config(dev; kwargs...)\n        _compiler_configs[h] = config\n    end\n    return config\nend\n@noinline function _compiler_config(dev; kernel=true, name=nothing, always_inline=false, kwargs...)\n    supports_fp16 = oneL0.module_properties(device()).fp16flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP16 == oneL0.ZE_DEVICE_MODULE_FLAG_FP16\n    supports_fp64 = oneL0.module_properties(device()).fp64flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP64 == oneL0.ZE_DEVICE_MODULE_FLAG_FP64\n\n    # TODO: emit printf format strings in constant memory\n    extensions = String[\n        \"SPV_EXT_relaxed_printf_string_address_space\",\n        \"SPV_EXT_shader_atomic_float_add\"\n    ]\n\n    # create GPUCompiler objects\n    target = SPIRVCompilerTarget(; extensions, supports_fp16, supports_fp64, kwargs...)\n    params = oneAPICompilerParams()\n    CompilerConfig(target, params; kernel, name, always_inline)\nend\n\n# compile to executable machine code\nfunction compile(@nospecialize(job::CompilerJob))\n    # TODO: on 1.9, this actually creates a context. cache those.\n    asm, meta = JuliaContext() do ctx\n        GPUCompiler.compile(:obj, job)\n    end\n\n    (image=asm, entry=LLVM.name(meta.entry))\nend\n\n# link into an executable kernel\nfunction link(@nospecialize(job::CompilerJob), compiled)\n    ctx = context()\n    dev = device()\n    mod = ZeModule(ctx, dev, compiled.image)\n    kernels(mod)[compiled.entry]\nend\n"
  },
  {
    "path": "src/compiler/execution.jl",
    "content": "export @oneapi, zefunction, kernel_convert\n\n\n## high-level @oneapi interface\n\nconst MACRO_KWARGS = [:launch]\nconst COMPILER_KWARGS = [:kernel, :name, :always_inline]\nconst LAUNCH_KWARGS = [:groups, :items, :queue]\n\n\"\"\"\n    @oneapi [kwargs...] kernel(args...)\n\nHigh-level interface for launching Julia kernels on Intel GPUs using oneAPI.\n\nThis macro compiles a Julia function to SPIR-V, prepares the arguments, and optionally\nlaunches the kernel on the GPU.\n\n# Keyword Arguments\n\n## Macro Keywords (compile-time)\n- `launch::Bool=true`: Whether to launch the kernel immediately. If `false`, returns the\n  compiled kernel object without executing it.\n\n## Compiler Keywords\n- `kernel::Bool=false`: Whether to compile as a kernel (true) or device function (false)\n- `name::Union{String,Nothing}=nothing`: Explicit name for the kernel\n- `always_inline::Bool=false`: Whether to always inline device functions\n\n## Launch Keywords (runtime)\n- `groups`: Number of workgroups (required). Can be an integer or tuple.\n- `items`: Number of work-items per workgroup (required). Can be an integer or tuple.\n- `queue::ZeCommandQueue=global_queue(...)`: Command queue to submit to.\n\n# Examples\n\n```julia\n# Simple vector addition kernel\nfunction vadd(a, b, c)\n    i = get_global_id()\n    @inbounds c[i] = a[i] + b[i]\n    return\nend\n\na = oneArray(rand(Float32, 1024))\nb = oneArray(rand(Float32, 1024))\nc = similar(a)\n\n# Launch with 4 workgroups of 256 items each\n@oneapi groups=4 items=256 vadd(a, b, c)\n\n# Compile without launching\nkernel = @oneapi launch=false vadd(a, b, c)\nkernel(a, b, c; groups=4, items=256)  # Launch later\n```\n\nSee also: `zefunction`, `kernel_convert`\n\"\"\"\nmacro oneapi(ex...)\n    call = ex[end]\n    kwargs = map(ex[1:end-1]) do kwarg\n        if kwarg isa Symbol\n            :($kwarg = $kwarg)\n        elseif Meta.isexpr(kwarg, :(=))\n            kwarg\n        else\n            throw(ArgumentError(\"Invalid keyword argument '$kwarg'\"))\n        end\n    end\n\n    # destructure the kernel call\n    Meta.isexpr(call, :call) || throw(ArgumentError(\"second argument to @oneapi should be a function call\"))\n    f = call.args[1]\n    args = call.args[2:end]\n\n    code = quote end\n    vars, var_exprs = assign_args!(code, args)\n\n    # group keyword argument\n    macro_kwargs, compiler_kwargs, call_kwargs, other_kwargs =\n        split_kwargs(kwargs, MACRO_KWARGS, COMPILER_KWARGS, LAUNCH_KWARGS)\n    if !isempty(other_kwargs)\n        key,val = first(other_kwargs).args\n        throw(ArgumentError(\"Unsupported keyword argument '$key'\"))\n    end\n\n    # handle keyword arguments that influence the macro's behavior\n    launch = true\n    for kwarg in macro_kwargs\n        key,val = kwarg.args\n        if key == :launch\n            isa(val, Bool) || throw(ArgumentError(\"`launch` keyword argument to @cuda should be a constant value\"))\n            launch = val::Bool\n        else\n            throw(ArgumentError(\"Unsupported keyword argument '$key'\"))\n        end\n    end\n    if !launch && !isempty(call_kwargs)\n        error(\"@oneapi with launch=false does not support launch-time keyword arguments; use them when calling the kernel\")\n    end\n\n    # FIXME: macro hygiene wrt. escaping kwarg values (this broke with 1.5)\n    #        we esc() the whole thing now, necessitating gensyms...\n    @gensym f_var kernel_f kernel_args kernel_tt kernel\n\n    # convert the arguments, call the compiler and launch the kernel\n    # while keeping the original arguments alive\n    push!(code.args,\n        quote\n            $f_var = $f\n            GC.@preserve $(vars...) $f_var begin\n                $kernel_f = $kernel_convert($f_var)\n                $kernel_args = map($kernel_convert, ($(var_exprs...),))\n                $kernel_tt = Tuple{map(Core.Typeof, $kernel_args)...}\n                $kernel = $zefunction($kernel_f, $kernel_tt; $(compiler_kwargs...))\n                if $launch\n                    $kernel($(var_exprs...); $(call_kwargs...))\n                end\n                $kernel\n            end\n         end)\n\n    return esc(quote\n        let\n            $code\n        end\n    end)\nend\n\n\n## argument conversion\n\nstruct KernelAdaptor end\n\n# convert oneAPI host pointers to device pointers\nAdapt.adapt_storage(to::KernelAdaptor, p::ZePtr{T}) where {T} = reinterpret(Ptr{T}, p)\n\n# convert oneAPI host arrays to device arrays\nAdapt.adapt_storage(::KernelAdaptor, xs::oneArray{T,N}) where {T,N} =\n  Base.unsafe_convert(oneDeviceArray{T,N,AS.CrossWorkgroup}, xs)\n\n# Base.RefValue isn't GPU compatible, so provide a compatible alternative.\n# TODO: port improvements from CUDA.jl\nstruct ZeRefValue{T} <: Ref{T}\n  x::T\nend\nBase.getindex(r::ZeRefValue) = r.x\nAdapt.adapt_structure(to::KernelAdaptor, r::Base.RefValue) = ZeRefValue(adapt(to, r[]))\n\n# broadcast sometimes passes a ref(type), resulting in a GPU-incompatible DataType box.\n# avoid that by using a special kind of ref that knows about the boxed type.\nstruct oneRefType{T} <: Ref{DataType} end\nBase.getindex(r::oneRefType{T}) where T = T\nAdapt.adapt_structure(to::KernelAdaptor, r::Base.RefValue{<:Union{DataType,Type}}) =\n    oneRefType{r[]}()\n\n# case where type is the function being broadcasted\nAdapt.adapt_structure(to::KernelAdaptor,\n                      bc::Broadcast.Broadcasted{Style, <:Any, Type{T}}) where {Style, T} =\n    Broadcast.Broadcasted{Style}((x...) -> T(x...), adapt(to, bc.args), bc.axes)\n\n\"\"\"\n    kernel_convert(x)\n\nThis function is called for every argument to be passed to a kernel, allowing it to be\nconverted to a GPU-friendly format. By default, the function does nothing and returns the\ninput object `x` as-is.\n\nDo not add methods to this function, but instead extend the underlying Adapt.jl package and\nregister methods for the the `oneAPI.KernelAdaptor` type.\n\"\"\"\nkernel_convert(arg) = adapt(KernelAdaptor(), arg)\n\n\n## abstract kernel functionality\n\nabstract type AbstractKernel{F,TT} end\n\n@inline @generated function call(kernel::AbstractKernel{F,TT}, args...; call_kwargs...) where {F,TT}\n    sig = Tuple{F, TT.parameters...}    # Base.signature_type with a function type\n    args = (:(kernel.f), (:( args[$i] ) for i in 1:length(args))...)\n\n    # filter out ghost arguments that shouldn't be passed\n    predicate = dt -> isghosttype(dt) || Core.Compiler.isconstType(dt)\n    to_pass = map(!predicate, sig.parameters)\n    call_t =                  Type[x[1] for x in zip(sig.parameters,  to_pass) if x[2]]\n    call_args = Union{Expr,Symbol}[x[1] for x in zip(args, to_pass)            if x[2]]\n\n    # replace non-isbits arguments (they should be unused, or compilation would have failed)\n    for (i,dt) in enumerate(call_t)\n        if !isbitstype(dt)\n            call_t[i] = Ptr{Any}\n            call_args[i] = :C_NULL\n        end\n    end\n\n    # finalize types\n    call_tt = Base.to_tuple_type(call_t)\n\n    quote\n        onecall(kernel.fun, $call_tt, $(call_args...); call_kwargs...)\n    end\nend\n\n\n## host-side kernels\n\nstruct HostKernel{F,TT} <: AbstractKernel{F,TT}\n    f::F\n    fun::ZeKernel\nend\n\nfunction launch_configuration(kernel::HostKernel{F,TT}) where {F,TT}\n    # Level Zero's zeKernelSuggestGroupSize provides a launch configuration\n    # that exactly cover the input size. This can result in very awkward\n    # configurations, so roll our own version that behaves like CUDA's\n    # occupancy API and assumes the kernel still does bounds checking.\n\n    kernel_props = oneL0.properties(kernel.fun)\n    group_size = if kernel_props.maxGroupSize !== missing\n        kernel_props.maxGroupSize\n    else\n        # without the MAX_GROUP_SIZE extension, we need to be conservative\n        dev = kernel.fun.mod.device\n        compute_props = oneL0.compute_properties(dev)\n        max_size = compute_props.maxTotalGroupSize\n\n        ## when the kernel uses many registers (which we can't query without\n        ## extensions that landed _after_ MAX_GROUP_SIZE, so don't bother)\n        ## the groupsize should be halved\n        group_size = max_size ÷ 2\n    end\n\n    # TODO: align the group size based on preferredGroupSize\n\n    return group_size\nend\n\n\n## host-side API\n\nconst zefunction_lock = ReentrantLock()\n\nfunction zefunction(f::F, tt::TT=Tuple{}; kwargs...) where {F,TT}\n    dev = device()\n\n    Base.@lock zefunction_lock begin\n        # compile the function\n        cache = compiler_cache(dev)\n        source = methodinstance(F, tt)\n        config = compiler_config(dev; kwargs...)::oneAPICompilerConfig\n        fun = GPUCompiler.cached_compilation(cache, source, config, compile, link)\n\n        # create a callable object that captures the function instance. we don't need to think\n        # about world age here, as GPUCompiler already does and will return a different object\n        h = hash(fun, hash(f, hash(tt)))\n        kernel = get(_kernel_instances, h, nothing)\n        if kernel === nothing\n            # create the kernel state object\n            kernel = HostKernel{F,tt}(f, fun)\n            _kernel_instances[h] = kernel\n        end\n        return kernel::HostKernel{F,tt}\n    end\nend\n\n# cache of kernel instances\nconst _kernel_instances = Dict{UInt, Any}()\n\n@inline function onecall(kernel::ZeKernel, tt, args...; groups::ZeDim=1, items::ZeDim=1,\n                         queue::ZeCommandQueue=global_queue(context(), device()))\n    for (i, arg) in enumerate(args)\n        oneL0.arguments(kernel)[i] = arg\n    end\n\n    groupsize!(kernel, items)\n    execute!(queue) do list\n        append_launch!(list, kernel, groups)\n    end\nend\n\nfunction (kernel::HostKernel)(args...; kwargs...)\n    call(kernel, map(kernel_convert, args)...; kwargs...)\nend\n\n\n## TODO: device-side kernels\n"
  },
  {
    "path": "src/compiler/reflection.jl",
    "content": "# code reflection entry-points\n\n# TODO: get and disassemble the native binary using oneL0\n\n#\n# code_* replacements\n#\n\n# function to split off certain kwargs for selective forwarding, at run time.\n# `@oneapi` does something similar at parse time, using `GPUCompiler.split_kwargs`.\nfunction split_kwargs_runtime(kwargs, wanted::Vector{Symbol})\n    remaining = Dict{Symbol, Any}()\n    extracted = Dict{Symbol, Any}()\n    for (key, value) in kwargs\n        if key in wanted\n            extracted[key] = value\n        else\n            remaining[key] = value\n        end\n    end\n    return extracted, remaining\nend\n\nfor method in (:code_typed, :code_warntype, :code_llvm, :code_native)\n    # only code_typed doesn't take a io argument\n    args = method == :code_typed ? (:job,) : (:io, :job)\n\n    @eval begin\n        function $method(io::IO, @nospecialize(func), @nospecialize(types);\n                         kernel::Bool=false, kwargs...)\n            compiler_kwargs, kwargs = split_kwargs_runtime(kwargs, COMPILER_KWARGS)\n            source = methodinstance(typeof(func), Base.to_tuple_type(types))\n            config = compiler_config(device(); kernel, compiler_kwargs...)\n            job = CompilerJob(source, config)\n            GPUCompiler.$method($(args...); kwargs...)\n        end\n        $method(@nospecialize(func), @nospecialize(types); kwargs...) =\n            $method(stdout, func, types; kwargs...)\n    end\nend\n\nconst code_spirv = code_native\n\n\n\n#\n# @device_code_* functions\n#\n\nexport @device_code_lowered, @device_code_typed, @device_code_warntype,\n       @device_code_llvm, @device_code_spirv,\n       @device_code\n\n# forward to GPUCompiler\n@eval $(Symbol(\"@device_code_lowered\")) = $(getfield(GPUCompiler, Symbol(\"@device_code_lowered\")))\n@eval $(Symbol(\"@device_code_typed\")) = $(getfield(GPUCompiler, Symbol(\"@device_code_typed\")))\n@eval $(Symbol(\"@device_code_warntype\")) = $(getfield(GPUCompiler, Symbol(\"@device_code_warntype\")))\n@eval $(Symbol(\"@device_code_llvm\")) = $(getfield(GPUCompiler, Symbol(\"@device_code_llvm\")))\n@eval $(Symbol(\"@device_code_spirv\")) = $(getfield(GPUCompiler, Symbol(\"@device_code_native\")))\n@eval $(Symbol(\"@device_code\")) = $(getfield(GPUCompiler, Symbol(\"@device_code\")))\n\n\n#\n# other\n#\n\n\"\"\"\n    return_type(f, tt) -> r::Type\n\nReturn a type `r` such that `f(args...)::r` where `args::tt`.\n\"\"\"\nfunction return_type(@nospecialize(func), @nospecialize(tt))\n    source = methodinstance(typeof(func), tt)\n    config = compiler_config(device())\n    job = CompilerJob(source, config)\n    interp = GPUCompiler.get_interpreter(job)\n    sig = Base.signature_type(func, tt)\n    return Core.Compiler._return_type(interp, sig)\nend\n"
  },
  {
    "path": "src/context.jl",
    "content": "# context management and global state\n\n# to avoid CUDA-style implicit state, where operations can fail if they are accidentally\n# executed in the wrong context, ownership should always be encoded in each object.\n# the functions below should only be used to determine initial ownership.\n\n# XXX: rework this -- it doesn't work well when altering the state\n\nexport driver, driver!, device, device!, context, context!, global_queue, synchronize, is_integrated\n\n\"\"\"\n    driver() -> ZeDriver\n\nGet the current Level Zero driver for the calling task. If no driver has been explicitly\nset with [`driver!`](@ref), returns the first available driver.\n\nThe driver selection is task-local, allowing different Julia tasks to use different drivers.\n\n# Examples\n```julia\ndrv = driver()\nprintln(\"Using driver: \", drv)\n```\n\nSee also: `driver!`, `drivers`\n\"\"\"\nfunction driver()\n    get!(task_local_storage(), :ZeDriver) do\n        first(drivers())\n    end\nend\n\n\"\"\"\n    driver!(drv::ZeDriver)\n\nSet the current Level Zero driver for the calling task. This also clears the current\ndevice selection, as devices are associated with specific drivers.\n\nThe driver selection is task-local, allowing different Julia tasks to use different drivers.\n\n# Arguments\n- `drv::ZeDriver`: The driver to use for subsequent operations.\n\n# Examples\n```julia\ndrv = drivers()[2]  # Select second available driver\ndriver!(drv)\n```\n\nSee also: `driver`, `drivers`\n\"\"\"\nfunction driver!(drv::ZeDriver)\n    task_local_storage(:ZeDriver, drv)\n    delete!(task_local_storage(), :ZeDevice)\nend\n\n\"\"\"\n    device() -> ZeDevice\n\nGet the current Level Zero device for the calling task. If no device has been explicitly\nset with [`device!`](@ref), returns the first available device for the current driver.\n\nThe device selection is task-local, allowing different Julia tasks to use different devices.\n\n# Examples\n```julia\ndev = device()\nprintln(\"Using device: \", dev)\n```\n\nSee also: `device!`, `devices`, `driver`\n\"\"\"\nfunction device()\n    get!(task_local_storage(), :ZeDevice) do\n        first(devices(driver()))\n    end\nend\n\n\"\"\"\n    device!(dev::ZeDevice)\n    device!(i::Int)\n\nSet the current Level Zero device for the calling task.\n\nThe device selection is task-local, allowing different Julia tasks to use different devices.\n\n# Arguments\n- `dev::ZeDevice`: The device to use for subsequent operations.\n- `i::Int`: Device index (1-based) from the list of available devices for the current driver.\n\n# Examples\n```julia\n# Select by device object\ndev = devices()[2]\ndevice!(dev)\n\n# Select by index\ndevice!(2)  # Select second device\n```\n\nSee also: [`device`](@ref), [`devices`](@ref)\n\"\"\"\nfunction device!(drv::ZeDevice)\n    task_local_storage(:ZeDevice, drv)\nend\nfunction device!(i::Int)\n    devs = devices(driver())\n    if i < 1 || i > length(devs)\n        throw(ArgumentError(\"Invalid device index $i (must be between 1 and $(length(devs)))\"))\n    end\n    return device!(devs[i])\nend\n\n\"\"\"\n    is_integrated(dev::ZeDevice=device()) -> Bool\n\nCheck if the given device is an integrated GPU (i.e., integrated with the host processor).\n\nIntegrated GPUs share memory with the CPU and are typically found in laptop and desktop\nprocessors with integrated graphics.\n\n# Arguments\n- `dev::ZeDevice`: The device to check. Defaults to the current device.\n\n# Returns\n- `true` if the device is integrated, `false` otherwise (e.g., discrete GPU).\n\n# Examples\n```julia\nif is_integrated()\n    println(\"Running on integrated graphics\")\nelse\n    println(\"Running on discrete GPU\")\nend\n\n# Check a specific device\ndev = devices()[1]\nis_integrated(dev)\n```\n\nSee also: [`device`](@ref), [`devices`](@ref)\n\"\"\"\nfunction is_integrated(dev::ZeDevice=device())\n    props = oneL0.properties(dev)\n    return (props.flags & oneL0.ZE_DEVICE_PROPERTY_FLAG_INTEGRATED) != 0\nend\n\nconst global_contexts = Dict{ZeDriver,ZeContext}()\n\n\"\"\"\n    context() -> ZeContext\n\nGet the current Level Zero context for the calling task. If no context has been explicitly\nset with [`context!`](@ref), returns a global context for the current driver.\n\nContexts manage the lifetime of resources like memory allocations and command queues.\nThe context selection is task-local, but contexts themselves are cached globally per driver.\n\n# Examples\n```julia\nctx = context()\nprintln(\"Using context: \", ctx)\n```\n\nSee also: [`context!`](@ref), [`driver`](@ref)\n\"\"\"\nfunction context()\n    get!(task_local_storage(), :ZeContext) do\n        get!(global_contexts, driver()) do\n            ZeContext(driver())\n        end\n    end\nend\n\n\"\"\"\n    context!(ctx::ZeContext)\n\nSet the current Level Zero context for the calling task.\n\nThe context selection is task-local, allowing different Julia tasks to use different contexts.\n\n# Arguments\n- `ctx::ZeContext`: The context to use for subsequent operations.\n\n# Examples\n```julia\nctx = ZeContext(driver())\ncontext!(ctx)\n```\n\nSee also: `context`, `ZeContext`\n\"\"\"\nfunction context!(ctx::ZeContext)\n    task_local_storage(:ZeContext, ctx)\nend\n\n\"\"\"\n    global_queue(ctx::ZeContext, dev::ZeDevice) -> ZeCommandQueue\n\nGet the global command queue for the given context and device. This queue is used as the\ndefault queue for executing operations, guaranteeing expected semantics when using a device\non a Julia task.\n\nThe queue is created with in-order execution flags, meaning commands are executed in the\norder they are submitted. Queues are cached per task and (context, device) pair.\n\n# Arguments\n- `ctx::ZeContext`: The context for the command queue.\n- `dev::ZeDevice`: The device for the command queue.\n\n# Returns\n- `ZeCommandQueue`: A cached command queue with in-order execution.\n\n# Examples\n```julia\nctx = context()\ndev = device()\nqueue = global_queue(ctx, dev)\n```\n\nSee also: `context`, `device`, `synchronize`\n\"\"\"\nfunction global_queue(ctx::ZeContext, dev::ZeDevice)\n    # NOTE: dev purposefully does not default to context() or device() to stress that\n    #       objects should track ownership, and not rely on implicit global state.\n    get!(task_local_storage(), (:ZeCommandQueue, ctx, dev)) do\n        ZeCommandQueue(ctx, dev; flags = oneL0.ZE_COMMAND_QUEUE_FLAG_IN_ORDER)\n    end\nend\n\n\"\"\"\n    synchronize()\n\nBlock the host thread until all operations on the global command queue for the current\ncontext and device have completed.\n\nThis is useful for timing operations or ensuring that GPU work has finished before\naccessing results on the CPU.\n\n# Examples\n```julia\nx = oneArray(rand(1000))\ny = x .+ 1\nsynchronize()  # Wait for GPU computation to complete\nprintln(\"GPU work completed\")\n```\n\nSee also: [`global_queue`](@ref), [`context`](@ref), [`device`](@ref)\n\"\"\"\nfunction oneL0.synchronize()\n    oneL0.synchronize(global_queue(context(), device()))\nend\n\n# re-export and augment parts of oneL0 to make driver and device selection easier\nexport drivers, devices\n\n\"\"\"\n    devices() -> Vector{ZeDevice}\n    devices(drv::ZeDriver) -> Vector{ZeDevice}\n\nReturn a list of available Level Zero devices. Without arguments, returns devices for\nthe current driver. With a driver argument, returns devices for that specific driver.\n\n# Examples\n```julia\n# Get devices for current driver\ndevs = devices()\nprintln(\"Found \", length(devs), \" devices\")\n\n# Get devices for specific driver\ndrv = drivers()[1]\ndevs = devices(drv)\n```\n\nSee also: `device`, `device!`, `drivers`\n\"\"\"\noneL0.devices() = devices(driver())\n\n\n## SYCL state\n\n# XXX: including objects in the TLS key is bad for performance\n\nexport sycl_platform, sycl_device, sycl_context, sycl_queue\n\nfunction sycl_platform(drv=driver())\n    get!(task_local_storage(), (:SYCLPlatform, drv)) do\n        syclPlatform(drv)\n    end\nend\n\nfunction sycl_device(dev=device())\n    get!(task_local_storage(), (:SYCLDevice, dev)) do\n        syclDevice(sycl_platform(), dev)\n    end\nend\n\nfunction sycl_context(ctx=context(), dev=device())\n    get!(task_local_storage(), (:SYCLContext, dev)) do\n        syclContext([sycl_device(dev)], ctx)\n    end\nend\n\nfunction sycl_queue(queue)\n    get!(task_local_storage(), (:SYCLQueue, queue.context, queue.device)) do\n        syclQueue(sycl_context(queue.context, queue.device),\n                  sycl_device(queue.device),\n                  global_queue(queue.context, queue.device))\n    end\nend\n"
  },
  {
    "path": "src/device/array.jl",
    "content": "# Contiguous on-device arrays\n\nexport oneDeviceArray, oneDeviceVector, oneDeviceMatrix, oneLocalArray\n\n\n## construction\n\n# NOTE: we can't support the typical `tuple or series of integer` style construction,\n#       because we're currently requiring a trailing pointer argument.\n\n\"\"\"\n    oneDeviceArray{T,N,A} <: DenseArray{T,N}\n\nDevice-side array type for use within GPU kernels.\n\nThis type represents a view of GPU memory accessible within kernel code. Unlike\n[`oneArray`](@ref) which is used on the host, `oneDeviceArray` is designed for\ndevice-side operations and cannot be directly constructed on the host.\n\n# Type Parameters\n- `T`: Element type\n- `N`: Number of dimensions\n- `A`: Address space (typically `AS.CrossWorkgroup` for global memory)\n\n# Usage\n\n`oneDeviceArray` is typically not constructed directly. Instead, `oneArray` objects\nare automatically converted to `oneDeviceArray` when passed as kernel arguments.\n\n# Examples\n\n```julia\nfunction kernel(a::oneDeviceArray{Float32,1})\n    i = get_global_id()\n    @inbounds a[i] = a[i] * 2.0f0\n    return\nend\n\na = oneArray(rand(Float32, 100))\n@oneapi groups=1 items=100 kernel(a)  # a is converted to oneDeviceArray\n```\n\nSee also: [`oneArray`](@ref), [`oneLocalArray`](@ref), [`@oneapi`](@ref)\n\"\"\"\nstruct oneDeviceArray{T,N,A} <: DenseArray{T,N}\n    ptr::LLVMPtr{T,A}\n    maxsize::Int\n\n    dims::Dims{N}\n    len::Int\n\n    # inner constructors, fully parameterized, exact types (ie. Int not <:Integer)\n    # TODO: deprecate; put `ptr` first like oneArray\n    oneDeviceArray{T,N,A}(dims::Dims{N}, ptr::LLVMPtr{T,A},\n                          maxsize::Int=prod(dims)*sizeof(T)) where {T,A,N} =\n        new(ptr, maxsize, dims, prod(dims))\nend\n\nconst oneDeviceVector = oneDeviceArray{T,1,A} where {T,A}\nconst oneDeviceMatrix = oneDeviceArray{T,2,A} where {T,A}\n\n# outer constructors, non-parameterized\noneDeviceArray(dims::NTuple{N,<:Integer}, p::LLVMPtr{T,A})                where {T,A,N} = oneDeviceArray{T,N,A}(dims, p)\noneDeviceArray(len::Integer,              p::LLVMPtr{T,A})                where {T,A}   = oneDeviceVector{T,A}((len,), p)\n\n# outer constructors, partially parameterized\noneDeviceArray{T}(dims::NTuple{N,<:Integer},   p::LLVMPtr{T,A}) where {T,A,N} = oneDeviceArray{T,N,A}(dims, p)\noneDeviceArray{T}(len::Integer,                p::LLVMPtr{T,A}) where {T,A}   = oneDeviceVector{T,A}((len,), p)\noneDeviceArray{T,N}(dims::NTuple{N,<:Integer}, p::LLVMPtr{T,A}) where {T,A,N} = oneDeviceArray{T,N,A}(dims, p)\noneDeviceVector{T}(len::Integer,               p::LLVMPtr{T,A}) where {T,A}   = oneDeviceVector{T,A}((len,), p)\n\n# outer constructors, fully parameterized\noneDeviceArray{T,N,A}(dims::NTuple{N,<:Integer}, p::LLVMPtr{T,A}) where {T,A,N} = oneDeviceArray{T,N,A}(Int.(dims), p)\noneDeviceVector{T,A}(len::Integer,               p::LLVMPtr{T,A}) where {T,A}   = oneDeviceVector{T,A}((Int(len),), p)\n\n\n## array interface\n\nBase.elsize(::Type{<:oneDeviceArray{T}}) where {T} = sizeof(T)\n\nBase.size(g::oneDeviceArray) = g.dims\nBase.sizeof(x::oneDeviceArray) = Base.elsize(x) * length(x)\n\n# we store the array length too; computing prod(size) is expensive\nBase.size(g::oneDeviceArray{<:Any, 1}) = (g.len,)\nBase.length(g::oneDeviceArray) = g.len\n\nBase.pointer(x::oneDeviceArray{T,<:Any,A}) where {T,A} = Base.unsafe_convert(LLVMPtr{T,A}, x)\n@inline function Base.pointer(x::oneDeviceArray{T,<:Any,A}, i::Integer) where {T,A}\n    Base.unsafe_convert(LLVMPtr{T,A}, x) + Base._memory_offset(x, i)\nend\n\ntypetagdata(a::oneDeviceArray{<:Any,<:Any,A}, i=1) where {A} =\n  reinterpret(LLVMPtr{UInt8,A}, a.ptr + a.maxsize) + i - one(i)\n\n\n## conversions\n\nBase.unsafe_convert(::Type{LLVMPtr{T,A}}, x::oneDeviceArray{T,<:Any,A}) where {T,A} =\n  x.ptr\n\n\n## indexing intrinsics\n\n# TODO: how are allocations aligned by the level zero API? keep track of this\n#       because it enables optimizations like Load Store Vectorization\n#       (cfr. shared memory and its wider-than-datatype alignment)\n\n@generated function alignment(::oneDeviceArray{T}) where {T}\n    if Base.isbitsunion(T)\n        _, sz, al = Base.uniontype_layout(T)\n        al\n    else\n        Base.datatype_alignment(T)\n    end\nend\n\n@device_function @inline function arrayref(A::oneDeviceArray{T}, index::Integer) where {T}\n    # simplified bounds check to avoid the OneTo construction, which calls `max`\n    # and breaks elimination of redundant bounds checks in the generated code.\n    #@boundscheck checkbounds(A, index)\n    @boundscheck index <= length(A) || Base.throw_boundserror(A, index)\n\n    if isbitstype(T)\n        arrayref_bits(A, index)\n    else #if isbitsunion(T)\n        arrayref_union(A, index)\n    end\nend\n\n@inline function arrayref_bits(A::oneDeviceArray{T}, index::Integer) where {T}\n    align = alignment(A)\n    unsafe_load(pointer(A), index, Val(align))\nend\n\n@inline @generated function arrayref_union(A::oneDeviceArray{T,<:Any,AS}, index::Integer) where {T,AS}\n    typs = Base.uniontypes(T)\n\n    # generate code that conditionally loads a value based on the selector value.\n    # lacking noreturn, we return T to avoid inference thinking this can return Nothing.\n    ex = :(Base.llvmcall(\"unreachable\", $T, Tuple{}))\n    for (sel, typ) in Iterators.reverse(enumerate(typs))\n        ex = quote\n            if selector == $(sel-1)\n                ptr = reinterpret(LLVMPtr{$typ,AS}, data_ptr)\n                unsafe_load(ptr, 1, Val(align))\n            else\n                $ex\n            end\n        end\n    end\n\n    quote\n        selector_ptr = typetagdata(A, index)\n        selector = unsafe_load(selector_ptr)\n\n        align = alignment(A)\n        data_ptr = pointer(A, index)\n\n        return $ex\n    end\nend\n\n@device_function @inline function arrayset(A::oneDeviceArray{T}, x::T, index::Integer) where {T}\n    # simplified bounds check (see `arrayref`)\n    #@boundscheck checkbounds(A, index)\n    @boundscheck index <= length(A) || Base.throw_boundserror(A, index)\n\n    if isbitstype(T)\n        arrayset_bits(A, x, index)\n    else #if isbitsunion(T)\n        arrayset_union(A, x, index)\n    end\n    return A\nend\n\n@inline function arrayset_bits(A::oneDeviceArray{T}, x::T, index::Integer) where {T}\n    align = alignment(A)\n    unsafe_store!(pointer(A), x, index, Val(align))\nend\n\n@inline @generated function arrayset_union(A::oneDeviceArray{T,<:Any,AS}, x::T, index::Integer) where {T,AS}\n    typs = Base.uniontypes(T)\n    sel = findfirst(isequal(x), typs)\n\n    quote\n        selector_ptr = typetagdata(A, index)\n        unsafe_store!(selector_ptr, $(UInt8(sel-1)))\n\n        align = alignment(A)\n        data_ptr = pointer(A, index)\n\n        unsafe_store!(reinterpret(LLVMPtr{$x,AS}, data_ptr), x, 1, Val(align))\n        return\n    end\nend\n\n@device_function @inline function unsafe_cached_load(ptr::LLVMPtr{T, A}, i::Integer, align::Val) where {T, A}\n    # For SPIR-V/Level Zero, we don't have explicit cache control intrinsics like CUDA's __ldg\n    # So we fall back to a regular unsafe_load. The SPIR-V compiler may still apply\n    # appropriate optimizations based on context.\n    unsafe_load(ptr, i, align)\nend\n\n@device_function @inline function const_arrayref(A::oneDeviceArray{T}, index::Integer) where {T}\n    # simplified bounds check (see `arrayset`)\n    #@boundscheck checkbounds(A, index)\n    @boundscheck index <= length(A) || Base.throw_boundserror(A, index)\n\n    align = alignment(A)\n    unsafe_cached_load(pointer(A), index, Val(align))\nend\n\n\n## indexing\n\nBase.IndexStyle(::Type{<:oneDeviceArray}) = Base.IndexLinear()\n\nBase.@propagate_inbounds Base.getindex(A::oneDeviceArray{T}, i1::Integer) where {T} =\n    arrayref(A, i1)\nBase.@propagate_inbounds Base.setindex!(A::oneDeviceArray{T}, x, i1::Integer) where {T} =\n    arrayset(A, convert(T,x)::T, i1)\n\n# preserve the specific integer type when indexing device arrays,\n# to avoid extending 32-bit hardware indices to 64-bit.\nBase.to_index(::oneDeviceArray, i::Integer) = i\n\n# Base doesn't like Integer indices, so we need our own ND get and setindex! routines.\n# See also: https://github.com/JuliaLang/julia/pull/42289\nBase.@propagate_inbounds Base.getindex(A::oneDeviceArray,\n                                       I::Union{Integer, CartesianIndex}...) =\n    A[Base._to_linear_index(A, to_indices(A, I)...)]\nBase.@propagate_inbounds Base.setindex!(A::oneDeviceArray, x,\n                                        I::Union{Integer, CartesianIndex}...) =\n    A[Base._to_linear_index(A, to_indices(A, I)...)] = x\n\n\n## const indexing\n\n\"\"\"\n    Const(A::oneDeviceArray)\n\nMark a oneDeviceArray as constant/read-only. The invariant guaranteed is that you will not\nmodify an oneDeviceArray for the duration of the current kernel.\n\nThis API can only be used on devices with compute capability 3.5 or higher.\n\n!!! warning\n    Experimental API. Subject to change without deprecation.\n\"\"\"\nstruct Const{T,N,AS} <: DenseArray{T,N}\n    a::oneDeviceArray{T,N,AS}\nend\nBase.Experimental.Const(A::oneDeviceArray) = Const(A)\n\nBase.IndexStyle(::Type{<:Const}) = IndexLinear()\nBase.size(C::Const) = size(C.a)\nBase.axes(C::Const) = axes(C.a)\nBase.@propagate_inbounds Base.getindex(A::Const, i1::Integer) = const_arrayref(A.a, i1)\n\n# deprecated\nBase.@propagate_inbounds ldg(A::oneDeviceArray, i1::Integer) = const_arrayref(A, i1)\n\n\n## other\n\nBase.show(io::IO, a::oneDeviceVector) =\n    print(io, \"$(length(a))-element device array at $(pointer(a))\")\nBase.show(io::IO, a::oneDeviceArray) =\n    print(io, \"$(join(a.shape, '×')) device array at $(pointer(a))\")\n\nBase.show(io::IO, mime::MIME\"text/plain\", a::oneDeviceArray) = show(io, a)\n\n@inline function Base.iterate(A::oneDeviceArray, i=1)\n    if (i % UInt) - 1 < length(A)\n        (@inbounds A[i], i + 1)\n    else\n        nothing\n    end\nend\n\nfunction Base.reinterpret(::Type{T}, a::oneDeviceArray{S,N,A}) where {T,S,N,A}\n  err = _reinterpret_exception(T, a)\n  err === nothing || throw(err)\n\n  if sizeof(T) == sizeof(S) # fast case\n    return oneDeviceArray{T,N,A}(size(a), reinterpret(LLVMPtr{T,A}, a.ptr), a.maxsize)\n  end\n\n  isize = size(a)\n  size1 = div(isize[1]*sizeof(S), sizeof(T))\n  osize = tuple(size1, Base.tail(isize)...)\n  return oneDeviceArray{T,N,A}(osize, reinterpret(LLVMPtr{T,A}, a.ptr), a.maxsize)\nend\n\n\n## local memory\n\nexport oneLocalArray\n\n\"\"\"\n    oneLocalArray(::Type{T}, dims)\n\nAllocate local (workgroup-shared) memory within a GPU kernel.\n\nLocal memory is shared among all work-items in a workgroup and provides faster access than\nglobal memory. It's useful for algorithms that require cooperation between work-items,\nsuch as reductions or matrix multiplication tiling.\n\n# Arguments\n- `T`: Element type\n- `dims`: Dimensions (must be compile-time constants)\n\n# Examples\n\n```julia\nfunction matmul_kernel(A, B, C)\n    # Allocate 16x16 tile in local memory\n    tile_A = oneLocalArray(Float32, (16, 16))\n    tile_B = oneLocalArray(Float32, (16, 16))\n\n    # Load data into local memory\n    local_i = get_local_id(0)\n    local_j = get_local_id(1)\n    tile_A[local_i, local_j] = A[...]\n    tile_B[local_i, local_j] = B[...]\n\n    barrier()  # Synchronize workgroup\n\n    # Compute using local memory\n    # ...\n    return\nend\n```\n\n!!! note\n    The dimensions must be known at compile time. Local memory is limited (typically 64KB\n    per workgroup), so large allocations may fail.\n\nSee also: [`oneDeviceArray`](@ref), [`barrier`](@ref)\n\"\"\"\n@inline function oneLocalArray(::Type{T}, dims) where {T}\n    len = prod(dims)\n    # NOTE: this relies on const-prop to forward the literal length to the generator.\n    #       maybe we should include the size in the type, like StaticArrays does?\n    ptr = emit_localmemory(T, Val(len))\n    oneDeviceArray(dims, ptr)\nend\n"
  },
  {
    "path": "src/device/atomics.jl",
    "content": "# Atomic operation device overrides and fallbacks\n\n# Fallback wrappers for Float32 atomic_inc!/atomic_dec!\n# Intel Level Zero doesn't support these directly for floating-point types,\n# so we implement them using atomic_add!/atomic_sub!\n\n@device_override @inline function SPIRVIntrinsics.atomic_inc!(p::LLVMPtr{Float32, AS}) where {AS}\n    SPIRVIntrinsics.atomic_add!(p, Float32(1))\nend\n\n@device_override @inline function SPIRVIntrinsics.atomic_dec!(p::LLVMPtr{Float32, AS}) where {AS}\n    SPIRVIntrinsics.atomic_sub!(p, Float32(1))\nend\n\n# Float64 fallbacks (if Float64 is supported on device)\n@device_override @inline function SPIRVIntrinsics.atomic_inc!(p::LLVMPtr{Float64, AS}) where {AS}\n    SPIRVIntrinsics.atomic_add!(p, Float64(1))\nend\n\n@device_override @inline function SPIRVIntrinsics.atomic_dec!(p::LLVMPtr{Float64, AS}) where {AS}\n    SPIRVIntrinsics.atomic_sub!(p, Float64(1))\nend\n"
  },
  {
    "path": "src/device/quirks.jl",
    "content": "macro print_and_throw(args...)\n    quote\n        @println \"ERROR: \" $(args...) \".\"\n        throw(nothing)\n    end\nend\n\n# math.jl\n@device_override @noinline Base.Math.throw_complex_domainerror(f::Symbol, x) =\n    @print_and_throw \"This operation requires a complex input to return a complex result\"\n@device_override @noinline Base.Math.throw_exp_domainerror(x) =\n    @print_and_throw \"Exponentiation yielding a complex result requires a complex argument\"\n\n# intfuncs.jl\n@device_override @noinline Base.throw_domerr_powbysq(::Any, p) =\n    @print_and_throw \"Cannot raise an integer to a negative power\"\n@device_override @noinline Base.throw_domerr_powbysq(::Integer, p) =\n    @print_and_throw \"Cannot raise an integer to a negative power\"\n@device_override @noinline Base.throw_domerr_powbysq(::AbstractMatrix, p) =\n    @print_and_throw \"Cannot raise an integer to a negative power\"\n\n# checked.jl\n@device_override @noinline Base.Checked.throw_overflowerr_binaryop(op, x, y) =\n    @print_and_throw \"Binary operation overflowed\"\n@device_override @noinline Base.Checked.throw_overflowerr_negation(op, x, y) =\n    @print_and_throw \"Negation overflowed\"\n\n# boot.jl\n@device_override @noinline Core.throw_inexacterror(f::Symbol, ::Type{T}, val) where {T} =\n    @print_and_throw \"Inexact conversion\"\n\n# abstractarray.jl\n@device_override @noinline Base.throw_boundserror(A, I) =\n    @print_and_throw \"Out-of-bounds array access\"\n\n# trig.jl\n@device_override @noinline Base.Math.sincos_domain_error(x) =\n    @print_and_throw \"sincos(x) is only defined for finite x.\"\n\n# diagonal.jl\n# XXX: remove when we have malloc\nimport LinearAlgebra\n@device_override function Base.setindex!(D::LinearAlgebra.Diagonal, v, i::Int, j::Int)\n    @boundscheck checkbounds(D, i, j)\n    if i == j\n        @inbounds D.diag[i] = v\n    elseif !iszero(v)\n        @print_and_throw \"cannot set off-diagonal entry to a nonzero value\"\n    end\n    return v\nend\n\n# number.jl\n# XXX: remove when we have malloc\n@device_override @inline function Base.getindex(x::Number, I::Integer...)\n    @boundscheck all(isone, I) ||\n        @print_and_throw \"Out-of-bounds access of scalar value\"\n    x\nend\n\n# From Metal.jl to avoid widemul and Int128\n@static if VERSION >= v\"1.12.0-DEV.1736\" # Partially reverts JuliaLang/julia PR #56750\n    const BitInteger64 = Union{Int64, UInt64}\n    @device_override function Base.checkbounds(::Type{Bool}, v::StepRange{<:BitInteger64, <:BitInteger64}, i::BitInteger64)\n        @inline\n        return checkindex(Bool, eachindex(IndexLinear(), v), i)\n    end\n\n    # Less accurate division for Float32 than Base Julia which relies on Float64\n    # https://github.com/JuliaLang/julia/pull/49637\n    @device_override Base.div(x::Float32, y::Float32) = trunc(x / y)\nend\n"
  },
  {
    "path": "src/device/runtime.jl",
    "content": "# device runtime libraries\n\n\n## Julia library\n\n# reset the runtime cache from global scope, so that any change triggers recompilation\nGPUCompiler.reset_runtime()\n\nfunction signal_exception()\n    return\nend\n\nfunction report_exception(ex)\n    # @cuprintf(\"\"\"\n    #     ERROR: a %s was thrown during kernel execution.\n    #            Run Julia on debug level 2 for device stack traces.\n    #     \"\"\", ex)\n    return\nend\n\nreport_oom(sz) = return #@cuprintf(\"ERROR: Out of dynamic GPU memory (trying to allocate %i bytes)\\n\", sz)\n\nfunction report_exception_name(ex)\n    # @cuprintf(\"\"\"\n    #     ERROR: a %s was thrown during kernel execution.\n    #     Stacktrace:\n    #     \"\"\", ex)\n    return\nend\n\nfunction report_exception_frame(idx, func, file, line)\n    # @cuprintf(\" [%i] %s at %s:%i\\n\", idx, func, file, line)\n    return\nend\n\n\n## SPIRV libraries\n\n# TODO\n"
  },
  {
    "path": "src/gpuarrays.jl",
    "content": "# GPUArrays.jl interface\n\nconst GLOBAL_RNGs = Dict{ZeDevice,GPUArrays.RNG}()\nfunction GPUArrays.default_rng(::Type{<:oneArray})\n    dev = device()\n    get!(GLOBAL_RNGs, dev) do\n        N = oneL0.compute_properties(dev).maxTotalGroupSize\n        state = oneArray{NTuple{4, UInt32}}(undef, N)\n        rng = GPUArrays.RNG(state)\n        Random.seed!(rng)\n        rng\n    end\nend\n"
  },
  {
    "path": "src/indexing.jl",
    "content": "Base.to_index(::oneArray, I::AbstractArray{Bool}) = findall(I)\n\nif VERSION >= v\"1.11.0-DEV.1157\"\n    Base.to_indices(x::oneArray, I::Tuple{AbstractArray{Bool}}) =\n        (Base.to_index(x, I[1]),)\nend\n\nfunction _ker!(ys, bools, indices)\n    i = get_global_id()\n\n    @inbounds if i ≤ length(bools) && bools[i]\n        ii = CartesianIndices(bools)[i]\n        b = indices[i] # new position\n        ys[b] = ii\n    end\n    return\nend\n\nfunction Base.findall(bools::oneArray{Bool})\n    I = keytype(bools)\n\n    indices = cumsum(reshape(bools, prod(size(bools))))\n\n    n = isempty(indices) ? 0 : @allowscalar indices[end]\n\n    ys = oneArray{I}(undef, n)\n\n    if n > 0\n        kernel = @oneapi launch = false _ker!(ys, bools, indices)\n        group_size = launch_configuration(kernel)\n        kernel(ys, bools, indices; items = group_size, groups = cld(length(bools), group_size))\n    end\n    # unsafe_free!(indices)\n\n    return ys\nend\n"
  },
  {
    "path": "src/mapreduce.jl",
    "content": "## COV_EXCL_START\n\n# TODO\n# - serial version for lower latency\n# - group-stride loop to delay need for second kernel launch\n\n# Widen sub-word types to avoid shared memory corruption on Intel GPUs.\n# Writing 1/2-byte values to local memory can clobber adjacent bytes.\n# Only applies to integer/boolean types where `%` conversion is valid.\n@inline _widen_type(::Type{Bool}) = Int32\n@inline _widen_type(::Type{Int8}) = Int32\n@inline _widen_type(::Type{UInt8}) = Int32\n@inline _widen_type(::Type{Int16}) = Int32\n@inline _widen_type(::Type{UInt16}) = Int32\n@inline _widen_type(::Type{T}) where T = T\n\n# Dispatch-based conversions so the compiler never generates `%` for non-integer types\n@inline _to_wide(val, ::Type{W}) where W = val % W\n@inline _to_wide(val::T, ::Type{T}) where T = val\n@inline _from_wide(val, ::Type{T}) where T = val % T\n@inline _from_wide(val::T, ::Type{T}) where T = val\n\n# Reduce a value across a group, using local memory for communication\n@inline function reduce_group(op, val::T, neutral, ::Val{maxitems}) where {T, maxitems}\n    items = get_local_size()\n    item = get_local_id()\n\n    # use a wider type for shared memory to avoid sub-word corruption\n    W = _widen_type(T)\n    shared = oneLocalArray(W, (maxitems,))\n    @inbounds shared[item] = _to_wide(val, W)\n\n    # perform a reduction\n    d = 1\n    while d < items\n        barrier(0)\n        index = 2 * d * (item-1) + 1\n        @inbounds if index <= items\n            other_val = if index + d <= items\n                _from_wide(shared[index+d], T)\n            else\n                neutral\n            end\n            shared[index] = _to_wide(op(_from_wide(shared[index], T), other_val), W)\n        end\n        d *= 2\n    end\n\n    # load the final value on the first item\n    if item == 1\n        val = @inbounds _from_wide(shared[item], T)\n    end\n\n    return val\nend\n\nBase.@propagate_inbounds _map_getindex(args::Tuple, I) = ((args[1][I]), _map_getindex(Base.tail(args), I)...)\nBase.@propagate_inbounds _map_getindex(args::Tuple{Any}, I) = ((args[1][I]),)\nBase.@propagate_inbounds _map_getindex(args::Tuple{}, I) = ()\n\n# Reduce an array across the grid. All elements to be processed can be addressed by the\n# product of the two iterators `Rreduce` and `Rother`, where the latter iterator will have\n# singleton entries for the dimensions that should be reduced (and vice versa).\nfunction partial_mapreduce_device(f, op, neutral, maxitems, Rreduce, Rother, R, As...)\n    # decompose the 1D hardware indices into separate ones for reduction (across items\n    # and possibly groups if it doesn't fit) and other elements (remaining groups)\n    localIdx_reduce = get_local_id()\n    localDim_reduce = get_local_size()\n    groupIdx_reduce, groupIdx_other = fldmod1(get_group_id(), length(Rother))\n    groupDim_reduce = get_num_groups() ÷ length(Rother)\n\n    # group-based indexing into the values outside of the reduction dimension\n    # (that means we can safely synchronize items within this group)\n    iother = groupIdx_other\n    @inbounds if iother <= length(Rother)\n        Iother = Rother[iother]\n\n        # load the neutral value\n        Iout = CartesianIndex(Tuple(Iother)..., groupIdx_reduce)\n        neutral = if neutral === nothing\n            R[Iout]\n        else\n            neutral\n        end\n\n        val = op(neutral, neutral)\n\n        # reduce serially across chunks of input vector that don't fit in a group\n        ireduce = localIdx_reduce + (groupIdx_reduce - 1) * localDim_reduce\n        while ireduce <= length(Rreduce)\n            Ireduce = Rreduce[ireduce]\n            J = max(Iother, Ireduce)\n            val = op(val, f(_map_getindex(As, J)...))\n            ireduce += localDim_reduce * groupDim_reduce\n        end\n\n        val = reduce_group(op, val, neutral, maxitems)\n\n        # write back to memory\n        if localIdx_reduce == 1\n            R[Iout] = val\n        end\n    end\n\n    return\nend\n\n## COV_EXCL_STOP\n\nfunction GPUArrays.mapreducedim!(f::F, op::OP, R::oneWrappedArray{T},\n                                 A::Union{AbstractArray,Broadcast.Broadcasted};\n                                 init=nothing) where {F, OP, T}\n    Base.check_reducedims(R, A)\n    length(A) == 0 && return R # isempty(::Broadcasted) iterates\n\n    # add singleton dimensions to the output container, if needed\n    if ndims(R) < ndims(A)\n        dims = Base.fill_to_length(size(R), 1, Val(ndims(A)))\n        R = reshape(R, dims)\n    end\n\n    # iteration domain, split in two: one part covers the dimensions that should\n    # be reduced, and the other covers the rest. combining both covers all values.\n    Rall = CartesianIndices(axes(A))\n    Rother = CartesianIndices(axes(R))\n    Rreduce = CartesianIndices(ifelse.(axes(A) .== axes(R), Ref(Base.OneTo(1)), axes(A)))\n    # NOTE: we hard-code `OneTo` (`first.(axes(A))` would work too) or we get a\n    #       CartesianIndices object with UnitRanges that behave badly on the GPU.\n    @assert length(Rall) == length(Rother) * length(Rreduce)\n\n    # allocate an additional, empty dimension to write the reduced value to.\n    # this does not affect the actual location in memory of the final values,\n    # but allows us to write a generalized kernel supporting partial reductions.\n    R′ = reshape(R, (size(R)..., 1))\n\n    # how many items do we want?\n    #\n    # items in a group work together to reduce values across the reduction dimensions;\n    # we want as many as possible to improve algorithm efficiency and execution occupancy.\n    wanted_items = length(Rreduce)\n    function compute_items(max_items)\n        if wanted_items > max_items\n            max_items\n        else\n            wanted_items\n        end\n    end\n\n    # how many items can we launch?\n    #\n    # we might not be able to launch all those items to reduce each slice in one go.\n    # that's why each items also loops across their inputs, processing multiple values\n    # so that we can span the entire reduction dimension using a single item group.\n\n    # group size is restricted by local memory (use widened type for sub-word types)\n    max_lmem_elements = compute_properties(device()).maxSharedLocalMemory ÷ sizeof(_widen_type(T))\n    max_items = min(compute_properties(device()).maxTotalGroupSize,\n                    compute_items(max_lmem_elements ÷ 2))\n    # TODO: dynamic local memory to avoid two compilations\n\n    # let the driver suggest a group size\n    args = (f, op, init, Val(max_items), Rreduce, Rother, R′, A)\n    kernel_args = kernel_convert.(args)\n    kernel_tt = Tuple{Core.Typeof.(kernel_args)...}\n    kernel = zefunction(partial_mapreduce_device, kernel_tt)\n    reduce_items = compute_items(launch_configuration(kernel))\n\n    # how many groups should we launch?\n    #\n    # even though we can always reduce each slice in a single item group, that may not be\n    # optimal as it might not saturate the GPU. we already launch some groups to process\n    # independent dimensions in parallel; pad that number to ensure full occupancy.\n    other_groups = length(Rother)\n    reduce_groups = cld(length(Rreduce), reduce_items)\n\n    # determine the launch configuration\n    items = reduce_items\n    groups = reduce_groups*other_groups\n\n    # perform the actual reduction\n    if reduce_groups == 1\n        # we can cover the dimensions to reduce using a single group\n        @oneapi items groups partial_mapreduce_device(\n            f, op, init, Val(items), Rreduce, Rother, R′, A)\n    else\n        # we need multiple steps to cover all values to reduce\n        partial = similar(R, (size(R)..., reduce_groups))\n        if init === nothing\n            # without an explicit initializer we need to copy from the output container\n            partial .= R\n        end\n        @oneapi items groups partial_mapreduce_device(\n            f, op, init, Val(items), Rreduce, Rother, partial, A)\n\n        GPUArrays.mapreducedim!(identity, op, R′, partial; init=init)\n    end\n\n    return R\nend\n"
  },
  {
    "path": "src/memory.jl",
    "content": "# memory operations\n\n\"\"\"\n    Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice, dst, src, N)\n\nLow-level memory copy operation on the GPU.\n\nCopies `N` elements of type `T` from `src` to `dst` using the specified context and device.\nBoth `src` and `dst` can be either host pointers (`Ptr`) or device pointers (`ZePtr`).\n\n# Arguments\n- `ctx::ZeContext`: Level Zero context\n- `dev::ZeDevice`: Level Zero device\n- `dst::Union{Ptr{T},ZePtr{T}}`: Destination pointer\n- `src::Union{Ptr{T},ZePtr{T}}`: Source pointer\n- `N::Integer`: Number of elements to copy\n\n!!! warning\n    This is a low-level function. No bounds checking is performed. For safe array copying,\n    use `copyto!` on `oneArray` objects instead.\n\nSee also: [`copyto!`](@ref), [`oneArray`](@ref)\n\"\"\"\nfunction Base.unsafe_copyto!(ctx::ZeContext, dev::ZeDevice, dst::Union{Ptr{T},ZePtr{T}},\n                             src::Union{Ptr{T},ZePtr{T}}, N::Integer) where T\n    bytes = N*sizeof(T)\n    bytes==0 && return\n    execute!(global_queue(ctx, dev)) do list\n        append_copy!(list, dst, src, bytes)\n    end\nend\n\n\"\"\"\n    unsafe_fill!(ctx::ZeContext, dev::ZeDevice, ptr, pattern, N)\n\nLow-level memory fill operation on the GPU.\n\nFills `N` elements at `ptr` with the given pattern using the specified context and device.\n\n# Arguments\n- `ctx::ZeContext`: Level Zero context\n- `dev::ZeDevice`: Level Zero device\n- `ptr::Union{Ptr{T},ZePtr{T}}`: Pointer to memory to fill\n- `pattern::Union{Ptr{T},ZePtr{T}}`: Pointer to pattern value\n- `N::Integer`: Number of elements to fill\n\n!!! warning\n    This is a low-level function. For safe array operations, use `fill!` on `oneArray`\n    objects instead.\n\nSee also: [`fill!`](@ref), [`oneArray`](@ref)\n\"\"\"\nfunction unsafe_fill!(ctx::ZeContext, dev::ZeDevice, ptr::Union{Ptr{T},ZePtr{T}},\n                      pattern::Union{Ptr{T},ZePtr{T}}, N::Integer) where T\n    bytes = N*sizeof(T)\n    bytes==0 && return\n    execute!(global_queue(ctx, dev)) do list\n        append_fill!(list, ptr, pattern, sizeof(T), bytes)\n    end\nend\n"
  },
  {
    "path": "src/oneAPI.jl",
    "content": "module oneAPI\n\nusing GPUArrays\nusing Adapt\n\nusing GPUCompiler\n\nimport ExprTools\n\nusing SpecialFunctions\n\nimport Preferences\n\nimport KernelAbstractions: KernelAbstractions\n\nusing LLVM\nusing LLVM.Interop\nusing Core: LLVMPtr\n\nusing SPIRV_LLVM_Translator_jll, SPIRV_Tools_jll\nusing oneAPI_Support_jll\n\nexport oneL0\n\n# core library\ninclude(\"../lib/utils/APIUtils.jl\")\ninclude(\"../lib/level-zero/oneL0.jl\")\nusing .oneL0\nfunctional() = oneL0.functional[]\n\n# device functionality\nimport SPIRVIntrinsics\nSPIRVIntrinsics.@import_all\nSPIRVIntrinsics.@reexport_public\nBase.Experimental.@MethodTable(method_table)\ninclude(\"device/runtime.jl\")\ninclude(\"device/array.jl\")\ninclude(\"device/quirks.jl\")\ninclude(\"device/atomics.jl\")\n\n# essential stuff\ninclude(\"context.jl\")\n\n# array abstraction\ninclude(\"memory.jl\")\ninclude(\"pool.jl\")\ninclude(\"array.jl\")\n\n# compiler implementation\ninclude(\"compiler/compilation.jl\")\ninclude(\"compiler/execution.jl\")\ninclude(\"compiler/reflection.jl\")\n\nif Sys.islinux()\n# library interop\ninclude(\"../lib/support/Support.jl\")\ninclude(\"../lib/sycl/SYCL.jl\")\nusing .SYCL\nexport SYCL\n\n# array libraries\ninclude(\"../lib/mkl/oneMKL.jl\")\nexport oneMKL\nend\n\n# integrations and specialized functionality\ninclude(\"broadcast.jl\")\ninclude(\"mapreduce.jl\")\ninclude(\"gpuarrays.jl\")\ninclude(\"random.jl\")\ninclude(\"utils.jl\")\n\ninclude(\"oneAPIKernels.jl\")\nimport .oneAPIKernels: oneAPIBackend\ninclude(\"accumulate.jl\")\ninclude(\"sorting.jl\")\ninclude(\"indexing.jl\")\nexport oneAPIBackend\n\nfunction __init__()\n    precompiling = ccall(:jl_generating_output, Cint, ()) != 0\n    precompiling && return\n\n    if oneL0.NEO_jll.is_available() && oneL0.functional[]\n        if Sys.iswindows()\n            @warn \"\"\"oneAPI.jl support for native Windows is experimental and incomplete.\n                 For the time being, it is recommended to use WSL or Linux instead.\"\"\"\n        else\n            # ensure that the OpenCL loader finds the ICD files from our artifacts\n            ENV[\"OCL_ICD_FILENAMES\"] = oneL0.NEO_jll.libigdrcl\n        end\n\n        # XXX: work around an issue with SYCL/Level Zero interoperability\n        #      (see JuliaGPU/oneAPI.jl#417)\n        ENV[\"SYCL_PI_LEVEL_ZERO_BATCH_SIZE\"] = \"1\"\n    end\n    return nothing\nend\n\nfunction set_debug!(debug::Bool)\n    for jll in [oneL0.NEO_jll, oneL0.NEO_jll.libigc_jll]\n        Preferences.set_preferences!(jll, \"debug\" => string(debug); force=true)\n    end\n    @info \"oneAPI debug mode $(debug ? \"enabled\" : \"disabled\"); please re-start Julia.\"\nend\n\nend\n"
  },
  {
    "path": "src/oneAPIKernels.jl",
    "content": "module oneAPIKernels\n\nusing ..oneAPI\nusing ..oneAPI: @device_override, SPIRVIntrinsics, method_table\n\nimport KernelAbstractions as KA\n\nimport StaticArrays\n\nimport Adapt\n\n\n## Back-end Definition\n\nexport oneAPIBackend\n\nstruct oneAPIBackend <: KA.GPU\n    prefer_blocks::Bool\n    always_inline::Bool\nend\n\noneAPIBackend(; prefer_blocks = false, always_inline = false) = oneAPIBackend(prefer_blocks, always_inline)\n\n@inline KA.allocate(::oneAPIBackend, ::Type{T}, dims::Tuple; unified::Bool = false) where {T} = oneArray{T, length(dims), unified ? oneAPI.oneL0.SharedBuffer : oneAPI.oneL0.DeviceBuffer}(undef, dims)\n@inline KA.zeros(::oneAPIBackend, ::Type{T}, dims::Tuple; unified::Bool = false) where {T} = fill!(oneArray{T, length(dims), unified ? oneAPI.oneL0.SharedBuffer : oneAPI.oneL0.DeviceBuffer}(undef, dims), zero(T))\n@inline KA.ones(::oneAPIBackend, ::Type{T}, dims::Tuple; unified::Bool = false) where {T} = fill!(oneArray{T, length(dims), unified ? oneAPI.oneL0.SharedBuffer : oneAPI.oneL0.DeviceBuffer}(undef, dims), one(T))\n\nKA.get_backend(::oneArray) = oneAPIBackend()\n# TODO should be non-blocking\nKA.synchronize(::oneAPIBackend) = oneAPI.oneL0.synchronize()\nKA.supports_float64(::oneAPIBackend) = false  # TODO: Check if this is device dependent\nKA.supports_unified(::oneAPIBackend) = true\n\nKA.functional(::oneAPIBackend) = oneAPI.functional()\n\nAdapt.adapt_storage(::oneAPIBackend, a::AbstractArray) = Adapt.adapt(oneArray, a)\nAdapt.adapt_storage(::oneAPIBackend, a::oneArray) = a\nAdapt.adapt_storage(::KA.CPU, a::oneArray) = convert(Array, a)\n\n\n## Memory Operations\n\nfunction KA.copyto!(::oneAPIBackend, A, B)\n    copyto!(A, B)\n    # TODO: Address device to host copies in jl being synchronizing\nend\n\n\n## Device Operations\n\nfunction KA.ndevices(::oneAPIBackend)\n    return length(oneAPI.devices())\nend\n\nfunction KA.device(::oneAPIBackend)::Int\n    dev = oneAPI.device()\n    devs = oneAPI.devices()\n    idx = findfirst(==(dev), devs)\n    return idx === nothing ? 1 : idx\nend\n\nfunction KA.device!(backend::oneAPIBackend, id::Int)\n    return oneAPI.device!(id)\nend\n\n\n## Kernel Launch\n\nfunction KA.mkcontext(kernel::KA.Kernel{oneAPIBackend}, _ndrange, iterspace)\n    KA.CompilerMetadata{KA.ndrange(kernel), KA.DynamicCheck}(_ndrange, iterspace)\nend\nfunction KA.mkcontext(kernel::KA.Kernel{oneAPIBackend}, I, _ndrange, iterspace,\n                      ::Dynamic) where Dynamic\n    KA.CompilerMetadata{KA.ndrange(kernel), Dynamic}(I, _ndrange, iterspace)\nend\n\nfunction KA.launch_config(kernel::KA.Kernel{oneAPIBackend}, ndrange, workgroupsize)\n    if ndrange isa Integer\n        ndrange = (ndrange,)\n    end\n    if workgroupsize isa Integer\n        workgroupsize = (workgroupsize, )\n    end\n\n    # partition checked that the ndrange's agreed\n    if KA.ndrange(kernel) <: KA.StaticSize\n        ndrange = nothing\n    end\n\n    iterspace, dynamic = if KA.workgroupsize(kernel) <: KA.DynamicSize &&\n        workgroupsize === nothing\n        # use ndrange as preliminary workgroupsize for autotuning\n        KA.partition(kernel, ndrange, ndrange)\n    else\n        KA.partition(kernel, ndrange, workgroupsize)\n    end\n\n    return ndrange, workgroupsize, iterspace, dynamic\nend\n\nfunction threads_to_workgroupsize(threads, ndrange)\n    total = 1\n    return map(ndrange) do n\n        x = min(div(threads, total), n)\n        total *= x\n        return x\n    end\nend\n\nfunction (obj::KA.Kernel{oneAPIBackend})(args...; ndrange=nothing, workgroupsize=nothing)\n    backend = KA.backend(obj)\n\n    ndrange, workgroupsize, iterspace, dynamic = KA.launch_config(obj, ndrange, workgroupsize)\n    # this might not be the final context, since we may tune the workgroupsize\n    ctx = KA.mkcontext(obj, ndrange, iterspace)\n\n    # If the kernel is statically sized we can tell the compiler about that\n    if KA.workgroupsize(obj) <: KA.StaticSize\n        # TODO: maxthreads\n        # maxthreads = prod(KA.get(KA.workgroupsize(obj)))\n    else\n        # maxthreads = nothing\n    end\n\n    kernel = @oneapi launch = false always_inline = backend.always_inline obj.f(ctx, args...)\n\n    # figure out the optimal workgroupsize automatically\n    if KA.workgroupsize(obj) <: KA.DynamicSize && workgroupsize === nothing\n        items = oneAPI.launch_configuration(kernel)\n\n        if backend.prefer_blocks\n            # Prefer blocks over threads:\n            # Reducing the workgroup size (items) increases the number of workgroups (blocks).\n            # We use a simple heuristic here since we lack full occupancy info (max_blocks) from launch_configuration.\n\n            # If the total range is large enough, full workgroups are fine.\n            # If the range is small, we might want to reduce 'items' to create more blocks to fill the GPU.\n            # (Simplified logic compared to CUDA.jl which uses explicit occupancy calculators)\n            total_items = prod(ndrange)\n            if total_items < items * 16 # Heuristic factor\n                # Force at least a few blocks if possible by reducing items per block\n                target_blocks = 16 # Target at least 16 blocks\n                items = max(1, min(items, cld(total_items, target_blocks)))\n            end\n        end\n\n        workgroupsize = threads_to_workgroupsize(items, ndrange)\n        iterspace, dynamic = KA.partition(obj, ndrange, workgroupsize)\n        ctx = KA.mkcontext(obj, ndrange, iterspace)\n    end\n\n    groups = length(KA.blocks(iterspace))\n    items = length(KA.workitems(iterspace))\n\n    if groups == 0\n        return nothing\n    end\n\n    # Launch kernel\n    kernel(ctx, args...; items, groups)\n\n    return nothing\nend\n\n\n## Indexing Functions\n\n@device_override @inline function KA.__index_Local_Linear(ctx)\n    return get_local_id()\nend\n\n@device_override @inline function KA.__index_Group_Linear(ctx)\n    return get_group_id()\nend\n\n@device_override @inline function KA.__index_Global_Linear(ctx)\n    return get_global_id()\nend\n\n@device_override @inline function KA.__index_Local_Cartesian(ctx)\n    @inbounds KA.workitems(KA.__iterspace(ctx))[get_local_id()]\nend\n\n@device_override @inline function KA.__index_Group_Cartesian(ctx)\n    @inbounds KA.blocks(KA.__iterspace(ctx))[get_group_id()]\nend\n\n@device_override @inline function KA.__index_Global_Cartesian(ctx)\n    return @inbounds KA.expand(KA.__iterspace(ctx), get_group_id(), get_local_id())\nend\n\n@device_override @inline function KA.__validindex(ctx)\n    if KA.__dynamic_checkbounds(ctx)\n        I = @inbounds KA.expand(KA.__iterspace(ctx), get_group_id(), get_local_id())\n        return I in KA.__ndrange(ctx)\n    else\n        return true\n    end\nend\n\n\n## Shared and Scratch Memory\n\n@device_override @inline function KA.SharedMemory(::Type{T}, ::Val{Dims}, ::Val{Id}) where {T, Dims, Id}\n    ptr = oneAPI.emit_localmemory(T, Val(prod(Dims)))\n    oneDeviceArray(Dims, ptr)\nend\n\n@device_override @inline function KA.Scratchpad(ctx, ::Type{T}, ::Val{Dims}) where {T, Dims}\n    StaticArrays.MArray{KA.__size(Dims), T}(undef)\nend\n\n\n## Synchronization and Printing\n\n@device_override @inline function KA.__synchronize()\n    barrier(0)\nend\n\n@device_override @inline function KA.__print(args...)\n    oneAPI._print(args...)\nend\n\n\n## Other\n\nAdapt.adapt_storage(to::KA.ConstAdaptor, a::oneDeviceArray) = Base.Experimental.Const(a)\n\nKA.argconvert(::KA.Kernel{oneAPIBackend}, arg) = kernel_convert(arg)\n\nfunction KA.priority!(::oneAPIBackend, prio::Symbol)\n    if !(prio in (:high, :normal, :low))\n        error(\"priority must be one of :high, :normal, :low\")\n    end\n\n    priority_enum = if prio == :high\n        oneAPI.oneL0.ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_HIGH\n    elseif prio == :low\n        oneAPI.oneL0.ZE_COMMAND_QUEUE_PRIORITY_PRIORITY_LOW\n    else\n        oneAPI.oneL0.ZE_COMMAND_QUEUE_PRIORITY_NORMAL\n    end\n\n    ctx = oneAPI.context()\n    dev = oneAPI.device()\n\n    # Update the cached queue\n    # We synchronize the current queue first to ensure safety\n    current_queue = oneAPI.global_queue(ctx, dev)\n    oneAPI.oneL0.synchronize(current_queue)\n\n    # Replace the queue in task_local_storage\n    # The key used by global_queue is (:ZeCommandQueue, ctx, dev)\n\n    new_queue = oneAPI.oneL0.ZeCommandQueue(\n        ctx, dev;\n        flags = oneAPI.oneL0.ZE_COMMAND_QUEUE_FLAG_IN_ORDER,\n        priority = priority_enum\n    )\n\n    task_local_storage((:ZeCommandQueue, ctx, dev), new_queue)\n\n    return nothing\nend\n\nend\n"
  },
  {
    "path": "src/pool.jl",
    "content": "# Track total allocated GPU memory (device + shared buffers) for proactive GC.\n# This mirrors AMDGPU.jl's approach: trigger GC before OOM so that finalizers\n# can free stale GPU buffers that Julia's GC hasn't collected yet (Julia's GC\n# only sees CPU memory pressure, not GPU memory pressure).\nconst _allocated_bytes = Threads.Atomic{Int64}(0)\nconst _total_mem_cache = Threads.Atomic{Int64}(0)\n\nfunction _get_total_mem(dev)\n    cached = _total_mem_cache[]\n    cached > 0 && return cached\n    total = only(oneL0.memory_properties(dev)).totalSize\n    Threads.atomic_cas!(_total_mem_cache, Int64(0), Int64(total))\n    return _total_mem_cache[]\nend\n\nfunction _maybe_gc(dev, bytes)\n    allocated = _allocated_bytes[]\n    allocated <= 0 && return\n    total_mem = _get_total_mem(dev)\n    return if allocated + bytes > total_mem * 0.8\n        # Flush deferred resource releases (e.g., MKL sparse handles) from previous GC\n        # cycles first — these are safe to release now because they were deferred earlier.\n        # Do this BEFORE GC to avoid racing with new finalizers.\n        oneL0._run_reclaim_callbacks()\n        # Full GC to collect old-generation objects whose finalizers free GPU memory.\n        GC.gc(true)\n    elseif allocated + bytes > total_mem * 0.4\n        GC.gc(false)\n    end\nend\n\nfunction allocate(::Type{oneL0.DeviceBuffer}, ctx, dev, bytes::Int, alignment::Int)\n    bytes == 0 && return oneL0.DeviceBuffer(ZE_NULL, bytes, ctx, dev)\n\n    _maybe_gc(dev, bytes)\n    buf = device_alloc(ctx, dev, bytes, alignment)\n    make_resident(ctx, dev, buf)\n    Threads.atomic_add!(_allocated_bytes, Int64(bytes))\n\n    return buf\nend\n\nfunction allocate(::Type{oneL0.SharedBuffer}, ctx, dev, bytes::Int, alignment::Int)\n    bytes == 0 && return oneL0.SharedBuffer(ZE_NULL, bytes, ctx, dev)\n\n    # TODO: support cross-device shared buffers (by setting `dev=nothing`)\n\n    _maybe_gc(dev, bytes)\n    buf = shared_alloc(ctx, dev, bytes, alignment)\n    make_resident(ctx, dev, buf)\n    Threads.atomic_add!(_allocated_bytes, Int64(bytes))\n\n    return buf\nend\n\nfunction allocate(::Type{oneL0.HostBuffer}, ctx, dev, bytes::Int, alignment::Int)\n    bytes == 0 && return oneL0.HostBuffer(ZE_NULL, bytes, ctx)\n    host_alloc(ctx, bytes, alignment)\nend\n\nfunction release(buf::oneL0.AbstractBuffer)\n    sizeof(buf) == 0 && return\n\n    if buf isa oneL0.DeviceBuffer || buf isa oneL0.SharedBuffer\n        Threads.atomic_sub!(_allocated_bytes, Int64(sizeof(buf)))\n    end\n\n    # XXX: is it necessary to evice memory if we are going to free it?\n    #      this is racy, because eviction is not queue-ordered, and\n    #      we don't want to synchronize inside what could have been a\n    #      GC-driven finalizer. if we need to, port the stream/queue\n    #      tracking from CUDA.jl so that we can synchronize only the\n    #      queue that's associated with the buffer.\n    #if buf isa oneL0.DeviceBuffer || buf isa oneL0.SharedBuffer\n    #    ctx = oneL0.context(buf)\n    #    dev = oneL0.device(buf)\n    #    evict(ctx, dev, buf)\n    #end\n\n    free(buf; policy=oneL0.ZE_DRIVER_MEMORY_FREE_POLICY_EXT_FLAG_BLOCKING_FREE)\n\n    # TODO: queue-ordered free from non-finalizer tasks once we have\n    #       `zeMemFreeAsync(ptr, queue)`\n\n    return\nend\n"
  },
  {
    "path": "src/random.jl",
    "content": "using Random\n\ngpuarrays_rng() = GPUArrays.default_rng(oneArray)\n\n# GPUArrays in-place\nRandom.rand!(A::oneWrappedArray) = Random.rand!(gpuarrays_rng(), A)\nRandom.randn!(A::oneWrappedArray) = Random.randn!(gpuarrays_rng(), A)\n\n# GPUArrays out-of-place\nrand(T::Type, dims::Dims) = Random.rand!(oneArray{T}(undef, dims...))\nrandn(T::Type, dims::Dims; kwargs...) = Random.randn!(oneArray{T}(undef, dims...); kwargs...)\n\n# support all dimension specifications\nrand(T::Type, dim1::Integer, dims::Integer...) = Random.rand!(oneArray{T}(undef, dim1, dims...))\nrandn(T::Type, dim1::Integer, dims::Integer...; kwargs...) = Random.randn!(oneArray{T}(undef, dim1, dims...); kwargs...)\n\n# untyped out-of-place\nrand(dim1::Integer, dims::Integer...) = Random.rand!(oneArray{Float32}(undef, dim1, dims...))\nrandn(dim1::Integer, dims::Integer...; kwargs...) = Random.randn!(oneArray{Float32}(undef, dim1, dims...); kwargs...)\n\n# seeding\nseed!(seed=Base.rand(UInt64)) = Random.seed!(gpuarrays_rng(), seed)\n"
  },
  {
    "path": "src/sorting.jl",
    "content": "Base.sort!(x::oneArray; kwargs...) = (AK.sort!(x; kwargs...); return x)\nBase.sortperm!(ix::oneArray, x::oneArray; kwargs...) = (AK.sortperm!(ix, x; kwargs...); return ix)\nBase.sortperm(x::oneArray; kwargs...) = sortperm!(oneArray(1:length(x)), x; kwargs...)\n"
  },
  {
    "path": "src/utils.jl",
    "content": "\nfunction versioninfo(io::IO=stdout)\n    if Sys.islinux()\n        println(io, \"Binary dependencies:\")\n        for jll in [oneL0.NEO_jll, oneL0.NEO_jll.libigc_jll, oneL0.NEO_jll.gmmlib_jll,\n                    SPIRV_LLVM_Translator_jll, SPIRV_Tools_jll, oneAPI_Support_jll]\n            name = string(jll)\n            print(io, \"- $(name[1:end-4]): $(Base.pkgversion(jll))\")\n            if jll.host_platform !== nothing\n                debug = tryparse(Bool, get(jll.host_platform.tags, \"debug\", \"false\"))\n                if debug === true\n                    print(io, \" (debug)\")\n                end\n            end\n            if jll === oneAPI_Support_jll\n                ver = oneAPI.oneMKL.version()\n                print(io, \" (oneMKL v$ver)\")\n            end\n            println(io)\n        end\n        println(io)\n    end\n\n    println(io, \"Toolchain:\")\n    println(io, \"- Julia: $VERSION\")\n    println(io, \"- LLVM: $(LLVM.version())\")\n    println(io)\n\n    println(io, \"Julia packages:\")\n    println(io, \"- oneAPI.jl: $(Base.pkgversion(oneAPI))\")\n    for name in [:GPUArrays, :GPUCompiler, :KernelAbstractions, :LLVM, :SPIRVIntrinsics]\n        mod = getfield(oneAPI, name)\n        println(io, \"- $(name): $(Base.pkgversion(mod))\")\n    end\n    println(io)\n\n    env = filter(var->startswith(var, \"JULIA_ONEAPI\"), keys(ENV))\n    if !isempty(env)\n        println(io, \"Environment:\")\n        for var in env\n            println(io, \"- $var: $(ENV[var])\")\n        end\n        println(io)\n    end\n\n    drvs = drivers()\n    if isempty(drvs)\n        println(io, \"No oneAPI-capable drivers.\")\n    elseif length(drvs) == 1\n        println(io, \"1 driver:\")\n    else\n        println(io, length(drvs), \" drivers:\")\n    end\n    for drv in drivers()\n        props = properties(drv)\n        println(io, \"- $(props.uuid) (v$(props.driverVersion), API v$(api_version(drv)))\")\n    end\n    println(io)\n\n    devs = [dev for drv in drivers() for dev in devices(drv)]\n    if isempty(devs)\n        println(io, \"No oneAPI-capable devices.\")\n    elseif length(devs) == 1\n        println(io, \"1 device:\")\n    else\n        println(io, length(devs), \" devices:\")\n    end\n    for dev in devs\n        props = properties(dev)\n        println(io, \"- $(props.name)\")\n    end\nend\n\n\"\"\"\n    @sync ex\n\nRun expression `ex` and synchronize the GPU afterwards.\n\nSee also: `synchronize`.\n\"\"\"\nmacro sync(ex)\n    quote\n        local ret = $(esc(ex))\n        synchronize()\n        ret\n    end\nend\n"
  },
  {
    "path": "test/Project.toml",
    "content": "[deps]\nAbstractFFTs = \"621f4979-c628-5d54-868e-fcf4e3e8185c\"\nAdapt = \"79e6a3ab-5dfb-504d-930d-738a2a938a0e\"\nDates = \"ade2ca70-3891-5945-98fb-dc099432e06a\"\nDistributed = \"8ba89e20-285c-5b6f-9357-94700520ee1b\"\nFFTW = \"7a1cc6ca-52ef-59f5-83cd-3a7055c09341\"\nGPUArrays = \"0c68f7d7-f131-5f86-a1c3-88cf8149b2d7\"\nInteractiveUtils = \"b77e0a4c-d291-57a0-90e8-8db25a27a240\"\nJLD2 = \"033835bb-8acc-5ee8-8aae-3f567f8a3819\"\nKernelAbstractions = \"63c18a36-062a-441e-b654-da1e3ab1ce7c\"\nLinearAlgebra = \"37e2e46d-f89d-539d-b4ee-838fcccc9c8e\"\nNEO_jll = \"700fe977-ac61-5f37-bbc8-c6c4b2b6a9fd\"\nPrintf = \"de0858da-6303-5e67-8744-51eddeeeb8d7\"\nREPL = \"3fa0cd96-eef1-5676-8a61-b3b8758bbffb\"\nRandom = \"9a3f8284-a2c9-5f02-9a11-845980a1fd5c\"\nSparseArrays = \"2f01184e-e22b-5df5-ae63-d93ebab69eaf\"\nSpecialFunctions = \"276daf66-3868-5448-9aa4-cd146d93841b\"\nStaticArrays = \"90137ffa-7385-5640-81b9-e52037218182\"\nStatistics = \"10745b16-79ce-11e8-11f9-7d13ad32a3b2\"\nTest = \"8dfed614-e22c-5e08-85e1-65c5234f0b40\"\nlibigc_jll = \"94295238-5935-5bd7-bb0f-b00942e9bdd5\"\noneAPI = \"8f75cd03-7ff8-4ecb-9b8f-daf728133b1b\"\noneAPI_Support_jll = \"b049733a-a71d-5ed3-8eba-7d323ac00b36\"\n"
  },
  {
    "path": "test/array.jl",
    "content": "using LinearAlgebra\nimport Adapt\n\n@testset \"constructors\" begin\n  xs = oneArray{Int}(undef, 2, 3)\n  @test collect(oneArray([1 2; 3 4])) == [1 2; 3 4]\n  @test testf(vec, rand(Float32, 5,3))\n  @test Base.elsize(xs) == sizeof(Int)\n  @test oneArray{Int, 2}(xs) === xs\n\n  @test_throws ArgumentError Base.unsafe_convert(Ptr{Int}, xs)\n  @test_throws ArgumentError Base.unsafe_convert(Ptr{Float32}, xs)\n\n  @test collect(oneAPI.zeros(Float32, 2, 2)) == zeros(Float32, 2, 2)\n  @test collect(oneAPI.ones(Float32, 2, 2)) == ones(Float32, 2, 2)\n\n  @test collect(oneAPI.fill(0, 2, 2)) == zeros(Int, 2, 2)\n  @test collect(oneAPI.fill(1, 2, 2)) == ones(Int, 2, 2)\nend\n\n@testset \"adapt\" begin\n  A = rand(Float32, 3, 3)\n  dA = oneArray(A)\n  @test Adapt.adapt(Array, dA) == A\n  @test Adapt.adapt(oneArray, A) isa oneArray\n  @test Array(Adapt.adapt(oneArray, A)) == A\nend\n\n@testset \"reshape\" begin\n  A = [1 2 3 4\n       5 6 7 8]\n  gA = reshape(oneArray(A),1,8)\n  _A = reshape(A,1,8)\n  _gA = Array(gA)\n  @test all(_A .== _gA)\n  A = [1,2,3,4]\n  gA = reshape(oneArray(A),4)\nend\n\n@testset \"fill(::SubArray)\" begin\n  xs = oneAPI.zeros(Float32, 3)\n  fill!(view(xs, 2:2), 1)\n  @test Array(xs) == [0,1,0]\nend\n\n@testset \"reinterpret of view with non-aligned offset\" begin\n  # reinterpreting a view to a larger element type where the byte offset\n  # is not a multiple of the new element size\n  a = oneArray(Int32[1,2,3,4,5,6,7,8,9])\n  v = view(a, 2:7)  # offset of 1 Int32 = 4 bytes\n  r = reinterpret(Int64, v)  # Int64 = 8 bytes; 4 is not a multiple of 8\n  @test Array(r) == reinterpret(Int64, @view Array(a)[2:7])\nend\n\n@testset \"shared buffers & unsafe_wrap\" begin\n  a = oneVector{Int,oneL0.SharedBuffer}(undef, 2)\n\n  # check that basic operations work on arrays backed by shared memory\n  fill!(a, 40)\n  a .+= 2\n  @test Array(a) == [42, 42]\n\n  # derive an Array object and test that the memory keeps in sync\n  b = unsafe_wrap(Array, a)\n  b[1] = 100\n  @test Array(a) == [100, 42]\n  oneAPI.@sync copyto!(a, 2, [200], 1, 1)\n  @test b == [100, 200]\nend\n\n# https://github.com/JuliaGPU/CUDA.jl/issues/2191\n@testset \"preserving buffer types\" begin\n  a = oneVector{Int,oneL0.SharedBuffer}([1])\n  @test oneAPI.buftype(a) == oneL0.SharedBuffer\n\n  # unified-ness should be preserved\n  b = a .+ 1\n  @test oneAPI.buftype(b) == oneL0.SharedBuffer\n\n  # when there's a conflict, we should defer to unified memory\n  c = oneVector{Int,oneL0.HostBuffer}([1])\n  d = oneVector{Int,oneL0.DeviceBuffer}([1])\n  e = c .+ d\n  @test oneAPI.buftype(e) == oneL0.SharedBuffer\nend\n\n@testset \"resizing\" begin\n  a = oneArray([1,2,3])\n\n  resize!(a, 3)\n  @test length(a) == 3\n  @test Array(a) == [1,2,3]\n\n  resize!(a, 5)\n  @test length(a) == 5\n  @test Array(a)[1:3] == [1,2,3]\n\n  resize!(a, 2)\n  @test length(a) == 2\n  @test Array(a)[1:2] == [1,2]\n\n  b = oneArray{Int}(undef, 0)\n  @test length(b) == 0\n  resize!(b, 1)\n  @test length(b) == 1\nend\n"
  },
  {
    "path": "test/device/intrinsics.jl",
    "content": "@testset \"work items\" begin\n    @on_device get_work_dim() |> sink\n\n    @on_device get_global_size() |> sink\n    @on_device get_global_id() |> sink\n\n    @on_device get_local_size() |> sink\n    @on_device get_enqueued_local_size() |> sink\n    @on_device get_local_id() |> sink\n\n    @on_device get_num_groups() |> sink\n    @on_device get_group_id() |> sink\n\n    @on_device get_global_offset() |> sink\n\n    @on_device get_global_linear_id() |> sink\n    @on_device get_local_linear_id() |> sink\nend\n\n\n\n############################################################################################\n\n@testset \"math\" begin\n    @testset \"log10\" begin\n        @test testf(a->log10.(a), Float32[100])\n    end\n\n    for op in (exp, exp2, exp10, expm1)\n        @testset \"$op\" begin\n            typs = [Float32]\n            float64_supported && push!(typs, Float64)\n            for T in typs\n                @test testf(x->op.(x), rand(T, 1))\n                @test testf(x->op.(x), -rand(T, 1))\n            end\n\n        end\n    end\n\n    @testset \"exp\" begin\n        @test testf(a->exp.(a), Matrix{ComplexF32}([1.0 + 1.0im 1.0 - 1.0im; -1.0 + 1.0im -1.0 - 1.0im]))\n\n    end\nend\n\n\n############################################################################################\n\nendline = Sys.iswindows() ? \"\\r\\n\" : \"\\n\"\n\n@testset \"formatted output\" begin\n    # BROKEN: cintel/compute-runtime#635\n    #_, out = @grab_output @on_device oneAPI.@printf(\"\")\n    #@test out == \"\"\n\n    _, out = @grab_output @on_device oneAPI.@printf(\"Testing...\\n\")\n    @test out == \"Testing...$endline\"\n\n    # narrow integer\n    _, out = @grab_output @on_device oneAPI.@printf(\"Testing %d %d...\\n\", Int32(1), Int32(2))\n    @test out == \"Testing 1 2...$endline\"\n\n    # wide integer\n    _, out = @grab_output if Sys.iswindows()\n        @on_device oneAPI.@printf(\"Testing %lld %lld...\\n\", Int64(1), Int64(2))\n    else\n        @on_device oneAPI.@printf(\"Testing %ld %ld...\\n\", Int64(1), Int64(2))\n    end\n    @test out == \"Testing 1 2...$endline\"\n\n    _, out = @grab_output @on_device begin\n        oneAPI.@printf(\"foo\")\n        oneAPI.@printf(\"bar\\n\")\n    end\n    @test out == \"foobar$endline\"\n\n    # c argument promotions\n    if float64_supported\n        function kernel(A)\n            oneAPI.@printf(\"%f %f\\n\", A[1], A[1])\n            return\n        end\n        x = oneArray(ones(Float64, 2, 2))\n        _, out = @grab_output begin\n            @oneapi kernel(x)\n            synchronize()\n        end\n        @test out == \"1.000000 1.000000$endline\"\n    end\nend\n\n@testset \"@print\" begin\n    # basic @print/@println\n\n    _, out = @grab_output @on_device oneAPI.@print(\"Hello, World\\n\")\n    @test out == \"Hello, World$endline\"\n\n    _, out = @grab_output @on_device oneAPI.@println(\"Hello, World\")\n    @test out == \"Hello, World$endline\"\n\n\n    # argument interpolation (by the macro, so can use literals)\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foobar\")\n    @test out == \"foobar\"\n\n    _, out = @grab_output @on_device oneAPI.@print(:foobar)\n    @test out == \"foobar\"\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foo\", \"bar\")\n    @test out == \"foobar\"\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foobar \", 42)\n    @test out == \"foobar 42\"\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foobar $(42)\")\n    @test out == \"foobar 42\"\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foobar $(4)\", 2)\n    @test out == \"foobar 42\"\n\n    _, out = @grab_output @on_device oneAPI.@print(\"foobar \", 4, \"$(2)\")\n    @test out == \"foobar 42\"\n\n    _, out = @grab_output @on_device oneAPI.@print(42)\n    @test out == \"42\"\n\n    _, out = @grab_output @on_device oneAPI.@print(4, 2)\n    @test out == \"42\"\n\n    # bug: @println failed to invokce @print with endline in the case of interpolation\n    _, out = @grab_output @on_device oneAPI.@println(\"foobar $(42)\")\n    @test out == \"foobar 42$endline\"\n\n\n    # argument types\n\n    # we're testing the generated functions now, so can't use literals\n    function test_output(val, str)\n        canary = rand(Int32) # if we mess up the main arg, this one will print wrong\n        _, out = @grab_output @on_device oneAPI.@print(val, \" (\", canary, \")\")\n        @test out == \"$(str) ($(Int(canary)))\"\n    end\n\n    for typ in (Int16, Int32, Int64, UInt16, UInt32, UInt64)\n        test_output(typ(42), \"42\")\n    end\n\n    if float64_supported\n        for typ in (Float32, Float64)\n            test_output(typ(42), \"42.000000\")\n        end\n    end\n\n    test_output(Cchar('c'), \"c\")\n\n    for typ in (Ptr{Cvoid}, Ptr{Int})\n        ptr = convert(typ, Int(0x12345))\n        test_output(ptr, Sys.iswindows() ? \"0000000000012345\" : \"0x12345\")\n    end\n\n    test_output(true, \"1\")\n    test_output(false, \"0\")\n\n\n    # escaping\n\n    kernel1(val) = (oneAPI.@print(val); nothing)\n    _, out = @grab_output @on_device kernel1(42)\n    @test out == \"42\"\n\n    kernel2(val) = (oneAPI.@println(val); nothing)\n    _, out = @grab_output @on_device kernel2(42)\n    @test out == \"42$endline\"\nend\n\nfloat64_supported && @testset \"@show\" begin\n    function kernel()\n        seven_i32 = Int32(7)\n        three_f64 = Float64(3)\n        oneAPI.@show seven_i32\n        oneAPI.@show three_f64 1f0 + 4f0\n        return nothing\n    end\n\n    _, out = @grab_output @on_device kernel()\n    @test out == \"seven_i32 = 7$(endline)three_f64 = 3.000000$(endline)1.0f0 + 4.0f0 = 5.000000$(endline)\"\nend\n\n\n\n############################################################################################\n\n# a composite type to test for more complex element types\n@eval struct RGB{T}\n    r::T\n    g::T\n    b::T\nend\n\n@testset \"local memory\" begin\n\nn = 256\n\n@testset \"constructors\" begin\n    # static\n    @on_device oneLocalArray(Float32, 1)\n    @on_device oneLocalArray(Float32, (1,2))\n    @on_device oneLocalArray(Tuple{Float32, Float32}, 1)\n    @on_device oneLocalArray(Tuple{Float32, Float32}, (1,2))\n    @on_device oneLocalArray(Tuple{RGB{Float32}, UInt32}, 1)\n    @on_device oneLocalArray(Tuple{RGB{Float32}, UInt32}, (1,2))\nend\n\n\n@testset \"static\" begin\n\n@testset \"statically typed\" begin\n    function kernel(d, n)\n        t = get_local_id()\n        tr = n-t+1\n\n        s = oneLocalArray(Float32, 1024)\n        s2 = oneLocalArray(Float32, 1024)  # catch aliasing\n\n        s[t] = d[t]\n        s2[t] = 2*d[t]\n        barrier(0)\n        d[t] = s[tr]\n\n        return\n    end\n\n    a = rand(Float32, n)\n    d_a = oneArray(a)\n\n    @oneapi items=n kernel(d_a, n)\n    @test reverse(a) == Array(d_a)\nend\n\n@testset \"parametrically typed\" begin\n    typs = [Int32, Int64, Float32]\n    float64_supported && push!(typs, Float64)\n    @testset for typ in typs\n        function kernel(d::oneDeviceArray{T}, n) where {T}\n            t = get_local_id()\n            tr = n-t+1\n\n            s = oneLocalArray(T, 1024)\n            s2 = oneLocalArray(T, 1024)  # catch aliasing\n\n            s[t] = d[t]\n            s2[t] = d[t]\n            barrier(0)\n            d[t] = s[tr]\n\n            return\n        end\n\n        a = rand(typ, n)\n        d_a = oneArray(a)\n\n        @oneapi items=n kernel(d_a, n)\n        @test reverse(a) == Array(d_a)\n    end\nend\n\nend\n\nend\n\n\n\n############################################################################################\n\n# @testset \"atomics (low level)\" begin\n\n    @testset \"atomic_add($T)\" for T in [Int32, UInt32, Float32]\n        if oneAPI.is_integrated() && T == Float32\n            continue\n        end\n        a = oneArray([zero(T)])\n\n        function kernel(a, b)\n            oneAPI.atomic_add!(pointer(a), b)\n            return\n        end\n\n        @oneapi items=256 kernel(a, one(T))\n        @test Array(a)[1] == T(256)\n    end\n\n    @testset \"atomic_sub($T)\" for T in [Int32, UInt32, Float32]\n        if oneAPI.is_integrated() && T == Float32\n            continue\n        end\n        a = oneArray([T(256)])\n\n        function kernel(a, b)\n            oneAPI.atomic_sub!(pointer(a), b)\n            return\n        end\n\n        @oneapi items=256 kernel(a, one(T))\n        @test Array(a)[1] == T(0)\n    end\n\n    @testset \"atomic_inc($T)\" for T in [Int32, UInt32]\n        a = oneArray([zero(T)])\n\n        function kernel(a)\n            oneAPI.atomic_inc!(pointer(a))\n            return\n        end\n\n        @oneapi items=256 kernel(a)\n        @test Array(a)[1] == T(256)\n    end\n\n    @testset \"atomic_dec($T)\" for T in [Int32, UInt32]\n        a = oneArray([T(256)])\n\n        function kernel(a)\n            oneAPI.atomic_dec!(pointer(a))\n            return\n        end\n\n        @oneapi items=256 kernel(a)\n        @test Array(a)[1] == T(0)\n    end\n\n    @testset \"atomic_min($T)\" for T in [Int32, UInt32, Float32]\n        if oneAPI.is_integrated() && T == Float32\n            continue\n        end\n        a = oneArray([T(256)])\n\n        function kernel(a, T)\n            i = get_global_id()\n                oneAPI.atomic_min!(pointer(a), T(i))\n            return\n        end\n\n        @oneapi items=256 kernel(a, T)\n        @test Array(a)[1] == one(T)\n    end\n\n    @testset \"atomic_max($T)\" for T in [Int32, UInt32, Float32]\n        if oneAPI.is_integrated() && T == Float32\n            continue\n        end\n        a = oneArray([zero(T)])\n\n        function kernel(a, T)\n            i = get_global_id()\n                oneAPI.atomic_max!(pointer(a), T(i))\n            return\n        end\n\n        @oneapi items=256 kernel(a, T)\n        @test Array(a)[1] == T(256)\n    end\n\n    @testset \"atomic_and($T)\" for T in [Int32, UInt32]\n        a = oneArray([T(1023)])\n\n        function kernel(a, T)\n            i = get_global_id() - 1\n            k = 1\n            for i = 1:i\n                k *= 2\n            end\n            b = 1023 - k  # 1023 - 2^i\n            oneAPI.atomic_and!(pointer(a), T(b))\n            return\n        end\n\n        @oneapi items=10 kernel(a, T)\n        @test Array(a)[1] == zero(T)\n    end\n\n    @testset \"atomic_or($T)\" for T in [Int32, UInt32]\n        a = oneArray([zero(T)])\n\n        function kernel(a, T)\n            i = get_global_id()\n            b = 1  # 2^(i-1)\n            for i = 1:i\n                b *= 2\n            end\n            b ÷= 2\n            oneAPI.atomic_or!(pointer(a), T(b))\n            return\n        end\n\n        @oneapi items=10 kernel(a, T)\n        @test Array(a)[1] == T(1023)\n    end\n\n    @testset \"atomic_xor($T)\" for T in [Int32, UInt32]\n        a = oneArray([T(1023)])\n\n        function kernel(a, T)\n            i = get_global_id()\n            b = 1  # 2^(i-1)\n            for i = 1:i\n                b *= 2\n            end\n            b ÷= 2\n            oneAPI.atomic_xor!(pointer(a), T(b))\n            return\n        end\n\n        @oneapi items=10 kernel(a, T)\n        @test Array(a)[1] == zero(T)\n    end\n\n    @testset \"atomic_xchg($T)\" for T in [Int32, UInt32, Float32]\n        if oneAPI.is_integrated() && T == Float32\n            continue\n        end\n        a = oneArray([zero(T)])\n\n        function kernel(a, b)\n            oneAPI.atomic_xchg!(pointer(a), b)\n            return\n        end\n\n        @oneapi items=256 kernel(a, one(T))\n        @test Array(a)[1] == one(T)\n    end\n\n# end\n\n\n\n############################################################################################\n\n\n\n@testset \"atomics (high-level)\" begin\n\n@testset \"add\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray([zero(T)])\n\n        function kernel(T, a)\n            oneAPI.@atomic a[1] = a[1] + 1\n            oneAPI.@atomic a[1] += 1\n            return\n        end\n\n        @oneapi items=256 kernel(T, a)\n        @test Array(a)[1] == 512\n    end\nend\n\n@testset \"sub\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray(T[1024])\n\n        function kernel(T, a)\n            oneAPI.@atomic a[1] = a[1] - 1\n            oneAPI.@atomic a[1] -= 1\n            return\n        end\n\n        @oneapi items=256 kernel(T, a)\n        @test Array(a)[1] == 512\n    end\nend\n\n@testset \"and\" begin\n    @testset for T in [Int32, UInt32]\n        a = oneArray([~zero(T), ~zero(T)])\n\n        function kernel(T, a)\n            i = get_local_id()\n            mask = ~(T(1) << (i-1))\n            oneAPI.@atomic a[1] = a[1] & mask\n            oneAPI.@atomic a[2] &= mask\n            return\n        end\n\n        @oneapi items=8*sizeof(T) kernel(T, a)\n        @test Array(a)[1] == zero(T)\n        @test Array(a)[2] == zero(T)\n    end\nend\n\n@testset \"or\" begin\n    @testset for T in [Int32, UInt32]\n        a = oneArray([zero(T), zero(T)])\n\n        function kernel(T, a)\n            i = get_local_id()\n            mask = T(1) << (i-1)\n            oneAPI.@atomic a[1] = a[1] | mask\n            oneAPI.@atomic a[2] |= mask\n            return\n        end\n\n        @oneapi items=8*sizeof(T) kernel(T, a)\n        @test Array(a)[1] == ~zero(T)\n        @test Array(a)[2] == ~zero(T)\n    end\nend\n\n@testset \"xor\" begin\n    @testset for T in [Int32, UInt32]\n        a = oneArray([zero(T), zero(T)])\n\n        function kernel(T, a)\n            i = get_local_id()\n            mask = T(1) << ((i-1)%(8*sizeof(T)))\n            oneAPI.@atomic a[1] = a[1] ⊻ mask\n            oneAPI.@atomic a[2] ⊻= mask\n            return\n        end\n\n        nb = 4\n        @oneapi items=(8*sizeof(T)+nb) kernel(T, a)\n        @test Array(a)[1] == ~zero(T) & ~((one(T) << nb) - one(T))\n        @test Array(a)[2] == ~zero(T) & ~((one(T) << nb) - one(T))\n    end\nend\n\n@testset \"max\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray([zero(T)])\n\n        function kernel(T, a)\n            i = get_local_id()\n            oneAPI.@atomic a[1] = max(a[1], i)\n            return\n        end\n\n        @oneapi items=32 kernel(T, a)\n        @test Array(a)[1] == 32\n    end\nend\n\n@testset \"min\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray([typemax(T)])\n\n        function kernel(T, a)\n            i = get_local_id()\n            oneAPI.@atomic a[1] = min(a[1], i)\n            return\n        end\n\n        @oneapi items=32 kernel(T, a)\n        @test Array(a)[1] == 1\n    end\nend\n\n@testset \"mul\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray(T[1])\n\n        function kernel(T, a)\n            oneAPI.@atomic a[1] = a[1] * 2\n            oneAPI.@atomic a[1] *= 2\n            return\n        end\n\n        @oneapi items=8 kernel(T, a)\n        @test Array(a)[1] == 65536\n    end\nend\n\n@testset \"div\" begin\n    @testset for T in [Int32, UInt32, Float32]\n        a = oneArray(T[65536])\n\n        function kernel(T, a)\n            oneAPI.@atomic a[1] = a[1] ÷ 2\n            oneAPI.@atomic a[1] ÷= 2\n            return\n        end\n\n        @oneapi items=8 kernel(T, a)\n        @test Array(a)[1] == 1\n    end\nend\n\n@testset \"macro\" begin\n    using oneAPI: AtomicError\n\n    @test_throws AtomicError(\"right-hand side of an @atomic assignment should be a call\") @macroexpand begin\n        oneAPI.@atomic a[1] = 1\n    end\n    @test_throws AtomicError(\"right-hand side of an @atomic assignment should be a call\") @macroexpand begin\n        oneAPI.@atomic a[1] = b ? 1 : 2\n    end\n\n    @test_throws AtomicError(\"right-hand side of a non-inplace @atomic assignment should reference the left-hand side\") @macroexpand begin\n        oneAPI.@atomic a[1] = a[2] + 1\n    end\n\n    @test_throws AtomicError(\"unknown @atomic expression\") @macroexpand begin\n        oneAPI.@atomic wat(a[1])\n    end\n\n    @test_throws AtomicError(\"@atomic should be applied to an array reference expression\") @macroexpand begin\n        oneAPI.@atomic a = a + 1\n    end\nend\n\nend\n"
  },
  {
    "path": "test/dummy.ll",
    "content": "target datalayout = \"e-p:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024\"\ntarget triple = \"spir-unknown-unknown\"\n\n; Function Attrs: nounwind\ndefine spir_kernel void @foo() {\nentry:\n  ret void\n}\n\n; Function Attrs: nounwind\ndefine spir_kernel void @bar(i32 %a) #0 !kernel_arg_access_qual !2 !kernel_arg_type !3 !kernel_arg_base_type !4 !kernel_arg_type_qual !5 {\nentry:\n  ret void\n}\n\nattributes #0 = { nounwind \"less-precise-fpmad\"=\"false\" \"no-frame-pointer-elim\"=\"false\" \"no-infs-fp-math\"=\"false\" \"no-nans-fp-math\"=\"false\" \"no-realign-stack\" \"stack-protector-buffer-size\"=\"8\" \"unsafe-fp-math\"=\"false\" \"use-soft-float\"=\"false\" }\n\n!opencl.enable.FP_CONTRACT = !{}\n!opencl.spir.version = !{!6}\n!opencl.ocl.version = !{!6}\n!opencl.used.extensions = !{!7}\n!opencl.used.optional.core.features = !{!7}\n!opencl.compiler.options = !{!7}\n\n!1 = !{i32 1}\n!2 = !{!\"none\"}\n!3 = !{!\"int\"}\n!4 = !{!\"int\"}\n!5 = !{!\"\"}\n!6 = !{i32 1, i32 2}\n!7 = !{}\n"
  },
  {
    "path": "test/dummy.spt",
    "content": "119734787 65536 393230 12 0 \n2 Capability Addresses \n2 Capability Kernel \n5 ExtInstImport 1 \"OpenCL.std\"\n3 MemoryModel 1 2 \n4 EntryPoint 6 4 \"foo\"\n4 EntryPoint 6 8 \"bar\"\n9 String 11 \"kernel_arg_type.bar.int,\"\n3 Source 3 102000 \n4 Name 5 \"entry\"\n3 Name 9 \"a\"\n4 Name 10 \"entry\"\n4 TypeInt 6 32 0 \n2 TypeVoid 2 \n3 TypeFunction 3 2 \n4 TypeFunction 7 2 6 \n\n\n5 Function 2 4 0 3 \n\n2 Label 5 \n1 Return \n\n1 FunctionEnd \n\n5 Function 2 8 0 7 \n3 FunctionParameter 6 9 \n\n2 Label 10 \n1 Return \n\n1 FunctionEnd \n\n"
  },
  {
    "path": "test/examples.jl",
    "content": "@testset \"examples\" begin\n\nfunction find_sources(path::String, sources=String[])\n    if isdir(path)\n        for entry in readdir(path)\n            find_sources(joinpath(path, entry), sources)\n        end\n    elseif endswith(path, \".jl\")\n        push!(sources, path)\n    end\n    sources\nend\n\nexamples_dir = joinpath(@__DIR__, \"..\", \"examples\")\nexamples = find_sources(examples_dir)\nfilter!(file -> readline(file) != \"# EXCLUDE FROM TESTING\", examples)\n\nexamples = relpath.(examples, Ref(examples_dir))\n@testset for example in examples\n    cmd = `$(Base.julia_cmd()) --project=$(Base.active_project())`\n    @test success(pipeline(`$cmd $(joinpath(examples_dir, example))`, stderr=stderr))\nend\n\nend\n"
  },
  {
    "path": "test/execution.jl",
    "content": "import Adapt\n\nusing StaticArrays\n\ndummy() = return\n\n@testset \"@oneapi\" begin\n\n@test_throws UndefVarError @oneapi undefined()\n@test_throws MethodError @oneapi dummy(1)\n\n\n@testset \"low-level interface\" begin\n    k = zefunction(dummy)\n    k()\n    k(; items=1)\nend\n\n\n@testset \"launch configuration\" begin\n    @oneapi dummy()\n\n    items = 1\n    @oneapi items dummy()\n    @oneapi items=1 dummy()\n    @oneapi items=(1,1) dummy()\n    @oneapi items=(1,1,1) dummy()\n\n    groups = 1\n    @oneapi groups dummy()\n    @oneapi groups=1 dummy()\n    @oneapi groups=(1,1) dummy()\n    @oneapi groups=(1,1,1) dummy()\nend\n\n\n@testset \"launch=false\" begin\n    k = @oneapi launch=false dummy()\n    k()\n    k(; items=1)\nend\n\n\n@testset \"inference\" begin\n    foo() = @oneapi dummy()\n    @inferred foo()\n\n    # with arguments, we call kernel_convert\n    kernel(a) = return\n    bar(a) = @oneapi kernel(a)\n    @inferred bar(oneArray([1]))\nend\n\n\n@testset \"reflection\" begin\n    oneAPI.code_lowered(dummy, Tuple{})\n    oneAPI.code_typed(dummy, Tuple{})\n    oneAPI.code_warntype(devnull, dummy, Tuple{})\n    oneAPI.code_llvm(devnull, dummy, Tuple{})\n    oneAPI.code_spirv(devnull, dummy, Tuple{})\n\n    @device_code_lowered @oneapi dummy()\n    @device_code_typed @oneapi dummy()\n    @device_code_warntype io=devnull @oneapi dummy()\n    @device_code_llvm io=devnull @oneapi dummy()\n    @device_code_spirv io=devnull @oneapi dummy()\n\n    mktempdir() do dir\n        @device_code dir=dir @oneapi dummy()\n    end\n\n    @test_throws ErrorException @device_code_lowered nothing\n\n    # make sure kernel name aliases are preserved in the generated code\n    @test occursin(\"dummy\", sprint(io->(@device_code_llvm io=io optimize=false @oneapi dummy())))\n    @test occursin(\"dummy\", sprint(io->(@device_code_llvm io=io @oneapi dummy())))\n    @test occursin(\"dummy\", sprint(io->(@device_code_spirv io=io @oneapi dummy())))\n\n    # make sure invalid kernels can be partially reflected upon\n    let\n        invalid_kernel() = throw()\n        @test_throws oneAPI.InvalidIRError @oneapi invalid_kernel()\n        @test_throws oneAPI.InvalidIRError @grab_output @device_code_warntype @oneapi invalid_kernel()\n        out, err = @grab_output begin\n            try\n                @device_code_warntype @oneapi invalid_kernel()\n            catch\n            end\n        end\n        @test occursin(\"Body::Union{}\", err)\n    end\n\n    # set name of kernel\n    @test occursin(\"mykernel\", sprint(io->(@device_code_llvm io=io begin\n        k = zefunction(dummy, name=\"mykernel\")\n        k()\n    end)))\n\n    @test oneAPI.return_type(identity, Tuple{Int}) === Int\n    @test oneAPI.return_type(sin, Tuple{Float32}) === Float32\n    @test oneAPI.return_type(getindex, Tuple{oneDeviceArray{Float32,1,1},Int32}) === Float32\n    @test oneAPI.return_type(getindex, Tuple{Base.RefValue{Integer}}) === Integer\nend\n\n\n@testset \"external kernels\" begin\n    @eval module KernelModule\n        export external_dummy\n        external_dummy() = return\n    end\n    import ...KernelModule\n    @oneapi KernelModule.external_dummy()\n    @eval begin\n        using ...KernelModule\n        @oneapi external_dummy()\n    end\n\n    @eval module WrapperModule\n        using oneAPI\n        @eval dummy() = return\n        wrapper() = @oneapi dummy()\n    end\n    WrapperModule.wrapper()\nend\n\n\n@testset \"calling device function\" begin\n    @noinline child(i) = sink(i)\n    function parent()\n        child(1)\n        return\n    end\n\n    @oneapi parent()\nend\n\n\n@testset \"varargs\" begin\n    function kernel(args...)\n        oneAPI.@print(args[2])\n        return\n    end\n\n    _, out = @grab_output begin\n        @oneapi kernel(1, 2, 3)\n        synchronize()\n    end\n    @test out == \"2\"\nend\n\nend\n\n\n############################################################################################\n\n@testset \"argument passing\" begin\n\ndims = (16, 16)\nlen = prod(dims)\n\n@testset \"manually allocated\" begin\n    function kernel(input, output)\n        i = get_global_id()\n\n        val = input[i]\n        output[i] = val\n\n        return\n    end\n\n    input = round.(rand(Float32, dims) * 100)\n    output = similar(input)\n\n    input_dev = oneArray(input)\n    output_dev = oneArray(output)\n\n    @oneapi items=len kernel(input_dev, output_dev)\n    @test input ≈ Array(output_dev)\nend\n\n\n@testset \"scalar through single-value array\" begin\n    function kernel(a, x)\n        i = get_global_id()\n        max = get_global_size()\n        if i == max\n            _val = a[i]\n            x[] = _val\n        end\n        return\n    end\n\n    arr = round.(rand(Float32, dims) * 100)\n    val = [0f0]\n\n    arr_dev = oneArray(arr)\n    val_dev = oneArray(val)\n\n    @oneapi items=len kernel(arr_dev, val_dev)\n    @test arr[dims...] ≈ Array(val_dev)[1]\nend\n\n\n@testset \"scalar through single-value array, using device function\" begin\n    @noinline child(a, i) = a[i]\n    function parent(a, x)\n        i = get_global_id()\n        max = get_global_size()\n        if i == max\n            _val = child(a, i)\n            x[] = _val\n        end\n        return\n    end\n\n    arr = round.(rand(Float32, dims) * 100)\n    val = [0f0]\n\n    arr_dev = oneArray(arr)\n    val_dev = oneArray(val)\n\n    @oneapi items=len parent(arr_dev, val_dev)\n    @test arr[dims...] ≈ Array(val_dev)[1]\nend\n\n\n@testset \"tuples\" begin\n    # issue #7: tuples not passed by pointer\n\n    function kernel(keeps, out)\n        if keeps[1]\n            out[] = 1\n        else\n            out[] = 2\n        end\n        return\n    end\n\n    keeps = (true,)\n    d_out = oneArray(zeros(Int))\n\n    @oneapi kernel(keeps, d_out)\n    @test Array(d_out)[] == 1\nend\n\n\n@testset \"ghost function parameters\" begin\n    # bug: ghost type function parameters are elided by the compiler\n\n    len = 60\n    a = rand(Float32, len)\n    b = rand(Float32, len)\n    c = similar(a)\n\n    d_a = oneArray(a)\n    d_b = oneArray(b)\n    d_c = oneArray(c)\n\n    @eval struct ExecGhost end\n\n    function kernel(ghost, a, b, c)\n        i = get_global_id()\n        c[i] = a[i] + b[i]\n        return\n    end\n    @oneapi items=len kernel(ExecGhost(), d_a, d_b, d_c)\n    @test a+b == Array(d_c)\n\n\n    # bug: ghost type function parameters confused aggregate type rewriting\n\n    function kernel(ghost, out, aggregate)\n        i = get_global_id()\n        out[i] = aggregate[1]\n        return\n    end\n    @oneapi items=len kernel(ExecGhost(), d_c, (42,))\n\n    @test all(val->val==42, Array(d_c))\nend\n\n\n@testset \"immutables\" begin\n    # issue #15: immutables not passed by pointer\n\n    function kernel(ptr, b)\n        ptr[] = imag(b)\n        return\n    end\n\n    arr = oneArray(zeros(Float32))\n    x = ComplexF32(2,2)\n\n    @oneapi kernel(arr, x)\n    @test Array(arr)[] == imag(x)\nend\n\n\n@testset \"automatic recompilation\" begin\n    arr = oneArray(zeros(Int))\n\n    function kernel(ptr)\n        ptr[] = 1\n        return\n    end\n\n    @oneapi kernel(arr)\n    @test Array(arr)[] == 1\n\n    function kernel2(ptr)\n        ptr[] = 2\n        return\n    end\n\n    @oneapi kernel2(arr)\n    @test Array(arr)[] == 2\nend\n\n\n@testset \"automatic recompilation (bis)\" begin\n    arr = oneArray(zeros(Int))\n\n    @eval doit(ptr) = ptr[] = 1\n\n    function kernel(ptr)\n        doit(ptr)\n        return\n    end\n\n    @oneapi kernel(arr)\n    @test Array(arr)[] == 1\n\n    @eval doit(ptr) = ptr[] = 2\n\n    @oneapi kernel(arr)\n    @test Array(arr)[] == 2\nend\n\n\n@testset \"non-isbits arguments\" begin\n    function kernel1(T, i)\n        sink(i)\n        return\n    end\n    @oneapi kernel1(Int, 1)\n\n    function kernel2(T, i)\n        sink(unsafe_trunc(T,i))\n        return\n    end\n    @oneapi kernel2(Int, 1f0)\nend\n\n\n@testset \"splatting\" begin\n    function kernel(out, a, b)\n        out[] = a+b\n        return\n    end\n\n    out = [0]\n    out_dev = oneArray(out)\n\n    @oneapi kernel(out_dev, 1, 2)\n    @test Array(out_dev)[1] == 3\n\n    all_splat = (out_dev, 3, 4)\n    @oneapi kernel(all_splat...)\n    @test Array(out_dev)[1] == 7\n\n    partial_splat = (5, 6)\n    @oneapi kernel(out_dev, partial_splat...)\n    @test Array(out_dev)[1] == 11\nend\n\n@testset \"object invoke\" begin\n    # this mimics what is generated by closure conversion\n\n    @eval struct KernelObject{T} <: Function\n        val::T\n    end\n\n    function (self::KernelObject)(a)\n        a[] = self.val\n        return\n    end\n\n    function outer(a, val)\n       inner = KernelObject(val)\n       @oneapi inner(a)\n    end\n\n    a = [1f0]\n    a_dev = oneArray(a)\n\n    outer(a_dev, 2f0)\n\n    @test Array(a_dev) ≈ [2f0]\nend\n\n@testset \"closures\" begin\n    function outer(a_dev, val)\n       function inner(a)\n            # captures `val`\n            a[] = val\n            return\n       end\n       @oneapi inner(a_dev)\n    end\n\n    a = [1f0]\n    a_dev = oneArray(a)\n\n    outer(a_dev, 2f0)\n\n    @test Array(a_dev) ≈ [2f0]\nend\n\n@testset \"conversions\" begin\n    @eval struct Host   end\n    @eval struct Device end\n\n    Adapt.adapt_storage(::oneAPI.KernelAdaptor, a::Host) = Device()\n\n    Base.convert(::Type{Int}, ::Host)   = 1\n    Base.convert(::Type{Int}, ::Device) = 2\n\n    out = [0]\n\n    # convert arguments\n    out_dev = oneArray(out)\n    let arg = Host()\n        @test Array(out_dev) ≈ [0]\n        function kernel(arg, out)\n            out[] = convert(Int, arg)\n            return\n        end\n        @oneapi kernel(arg, out_dev)\n        @test Array(out_dev) ≈ [2]\n    end\n\n    # convert tuples\n    out_dev = oneArray(out)\n    let arg = (Host(),)\n        @test Array(out_dev) ≈ [0]\n        function kernel(arg, out)\n            out[] = convert(Int, arg[1])\n            return\n        end\n        @oneapi kernel(arg, out_dev)\n        @test Array(out_dev) ≈ [2]\n    end\n\n    # convert named tuples\n    out_dev = oneArray(out)\n    let arg = (a=Host(),)\n        @test Array(out_dev) ≈ [0]\n        function kernel(arg, out)\n            out[] = convert(Int, arg.a)\n            return\n        end\n        @oneapi kernel(arg, out_dev)\n        @test Array(out_dev) ≈ [2]\n    end\n\n    # don't convert structs\n    out_dev = oneArray(out)\n    @eval struct Nested\n        a::Host\n    end\n    let arg = Nested(Host())\n        @test Array(out_dev) ≈ [0]\n        function kernel(arg, out)\n            out[] = convert(Int, arg.a)\n            return\n        end\n        @oneapi kernel(arg, out_dev)\n        @test Array(out_dev) ≈ [1]\n    end\nend\n\n@testset \"argument count\" begin\n    val = [0]\n    val_dev = oneArray(val)\n    for i in (1, 10, 20, 34)\n        variables = ('a':'z'..., 'A':'Z'...)\n        params = [Symbol(variables[j]) for j in 1:i]\n        # generate a kernel\n        body = quote\n            function kernel(arr, $(params...))\n                arr[] = $(Expr(:call, :+, params...))\n                return\n            end\n        end\n        eval(body)\n        args = [j for j in 1:i]\n        call = Expr(:call, :kernel, val_dev, args...)\n        cudacall = :(@oneapi $call)\n        eval(cudacall)\n        @test Array(val_dev)[1] == sum(args)\n    end\nend\n\n@testset \"keyword arguments\" begin\n    @eval inner_kwargf(foobar;foo=1, bar=2) = nothing\n\n    @oneapi (()->inner_kwargf(42;foo=1,bar=2))()\n\n    @oneapi (()->inner_kwargf(42))()\n\n    @oneapi (()->inner_kwargf(42;foo=1))()\n\n    @oneapi (()->inner_kwargf(42;bar=2))()\n\n    @oneapi (()->inner_kwargf(42;bar=2,foo=1))()\nend\n\n@testset \"captured values\" begin\n    function f(capture::T) where {T}\n        function kernel(ptr)\n            ptr[] = capture\n            return\n        end\n\n        arr = oneArray(zeros(T))\n        @oneapi kernel(arr)\n\n        return Array(arr)[1]\n    end\n\n    using Test\n    @test f(1) == 1\n    @test f(2) == 2\nend\n\nend\n\n############################################################################################\n\n@testset \"#55: invalid integers created by alloc_opt\" begin\n    function f(a)\n        x = SVector(0f0, 0f0)\n        v = MVector{3, Float32}(undef)\n        for (i,_) in enumerate(x)\n            v[i] = 1f0\n        end\n        a[1] = v[1]\n        return nothing\n    end\n    @oneapi f(oneArray(zeros(Float32, 1)))\nend\n\n@testset \"#160: barrier intrinsincs should be convergent\" begin\n    # Solve L*x = r and store the result in r.\n    function cpu(n::Int, r::Vector{Float32})\n        for j=1:n\n            temp = r[j]/2f0\n            for k=j+1:n\n                r[k] = r[k] - 2f0*temp\n            end\n            r[j] = temp\n        end\n    end\n    function gpu(::Val{n},r_) where {n}\n        tx = get_local_id()\n        bx = get_group_id()\n\n        r = oneLocalArray(Float32, n)\n\n        r[tx] = r_[tx]\n\n        barrier(0)\n\n        for j=1:n\n            if tx == 1\n                r[j] = r[j] / 2f0\n            end\n            barrier(0)\n\n            if tx > j && tx <= 4\n                r[tx] = r[tx] - 2f0*r[j]\n            end\n            barrier(0)\n        end\n\n        if bx == 1\n            r_[tx] = r[tx]\n        end\n\n        return\n    end\n\n    A = Float32[10, 10]\n    n = length(A)\n\n    hA = copy(A)\n    cpu(n,hA)\n\n    dA = oneArray(A)\n    @oneapi items=n gpu(Val(n),dA)\n\n    @test Array(dA) == hA\nend\n\n@testset \"NEO#172\" begin\n    # conversions from integers to pointers resulted in lost memory stores\n\n    function kernel(ptr)\n        ptr = reinterpret(Core.LLVMPtr{Float32, AS.CrossWorkgroup}, ptr)\n        unsafe_store!(ptr, 42)\n        return\n    end\n\n    if VERSION < v\"1.12\"\n        a = oneArray(Float32[0])\n        @oneapi kernel(pointer(a))\n        @test Array(a) == [42]\n    else\n        @test_broken false\n    end\nend\n\n############################################################################################\n"
  },
  {
    "path": "test/fft.jl",
    "content": "using Test\nusing oneAPI\nusing oneAPI.oneMKL.FFT\nusing AbstractFFTs\nusing FFTW\nusing Random\nRandom.seed!(1234)\n\n# Helper to move data to GPU\ngpu(A::AbstractArray{T}) where T = oneAPI.oneArray{T}(A)\nstruct _Plan end\nstruct _FFT end\n\nconst MYRTOL = 1e-5\nconst MYATOL = 1e-8\n\nfunction cmp(a,b; rtol=MYRTOL, atol=MYATOL)\n    @test isapprox(Array(a), Array(b); rtol=rtol, atol=atol)\nend\n\nfunction test_plan(::_Plan, plan, X::AbstractArray{T,N}) where {T,N}\n    p = plan(X)\n    Y = p * X\n    return Y\nend\n\nfunction test_plan(::_FFT, f, X::AbstractArray{T,N}) where {T,N}\n    Y = if f === AbstractFFTs.irfft || f === AbstractFFTs.brfft\n        f(X, size(X, ndims(X))*2 - 2)\n    else\n        f(X)\n    end\n    return Y\nend\n\nfunction test_plan(t, plan::Function, dim::Tuple, T::Type, iplan=nothing)\n    X = rand(T, dim)\n    dX = gpu(X)\n    Y = test_plan(t, plan, X)\n    dY = test_plan(t, plan, dX)\n    cmp(dY, Y)\n    if iplan !== nothing\n        iX = test_plan(t, iplan, Y)\n        idX = test_plan(t, iplan, dY)\n        cmp(idX, iX)\n    end\nend\n\n@testset \"FFT\" begin\n@testset \"$(length(dim))D\" for dim in [(8,), (8,32), (8,32,64)]\n    test_plan(_Plan(), AbstractFFTs.plan_fft, dim, ComplexF32, AbstractFFTs.plan_ifft)\n    test_plan(_Plan(), AbstractFFTs.plan_fft, dim, ComplexF32, AbstractFFTs.plan_bfft)\n    test_plan(_Plan(), AbstractFFTs.plan_fft, dim, Float32, AbstractFFTs.plan_ifft)\n    test_plan(_Plan(), AbstractFFTs.plan_fft, dim, Float32, AbstractFFTs.plan_bfft)\n    test_plan(_Plan(), AbstractFFTs.plan_rfft, dim, Float32)\n    test_plan(_Plan(), AbstractFFTs.plan_fft!, dim, ComplexF32, AbstractFFTs.plan_bfft!)\n    # Not part of FFTW\n    # test_plan(AbstractFFTs.plan_rfft!, Float32)\n    test_plan(_FFT(), AbstractFFTs.fft, dim, ComplexF32, AbstractFFTs.ifft)\n    test_plan(_FFT(), AbstractFFTs.fft, dim, ComplexF32, AbstractFFTs.bfft)\n    if length(dim) == 1  # irfft/brfft only for 1D\n        test_plan(_FFT(), AbstractFFTs.rfft, dim, Float32, AbstractFFTs.irfft)\n        test_plan(_FFT(), AbstractFFTs.rfft, dim, Float32, AbstractFFTs.brfft)\n    end\n    if (ComplexF64 in eltypes) && (Float64 in eltypes)\n        test_plan(_Plan(), AbstractFFTs.plan_fft, dim, ComplexF64, AbstractFFTs.plan_ifft)\n        test_plan(_Plan(), AbstractFFTs.plan_fft, dim, ComplexF64, AbstractFFTs.plan_bfft)\n        test_plan(_Plan(), AbstractFFTs.plan_fft, dim, Float64, AbstractFFTs.plan_ifft)\n        test_plan(_Plan(), AbstractFFTs.plan_fft, dim, Float64, AbstractFFTs.plan_bfft)\n        test_plan(_Plan(), AbstractFFTs.plan_rfft, dim, Float64)\n        test_plan(_Plan(), AbstractFFTs.plan_fft!, dim, ComplexF64, AbstractFFTs.plan_bfft!)\n        # Not part of FFTW\n        # test_plan(AbstractFFTs.plan_rfft!, Float64)\n        test_plan(_FFT(), AbstractFFTs.fft, dim, ComplexF64, AbstractFFTs.ifft)\n        test_plan(_FFT(), AbstractFFTs.fft, dim, ComplexF64, AbstractFFTs.bfft)\n        if length(dim) == 1  # irfft/brfft only for 1D\n            test_plan(_FFT(), AbstractFFTs.rfft, dim, Float64, AbstractFFTs.irfft)\n            test_plan(_FFT(), AbstractFFTs.rfft, dim, Float64, AbstractFFTs.brfft)\n        end\n    end\nend\nend\n"
  },
  {
    "path": "test/indexing.jl",
    "content": "using Test\nusing oneAPI\n\n@testset \"findall\" begin\n    bools1d = oneArray([true, false, true, false, true])\n    @test Array(findall(bools1d)) == findall(Bool[true, false, true, false, true])\n\n    bools2d = oneArray(Bool[true false; false true; true false])\n    @test Array(findall(bools2d)) == findall(Bool[true false; false true; true false])\n\n    all_false = oneArray(fill(false, 4))\n    @test Array(findall(all_false)) == Int[]\n\n    all_true = oneArray(fill(true, 3, 2))\n    @test Array(findall(all_true)) == findall(fill(true, 3, 2))\n\n    data = oneArray(collect(1:6))\n    mask = oneArray(Bool[true, false, true, false, false, true])\n    @test Array(data[mask]) == collect(1:6)[findall(Bool[true, false, true, false, false, true])]\n\n    # Test with array larger than 1024 to trigger multiple groups\n    large_size = 2048\n    large_mask = oneArray(rand(Bool, large_size))\n    large_result_gpu = Array(findall(large_mask))\n    large_result_cpu = findall(Array(large_mask))\n    @test large_result_gpu == large_result_cpu\n\n    # Test with even larger array to ensure robustness\n    very_large_size = 5000\n    very_large_mask = oneArray(fill(true, very_large_size))  # all true for predictable result\n    very_large_result_gpu = Array(findall(very_large_mask))\n    very_large_result_cpu = findall(fill(true, very_large_size))\n    @test very_large_result_gpu == very_large_result_cpu\nend\n\n@testset \"CartesianIndices with mapreduce\" begin\n    # Test for bug fix: mapreduce with CartesianIndices and tuple reduction\n    # Previously failed due to SPIR-V codegen issues with nested insertvalue instructions\n    # when combining tuples of (bool, CartesianIndex) in reduction operations.\n    # The fix involved properly handling nested struct insertions in SPIR-V codegen.\n\n    # Test that we can zip CartesianIndices with array values in a mapreduce\n    # This tests the fix for nested tuple operations in SPIR-V codegen\n\n    # Simple test: sum of values while tracking indices\n    x = oneArray(ones(Int, 2, 2))\n    indices = CartesianIndices((2, 2))\n\n    # Map to tuple of (value, index), then reduce by summing the values\n    result = mapreduce(tuple, (t1, t2) -> (t1[1] + t2[1], t1[2]), x, indices;\n                       init = (0, CartesianIndex(0, 0)))\n    @test result[1] == 4  # sum of four 1s\n\n    # Test with 1D array\n    y = oneArray(ones(Int, 4))\n    indices_1d = CartesianIndices((4,))\n    result_1d = mapreduce(tuple, (t1, t2) -> (t1[1] + t2[1], t1[2]), y, indices_1d;\n                          init = (0, CartesianIndex(0,)))\n    @test result_1d[1] == 4\n\n    # Test with boolean array and index comparison (closer to original failure case)\n    # This pattern is similar to what findfirst would use internally\n    z = oneArray([false, true, false, true])\n    indices_z = CartesianIndices((4,))\n    result_z = mapreduce(tuple,\n                         (t1, t2) -> begin\n                             (found1, idx1), (found2, idx2) = t1, t2\n                             # Return the first found index (smallest index if both found)\n                             if found1\n                                 return (found1, idx1)\n                             else\n                                 return (found2, idx2)\n                             end\n                         end,\n                         z, indices_z;\n                         init = (false, CartesianIndex(0,)))\n    @test result_z[1] == true  # Found a true value\n    @test result_z[2] == CartesianIndex(2,)  # First true is at index 2\nend\n"
  },
  {
    "path": "test/kernelabstractions.jl",
    "content": "import KernelAbstractions\ninclude(joinpath(dirname(pathof(KernelAbstractions)), \"..\", \"test\", \"testsuite.jl\"))\n\nskip_tests=Set([\n    \"sparse\",\n    \"Convert\", # Need to opt out of i128\n])\nTestsuite.testsuite(oneAPIBackend, \"oneAPI\", oneAPI, oneArray, oneDeviceArray; skip_tests)\n"
  },
  {
    "path": "test/level-zero.jl",
    "content": "using oneAPI.oneL0\n\n# ensure that the driver we loaded is a versioned library, matching the Level Zero loader.\n# otherwise we risk loading multiple drivers, e.g., if a system driver is available.\nif oneL0.NEO_jll.is_available()\n    @test endswith(oneL0.NEO_jll.libze_intel_gpu, \".1\")\nend\n\n\n@testset \"driver\" begin\n\ndrvs = drivers()\n@assert !isempty(drvs)\ndrv = first(drvs)\n@test drv == drvs[1]\nshow(devnull, drv)\nshow(devnull, MIME(\"text/plain\"), drv)\n\napi_version(drv)\n\nproperties(drv)\nipc_properties(drv)\nextension_properties(drv)\n\nend\n\ndrv = first(drivers())\n\n\n@testset \"device\" begin\n\ndevs = devices(drv)\n@assert !isempty(devs)\ndev = first(devs)\n@test dev == devs[1]\nshow(devnull, dev)\nshow(devnull, MIME(\"text/plain\"), dev)\n\n@test collect(devices()) == collect(devices(drv))\n@test device!(dev) == dev\n\nproperties(dev)\ncompute_properties(dev)\nmodule_properties(dev)\nmemory_properties(dev)\nmemory_access_properties(dev)\ncache_properties(dev)\nimage_properties(dev)\np2p_properties(dev, dev)\n\nend\n\ndev = first(devices(drv))\n\n\n@testset \"context\" begin\n\nctx = ZeContext(drv)\nshow(devnull, ctx)\n\n#status(ctx)\n\nend\n\nctx = ZeContext(drv)\n\n\n@testset \"command\" begin\n\ngroups = command_queue_groups(dev)\n@test !isempty(groups)\n\ngroups = compute_groups(dev)\ngroup = first(groups)\n\nqueue = ZeCommandQueue(ctx, dev, group.ordinal)\n\nlist = ZeCommandList(ctx, dev, group.ordinal)\nclose(list)\nexecute!(queue, [list])\nsynchronize(queue)\nreset(list)\n\nlist = ZeCommandList(ctx, dev, group.ordinal) do list\n    @test list isa ZeCommandList\nend\n\nexecute!(queue) do list\n    @test list isa ZeCommandList\nend\n\nend\n\ngroup = first(compute_groups(dev))\nqueue = ZeCommandQueue(ctx, dev, group.ordinal)\n\n\n@testset \"fence\" begin\n\nfence = ZeFence(queue)\n\n@test !Base.isdone(fence)\n\nexecute!(queue, fence) do list\n    # do nothing, but signal the fence on completion\nend\n\nwait(fence)\n@test Base.isdone(fence)\n\nreset(fence)\n@test !Base.isdone(fence)\n\nend\n\n\n@testset \"event\" begin\n\nZeEventPool(ctx, 1)\nZeEventPool(ctx, 1, dev)\n\npool = ZeEventPool(ctx, 1)\n\nevent = pool[1]\n@test !Base.isdone(event)\n\nsignal(event)\nZeCommandList(ctx, dev, group.ordinal) do list\n    append_signal!(list, event)\nend\n@test Base.isdone(event)\n\nwait(event, 1)\nZeCommandList(ctx, dev, group.ordinal) do list\n    append_wait!(list, event)\nend\n\nreset(event)\nZeCommandList(ctx, dev, group.ordinal) do list\n    append_reset!(list, event)\nend\n\n# timed_pool = ZeEventPool(ctx, 1; flags=oneL0.ZE_EVENT_POOL_FLAG_KERNEL_TIMESTAMP)\n# timed_event = timed_pool[1]\n# @test kernel_timestamp(timed_event).global.start == nothing\n# @test kernel_timestamp(timed_event).context.start == nothing\n# signal(timed_event) # FIXME: A kernel timestamp event can only be signaled from zeCommandListAppendLaunchKernel et al. functions\n# @test kernel_timestamp(timed_event).global.start != nothing\n# @test kernel_timestamp(timed_event).context.start != nothing\n\nend\n\n\n@testset \"barrier\" begin\n\npool = ZeEventPool(ctx, 1)\nevent = pool[1]\n\nZeCommandList(ctx, dev, group.ordinal) do list\n    append_barrier!(list)\n    append_barrier!(list, event)\n    append_barrier!(list, event, event)\nend\n\n#device_barrier(dev)    # unsupported\n\nend\n\n\n@testset \"module\" begin\n\ndata = read(joinpath(@__DIR__, \"dummy.spv\"))\nmod = ZeModule(ctx, dev, data)\n\n@test length(kernels(mod)) == 2\n@test haskey(kernels(mod), \"foo\")\n@test !haskey(kernels(mod), \"baz\")\nkernel = kernels(mod)[\"foo\"]\n\nsuggest_groupsize(kernel, 1024)\ngroupsize!(kernel, 1)\ngroupsize!(kernel, (1,))\ngroupsize!(kernel, (1, 1))\ngroupsize!(kernel, (1, 1, 1))\n\nkernel = kernels(mod)[\"bar\"]\narguments(kernel)[1] = Int32(42)\n\n@test indirect_access(kernel) == 0\nindirect_access!(kernel, oneL0.ZE_KERNEL_INDIRECT_ACCESS_FLAG_DEVICE)\n@test indirect_access(kernel) == oneL0.ZE_KERNEL_INDIRECT_ACCESS_FLAG_DEVICE\n\nif !parameter_validation # oneapi-src/level-zero#55\n    attrs = source_attributes(kernel)\n    @test attrs isa Vector{<:AbstractString}\nend\n\nprops = properties(kernel)\n@test props.numKernelArgs == 1\n@test props.requiredGroupSize isa oneL0.ZeDim3\n\n\n@testset \"kernel execution\" begin\n\nZeCommandList(ctx, dev, group.ordinal) do list\n    append_launch!(list, kernel, 1)\nend\n\npool = ZeEventPool(ctx, 2)\nsignal_event = pool[1]\nwait_event = pool[2]\n\nexecute!(queue) do list\n    append_launch!(list, kernel, 1, signal_event, wait_event)\nend\n@test !Base.isdone(signal_event)\n\nsignal(wait_event)\nsynchronize(queue)\n@test Base.isdone(signal_event)\n\nend\n\nend\n\n\n@testset \"memory\" begin\n\nbuf = device_alloc(ctx, dev, 1024)\nprops = properties(buf)\n@test props.device == dev\n@test props.type == oneL0.ZE_MEMORY_TYPE_DEVICE\n@test_throws ArgumentError convert(Ptr{Cvoid}, buf)\nptr = convert(ZePtr{Cvoid}, buf)\n@test lookup_alloc(ctx, ptr) isa typeof(buf)\nfree(buf)\n\nbuf = host_alloc(ctx, 1024)\nprops = properties(buf)\n@test props.type == oneL0.ZE_MEMORY_TYPE_HOST\nptr = convert(ZePtr{Cvoid}, buf)\n@test lookup_alloc(ctx, ptr) isa typeof(buf)\nptr = convert(Ptr{Cvoid}, buf)\n@test lookup_alloc(ctx, ptr) isa typeof(buf)\nfree(buf)\n\nbuf = shared_alloc(ctx, dev, 1024)\nprops = properties(buf)\n@test props.type == oneL0.ZE_MEMORY_TYPE_SHARED\nptr = convert(ZePtr{Cvoid}, buf)\n@test lookup_alloc(ctx, ptr) isa typeof(buf)\nptr = convert(Ptr{Cvoid}, buf)\n@test lookup_alloc(ctx, ptr) isa typeof(buf)\nfree(buf)\n\nend\n\n\n@testset \"copy\" begin\n\nlet src = rand(Int, 1024)\n    chk = ones(Int, length(src))\n\n    dst = device_alloc(ctx, dev, sizeof(src))\n\n    execute!(queue) do list\n        append_copy!(list, pointer(dst), pointer(src), sizeof(src))\n        append_barrier!(list)\n        append_copy!(list, pointer(chk), pointer(dst), sizeof(src))\n    end\n    synchronize(queue)\n    @test chk == src\n\n    # FIX: Allocate pattern in USM Host Memory\n    # Standard Host memory (stack/heap) is not accessible by discrete GPUs for fill patterns.\n    # We must use USM Host Memory.\n    pattern_val = 42\n    pattern_buf = oneL0.host_alloc(ctx, sizeof(Int), Base.datatype_alignment(Int))\n    unsafe_store!(convert(Ptr{Int}, pattern_buf), pattern_val)\n\n    execute!(queue) do list\n        # Use the USM pointer (converted to ZePtr)\n        append_fill!(list, pointer(dst), convert(ZePtr{Int}, pattern_buf), sizeof(Int), sizeof(src))\n        append_barrier!(list)\n        append_copy!(list, pointer(chk), pointer(dst), sizeof(src))\n    end\n    synchronize(queue)\n\n    oneL0.free(pattern_buf)\n\n    @test all(isequal(42), chk)\n\n    free(dst)\nend\n\nfor buf in [device_alloc(ctx, dev, 1024),\n            host_alloc(ctx, 1024),\n            shared_alloc(ctx, dev, 1024)]\n    execute!(queue) do list\n        append_prefetch!(list, pointer(buf), sizeof(buf))\n\n        append_advise!(list, dev, pointer(buf), sizeof(buf),\n                       oneL0.ZE_MEMORY_ADVICE_SET_READ_MOSTLY)\n    end\n\n    free(buf)\nend\n\nend\n\n\n\n@testset \"residency\" begin\n\nfor buf in [device_alloc(ctx, dev, 1024),\n            host_alloc(ctx, 1024),\n            shared_alloc(ctx, dev, 1024)]\n    make_resident(ctx, dev, buf)\n    evict(ctx, dev, buf)\n    make_resident(ctx, dev, buf, 1024)\n    evict(ctx, dev, buf, 1024)\n    free(buf)\nend\n\nend\n"
  },
  {
    "path": "test/onemkl.jl",
    "content": "if Sys.iswindows()\n@warn \"Skipping unsupported oneKML tests\"\nelse\n\nusing oneAPI\n    using oneAPI.oneMKL: band, bandex, oneSparseMatrixCSR, oneSparseMatrixCOO, oneSparseMatrixCSC\n\nusing SparseArrays\nusing LinearAlgebra\n\nm = 20\nn = 35\nk = 13\n\n@testset \"Version\" begin\n    version_onemkl = oneMKL.version()\n    @test version_onemkl ≥ v\"2025.2.0\"\nend\n\n############################################################################################\n@testset \"level 1\" begin\n    @testset for T in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])\n        @testset \"copy\" begin\n            A = oneArray(rand(T, m))\n            B = oneArray{T}(undef, m)\n            oneMKL.copy!(m,A,B)\n            @test Array(A) == Array(B)\n        end\n\n        @testset \"axpy\" begin\n            alpha = rand(T)\n            @test testf(axpy!, alpha, rand(T,m), rand(T,m))\n        end\n\n        @testset \"axpby\" begin\n            alpha = rand(T)\n            beta = rand(T)\n            @test testf(axpby!, alpha, rand(T,m), beta, rand(T,m))\n        end\n\n        @testset \"rotate\" begin\n            @test testf(rotate!, rand(T, m), rand(T, m), rand(real(T)), rand(real(T)))\n            @test testf(rotate!, rand(T, m), rand(T, m), rand(real(T)), rand(T))\n        end\n\n        @testset \"reflect\" begin\n            @test testf(reflect!, rand(T, m), rand(T, m), rand(real(T)), rand(real(T)))\n            @test testf(reflect!, rand(T, m), rand(T, m), rand(real(T)), rand(T))\n        end\n\n        @testset \"scal\" begin\n            # Test scal primitive [alpha/x: F32, F64, CF32, CF64]\n            alpha = rand(T,1)\n            @test testf(rmul!, rand(T,m), alpha[1])\n\n            # Test scal primitive [alpha - F32, F64, x - CF32, CF64]\n            A = rand(T,m)\n            gpuA = oneArray(A)\n            if T === ComplexF32\n                alphaf32 = rand(Float32, 1)\n                oneMKL.scal!(m, alphaf32[1], gpuA)\n                @test Array(A .* alphaf32[1]) ≈ Array(gpuA)\n            end\n\n            if T === ComplexF64\n                alphaf64 = rand(Float64, 1)\n                oneMKL.scal!(m, alphaf64[1], gpuA)\n                @test Array(A .* alphaf64[1]) ≈ Array(gpuA)\n            end\n        end\n\n        @testset \"nrm2\" begin\n            @test testf(norm, rand(T,m))\n        end\n\n        @testset \"iamax/iamin\" begin\n            a = convert.(T, [1.0, 2.0, -0.8, 5.0, 3.0])\n            ca = oneArray(a)\n            @test BLAS.iamax(a) == oneMKL.iamax(ca)\n            @test oneMKL.iamin(ca) == 3\n        end\n\n        @testset \"swap\" begin\n            x = rand(T, m)\n            y = rand(T, m)\n            dx = oneArray(x)\n            dy = oneArray(y)\n            oneMKL.swap!(m, dx, dy)\n            @test Array(dx) == y\n            @test Array(dy) == x\n        end\n\n        @testset \"dot\" begin\n            @test testf(dot, rand(T,m), rand(T,m))\n            if T == ComplexF32 || T == ComplexF64\n                @test testf(oneMKL.dotu, m,\n                            oneArray(rand(T,m)),\n                            oneArray(rand(T,m)))\n            end\n        end\n\n        @testset \"asum\" begin\n            @test testf(BLAS.asum, rand(T,m))\n\n        end\n    end\n\n    @testset for T in [Float16, ComplexF16]\n        alpha = rand(T,1)\n        A = oneArray(rand(T, m))\n        B = oneArray{T}(undef, m)\n        oneMKL.copy!(m,A,B)\n        @test Array(A) == Array(B)\n\n        @test testf(axpy!, alpha[1], rand(T,m), rand(T,m))\n        @test testf(norm, rand(T,m))\n        @test testf(dot, rand(T, m), rand(T, m))\n        @test testf(*, transpose(rand(T, m)), rand(T,m))\n        @test testf(*, rand(T, m)', rand(T,m))\n        @test testf(rmul!, rand(T,m), alpha[1])\n\n        if T <: ComplexF16\n            @test testf(dot, rand(T, m), rand(T, m))\n            x = rand(T, m)\n            y = rand(T, m)\n            dx = oneArray(x)\n            dy = oneArray(y)\n            dz = dot(dx, dy)\n            z = dot(x, y)\n            @test dz ≈ z\n        end\n    end\nend\n\n@testset \"level 2\" begin\n    @testset for T in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])\n        alpha = rand(T)\n        beta = rand(T)\n\n        @testset \"gemv\" begin\n            @test testf(*, rand(T, m, n), rand(T, n))\n            @test testf(*, transpose(rand(T, m, n)), rand(T, m))\n            @test testf(*, rand(T, m, n)', rand(T, m))\n            x = rand(T, m)\n            A = rand(T, m, m + 1 )\n            y = rand(T, m)\n            dx = oneArray(x)\n            dA = oneArray(A)\n            dy = oneArray(y)\n            @test_throws DimensionMismatch mul!(dy, dA, dx)\n            A = rand(T, m + 1, m )\n            dA = oneArray(A)\n            @test_throws DimensionMismatch mul!(dy, dA, dx)\n            x = rand(T, m)\n            A = rand(T, n, m)\n            dx = oneArray(x)\n            dA = oneArray(A)\n            alpha = rand(T)\n            dy = oneMKL.gemv('N', alpha, dA, dx)\n            hy = collect(dy)\n            @test hy ≈ alpha * A * x\n            dy = oneMKL.gemv('N', dA, dx)\n            hy = collect(dy)\n            @test hy ≈ A * x\n        end\n\n        @testset \"banded methods\" begin\n            # bands\n            ku = 2\n            kl = 3\n            # generate banded matrix\n            A = rand(T, m,n)\n            A = bandex(A, kl, ku)\n\n            # get packed format\n            Ab = band(A, kl, ku)\n            d_Ab = oneArray(Ab)\n            x = rand(T, n)\n            d_x = oneArray(x)\n            synchronize()\n\n            @testset \"gbmv!\" begin\n                # Test: y = alpha * A * x + beta * y\n                y = rand(T, m)\n                d_y = oneArray(y)\n                synchronize()\n                oneMKL.gbmv!('N', m, kl, ku, alpha, d_Ab, d_x, beta, d_y)\n                BLAS.gbmv!('N', m, kl, ku, alpha, Ab, x, beta, y)\n                h_y = Array(d_y)\n                @test y ≈ h_y\n\n                # Test: y = alpha * transpose(A) * x + beta * y\n                x = rand(T, n)\n                d_x = oneArray(x)\n                y = rand(T,m)\n                d_y = oneArray(y)\n                synchronize()\n                oneMKL.gbmv!('T', m, kl, ku, alpha, d_Ab, d_y, beta, d_x)\n                BLAS.gbmv!('T', m, kl, ku, alpha, Ab, y, beta, x)\n                h_x = Array(d_x)\n                @test x ≈ h_x\n\n                # Test: y = alpha * A'*x + beta * y\n                x = rand(T,n)\n                d_x = oneArray(x)\n                y = rand(T,m)\n                d_y = oneArray(y)\n                synchronize()\n                oneMKL.gbmv!('C', m, kl, ku, alpha, d_Ab, d_y, beta, d_x)\n                BLAS.gbmv!('C', m, kl, ku, alpha, Ab, y, beta, x)\n                h_x = Array(d_x)\n                @test x ≈ h_x\n\n                # Test: alpha=1 version without y\n                d_y = oneMKL.gbmv('N', m, kl, ku, d_Ab, d_x)\n                y = BLAS.gbmv('N', m, kl, ku, Ab, x)\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"gbmv\" begin\n                # test y = alpha*A*x\n                x = rand(T,n)\n                d_x = oneArray(x)\n                d_y = oneMKL.gbmv('N', m, kl, ku, alpha, d_Ab, d_x)\n                y = zeros(T,m)\n                y = BLAS.gbmv('N',m,kl,ku,alpha,Ab,x)\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            A = rand(T,m,m)\n            A = A + A'\n            nbands = 3\n            @test m >= 1+nbands\n            A = bandex(A,nbands,nbands)\n            # convert to 'upper' banded storage format\n            AB = band(A,0,nbands)\n            # construct x\n            x = rand(T,m)\n            d_AB = oneArray(AB)\n            d_x = oneArray(x)\n            if T <:Union{ComplexF32,ComplexF64}\n                @testset \"hbmv!\" begin\n                    y = rand(T,m)\n                    d_y = oneArray(y)\n                    # hbmv!\n                    oneMKL.hbmv!('U',nbands,alpha,d_AB,d_x,beta,d_y)\n                    y = alpha*(A*x) + beta*y\n                    # compare\n                    h_y = Array(d_y)\n                    @test y ≈ h_y\n                end\n                @testset \"hbmv\" begin\n                    d_y = oneMKL.hbmv('U',nbands,d_AB,d_x)\n                    y = A*x\n                    # compare\n                    h_y = Array(d_y)\n                    @test y ≈ h_y\n                end\n            else\n                @testset \"sbmv!\" begin\n                    y = rand(T,m)\n                    d_y = oneArray(y)\n                    # sbmv!\n                    oneMKL.sbmv!('U',nbands,alpha,d_AB,d_x,beta,d_y)\n                    y = alpha*(A*x) + beta*y\n                    # compare\n                    h_y = Array(d_y)\n                    @test y ≈ h_y\n                end\n                @testset \"sbmv\" begin\n                    d_y = oneMKL.sbmv('U',nbands,d_AB,d_x)\n                    y = A*x\n                    # compare\n                    h_y = Array(d_y)\n                    @test y ≈ h_y\n                end\n            end\n            # generate triangular matrix\n            A = rand(T,m,m)\n            # restrict to 3 bands\n            nbands = 3\n            @test m >= 1+nbands\n            A = bandex(A,0,nbands)\n            # convert to 'upper' banded storage format\n            AB = band(A,0,nbands)\n            d_AB = oneArray(AB)\n            @testset \"tbmv!\" begin\n                y = rand(T, m)\n                # move to host\n                d_y = oneArray(y)\n                # tbmv!\n                oneMKL.tbmv!('U','N','N',nbands,d_AB,d_y)\n                y = A*y\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n            @testset \"tbmv\" begin\n                # tbmv\n                d_y = oneMKL.tbmv('U','N','N',nbands,d_AB,d_x)\n                y = A*x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n        end\n\n        @testset \"ger!\" begin\n            A = rand(T,m,m)\n            x = rand(T,m)\n            y = rand(T,m)\n            dA = oneArray(A)\n            dx = oneArray(x)\n            dy = oneArray(y)\n            # perform rank one update\n            dB = copy(dA)\n            oneMKL.ger!(alpha,dx,dy,dB)\n            B = (alpha*x)*y' + A\n            # move to host and compare\n            hB = Array(dB)\n            @test B ≈ hB\n        end\n\n        @testset \"Triangular\" begin\n            @testset \"trmv!\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = copy(dx)\n                # execute trmv!\n                oneMKL.trmv!('U','N','N',dA,d_y)\n                y = A*x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"trmv\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = copy(dx)\n                d_y = oneMKL.trmv('U','N','N',dA,dx)\n                y = A*x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"trsv!\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = copy(dx)\n                # execute trsv!\n                oneMKL.trsv!('U','N','N',dA,d_y)\n                y = A\\x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"trsv\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = oneMKL.trsv('U','N','N',dA,dx)\n                y = A\\x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"trsv (adjoint)\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = oneMKL.trsv('U','C','N',dA,dx)\n                y = adjoint(A)\\x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n\n            @testset \"trsv (transpose)\" begin\n                sA = rand(T,m,m)\n                sA = sA + transpose(sA)\n                A = triu(sA)\n                dA = oneArray(A)\n                x = rand(T, m)\n                dx = oneArray(x)\n                d_y = oneMKL.trsv('U','T','N',dA,dx)\n                y = transpose(A)\\x\n                # compare\n                h_y = Array(d_y)\n                @test y ≈ h_y\n            end\n        end\n    end\n\n    @testset for T in intersect(eltypes, [ComplexF32, ComplexF64])\n        alpha = rand(T)\n        beta = rand(T)\n        @testset \"hemv!\" begin\n            A = rand(T,m,n)\n            dA = oneArray(A)\n            sA = rand(T,m,m)\n            sA = sA + transpose(sA)\n            dsA = oneArray(sA)\n            hA = rand(T,m,m)\n            hA = hA + hA'\n            dhA = oneArray(hA)\n            x = rand(T,m)\n            dx = oneArray(x)\n            y = rand(T,m)\n            dy = oneArray(y)\n            synchronize()\n\n            # execute on host\n            BLAS.hemv!('U',alpha,hA,x,beta,y)\n            # execute on device\n            oneMKL.hemv!('U',alpha,dhA,dx,beta,dy)\n\n            # compare results\n            hy = Array(dy)\n            @test y ≈ hy\n        end\n\n        @testset \"hemv\" begin\n            A = rand(T,m,n)\n            dA = oneArray(A)\n            sA = rand(T,m,m)\n            sA = sA + transpose(sA)\n            dsA = oneArray(sA)\n            hA = rand(T,m,m)\n            hA = hA + hA'\n            dhA = oneArray(hA)\n            x = rand(T,m)\n            dx = oneArray(x)\n            y = rand(T,m)\n            dy = oneArray(y)\n            synchronize()\n\n            y = BLAS.hemv('U',hA,x)\n            # execute on device\n            dy = oneMKL.hemv('U',dhA,dx)\n            # compare results\n            hy = Array(dy)\n            @test y ≈ hy\n        end\n\n        @testset \"her!\" begin\n            A = rand(T,m,n)\n            dA = oneArray(A)\n            sA = rand(T,m,m)\n            sA = sA + transpose(sA)\n            dsA = oneArray(sA)\n            hA = rand(T,m,m)\n            hA = hA + hA'\n            dhA = oneArray(hA)\n            x = rand(T,m)\n            dx = oneArray(x)\n            dB = copy(dhA)\n            # perform rank one update\n            oneMKL.her!('U',real(alpha),dx,dB)\n            B = (real(alpha)*x)*x' + hA\n            # move to host and compare upper triangles\n            hB = Array(dB)\n            B = triu(B)\n            hB = triu(hB)\n            @test B ≈ hB\n        end\n\n        @testset \"her2!\" begin\n            A = rand(T,m,n)\n            dA = oneArray(A)\n            sA = rand(T,m,m)\n            sA = sA + transpose(sA)\n            dsA = oneArray(sA)\n            hA = rand(T,m,m)\n            hA = hA + hA'\n            dhA = oneArray(hA)\n            x = rand(T,m)\n            dx = oneArray(x)\n            y = rand(T,m)\n            dy = oneArray(y)\n            dB = copy(dhA)\n            oneMKL.her2!('U',real(alpha),dx,dy,dB)\n            B = (real(alpha)*x)*y' + y*(real(alpha)*x)' + hA\n            # move to host and compare upper triangles\n            hB = Array(dB)\n            B = triu(B)\n            hB = triu(hB)\n            @test B ≈ hB\n        end\n    end\n\n    @testset \"symmetric\" begin\n        @testset for T in intersect(eltypes, [Float32, Float64])\n            alpha = rand(T)\n            beta = rand(T)\n            A = rand(T,m,m)\n            A = A + A'\n            nbands = 3\n            @test m >= 1+nbands\n            A = bandex(A,nbands,nbands)\n            # convert to 'upper' banded storage format\n            AB = band(A,0,nbands)\n            # construct x\n            x = rand(T,m)\n            d_AB = oneArray(AB)\n            d_x = oneArray(x)\n            @testset \"symv tests\" begin\n                x = rand(T,m)\n                sA = rand(T, m, m)\n                sA = sA + transpose(sA)\n                dsA = oneArray(sA)\n                dx = oneArray(x)\n                synchronize()\n\n                @testset \"symv!\" begin\n                    # generate vectors\n                    y = rand(T,m)\n                    # copy to device\n                    dy = oneArray(y)\n                    synchronize()\n                    # execute on host\n                    BLAS.symv!('U',alpha,sA,x,beta,y)\n                    # execute on device\n                    oneMKL.symv!('U',alpha,dsA,dx,beta,dy)\n                    # compare results\n                    hy = Array(dy)\n                    @test y ≈ hy\n                end\n\n                @testset \"symv\" begin\n                    y = BLAS.symv('U',sA,x)\n                    # execute on device\n                    dy = oneMKL.symv('U',dsA,dx)\n                    # compare results\n                    hy = Array(dy)\n                    @test y ≈ hy\n                end\n            end\n\n            @testset \"syr!\" begin\n                x = rand(T,m)\n                sA = rand(T, m, m)\n                sA = sA + transpose(sA)\n                dsA = oneArray(sA)\n                dx = oneArray(x)\n                dB = copy(dsA)\n                oneMKL.syr!('U',alpha,dx,dB)\n                B = (alpha*x)*transpose(x) + sA\n                # move to host and compare upper triangles\n                hB = Array(dB)\n                B = triu(B)\n                hB = triu(hB)\n                @test B ≈ hB\n            end\n        end\n    end\nend\n\n@testset \"level 3\" begin\n    @testset for T in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])\n        alpha = rand(T)\n        beta = rand(T)\n        B = rand(T,m,n)\n        C = rand(T,m,n)\n        Bbad = rand(T,m+1,n+1)\n        d_B = oneArray(B)\n        d_C = oneArray(C)\n        d_Bbad = oneArray(Bbad)\n        sA = rand(T,m,m)\n        sA = sA + transpose(sA)\n        dsA = oneArray(sA)\n\n        @testset \"symm!\" begin\n            oneMKL.symm!('L','U',alpha,dsA,d_B,beta,d_C)\n            C = (alpha*sA)*B + beta*C\n            # compare\n            h_C = Array(d_C)\n            @test C ≈ h_C\n            @test_throws DimensionMismatch oneMKL.symm!('L','U',alpha,dsA,d_Bbad,beta,d_C)\n        end\n\n        @testset \"symm\" begin\n            d_C = oneMKL.symm('L','U',dsA,d_B)\n            C = sA*B\n            # compare\n            h_C = Array(d_C)\n            @test C ≈ h_C\n            @test_throws DimensionMismatch oneMKL.symm('L','U',dsA,d_Bbad)\n        end\n\n        @testset \"syrk\" begin\n            A = rand(T,m,k)\n            d_A = oneArray(A)\n            d_C = oneMKL.syrk('U','N',d_A)\n            C = A*transpose(A)\n            C = triu(C)\n            # move to host and compare\n            h_C = Array(d_C)\n            h_C = triu(C)\n            @test C ≈ h_C\n        end\n\n        A = rand(T,m,k)\n        B = rand(T,m,k)\n        Bbad = rand(T,m+1,k+1)\n        C = rand(T,m,m)\n        C = C + transpose(C)\n        # move to device\n        d_A = oneArray(A)\n        d_B = oneArray(B)\n        d_Bbad = oneArray(Bbad)\n        d_C = oneArray(C)\n        @testset \"syr2k!\" begin\n            # compute\n            C = alpha*(A*transpose(B) + B*transpose(A)) + beta*C\n            oneMKL.syr2k!('U','N',alpha,d_A,d_B,beta,d_C)\n            # move back to host and compare\n            C = triu(C)\n            h_C = Array(d_C)\n            h_C = triu(h_C)\n            @test C ≈ h_C\n            @test_throws DimensionMismatch oneMKL.syr2k!('U','N',alpha,d_A,d_Bbad,beta,d_C)\n        end\n\n        @testset \"syr2k\" begin\n            C = alpha*(A*transpose(B) + B*transpose(A))\n            d_C = oneMKL.syr2k('U','N',alpha,d_A,d_B)\n            # move back to host and compare\n            C = triu(C)\n            h_C = Array(d_C)\n            h_C = triu(h_C)\n            @test C ≈ h_C\n        end\n\n        @testset \"trmm!\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*A*B\n            oneMKL.trmm!('L','U','N','N',alpha,dA,dB)\n            # move to host and compare\n            h_C = Array(dB)\n            @test C ≈ h_C\n        end\n\n        @testset \"trmm\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*A*B\n            dC = oneMKL.trmm('L','U','N','N',alpha,dA,dB)\n            # move to host and compare\n            h_C = Array(dC)\n            @test C ≈ h_C\n        end\n\n        @testset \"left trsm!\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*(A\\B)\n            dC = copy(dB)\n            oneMKL.trsm!('L','U','N','N',alpha,dA,dC)\n            @test C ≈ Array(dC)\n        end\n\n        @testset \"left trsm\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*(A\\B)\n            dC = oneMKL.trsm('L','U','N','N',alpha,dA,dB)\n            @test C ≈ Array(dC)\n        end\n\n        @testset \"left trsm (adjoint)\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*(adjoint(A)\\B)\n            dC = oneMKL.trsm('L','U','C','N',alpha,dA,dB)\n            @test C ≈ Array(dC)\n        end\n\n        @testset \"left trsm (transpose)\" begin\n            A = triu(rand(T, m, m))\n            B = rand(T,m,n)\n            dA = oneArray(A)\n            dB = oneArray(B)\n            C = alpha*(transpose(A)\\B)\n            dC = oneMKL.trsm('L','U','T','N',alpha,dA,dB)\n            @test C ≈ Array(dC)\n        end\n\n        let A = rand(T, m,m), B = triu(rand(T, m, m)), alpha = rand(T)\n            dA = oneArray(A)\n            dB = oneArray(B)\n\n            @testset \"right trsm!\" begin\n                C = alpha*(A/B)\n                dC = copy(dA)\n                oneMKL.trsm!('R','U','N','N',alpha,dB,dC)\n                @test C ≈ Array(dC)\n            end\n\n            @testset \"right trsm\" begin\n                C = alpha*(A/B)\n                dC = oneMKL.trsm('R','U','N','N',alpha,dB,dA)\n                @test C ≈ Array(dC)\n            end\n            @testset \"right trsm (adjoint)\" begin\n                C = alpha*(A/adjoint(B))\n                dC = oneMKL.trsm('R','U','C','N',alpha,dB,dA)\n                @test C ≈ Array(dC)\n            end\n            @testset \"right trsm (transpose)\" begin\n                C = alpha*(A/transpose(B))\n                dC = oneMKL.trsm('R','U','T','N',alpha,dB,dA)\n                @test C ≈ Array(dC)\n            end\n        end\n        if T <:Union{ComplexF32,ComplexF64}\n            @testset \"hemm!\" begin\n                B = rand(T,m,n)\n                C = rand(T,m,n)\n                d_B = oneArray(B)\n                d_C = oneArray(C)\n                hA = rand(T,m,m)\n                hA = hA + hA'\n                dhA = oneArray(hA)\n                # compute\n                C = alpha*(hA*B) + beta*C\n                oneMKL.hemm!('L','L',alpha,dhA,d_B,beta,d_C)\n                # move to host and compare\n                h_C = Array(d_C)\n                @test C ≈ h_C\n            end\n\n            @testset \"hemm\" begin\n                B = rand(T,m,n)\n                C = rand(T,m,n)\n                d_B = oneArray(B)\n                d_C = oneArray(C)\n                hA = rand(T,m,m)\n                hA = hA + hA'\n                dhA = oneArray(hA)\n\n                C = hA*B\n                d_C = oneMKL.hemm('L','U',dhA,d_B)\n                # move to host and compare\n                h_C = Array(d_C)\n                @test C ≈ h_C\n            end\n\n            @testset \"herk!\" begin\n                B = rand(T,m,n)\n                C = rand(T,m,n)\n                d_B = oneArray(B)\n                d_C = oneArray(C)\n                hA = rand(T,m,m)\n                hA = hA + hA'\n                dhA = oneArray(hA)\n                A = rand(T,m,k)\n                d_A = oneArray(A)\n                d_C = oneArray(dhA)\n                oneMKL.herk!('U','N',real(alpha),d_A,real(beta),d_C)\n                C = real(alpha)*(A*A') + real(beta)*hA\n                C = triu(C)\n                # move to host and compare\n                h_C = Array(d_C)\n                h_C = triu(C)\n                @test C ≈ h_C\n            end\n\n            @testset \"herk\" begin\n                B = rand(T,m,n)\n                C = rand(T,m,n)\n                d_B = oneArray(B)\n                d_C = oneArray(C)\n                hA = rand(T,m,m)\n                hA = hA + hA'\n                dhA = oneArray(hA)\n                A = rand(T,m,k)\n                d_A = oneArray(A)\n                d_C = oneMKL.herk('U','N',d_A)\n                C = A*A'\n                C = triu(C)\n                # move to host and compare\n                h_C = Array(d_C)\n                h_C = triu(C)\n                @test C ≈ h_C\n            end\n\n            @testset \"her2k!\" begin\n                A = rand(T,m,k)\n                B = rand(T,m,k)\n                Bbad = rand(T,m+1,k+1)\n                C = rand(T,m,m)\n                C = C + transpose(C)\n                # move to device\n                d_A = oneArray(A)\n                d_B = oneArray(B)\n                d_Bbad = oneArray(Bbad)\n                d_C = oneArray(C)\n                elty1 = T\n                elty2 = real(T)\n                # generate parameters\n                α = rand(elty1)\n                β = rand(elty2)\n                C = C + C'\n                d_C = oneArray(C)\n                C = α*(A*B') + conj(α)*(B*A') + β*C\n                oneMKL.her2k!('U','N',α,d_A,d_B,β,d_C)\n                # move back to host and compare\n                C = triu(C)\n                h_C = Array(d_C)\n                h_C = triu(h_C)\n                @test C ≈ h_C\n                @test_throws DimensionMismatch oneMKL.her2k!('U','N',α,d_A,d_Bbad,β,d_C)\n            end\n\n            @testset \"her2k\" begin\n                A = rand(T,m,k)\n                B = rand(T,m,k)\n                Bbad = rand(T,m+1,k+1)\n                C = rand(T,m,m)\n                C = C + transpose(C)\n                # move to device\n                d_A = oneArray(A)\n                d_B = oneArray(B)\n                d_Bbad = oneArray(Bbad)\n                d_C = oneArray(C)\n                C = A*B' + B*A'\n                d_C = oneMKL.her2k('U','N',d_A,d_B)\n                # move back to host and compare\n                C = triu(C)\n                h_C = Array(d_C)\n                h_C = triu(h_C)\n                @test C ≈ h_C\n            end\n        end\n    end\n\n    @testset for T in intersect(eltypes, [Float16, Float32, Float64, ComplexF32, ComplexF64])\n        @testset \"gemm!\" begin\n            alpha = rand(T)\n            beta = rand(T)\n            A = rand(T,m,k)\n            B = rand(T,k,n)\n            Bbad = rand(T,k+1,n+1)\n            C1 = rand(T,m,n)\n            C2 = copy(C1)\n            d_A = oneArray(A)\n            d_B = oneArray(B)\n            d_Bbad = oneArray(Bbad)\n            d_C1 = oneArray(C1)\n            d_C2 = oneArray(C2)\n            hA = rand(T,m,m)\n            hA = hA + hA'\n            dhA = oneArray(hA)\n            sA = rand(T,m,m)\n            sA = sA + transpose(sA)\n            dsA = oneArray(sA)\n            oneMKL.gemm!('N','N',alpha,d_A,d_B,beta,d_C1)\n            mul!(d_C2, d_A, d_B)\n            h_C1 = Array(d_C1)\n            h_C2 = Array(d_C2)\n            C1 = (alpha*A)*B + beta*C1\n            C2 = A*B\n            # compare\n            @test C1 ≈ h_C1\n            @test C2 ≈ h_C2\n            @test_throws ArgumentError mul!(dhA, dhA, dsA)\n            @test_throws DimensionMismatch mul!(d_C1, d_A, dsA)\n\n            d_c = oneMKL.gemm('N', 'N', d_A, d_B)\n            C = A * B\n            C2 = d_A * d_B\n            h_C = Array(d_c)\n            h_C2 = Array(C2)\n            @test C ≈ h_C\n            @test C ≈ h_C2\n        end\n    end\nend\n\n@testset \"Batch Primitives\" begin\n    @testset for T in intersect(eltypes, [Float16, Float32, Float64, ComplexF32, ComplexF64])\n        alpha = rand(T)\n        beta = rand(T)\n        group_count = 10\n        @testset \"Gemm Batch\" begin\n            # generate matrices\n            bA = [rand(T,m,k) for i in 1:group_count]\n            bB = [rand(T,k,n) for i in 1:group_count]\n            bC = [rand(T,m,n) for i in 1:group_count]\n            # move to device\n            bd_A = oneArray{T, 2}[]\n            bd_B = oneArray{T, 2}[]\n            bd_C = oneArray{T, 2}[]\n            bd_bad = oneArray{T, 2}[]\n            for i in 1:length(bA)\n                push!(bd_A,oneArray(bA[i]))\n                push!(bd_B,oneArray(bB[i]))\n                push!(bd_C,oneArray(bC[i]))\n                if i < length(bA) - 2\n                    push!(bd_bad,oneArray(bC[i]))\n                end\n            end\n\n            @testset \"gemm_batched!\" begin\n                # C = (alpha*A)*B + beta*C\n                oneMKL.gemm_batched!('N','N',alpha,bd_A,bd_B,beta,bd_C)\n                for i in 1:length(bd_C)\n                    bC[i] = (alpha*bA[i])*bB[i] + beta*bC[i]\n                    h_C = Array(bd_C[i])\n                    #compare\n                    @test bC[i] ≈ h_C\n                end\n                @test_throws DimensionMismatch oneMKL.gemm_batched!('N','N',alpha,bd_A,bd_bad,beta,bd_C)\n            end\n\n            @testset \"gemm_batched\" begin\n                bd_C = oneMKL.gemm_batched('N','N',bd_A,bd_B)\n                for i in 1:length(bA)\n                    bC = bA[i]*bB[i]\n                    h_C = Array(bd_C[i])\n                    @test bC ≈ h_C\n                end\n                @test_throws DimensionMismatch oneMKL.gemm_batched('N','N',alpha,bd_A,bd_bad)\n            end\n        end\n\n        if T <:Union{Float32, Float64, ComplexF32, ComplexF64}\n            @testset \"Trsm Batch\" begin\n                @testset \"trsm_batched!\" begin\n                    bA = [rand(T,m,m) for i in 1:group_count]\n                    map!((x) -> triu(x), bA, bA)\n                    bB = [rand(T,m,n) for i in 1:group_count]\n                    bBbad = [rand(T,m,n) for i in 1:(group_count-1)]\n                    # move to device\n                    bd_A = oneArray{T, 2}[]\n                    bd_B = oneArray{T, 2}[]\n                    bd_Bbad = oneArray{T, 2}[]\n                    for i in 1:length(bA)\n                        push!(bd_A,oneArray(bA[i]))\n                        push!(bd_B,oneArray(bB[i]))\n                    end\n                    for i in 1:length(bBbad)\n                        push!(bd_Bbad,oneArray(bBbad[i]))\n                    end\n                    # compute\n                    oneMKL.trsm_batched!('L','U','N','N',alpha,bd_A,bd_B)\n                    @test_throws DimensionMismatch oneMKL.trsm_batched!('L','U','N','N',alpha,bd_A,bd_Bbad)\n                    # move to host and compare\n                    for i in 1:length(bd_B)\n                        bC = alpha*(bA[i]\\bB[i])\n                        h_C = Array(bd_B[i])\n                        #compare\n                        @test bC ≈ h_C\n                    end\n                end\n\n                @testset \"trsm_batched\" begin\n                    # generate parameter alpha = rand(elty)\n                    # generate matrices\n                    bA = [rand(T,m,m) for i in 1:group_count]\n                    map!((x) -> triu(x), bA, bA)\n                    bB = [rand(T,m,n) for i in 1:group_count]\n                    # move to device\n                    bd_A = oneArray{T, 2}[]\n                    bd_B = oneArray{T, 2}[]\n                    for i in 1:length(bA)\n                        push!(bd_A,oneArray(bA[i]))\n                        push!(bd_B,oneArray(bB[i]))\n                    end\n                    # compute\n                    bd_C = oneMKL.trsm_batched('L','U','N','N',alpha,bd_A,bd_B)\n                    # move to host and compare\n                    for i in 1:length(bd_C)\n                        bC = alpha*(bA[i]\\bB[i])\n                        h_C = Array(bd_C[i])\n                        @test bC ≈ h_C\n                    end\n                end\n            end\n        end\n    end\nend\n\n@testset \"gemm_batch_strided\" begin\n    @testset for elty in intersect(eltypes, [Float16, Float32, Float64, ComplexF32, ComplexF64])\n        nbatch = 10\n        alpha = rand(elty)\n        beta = rand(elty)\n        @testset \"gemm_strided_batched!\" begin\n            bA = rand(elty, m, k, nbatch)\n            bB = rand(elty, k, n, nbatch)\n            bC = rand(elty, m, n, nbatch)\n            bbad = rand(elty, m+1, n+1, nbatch)\n            # move to device\n            bd_A = oneArray{elty, 3}(bA)\n            bd_B = oneArray{elty, 3}(bB)\n            bd_C = oneArray{elty, 3}(bC)\n            bd_bad = oneArray{elty, 3}(bbad)\n\n            oneMKL.gemm_strided_batched!('N', 'N', alpha, bd_A, bd_B, beta, bd_C)\n            for i in 1:nbatch\n                bC[:, :, i] = (alpha * bA[:, :, i]) * bB[:, :, i] + beta * bC[:, :, i]\n            end\n            h_C = Array(bd_C)\n            @test bC ≈ h_C\n\n            @test_throws DimensionMismatch oneMKL.gemm_strided_batched!('N', 'N', alpha, bd_A, bd_B, beta, bd_bad)\n        end\n\n        @testset \"gemm_strided_batched\" begin\n            # Host buffers\n            bA = rand(elty, m, k, nbatch)\n            bB = rand(elty, k, n, nbatch)\n            bC = rand(elty, m, n, nbatch)\n            bbad = rand(elty, m+1, n+1, nbatch)\n            # Move host data to device\n            bd_A = oneArray{elty, 3}(bA)\n            bd_B = oneArray{elty, 3}(bB)\n            bd_C = oneArray{elty, 3}(bC)\n            bd_bad = oneArray{elty, 3}(bbad)\n            # Compute oneMKL strided batch\n            bd_C = oneMKL.gemm_strided_batched('N', 'N', bd_A, bd_B)\n            #Compute Host\n            for i in 1:nbatch\n                bC[:, :, i] = bA[:, :, i] * bB[:, :, i]\n            end\n            h_C = Array(bd_C)\n            @test bC ≈ h_C\n\n            # generate matrices\n            bA = rand(elty, k, m, nbatch)\n            bB = rand(elty, k, n, nbatch)\n            bC = zeros(elty, m, n, nbatch)\n            # move to device\n            bd_A = oneArray{elty, 3}(bA)\n            bd_B = oneArray{elty, 3}(bB)\n            bd_C = oneMKL.gemm_strided_batched('T', 'N', bd_A, bd_B)\n            for i in 1:nbatch\n                bC[:, :, i] = transpose(bA[:, :, i]) * bB[:, :, i]\n            end\n            h_C = Array(bd_C)\n            @test bC ≈ h_C\n            @test_throws DimensionMismatch oneMKL.gemm_strided_batched('N', 'N', alpha, bd_A, bd_bad)\n        end\n    end\nend\n\n@testset \"SPARSE\" begin\n        @testset \"$T\" for T in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])\n        @testset \"oneSparseMatrixCSR\" begin\n            for S in (Int32, Int64)\n                A = sprand(T, 20, 10, 0.5)\n                A = SparseMatrixCSC{T, S}(A)\n                B = oneSparseMatrixCSR(A)\n                A2 = SparseMatrixCSC(B)\n                @test A == A2\n                    C = oneSparseMatrixCSR(B.rowPtr, B.colVal, B.nzVal, size(B))\n                    A3 = SparseMatrixCSC(C)\n                    @test A == A3\n                    D = oneSparseMatrixCSR(oneVector(S[]), oneVector(S[]), oneVector(T[]), (0, 0)) # empty matrix\n            end\n        end\n\n            @testset \"oneSparseMatrixCSC\" begin\n                (T isa Complex) && continue\n                for S in (Int32, Int64)\n                    A = sprand(T, 20, 10, 0.5)\n                    A = SparseMatrixCSC{T, S}(A)\n                    B = oneSparseMatrixCSC(A)\n                    A2 = SparseMatrixCSC(B)\n                    @test A == A2\n                    C = oneSparseMatrixCSC(A.colptr |> oneVector, A.rowval |> oneVector, A.nzval |> oneVector, size(A))\n                    A3 = SparseMatrixCSC(C)\n                    @test A == A3\n                    D = oneSparseMatrixCSC(oneVector(S[]), oneVector(S[]), oneVector(T[]), (0, 0)) # empty matrix\n                end\n            end\n\n        @testset \"oneSparseMatrixCOO\" begin\n            for S in (Int32, Int64)\n                A = sprand(T, 20, 10, 0.5)\n                A = SparseMatrixCSC{T, S}(A)\n                B = oneSparseMatrixCOO(A)\n                A2 = SparseMatrixCSC(B)\n                @test A == A2\n            end\n        end\n\n        @testset \"sparse gemv\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCOO, oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"transa = $transa\" for (transa, opa) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                    A = sprand(T, 20, 10, 0.5)\n                    x = transa == 'N' ? rand(T, 10) : rand(T, 20)\n                    y = transa == 'N' ? rand(T, 20) : rand(T, 10)\n\n                    dA = SparseMatrix(A)\n                    dx = oneVector{T}(x)\n                    dy = oneVector{T}(y)\n\n                    alpha = rand(T)\n                    beta = rand(T)\n                    oneMKL.sparse_optimize_gemv!(transa, dA)\n                    oneMKL.sparse_gemv!(transa, alpha, dA, dx, beta, dy)\n                        @test alpha * opa(A) * x + beta * y ≈ collect(dy)\n                end\n            end\n        end\n\n        @testset \"sparse gemm\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"transa = $transa\" for (transa, opa) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                        @testset \"transb = $transb\" for (transb, opb) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                            (transb == 'N') || continue\n                            A = sprand(T, 10, 10, 0.5)\n                            B = transb == 'N' ? rand(T, 10, 2) : rand(T, 2, 10)\n                            C = rand(T, 10, 2)\n\n                            dA = SparseMatrix(A)\n                            dB = oneMatrix{T}(B)\n                            dC = oneMatrix{T}(C)\n\n                            alpha = rand(T)\n                            beta = rand(T)\n                            oneMKL.sparse_optimize_gemm!(transa, dA)\n                            oneMKL.sparse_gemm!(transa, transb, alpha, dA, dB, beta, dC)\n\n                            @test alpha * opa(A) * opb(B) + beta * C ≈ collect(dC)\n                            oneMKL.sparse_optimize_gemm!(transa, transb, 2, dA)\n                        end\n                end\n            end\n        end\n\n        @testset \"sparse symv\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"uplo = $uplo\" for uplo in ('L', 'U')\n                    A = sprand(T, 10, 10, 0.5)\n                    A = A + transpose(A)\n                    x = rand(T, 10)\n                    y = rand(T, 10)\n\n                    dA = uplo == 'L' ? SparseMatrix(A |> tril) : SparseMatrix(A |> triu)\n                    dx = oneVector{T}(x)\n                    dy = oneVector{T}(y)\n\n                    alpha = rand(T)\n                    beta = rand(T)\n                    oneMKL.sparse_symv!(uplo, alpha, dA, dx, beta, dy)\n                        @test alpha * A * x + beta * y ≈ collect(dy)\n                end\n            end\n        end\n\n            @testset \"sparse trmv\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"transa = $transa\" for (transa, opa) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                        for (uplo, diag, wrapper) in [\n                                ('L', 'N', LowerTriangular), ('L', 'U', UnitLowerTriangular),\n                                ('U', 'N', UpperTriangular), ('U', 'U', UnitUpperTriangular),\n                            ]\n                            (transa == 'N') || continue\n                            A = sprand(T, 10, 10, 0.5)\n                            x = rand(T, 10)\n                            y = rand(T, 10)\n\n                            B = uplo == 'L' ? tril(A) : triu(A)\n                            B = diag == 'U' ? B - Diagonal(B) + I : B\n                            dA = SparseMatrix(B)\n                            dx = oneVector{T}(x)\n                            dy = oneVector{T}(y)\n\n                            alpha = rand(T)\n                            beta = rand(T)\n\n                            if SparseMatrix == oneSparseMatrixCSC\n                                @test_broken sparse_optimize_trmv!(uplo, transa, diag, dA) # Intel oneAPI limitation: CSC triangular operations not supported\n                                @test_throws ArgumentError oneMKL.sparse_optimize_trmv!(uplo, transa, diag, dA)\n                                @test_throws ArgumentError oneMKL.sparse_trmv!(uplo, transa, diag, alpha, dA, dx, beta, dy)\n                            else\n                                oneMKL.sparse_optimize_trmv!(uplo, transa, diag, dA)\n                                oneMKL.sparse_trmv!(uplo, transa, diag, alpha, dA, dx, beta, dy)\n                                @test alpha * wrapper(opa(A)) * x + beta * y ≈ collect(dy)\n                            end\n                        end\n                end\n            end\n        end\n\n            @testset \"sparse trsv\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"transa = $transa\" for (transa, opa) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                    for (uplo, diag, wrapper) in [('L', 'N', LowerTriangular), ('L', 'U', UnitLowerTriangular),\n                                ('U', 'N', UpperTriangular), ('U', 'U', UnitUpperTriangular),\n                            ]\n                            (transa == 'N') || continue\n                        alpha = rand(T)\n                        A = rand(T, 10, 10) + I\n                        A = sparse(A)\n                            x = rand(T, 10)\n                            y = rand(T, 10)\n\n                        B = uplo == 'L' ? tril(A) : triu(A)\n                        B = diag == 'U' ? B - Diagonal(B) + I : B\n                            dA = SparseMatrix(B)\n                            dx = oneVector{T}(x)\n                            dy = oneVector{T}(y)\n\n                            if SparseMatrix == oneSparseMatrixCSC\n                                @test_broken sparse_optimize_trsv!(uplo, transa, diag, dA) # Intel oneAPI limitation: CSC triangular operations not supported\n                                @test_throws ArgumentError oneMKL.sparse_optimize_trsv!(uplo, transa, diag, dA)\n                                @test_throws ArgumentError oneMKL.sparse_trsv!(uplo, transa, diag, alpha, dA, dx, dy)\n                            else\n                                oneMKL.sparse_optimize_trsv!(uplo, transa, diag, dA)\n                                oneMKL.sparse_trsv!(uplo, transa, diag, alpha, dA, dx, dy)\n                                y = wrapper(opa(A)) \\ (alpha * x)\n                                @test y ≈ collect(dy)\n                            end\n                        end\n                    end\n                end\n            end\n\n            @testset \"sparse trsm\" begin\n                @testset  \"$SparseMatrix\" for SparseMatrix in (oneSparseMatrixCSR, oneSparseMatrixCSC)\n                    @testset \"transa = $transa\" for (transa, opa) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                        @testset \"transx = $transx\" for (transx, opx) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                            (transx != 'N') && continue\n                            for (uplo, diag, wrapper) in [\n                                    ('L', 'N', LowerTriangular), ('L', 'U', UnitLowerTriangular),\n                                    ('U', 'N', UpperTriangular), ('U', 'U', UnitUpperTriangular),\n                                ]\n                                (transa == 'N') || continue\n                                alpha = rand(T)\n                                A = rand(T, 10, 10) + I\n                                A = sparse(A)\n                                X = transx == 'N' ? rand(T, 10, 4) : rand(T, 4, 10)\n                                Y = rand(T, 10, 4)\n\n                                B = uplo == 'L' ? tril(A) : triu(A)\n                                B = diag == 'U' ? B - Diagonal(B) + I : B\n                                dA = SparseMatrix(B)\n                                dX = oneMatrix{T}(X)\n                                dY = oneMatrix{T}(Y)\n\n                                if SparseMatrix == oneSparseMatrixCSC\n                                    @test_broken sparse_optimize_trsm!(uplo, transa, diag, dA) # Intel oneAPI limitation: CSC triangular operations not supported\n                                    @test_throws ArgumentError oneMKL.sparse_optimize_trsm!(uplo, transa, diag, dA)\n                                    @test_throws ArgumentError oneMKL.sparse_trsm!(uplo, transa, transx, diag, alpha, dA, dX, dY)\n                                    @test_throws ArgumentError oneMKL.sparse_optimize_trsm!(uplo, transa, diag, 4, dA)\n                                else\n                                    oneMKL.sparse_optimize_trsm!(uplo, transa, diag, dA)\n                                    oneMKL.sparse_trsm!(uplo, transa, transx, diag, alpha, dA, dX, dY)\n                                    Y = wrapper(opa(A)) \\ (alpha * opx(X))\n                                    @test Y ≈ collect(dY)\n\n                                    oneMKL.sparse_optimize_trsm!(uplo, transa, diag, 4, dA)\n                                end\n                            end\n                    end\n                end\n            end\n        end\n    end\nend\n\n@testset \"LAPACK\" begin\n    @testset \"$elty\" for elty in intersect(eltypes, [Float32, Float64, ComplexF32, ComplexF64])\n        m = 15\n        n = 10\n        p = 5\n\n        @testset \"geqrf!\" begin\n            A = rand(elty, m, n)\n            d_A = oneArray(A)\n            d_A, tau = oneMKL.geqrf!(d_A)\n            tau_c = zeros(elty, n)\n            LinearAlgebra.LAPACK.geqrf!(A, tau_c)\n            @test tau_c ≈ Array(tau)\n        end\n\n        @testset \"geqrf! -- orgqr!\" begin\n            A = rand(elty, m, n)\n            dA = oneArray(A)\n            dA, τ = oneMKL.geqrf!(dA)\n            oneMKL.orgqr!(dA, τ)\n            @test dA' * dA ≈ I\n        end\n\n        @testset \"ormqr!\" begin\n            @testset \"side = $side\" for side in ['L', 'R']\n                @testset \"trans = $trans\" for (trans, op) in [('N', identity), ('T', transpose), ('C', adjoint)]\n                    (trans == 'T') && (elty <: Complex) && continue\n                    A = rand(elty, m, n)\n                    dA = oneArray(A)\n                    dA, dτ = oneMKL.geqrf!(dA)\n\n                    hI = Matrix{elty}(I, m, m)\n                    dI = oneArray(hI)\n                    dH = oneMKL.ormqr!(side, 'N', dA, dτ, dI)\n                    @test dH' * dH ≈ I\n\n                    C = side == 'L' ? rand(elty, m, n) : rand(elty, n, m)\n                    dC = oneArray(C)\n                    dD = side == 'L' ? op(dH) * dC : dC * op(dH)\n\n                    oneMKL.ormqr!(side, trans, dA, dτ, dC)\n                    @test dC ≈ dD\n                end\n            end\n        end\n\n        @testset \"potrf! -- potrs!\" begin\n            A = rand(elty,n,n)\n            A = A*A' + I\n            B = rand(elty,n,p)\n            d_A = oneArray(A)\n            d_B = oneArray(B)\n\n            oneMKL.potrf!('L',d_A)\n            oneMKL.potrs!('U',d_A,d_B)\n            LAPACK.potrf!('L',A)\n            LAPACK.potrs!('U',A,B)\n            @test B ≈ collect(d_B)\n        end\n\n        # @testset \"sytrf!\" begin\n        #     A = rand(elty,n,n)\n        #     A = A + A'\n        #     d_A = oneArray(A)\n        #     d_A, d_ipiv = oneMKL.sytrf!('U',d_A)\n        #     h_A = collect(d_A)\n        #     h_ipiv = collect(d_ipiv)\n        #     A, ipiv = LAPACK.sytrf!('U',A)\n        #     @test ipiv == h_ipiv\n        #     @test A ≈ h_A\n        # end\n\n        @testset \"getrf! -- getri!\" begin\n            A = rand(elty, m, m)\n            d_A = oneArray(A)\n            d_A, d_ipiv = oneMKL.getrf!(d_A)\n            h_A, ipiv = LAPACK.getrf!(A)\n            @test h_A ≈ Array(d_A)\n\n            d_A = oneMKL.getri!(d_A, d_ipiv)\n            h_A = LAPACK.getri!(h_A, ipiv)\n            @test h_A ≈ Array(d_A)\n        end\n\n        @testset \"getrf_batched! -- getri_batched!\" begin\n            bA = [rand(elty, m, m) for i in 1:p]\n            d_bA = oneMatrix{elty}[]\n            for i in 1:p\n                push!(d_bA, oneMatrix(bA[i]))\n            end\n\n            d_ipiv, d_bA = oneMKL.getrf_batched!(d_bA)\n            h_bA = [collect(d_bA[i]) for i in 1:p]\n\n            ipiv = Vector{Int64}[]\n            for i = 1:p\n                _, ipiv_i, info = LAPACK.getrf!(bA[i])\n                push!(ipiv, ipiv_i)\n                @test bA[i] ≈ h_bA[i]\n            end\n\n            d_ipiv, d_bA = oneMKL.getri_batched!(d_bA, d_ipiv)\n            h_bA = [collect(d_bA[i]) for i in 1:p]\n            for i = 1:p\n                LAPACK.getri!(bA[i], ipiv[i])\n                @test bA[i] ≈ h_bA[i]\n            end\n        end\n\n        # @testset \"getrs_batched!\" begin\n        #     bA = [rand(elty, m, m) for i in 1:p]\n        #     bB = [rand(elty, m, n) for i in 1:p]\n        #     d_bA = oneMatrix{elty}[]\n        #     d_bB = oneMatrix{elty}[]\n        #     for i in 1:p\n        #         push!(d_bA, oneMatrix(bA[i]))\n        #         push!(d_bB, oneMatrix(bB[i]))\n        #     end\n\n        #     d_ipiv, d_bA = oneMKL.getrf_batched!(d_bA)\n        #     d_bX = oneMKL.getrs_batched!(d_bA, d_ipiv, d_bB)\n        #     h_bX = [collect(d_bX[i]) for i in 1:p]\n        #     for i = 1:p\n        #         @test bA[i] * hbX[i] ≈ bB[i]\n        #     end\n        # end\n\n        @testset \"potrf_batched! -- potrs_batched!\" begin\n            A = [rand(elty,n,n) for i = 1:p]\n            A = [A[i]' * A[i] + I for i = 1:p]\n            B = [rand(elty,n,p) for i = 1:p]\n            d_A = oneMatrix{elty}[]\n            d_B = oneMatrix{elty}[]\n            for i in 1:p\n                push!(d_A, oneMatrix(A[i]))\n                push!(d_B, oneMatrix(B[i]))\n            end\n\n            oneMKL.potrf_batched!(d_A)\n            oneMKL.potrs_batched!(d_A, d_B)\n            for i = 1:p\n                LAPACK.potrf!('L', A[i])\n                LAPACK.potrs!('L', A[i], B[i])\n                @test B[i] ≈ collect(d_B[i])\n            end\n        end\n\n        @testset \"geqrf_batched! -- -- orgqr_batched!\" begin\n            A = [rand(elty,m,n) for i in 1:p]\n            d_A = oneMatrix{elty}[]\n            for i in 1:p\n                push!(d_A, oneMatrix(A[i]))\n            end\n\n            d_tau, d_A = oneMKL.geqrf_batched!(d_A)\n            oneMKL.orgqr_batched!(d_A, d_tau)\n            for d_Ai in d_A\n                @test d_Ai' * d_Ai ≈ I\n            end\n        end\n\n        @testset \"gebrd!\" begin\n            A = rand(elty,m,n)\n            d_A = oneArray(A)\n            d_A, d_D, d_E, d_tauq, d_taup = oneMKL.gebrd!(d_A)\n            h_A = collect(d_A)\n            h_D = collect(d_D)\n            h_E = collect(d_E)\n            h_tauq = collect(d_tauq)\n            h_taup = collect(d_taup)\n            A,d,e,q,p = LAPACK.gebrd!(A)\n            @test A ≈ h_A\n            @test d ≈ h_D\n            @test e[min(m,n)-1] ≈ h_E[min(m,n)-1]\n            @test q ≈ h_tauq\n            @test p ≈ h_taup\n        end\n\n        @testset \"gesvd!\" begin\n            A = rand(elty,m,n)\n            d_A = oneMatrix(A)\n            U, Σ, Vt = oneMKL.gesvd!('A', 'A', d_A)\n            @test A ≈ collect(U[:,1:n] * Diagonal(Σ) * Vt)\n\n            for jobu in ('A', 'S', 'N', 'O')\n                for jobvt in ('A', 'S', 'N', 'O')\n                    (jobu == 'A') && (jobvt == 'A') && continue\n                    (jobu == 'O') && (jobvt == 'O') && continue\n                    d_A = oneMatrix(A)\n                    U2, Σ2, Vt2 = oneMKL.gesvd!(jobu, jobvt, d_A)\n                    @test Σ ≈ Σ2\n                end\n            end\n        end\n\n        @testset \"syevd! -- heevd!\" begin\n            @testset \"uplo = $uplo\" for uplo in ('L', 'U')\n                A = rand(elty,n,n)\n                B = A + A'\n                A = uplo == 'L' ? tril(B) : triu(B)\n                d_A = oneMatrix(A)\n                W, V = elty <: Real ? oneMKL.syevd!('V', uplo, d_A) : oneMKL.heevd!('V', uplo, d_A)\n                @test B ≈ collect(V * Diagonal(W) * V')\n\n                d_A = oneMatrix(A)\n                d_W = elty <: Real ? oneMKL.syevd!('N', uplo, d_A) : oneMKL.heevd!('N', uplo, d_A)\n            end\n        end\n\n        @testset \"sygvd! -- hegvd!\" begin\n            A = rand(elty,m,m)\n            B = rand(elty,m,m)\n            A = A*A' + I\n            B = B*B' + I\n            d_A = oneArray(A)\n            d_B = oneArray(B)\n            d_W, d_VA, d_VB = elty <: Real ? oneMKL.sygvd!(1, 'V','U', d_A, d_B) : oneMKL.hegvd!(1, 'V','U', d_A, d_B)\n            h_W = collect(d_W)\n            h_VA = collect(d_VA)\n            h_VB = collect(d_VB)\n            Eig = eigen(Hermitian(A), Hermitian(B))\n            @test Eig.values ≈ h_W\n            @test A * h_VA ≈ B * h_VA * Diagonal(h_W) rtol=1e-4\n            @test h_VA' * B * h_VA ≈ I\n        end\n    end\nend\n\nend # oneMKL tests\n"
  },
  {
    "path": "test/pointer.jl",
    "content": "using oneAPI.oneL0\n\n# constructors\nvoidptr_a = ZePtr{Cvoid}(Int(0xDEADBEEF))\n@test reinterpret(Ptr{Cvoid}, voidptr_a) == Ptr{Cvoid}(Int(0xDEADBEEF))\n\n# getters\n@test eltype(voidptr_a) == Cvoid\n\n# comparisons\nvoidptr_b = ZePtr{Cvoid}(Int(0xCAFEBABE))\n@test voidptr_a != voidptr_b\n\n\n@testset \"conversions\" begin\n\n# between host and device pointers\n@test_throws ArgumentError convert(Ptr{Cvoid}, voidptr_a)\n\n# between device pointers\nintptr_a = ZePtr{Int}(Int(0xDEADBEEF))\n@test convert(typeof(intptr_a), voidptr_a) == intptr_a\n\n# convert back and forth from UInt\nintptr_b = ZePtr{Int}(Int(0xDEADBEEF))\n@test convert(UInt, intptr_b) == 0xDEADBEEF\n@test convert(ZePtr{Int}, Int(0xDEADBEEF)) == intptr_b\n@test Int(intptr_b) == Int(0xDEADBEEF)\n\n# pointer arithmetic\nintptr_c = ZePtr{Int}(Int(0xDEADBEEF))\nintptr_d = 2 + intptr_c\n@test isless(intptr_c, intptr_d)\n@test intptr_d - intptr_c == 2\n@test intptr_d - 2 == intptr_c\nend\n\n\n@testset \"GPU or CPU integration\" begin\n\na = [1]\nccall(:clock, Nothing, (Ptr{Int},), a)\n@test_throws Exception ccall(:clock, Nothing, (ZePtr{Int},), a)\nccall(:clock, Nothing, (PtrOrZePtr{Int},), a)\n\nb = oneArray{eltype(a), ndims(a)}(undef, size(a))\nccall(:clock, Nothing, (ZePtr{Int},), b)\n@test_throws Exception ccall(:clock, Nothing, (Ptr{Int},), b)\nccall(:clock, Nothing, (PtrOrZePtr{Int},), b)\n\nend\n\n\n@testset \"reference values\" begin\n    # Ref\n\n    @test typeof(Base.cconvert(Ref{Int}, 1)) == typeof(Ref(1))\n    @test Base.unsafe_convert(Ref{Int}, Base.cconvert(Ref{Int}, 1)) isa Ptr{Int}\n\n    ptr = reinterpret(Ptr{Int}, C_NULL)\n    @test Base.cconvert(Ref{Int}, ptr) == ptr\n    @test Base.unsafe_convert(Ref{Int}, Base.cconvert(Ref{Int}, ptr)) == ptr\n\n    arr = [1]\n    @test Base.cconvert(Ref{Int}, arr) isa Base.RefArray{Int, typeof(arr)}\n    @test Base.unsafe_convert(Ref{Int}, Base.cconvert(Ref{Int}, arr)) == pointer(arr)\n\n\n    # ZeRef\n\n    @test typeof(Base.cconvert(ZeRef{Int}, 1)) == typeof(ZeRef(1))\n    @test Base.unsafe_convert(ZeRef{Int}, Base.cconvert(ZeRef{Int}, 1)) isa ZeRef{Int}\n\n    zeptr = reinterpret(ZePtr{Int}, C_NULL)\n    @test Base.cconvert(ZeRef{Int}, zeptr) == zeptr\n    @test Base.unsafe_convert(ZeRef{Int}, Base.cconvert(ZeRef{Int}, zeptr)) == Base.bitcast(ZeRef{Int}, zeptr)\n\n    zearr = oneAPI.oneArray([1])\n    @test Base.cconvert(ZeRef{Int}, zearr) isa oneL0.ZeRefArray{Int, typeof(zearr)}\n    @test Base.unsafe_convert(ZeRef{Int}, Base.cconvert(ZeRef{Int}, zearr)) == Base.bitcast(ZeRef{Int}, pointer(zearr))\n\n\n    # RefOrZeRef\n\n    @test typeof(Base.cconvert(RefOrZeRef{Int}, 1)) == typeof(Ref(1))\n    @test Base.unsafe_convert(RefOrZeRef{Int}, Base.cconvert(RefOrZeRef{Int}, 1)) isa RefOrZeRef{Int}\n\n    @test Base.cconvert(RefOrZeRef{Int}, ptr) == ptr\n    @test Base.unsafe_convert(RefOrZeRef{Int}, Base.cconvert(RefOrZeRef{Int}, ptr)) == Base.bitcast(RefOrZeRef{Int}, ptr)\n\n    @test Base.cconvert(RefOrZeRef{Int}, zeptr) == zeptr\n    @test Base.unsafe_convert(RefOrZeRef{Int}, Base.cconvert(RefOrZeRef{Int}, zeptr)) == Base.bitcast(RefOrZeRef{Int}, zeptr)\n\n    @test Base.cconvert(RefOrZeRef{Int}, arr) isa Base.RefArray{Int, typeof(arr)}\n    @test Base.unsafe_convert(RefOrZeRef{Int}, Base.cconvert(RefOrZeRef{Int}, arr)) == Base.bitcast(RefOrZeRef{Int}, pointer(arr))\n\n    @test Base.cconvert(RefOrZeRef{Int}, zearr) isa oneL0.ZeRefArray{Int, typeof(zearr)}\n    @test Base.unsafe_convert(RefOrZeRef{Int}, Base.cconvert(RefOrZeRef{Int}, zearr)) == Base.bitcast(RefOrZeRef{Int}, pointer(zearr))\nend\n"
  },
  {
    "path": "test/random.jl",
    "content": "using Random\n\n@testset \"rand\" begin\n\n# in-place\nfor (f,T) in ((rand!,Float16),\n              (rand!,Float32),\n              (randn!,Float16),\n              (randn!,Float32)),\n    d in (2, (2,2), (2,2,2), 3, (3,3), (3,3,3))\n    A = oneArray{T}(undef, d)\n    fill!(A, T(0))\n    f(A)\n    @test !iszero(collect(A))\nend\n\n# out-of-place, with implicit type\nfor (f,T) in ((oneAPI.rand,Float32), (oneAPI.randn,Float32)),\n    args in ((2,), (2, 2), (3,), (3, 3))\n    A = f(args...)\n    @test eltype(A) == T\nend\n\n# out-of-place, with type specified\nfor (f,T) in ((oneAPI.rand,Float32), (oneAPI.randn,Float32),\n              (rand,Float32), (randn,Float32)),\n    args in ((T, 2), (T, 2, 2), (T, (2, 2)), (T, 3), (T, 3, 3), (T, (3, 3)))\n    A = f(args...)\n    @test eltype(A) == T\nend\n\n## seeding\noneAPI.seed!(1)\na = oneAPI.rand(Int32, 1)\noneAPI.seed!(1)\nb = oneAPI.rand(Int32, 1)\n@test iszero(collect(a) - collect(b))\n\nend # testset\n"
  },
  {
    "path": "test/runtests.jl",
    "content": "using Distributed\nusing Dates\nimport REPL\nusing Printf: @sprintf\nusing Base.Filesystem: path_separator\n\n# parse some command-line arguments\nfunction extract_flag!(args, flag, default=nothing)\n    for f in args\n        if startswith(f, flag)\n            # Check if it's just `--flag` or if it's `--flag=foo`\n            if f != flag\n                val = split(f, '=')[2]\n                if default !== nothing && !(typeof(default) <: AbstractString)\n                  val = parse(typeof(default), val)\n                end\n            else\n                val = default\n            end\n\n            # Drop this value from our args\n            filter!(x -> x != f, args)\n            return (true, val)\n        end\n    end\n    return (false, default)\nend\ndo_help, _ = extract_flag!(ARGS, \"--help\")\nif do_help\n    println(\"\"\"\n        Usage: runtests.jl [--help] [--list] [--jobs=N] [TESTS...]\n\n               --help             Show this text.\n               --list             List all available tests.\n               --quickfail        Fail the entire run as soon as a single test errored.\n               --jobs=N           Launch `N` processes to perform tests (default: Sys.CPU_THREADS).\n\n               Remaining arguments filter the tests that will be executed.\"\"\")\n    exit(0)\nend\n_, jobs = extract_flag!(ARGS, \"--jobs\", Sys.CPU_THREADS)\ndo_quickfail, _ = extract_flag!(ARGS, \"--quickfail\")\n\ninclude(\"setup.jl\")     # make sure everything is precompiled\n@info \"System information:\\n\" * sprint(io->oneAPI.versioninfo(io))\n\nif Sys.islinux()\n@info \"Using oneAPI support library at \" * oneAPI.Support.liboneapi_support\nend\n\n@info \"Running $jobs tests in parallel. If this is too many, specify the `--jobs` argument to the tests, or set the JULIA_CPU_THREADS environment variable.\"\n\n# choose tests\nconst tests = []\nconst test_runners = Dict()\n## files in the test folder\nfor (rootpath, dirs, files) in walkdir(@__DIR__)\n  # find Julia files\n  filter!(files) do file\n    endswith(file, \".jl\") && file !== \"setup.jl\" && file !== \"runtests.jl\"\n  end\n  isempty(files) && continue\n\n  # strip extension\n  files = map(files) do file\n    file[1:end-3]\n  end\n\n  # prepend subdir\n  subdir = relpath(rootpath, @__DIR__)\n  if subdir != \".\"\n    files = map(files) do file\n      joinpath(subdir, file)\n    end\n  end\n\n  # unify path separators\n  files = map(files) do file\n    replace(file, path_separator => '/')\n  end\n\n  append!(tests, files)\n  for file in files\n    test_runners[file] = ()->include(\"$(@__DIR__)/$file.jl\")\n  end\nend\nsort!(tests; by=(file)->stat(\"$(@__DIR__)/$file.jl\").size, rev=true)\n## GPUArrays testsuite\nfor name in keys(TestSuite.tests)\n    pushfirst!(tests, \"gpuarrays/$name\")\n    test_runners[\"gpuarrays/$name\"] = ()->TestSuite.tests[name](oneArray)\nend\n## finalize\nunique!(tests)\n\n# parse some more command-line arguments\n## --list to list all available tests\ndo_list, _ = extract_flag!(ARGS, \"--list\")\nif do_list\n    println(\"Available tests:\")\n    for test in sort(tests)\n        println(\" - $test\")\n    end\n    exit(0)\nend\n## no options should remain\noptlike_args = filter(startswith(\"-\"), ARGS)\nif !isempty(optlike_args)\n    error(\"Unknown test options `$(join(optlike_args, \" \"))` (try `--help` for usage instructions)\")\nend\n## the remaining args filter tests\nif !isempty(ARGS)\n  filter!(tests) do test\n    any(arg->startswith(test, arg), ARGS)\n  end\nend\n\n# add workers\nconst test_exeflags = Base.julia_cmd()\nfilter!(test_exeflags.exec) do c\n    return !(startswith(c, \"--depwarn\") || startswith(c, \"--check-bounds\"))\nend\npush!(test_exeflags.exec, \"--check-bounds=yes\")\npush!(test_exeflags.exec, \"--startup-file=no\")\npush!(test_exeflags.exec, \"--depwarn=yes\")\npush!(test_exeflags.exec, \"--project=$(Base.active_project())\")\nconst test_exename = popfirst!(test_exeflags.exec)\nfunction addworker(X; kwargs...)\n    withenv(\"JULIA_NUM_THREADS\" => 1, \"OPENBLAS_NUM_THREADS\" => 1) do\n        procs = addprocs(X; exename=test_exename, exeflags=test_exeflags, kwargs...)\n        @everywhere procs include($(joinpath(@__DIR__, \"setup.jl\")))\n        procs\n    end\nend\naddworker(min(jobs, length(tests)))\n\n# pretty print information about gc and mem usage\ntestgroupheader = \"Test\"\nworkerheader = \"(Worker)\"\nname_align        = maximum([textwidth(testgroupheader) + textwidth(\" \") +\n                             textwidth(workerheader); map(x -> textwidth(x) +\n                             3 + ndigits(nworkers()), tests)])\nelapsed_align     = textwidth(\"Time (s)\")\ngc_align      = textwidth(\"GC (s)\")\npercent_align = textwidth(\"GC %\")\nalloc_align   = textwidth(\"Alloc (MB)\")\nrss_align     = textwidth(\"RSS (MB)\")\nprintstyled(\" \"^(name_align + textwidth(testgroupheader) - 3), \" | \")\nprintstyled(\"         | ---------------- CPU ---------------- |\\n\", color=:white)\nprintstyled(testgroupheader, color=:white)\nprintstyled(lpad(workerheader, name_align - textwidth(testgroupheader) + 1), \" | \", color=:white)\nprintstyled(\"Time (s) | GC (s) | GC % | Alloc (MB) | RSS (MB) |\\n\", color=:white)\nprint_lock = stdout isa Base.LibuvStream ? stdout.lock : ReentrantLock()\nif stderr isa Base.LibuvStream\n    stderr.lock = print_lock\nend\nfunction print_testworker_stats(test, wrkr, resp)\n    @nospecialize resp\n    lock(print_lock)\n    try\n        printstyled(test, color=:white)\n        printstyled(lpad(\"($wrkr)\", name_align - textwidth(test) + 1, \" \"), \" | \", color=:white)\n        time_str = @sprintf(\"%7.2f\",resp[2])\n        printstyled(lpad(time_str, elapsed_align, \" \"), \" | \", color=:white)\n\n        cpu_gc_str = @sprintf(\"%5.2f\", resp[4])\n        printstyled(lpad(cpu_gc_str, gc_align, \" \"), \" | \", color=:white)\n        # since there may be quite a few digits in the percentage,\n        # the left-padding here is less to make sure everything fits\n        cpu_percent_str = @sprintf(\"%4.1f\", 100 * resp[4] / resp[2])\n        printstyled(lpad(cpu_percent_str, percent_align, \" \"), \" | \", color=:white)\n        cpu_alloc_str = @sprintf(\"%5.2f\", resp[3] / 2^20)\n        printstyled(lpad(cpu_alloc_str, alloc_align, \" \"), \" | \", color=:white)\n\n        cpu_rss_str = @sprintf(\"%5.2f\", resp[6] / 2^20)\n        printstyled(lpad(cpu_rss_str, rss_align, \" \"), \" |\\n\", color=:white)\n    finally\n        unlock(print_lock)\n    end\nend\nglobal print_testworker_started = (name, wrkr)->begin\nend\nfunction print_testworker_errored(name, wrkr)\n    lock(print_lock)\n    try\n        printstyled(name, color=:red)\n        printstyled(lpad(\"($wrkr)\", name_align - textwidth(name) + 1, \" \"), \" |\",\n            \" \"^elapsed_align, \" failed at $(now())\\n\", color=:red)\n    finally\n        unlock(print_lock)\n    end\nend\n\n# run tasks\nt0 = now()\nresults = []\nall_tasks = Task[]\nall_tests = copy(tests)\ntry\n    # Monitor stdin and kill this task on ^C\n    # but don't do this on Windows, because it may deadlock in the kernel\n    t = current_task()\n    running_tests = Dict{String, DateTime}()\n    if !Sys.iswindows() && isa(stdin, Base.TTY)\n        stdin_monitor = @async begin\n            term = REPL.Terminals.TTYTerminal(\"xterm\", stdin, stdout, stderr)\n            try\n                REPL.Terminals.raw!(term, true)\n                while true\n                    c = read(term, Char)\n                    if c == '\\x3'\n                        Base.throwto(t, InterruptException())\n                        break\n                    elseif c == '?'\n                        println(\"Currently running: \")\n                        tests = sort(collect(running_tests), by=x->x[2])\n                        foreach(tests) do (test, date)\n                            println(test, \" (running for \", round(now()-date, Minute), \")\")\n                        end\n                    end\n                end\n            catch e\n                isa(e, InterruptException) || rethrow()\n            finally\n                REPL.Terminals.raw!(term, false)\n            end\n        end\n    end\n    @sync begin\n        function recycle_worker(p)\n            rmprocs(p, waitfor=30)\n            return nothing\n        end\n\n        for p in workers()\n            @async begin\n                push!(all_tasks, current_task())\n                while length(tests) > 0\n                    test = popfirst!(tests)\n\n                    # sometimes a worker failed, and we need to spawn a new one\n                    if p === nothing\n                        p = addworker(1)[1]\n                    end\n                    wrkr = p\n\n                    local resp\n\n                    # run the test\n                    running_tests[test] = now()\n                    try\n                        resp = remotecall_fetch(runtests, wrkr, test_runners[test], test)\n                    catch e\n                        isa(e, InterruptException) && return\n                        resp = Any[e]\n                    end\n                    delete!(running_tests, test)\n                    push!(results, (test, resp))\n\n                    # act on the results\n                    if resp[1] isa Exception\n                        print_testworker_errored(test, wrkr)\n                        do_quickfail && Base.throwto(t, InterruptException())\n\n                        # the worker encountered some failure, recycle it\n                        # so future tests get a fresh environment\n                        p = recycle_worker(p)\n                    else\n                        print_testworker_stats(test, wrkr, resp)\n\n                        cpu_rss = resp[6]\n                        if haskey(ENV, \"CI\") && cpu_rss > 3*2^30\n                            # XXX: collecting garbage\n                            #      after each test, we are leaking CPU memory somewhere.\n                            #      this is a problem on CI, where2 we don't have much RAM.\n                            #      work around this by periodically recycling the worker.\n                            p = recycle_worker(p)\n                        end\n                    end\n                end\n\n                if p !== nothing\n                    recycle_worker(p)\n                end\n            end\n        end\n    end\ncatch e\n    isa(e, InterruptException) || rethrow()\n    # If the test suite was merely interrupted, still print the\n    # summary, which can be useful to diagnose what's going on\n    foreach(task -> begin\n            istaskstarted(task) || return\n            istaskdone(task) && return\n            try\n                schedule(task, InterruptException(); error=true)\n            catch ex\n                @error \"InterruptException\" exception=ex,catch_backtrace()\n            end\n        end, all_tasks)\n    for t in all_tasks\n        # NOTE: we can't just wait, but need to discard the exception,\n        #       because the throwto for --quickfail also kills the worker.\n        try\n            wait(t)\n        catch e\n            showerror(stderr, e)\n        end\n    end\nfinally\n    if @isdefined stdin_monitor\n        schedule(stdin_monitor, InterruptException(); error=true)\n    end\nend\nt1 = now()\nelapsed = canonicalize(Dates.CompoundPeriod(t1-t0))\nprintln(\"Testing finished in $elapsed\")\n\n# construct a testset to render the test results\no_ts = Test.DefaultTestSet(\"Overall\")\nTest.push_testset(o_ts)\ncompleted_tests = Set{String}()\nfor (testname, (resp,)) in results\n    push!(completed_tests, testname)\n    if isa(resp, Test.DefaultTestSet)\n        Test.push_testset(resp)\n        Test.record(o_ts, resp)\n        Test.pop_testset()\n    elseif isa(resp, Tuple{Int,Int})\n        fake = Test.DefaultTestSet(testname)\n        for i in 1:resp[1]\n            Test.record(fake, Test.Pass(:test, nothing, nothing, nothing, nothing))\n        end\n        for i in 1:resp[2]\n            Test.record(fake, Test.Broken(:test, nothing))\n        end\n        Test.push_testset(fake)\n        Test.record(o_ts, fake)\n        Test.pop_testset()\n    elseif isa(resp, RemoteException) && isa(resp.captured.ex, Test.TestSetException)\n        println(\"Worker $(resp.pid) failed running test $(testname):\")\n        Base.showerror(stdout, resp.captured)\n        println()\n        fake = Test.DefaultTestSet(testname)\n        for i in 1:resp.captured.ex.pass\n            Test.record(fake, Test.Pass(:test, nothing, nothing, nothing, nothing))\n        end\n        for i in 1:resp.captured.ex.broken\n            Test.record(fake, Test.Broken(:test, nothing))\n        end\n        for t in resp.captured.ex.errors_and_fails\n            Test.record(fake, t)\n        end\n        Test.push_testset(fake)\n        Test.record(o_ts, fake)\n        Test.pop_testset()\n    else\n        if !isa(resp, Exception)\n            resp = ErrorException(string(\"Unknown result type : \", typeof(resp)))\n        end\n        # If this test raised an exception that is not a remote testset exception,\n        # i.e. not a RemoteException capturing a TestSetException that means\n        # the test runner itself had some problem, so we may have hit a segfault,\n        # deserialization errors or something similar.  Record this testset as Errored.\n        fake = Test.DefaultTestSet(testname)\n        Test.record(fake, Test.Error(:nontest_error, testname, nothing, Any[(resp, [])], LineNumberNode(1)))\n        Test.push_testset(fake)\n        Test.record(o_ts, fake)\n        Test.pop_testset()\n    end\nend\nfor test in all_tests\n    (test in completed_tests) && continue\n    fake = Test.DefaultTestSet(test)\n    Test.record(fake, Test.Error(:test_interrupted, test, nothing,\n                                    [(\"skipped\", [])], LineNumberNode(1)))\n    Test.push_testset(fake)\n    Test.record(o_ts, fake)\n    Test.pop_testset()\nend\nprintln()\nTest.print_test_results(o_ts, 1)\nif !o_ts.anynonpass\n    println(\"    \\033[32;1mSUCCESS\\033[0m\")\nelse\n    println(\"    \\033[31;1mFAILURE\\033[0m\\n\")\n    Test.print_test_errors(o_ts)\n    throw(Test.FallbackTestSetException(\"Test run finished with errors\"))\nend\n\n"
  },
  {
    "path": "test/setup.jl",
    "content": "using Distributed, Test, oneAPI\n\noneAPI.functional() || error(\"oneAPI.jl is not functional on this system\")\n\n# GPUArrays has a testsuite that isn't part of the main package.\n# Include it directly.\nimport GPUArrays\ngpuarrays = pathof(GPUArrays)\ngpuarrays_root = dirname(dirname(gpuarrays))\ninclude(joinpath(gpuarrays_root, \"test\", \"testsuite.jl\"))\ntestf(f, xs...; kwargs...) = TestSuite.compare(f, oneArray, xs...; kwargs...)\n\nconst eltypes = [Int16, Int32, Int64,\n                 Complex{Int16}, Complex{Int32}, Complex{Int64},\n                 Float16, Float32,\n                 ComplexF32]\nconst float16_supported = oneL0.module_properties(device()).fp16flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP16 == oneL0.ZE_DEVICE_MODULE_FLAG_FP16\nif float16_supported\n    append!(eltypes, [#=Float16,=# ComplexF16])\nend\nconst float64_supported = oneL0.module_properties(device()).fp64flags & oneL0.ZE_DEVICE_MODULE_FLAG_FP64 == oneL0.ZE_DEVICE_MODULE_FLAG_FP64\nif float64_supported\n    append!(eltypes, [Float64, ComplexF64])\nend\nTestSuite.supported_eltypes(::Type{<:oneArray}) = eltypes\n\nconst validation_layer = parse(Bool, get(ENV, \"ZE_ENABLE_VALIDATION_LAYER\", \"false\"))\nconst parameter_validation = parse(Bool, get(ENV, \"ZE_ENABLE_PARAMETER_VALIDATION\", \"false\"))\n\nusing Random\n\n\n## entry point\n\nfunction runtests(f, name)\n    old_print_setting = Test.TESTSET_PRINT_ENABLE[]\n    Test.TESTSET_PRINT_ENABLE[] = false\n\n    try\n        # generate a temporary module to execute the tests in\n        mod_name = Symbol(\"Test\", rand(1:100), \"Main_\", replace(name, '/' => '_'))\n        mod = @eval(Main, module $mod_name end)\n        @eval(mod, using Test, Random, oneAPI)\n\n        let id = myid()\n            wait(@spawnat 1 print_testworker_started(name, id))\n        end\n\n        ex = quote\n            GC.gc(true)\n            Random.seed!(1)\n            oneAPI.allowscalar(false)\n\n            @timed @testset $\"$name\" begin\n                $f()\n            end\n        end\n        data = Core.eval(mod, ex)\n        #data[1] is the testset\n\n        # process results\n        cpu_rss = Sys.maxrss()\n        if VERSION >= v\"1.11.0-DEV.1529\"\n            tc = Test.get_test_counts(data[1])\n            passes,fails,error,broken,c_passes,c_fails,c_errors,c_broken =\n                tc.passes, tc.fails, tc.errors, tc.broken, tc.cumulative_passes,\n                tc.cumulative_fails, tc.cumulative_errors, tc.cumulative_broken\n        else\n            passes,fails,errors,broken,c_passes,c_fails,c_errors,c_broken =\n                Test.get_test_counts(data[1])\n        end\n        if data[1].anynonpass == false\n            data = ((passes+c_passes,broken+c_broken),\n                    data[2],\n                    data[3],\n                    data[4],\n                    data[5])\n        end\n        res = vcat(collect(data), cpu_rss)\n\n        GC.gc(true)\n        res\n    finally\n        Test.TESTSET_PRINT_ENABLE[] = old_print_setting\n    end\nend\n\n\n## auxiliary stuff\n\n# NOTE: based on test/pkg.jl::capture_stdout, but doesn't discard exceptions\nmacro grab_output(ex)\n    quote\n        mktemp() do fname, fout\n            ret = nothing\n            open(fname, \"w\") do fout\n                redirect_stdout(fout) do\n                    ret = $(esc(ex))\n                end\n            end\n            ret, read(fname, String)\n        end\n    end\nend\n\n# Run some code on-device\nmacro on_device(ex...)\n    code = ex[end]\n    kwargs = ex[1:end-1]\n\n    @gensym kernel\n    esc(quote\n        let\n            function $kernel()\n                $code\n                return\n            end\n\n            oneAPI.@sync @oneapi $(kwargs...) $kernel()\n        end\n    end)\nend\n\n# helper function for sinking a value to prevent the callee from getting optimized away\n@inline sink(i::Int32) =\n    Base.llvmcall(\"\"\"%slot = alloca i32\n                     store volatile i32 %0, i32* %slot\n                     %value = load volatile i32, i32* %slot\n                     ret i32 %value\"\"\", Int32, Tuple{Int32}, i)\n@inline sink(i::Int64) =\n    Base.llvmcall(\"\"\"%slot = alloca i64\n                     store volatile i64 %0, i64* %slot\n                     %value = load volatile i64, i64* %slot\n                     ret i64 %value\"\"\", Int64, Tuple{Int64}, i)\n\nnothing # File is loaded via a remotecall to \"include\". Ensure it returns \"nothing\".\n"
  },
  {
    "path": "test/sorting.jl",
    "content": "using Test\nusing oneAPI\n\n@testset \"sorting\" begin\n    data = oneArray([3, 1, 4, 1, 5])\n    sort!(data)\n    @test Array(data) == [1, 1, 3, 4, 5]\n\n    data_rev = oneArray([3, 1, 4, 1, 5])\n    sort!(data_rev, rev = true)\n    @test Array(data_rev) == [5, 4, 3, 1, 1]\n    data = oneArray([3, 1, 4, 1, 5])\n    @test Array(sortperm(data)) == sortperm([3, 1, 4, 1, 5])\n\n    data_rev = oneArray([3, 1, 4, 1, 5])\n    @test Array(sortperm(data_rev, rev = true)) == sortperm([3, 1, 4, 1, 5], rev = true)\nend\n"
  },
  {
    "path": "test/sycl.jl",
    "content": "if Sys.iswindows()\n@warn \"Skipping unsupported SYCL tests\"\nelse\n\nusing oneAPI.oneL0, oneAPI.SYCL\n\n@test sycl_platform() isa syclPlatform\n\nze_dev = device()\nsycl_dev = sycl_device(ze_dev)\n@test sycl_dev isa syclDevice\n\nze_ctx = context()\nsycl_ctx = sycl_context(ze_ctx, ze_dev)\n@test sycl_ctx isa syclContext\n\nze_queue = ZeCommandQueue(ze_ctx, ze_dev)\n@test sycl_queue(ze_queue) isa syclQueue\n\nze_event_pool = ZeEventPool(ze_ctx, 1, ze_dev)\nze_event = ze_event_pool[1]\nsycl_event = oneAPI.SYCL.syclEvent(sycl_ctx, ze_event)\n\nend"
  }
]