From 5f8155dfca3f958ae36936787c49bde45663273e Mon Sep 17 00:00:00 2001
From: Jens Koenen <koenen@vr.rwth-aachen.de>
Date: Wed, 26 Oct 2022 17:28:20 +0200
Subject: [PATCH] Removed cudart module and instead added header files and
 libraries from the Nvidia CUDA Toolkit.

---
 .gitmodules                                   |     3 -
 CMakeLists.txt                                |     3 +
 ext/cudart                                    |     1 -
 ext/cudart/bin/cudart32_110.dll               |   Bin 0 -> 467456 bytes
 ext/cudart/bin/cudart64_110.dll               |   Bin 0 -> 526848 bytes
 ext/cudart/include/CL/cl.h                    |  1578 ++
 ext/cudart/include/CL/cl.hpp                  | 12419 ++++++++++
 ext/cudart/include/CL/cl_d3d10.h              |   129 +
 ext/cudart/include/CL/cl_d3d10_ext.h          |   122 +
 ext/cudart/include/CL/cl_d3d11.h              |   128 +
 ext/cudart/include/CL/cl_d3d11_ext.h          |   122 +
 ext/cudart/include/CL/cl_d3d9_ext.h           |   143 +
 ext/cudart/include/CL/cl_dx9_media_sharing.h  |   118 +
 ext/cudart/include/CL/cl_egl.h                |   123 +
 ext/cudart/include/CL/cl_ext.h                |  1131 +
 ext/cudart/include/CL/cl_gl.h                 |   154 +
 ext/cudart/include/CL/cl_gl_ext.h             |    44 +
 ext/cudart/include/CL/cl_platform.h           |  1414 ++
 ext/cudart/include/CL/opencl.h                |    40 +
 ext/cudart/include/builtin_types.h            |    64 +
 ext/cudart/include/channel_descriptor.h       |   595 +
 ext/cudart/include/common_functions.h         |    65 +
 ext/cudart/include/cooperative_groups.h       |  1828 ++
 .../cooperative_groups/details/async.h        |   452 +
 .../details/coalesced_reduce.h                |   108 +
 .../details/coalesced_scan.h                  |   174 +
 .../cooperative_groups/details/driver_abi.h   |    99 +
 .../cooperative_groups/details/functional.h   |   207 +
 .../cooperative_groups/details/helpers.h      |   707 +
 .../include/cooperative_groups/details/info.h |   323 +
 .../cooperative_groups/details/partitioning.h |   133 +
 .../cooperative_groups/details/reduce.h       |   430 +
 .../include/cooperative_groups/details/scan.h |   324 +
 .../include/cooperative_groups/details/sync.h |   276 +
 .../include/cooperative_groups/memcpy_async.h |    62 +
 .../include/cooperative_groups/reduce.h       |    63 +
 ext/cudart/include/cooperative_groups/scan.h  |    63 +
 ext/cudart/include/cuComplex.h                |   348 +
 ext/cudart/include/cuda.h                     | 20295 ++++++++++++++++
 ext/cudart/include/cudaD3D10.h                |   805 +
 ext/cudart/include/cudaD3D10Typedefs.h        |   119 +
 ext/cudart/include/cudaD3D11.h                |   357 +
 ext/cudart/include/cudaD3D11Typedefs.h        |    92 +
 ext/cudart/include/cudaD3D9.h                 |   886 +
 ext/cudart/include/cudaD3D9Typedefs.h         |   131 +
 ext/cudart/include/cudaGL.h                   |   605 +
 ext/cudart/include/cudaGLTypedefs.h           |   123 +
 ext/cudart/include/cudaProfilerTypedefs.h     |    78 +
 ext/cudart/include/cudaTypedefs.h             |   959 +
 ext/cudart/include/cuda_awbarrier.h           |   227 +
 ext/cudart/include/cuda_awbarrier_helpers.h   |   350 +
 .../include/cuda_awbarrier_primitives.h       |    94 +
 ext/cudart/include/cuda_bf16.h                |  3749 +++
 ext/cudart/include/cuda_bf16.hpp              |  2683 ++
 ext/cudart/include/cuda_d3d10_interop.h       |   724 +
 ext/cudart/include/cuda_d3d11_interop.h       |   323 +
 ext/cudart/include/cuda_d3d9_interop.h        |   782 +
 ext/cudart/include/cuda_device_runtime_api.h  |   268 +
 ext/cudart/include/cuda_egl_interop.h         |   642 +
 ext/cudart/include/cuda_fp16.h                |  3794 +++
 ext/cudart/include/cuda_fp16.hpp              |  2614 ++
 ext/cudart/include/cuda_fp8.h                 |   360 +
 ext/cudart/include/cuda_fp8.hpp               |  1546 ++
 ext/cudart/include/cuda_gl_interop.h          |   508 +
 ext/cudart/include/cuda_occupancy.h           |  1958 ++
 ext/cudart/include/cuda_pipeline.h            |   224 +
 ext/cudart/include/cuda_pipeline_helpers.h    |   373 +
 ext/cudart/include/cuda_pipeline_primitives.h |   148 +
 ext/cudart/include/cuda_runtime.h             |  2725 +++
 ext/cudart/include/cuda_runtime_api.h         | 13380 ++++++++++
 ext/cudart/include/cuda_surface_types.h       |   103 +
 ext/cudart/include/cuda_texture_types.h       |   109 +
 ext/cudart/include/cudart_platform.h          |    57 +
 ext/cudart/include/device_atomic_functions.h  |   211 +
 .../include/device_atomic_functions.hpp       |   224 +
 ext/cudart/include/device_double_functions.h  |    65 +
 ext/cudart/include/device_functions.h         |    65 +
 ext/cudart/include/device_launch_parameters.h |   118 +
 ext/cudart/include/device_types.h             |    81 +
 ext/cudart/include/driver_functions.h         |   145 +
 ext/cudart/include/driver_types.h             |  3093 +++
 ext/cudart/include/host_config.h              |    65 +
 ext/cudart/include/host_defines.h             |    65 +
 ext/cudart/include/library_types.h            |   103 +
 ext/cudart/include/math_constants.h           |   152 +
 ext/cudart/include/math_functions.h           |    65 +
 ext/cudart/include/mma.h                      |    60 +
 ext/cudart/include/nvfunctional               |    60 +
 ext/cudart/include/sm_20_atomic_functions.h   |   100 +
 ext/cudart/include/sm_20_atomic_functions.hpp |    85 +
 ext/cudart/include/sm_20_intrinsics.h         |  1551 ++
 ext/cudart/include/sm_20_intrinsics.hpp       |   221 +
 ext/cudart/include/sm_30_intrinsics.h         |   215 +
 ext/cudart/include/sm_30_intrinsics.hpp       |   604 +
 ext/cudart/include/sm_32_atomic_functions.h   |   131 +
 ext/cudart/include/sm_32_atomic_functions.hpp |   134 +
 ext/cudart/include/sm_32_intrinsics.h         |   510 +
 ext/cudart/include/sm_32_intrinsics.hpp       |   588 +
 ext/cudart/include/sm_35_atomic_functions.h   |    58 +
 ext/cudart/include/sm_35_intrinsics.h         |   116 +
 ext/cudart/include/sm_60_atomic_functions.h   |   539 +
 ext/cudart/include/sm_60_atomic_functions.hpp |   527 +
 ext/cudart/include/sm_61_intrinsics.h         |   123 +
 ext/cudart/include/sm_61_intrinsics.hpp       |   161 +
 ext/cudart/include/surface_functions.h        |   439 +
 .../include/surface_indirect_functions.h      |   286 +
 ext/cudart/include/surface_types.h            |   119 +
 ext/cudart/include/texture_fetch_functions.h  |   739 +
 .../include/texture_indirect_functions.h      |   771 +
 ext/cudart/include/texture_types.h            |   281 +
 ext/cudart/include/vector_functions.h         |   175 +
 ext/cudart/include/vector_functions.hpp       |   316 +
 ext/cudart/include/vector_types.h             |   443 +
 ext/cudart/lib/Win32/OpenCL.lib               |   Bin 0 -> 31126 bytes
 ext/cudart/lib/Win32/cuda.lib                 |   Bin 0 -> 147046 bytes
 ext/cudart/lib/Win32/cudadevrt.lib            |   Bin 0 -> 606674 bytes
 ext/cudart/lib/Win32/cudart.lib               |   Bin 0 -> 115072 bytes
 ext/cudart/lib/Win32/cudart_static.lib        |   Bin 0 -> 2203672 bytes
 ext/cudart/lib/x64/OpenCL.lib                 |   Bin 0 -> 28824 bytes
 ext/cudart/lib/x64/cuda.lib                   |   Bin 0 -> 136538 bytes
 ext/cudart/lib/x64/cudadevrt.lib              |   Bin 0 -> 1010596 bytes
 ext/cudart/lib/x64/cudart.lib                 |   Bin 0 -> 107594 bytes
 ext/cudart/lib/x64/cudart_static.lib          |   Bin 0 -> 2766918 bytes
 src/encoder/nvidia_encoder.cpp                |     4 +
 124 files changed, 99988 insertions(+), 4 deletions(-)
 delete mode 160000 ext/cudart
 create mode 100644 ext/cudart/bin/cudart32_110.dll
 create mode 100644 ext/cudart/bin/cudart64_110.dll
 create mode 100644 ext/cudart/include/CL/cl.h
 create mode 100644 ext/cudart/include/CL/cl.hpp
 create mode 100644 ext/cudart/include/CL/cl_d3d10.h
 create mode 100644 ext/cudart/include/CL/cl_d3d10_ext.h
 create mode 100644 ext/cudart/include/CL/cl_d3d11.h
 create mode 100644 ext/cudart/include/CL/cl_d3d11_ext.h
 create mode 100644 ext/cudart/include/CL/cl_d3d9_ext.h
 create mode 100644 ext/cudart/include/CL/cl_dx9_media_sharing.h
 create mode 100644 ext/cudart/include/CL/cl_egl.h
 create mode 100644 ext/cudart/include/CL/cl_ext.h
 create mode 100644 ext/cudart/include/CL/cl_gl.h
 create mode 100644 ext/cudart/include/CL/cl_gl_ext.h
 create mode 100644 ext/cudart/include/CL/cl_platform.h
 create mode 100644 ext/cudart/include/CL/opencl.h
 create mode 100644 ext/cudart/include/builtin_types.h
 create mode 100644 ext/cudart/include/channel_descriptor.h
 create mode 100644 ext/cudart/include/common_functions.h
 create mode 100644 ext/cudart/include/cooperative_groups.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/async.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/coalesced_reduce.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/coalesced_scan.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/driver_abi.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/functional.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/helpers.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/info.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/partitioning.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/reduce.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/scan.h
 create mode 100644 ext/cudart/include/cooperative_groups/details/sync.h
 create mode 100644 ext/cudart/include/cooperative_groups/memcpy_async.h
 create mode 100644 ext/cudart/include/cooperative_groups/reduce.h
 create mode 100644 ext/cudart/include/cooperative_groups/scan.h
 create mode 100644 ext/cudart/include/cuComplex.h
 create mode 100644 ext/cudart/include/cuda.h
 create mode 100644 ext/cudart/include/cudaD3D10.h
 create mode 100644 ext/cudart/include/cudaD3D10Typedefs.h
 create mode 100644 ext/cudart/include/cudaD3D11.h
 create mode 100644 ext/cudart/include/cudaD3D11Typedefs.h
 create mode 100644 ext/cudart/include/cudaD3D9.h
 create mode 100644 ext/cudart/include/cudaD3D9Typedefs.h
 create mode 100644 ext/cudart/include/cudaGL.h
 create mode 100644 ext/cudart/include/cudaGLTypedefs.h
 create mode 100644 ext/cudart/include/cudaProfilerTypedefs.h
 create mode 100644 ext/cudart/include/cudaTypedefs.h
 create mode 100644 ext/cudart/include/cuda_awbarrier.h
 create mode 100644 ext/cudart/include/cuda_awbarrier_helpers.h
 create mode 100644 ext/cudart/include/cuda_awbarrier_primitives.h
 create mode 100644 ext/cudart/include/cuda_bf16.h
 create mode 100644 ext/cudart/include/cuda_bf16.hpp
 create mode 100644 ext/cudart/include/cuda_d3d10_interop.h
 create mode 100644 ext/cudart/include/cuda_d3d11_interop.h
 create mode 100644 ext/cudart/include/cuda_d3d9_interop.h
 create mode 100644 ext/cudart/include/cuda_device_runtime_api.h
 create mode 100644 ext/cudart/include/cuda_egl_interop.h
 create mode 100644 ext/cudart/include/cuda_fp16.h
 create mode 100644 ext/cudart/include/cuda_fp16.hpp
 create mode 100644 ext/cudart/include/cuda_fp8.h
 create mode 100644 ext/cudart/include/cuda_fp8.hpp
 create mode 100644 ext/cudart/include/cuda_gl_interop.h
 create mode 100644 ext/cudart/include/cuda_occupancy.h
 create mode 100644 ext/cudart/include/cuda_pipeline.h
 create mode 100644 ext/cudart/include/cuda_pipeline_helpers.h
 create mode 100644 ext/cudart/include/cuda_pipeline_primitives.h
 create mode 100644 ext/cudart/include/cuda_runtime.h
 create mode 100644 ext/cudart/include/cuda_runtime_api.h
 create mode 100644 ext/cudart/include/cuda_surface_types.h
 create mode 100644 ext/cudart/include/cuda_texture_types.h
 create mode 100644 ext/cudart/include/cudart_platform.h
 create mode 100644 ext/cudart/include/device_atomic_functions.h
 create mode 100644 ext/cudart/include/device_atomic_functions.hpp
 create mode 100644 ext/cudart/include/device_double_functions.h
 create mode 100644 ext/cudart/include/device_functions.h
 create mode 100644 ext/cudart/include/device_launch_parameters.h
 create mode 100644 ext/cudart/include/device_types.h
 create mode 100644 ext/cudart/include/driver_functions.h
 create mode 100644 ext/cudart/include/driver_types.h
 create mode 100644 ext/cudart/include/host_config.h
 create mode 100644 ext/cudart/include/host_defines.h
 create mode 100644 ext/cudart/include/library_types.h
 create mode 100644 ext/cudart/include/math_constants.h
 create mode 100644 ext/cudart/include/math_functions.h
 create mode 100644 ext/cudart/include/mma.h
 create mode 100644 ext/cudart/include/nvfunctional
 create mode 100644 ext/cudart/include/sm_20_atomic_functions.h
 create mode 100644 ext/cudart/include/sm_20_atomic_functions.hpp
 create mode 100644 ext/cudart/include/sm_20_intrinsics.h
 create mode 100644 ext/cudart/include/sm_20_intrinsics.hpp
 create mode 100644 ext/cudart/include/sm_30_intrinsics.h
 create mode 100644 ext/cudart/include/sm_30_intrinsics.hpp
 create mode 100644 ext/cudart/include/sm_32_atomic_functions.h
 create mode 100644 ext/cudart/include/sm_32_atomic_functions.hpp
 create mode 100644 ext/cudart/include/sm_32_intrinsics.h
 create mode 100644 ext/cudart/include/sm_32_intrinsics.hpp
 create mode 100644 ext/cudart/include/sm_35_atomic_functions.h
 create mode 100644 ext/cudart/include/sm_35_intrinsics.h
 create mode 100644 ext/cudart/include/sm_60_atomic_functions.h
 create mode 100644 ext/cudart/include/sm_60_atomic_functions.hpp
 create mode 100644 ext/cudart/include/sm_61_intrinsics.h
 create mode 100644 ext/cudart/include/sm_61_intrinsics.hpp
 create mode 100644 ext/cudart/include/surface_functions.h
 create mode 100644 ext/cudart/include/surface_indirect_functions.h
 create mode 100644 ext/cudart/include/surface_types.h
 create mode 100644 ext/cudart/include/texture_fetch_functions.h
 create mode 100644 ext/cudart/include/texture_indirect_functions.h
 create mode 100644 ext/cudart/include/texture_types.h
 create mode 100644 ext/cudart/include/vector_functions.h
 create mode 100644 ext/cudart/include/vector_functions.hpp
 create mode 100644 ext/cudart/include/vector_types.h
 create mode 100644 ext/cudart/lib/Win32/OpenCL.lib
 create mode 100644 ext/cudart/lib/Win32/cuda.lib
 create mode 100644 ext/cudart/lib/Win32/cudadevrt.lib
 create mode 100644 ext/cudart/lib/Win32/cudart.lib
 create mode 100644 ext/cudart/lib/Win32/cudart_static.lib
 create mode 100644 ext/cudart/lib/x64/OpenCL.lib
 create mode 100644 ext/cudart/lib/x64/cuda.lib
 create mode 100644 ext/cudart/lib/x64/cudadevrt.lib
 create mode 100644 ext/cudart/lib/x64/cudart.lib
 create mode 100644 ext/cudart/lib/x64/cudart_static.lib

diff --git a/.gitmodules b/.gitmodules
index 64372bf3..79827d19 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -54,6 +54,3 @@
 [submodule "ext/openxr"]
 	path = ext/openxr
 	url = https://github.com/KhronosGroup/OpenXR-SDK.git
-[submodule "ext/cudart"]
-	path = ext/cudart
-	url = https://gitlab.com/nvidia/headers/cuda-individual/cudart.git
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 15ab7f47..7b0e9914 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -194,6 +194,7 @@ target_include_directories(lava.base PUBLIC
         $<BUILD_INTERFACE:${LIBLAVA_EXT_DIR}/VulkanMemoryAllocator/include>
         $<BUILD_INTERFACE:${LIBLAVA_EXT_DIR}/volk>
         $<BUILD_INTERFACE:${LIBLAVA_INC_DIR}/nvenc_headers>
+        $<BUILD_INTERFACE:${LIBLAVA_EXT_DIR}/cudart/include>
         )
 
 target_link_libraries(lava.base
@@ -500,6 +501,7 @@ set(EXT_INCLUDE_DIRS
         ${LIBLAVA_EXT_DIR}/argh
         ${LIBLAVA_EXT_DIR}/imgui
         ${LIBLAVA_INC_DIR}/nvenc_headers
+        ${LIBLAVA_EXT_DIR}/cudart/include
         )
 
 foreach(DIR ${EXT_INCLUDE_DIRS})
@@ -801,6 +803,7 @@ message("=======================================================================
         target_link_libraries(${NAME} lava::app assimp::assimp)
         target_include_directories(${NAME} PUBLIC ${OPENVR_HEADER_DIR})
         target_link_libraries(${NAME} "${CMAKE_SOURCE_DIR}/ext/openvr/lib/win64/openvr_api.lib")
+        target_link_libraries(${NAME} "${CMAKE_SOURCE_DIR}/ext/cudart/lib/x64/cuda.lib")
 
         if(MSVC)
             source_group("" FILES ${SRC_DIR}/main.cpp)
diff --git a/ext/cudart b/ext/cudart
deleted file mode 160000
index b92c3c03..00000000
--- a/ext/cudart
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b92c3c0351d6d4402b81101ffcd6660474d1306b
diff --git a/ext/cudart/bin/cudart32_110.dll b/ext/cudart/bin/cudart32_110.dll
new file mode 100644
index 0000000000000000000000000000000000000000..20cf2aee49aed62ae6d5ccad7bbbf5d4f3474eca
GIT binary patch
literal 467456
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
JL>W=e1pw4>4^{vG

literal 0
HcmV?d00001

diff --git a/ext/cudart/bin/cudart64_110.dll b/ext/cudart/bin/cudart64_110.dll
new file mode 100644
index 0000000000000000000000000000000000000000..b36d7a3e29ff90d1e43460489ec78d3b78b5fda9
GIT binary patch
literal 526848
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

literal 0
HcmV?d00001

diff --git a/ext/cudart/include/CL/cl.h b/ext/cudart/include/CL/cl.h
new file mode 100644
index 00000000..290495a6
--- /dev/null
+++ b/ext/cudart/include/CL/cl.h
@@ -0,0 +1,1578 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_H
+#define __OPENCL_CL_H
+
+#ifdef __APPLE__
+#include <OpenCL/cl_platform.h>
+#else
+#include <CL/cl_platform.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************/
+
+typedef struct _cl_platform_id *    cl_platform_id;
+typedef struct _cl_device_id *      cl_device_id;
+typedef struct _cl_context *        cl_context;
+typedef struct _cl_command_queue *  cl_command_queue;
+typedef struct _cl_mem *            cl_mem;
+typedef struct _cl_program *        cl_program;
+typedef struct _cl_kernel *         cl_kernel;
+typedef struct _cl_event *          cl_event;
+typedef struct _cl_sampler *        cl_sampler;
+
+typedef cl_uint             cl_bool;                     /* WARNING!  Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */
+typedef cl_ulong            cl_bitfield;
+typedef cl_ulong            cl_properties;
+typedef cl_bitfield         cl_device_type;
+typedef cl_uint             cl_platform_info;
+typedef cl_uint             cl_device_info;
+typedef cl_bitfield         cl_device_fp_config;
+typedef cl_uint             cl_device_mem_cache_type;
+typedef cl_uint             cl_device_local_mem_type;
+typedef cl_bitfield         cl_device_exec_capabilities;
+typedef cl_bitfield         cl_device_svm_capabilities;
+typedef cl_bitfield         cl_command_queue_properties;
+typedef intptr_t            cl_device_partition_property;
+typedef cl_bitfield         cl_device_affinity_domain;
+
+typedef intptr_t            cl_context_properties;
+typedef cl_uint             cl_context_info;
+typedef cl_properties       cl_queue_properties;
+typedef cl_uint             cl_command_queue_info;
+typedef cl_uint             cl_channel_order;
+typedef cl_uint             cl_channel_type;
+typedef cl_bitfield         cl_mem_flags;
+typedef cl_bitfield         cl_svm_mem_flags;
+typedef cl_uint             cl_mem_object_type;
+typedef cl_uint             cl_mem_info;
+typedef cl_bitfield         cl_mem_migration_flags;
+typedef cl_uint             cl_image_info;
+typedef cl_uint             cl_buffer_create_type;
+typedef cl_uint             cl_addressing_mode;
+typedef cl_uint             cl_filter_mode;
+typedef cl_uint             cl_sampler_info;
+typedef cl_bitfield         cl_map_flags;
+typedef intptr_t            cl_pipe_properties;
+typedef cl_uint             cl_pipe_info;
+typedef cl_uint             cl_program_info;
+typedef cl_uint             cl_program_build_info;
+typedef cl_uint             cl_program_binary_type;
+typedef cl_int              cl_build_status;
+typedef cl_uint             cl_kernel_info;
+typedef cl_uint             cl_kernel_arg_info;
+typedef cl_uint             cl_kernel_arg_address_qualifier;
+typedef cl_uint             cl_kernel_arg_access_qualifier;
+typedef cl_bitfield         cl_kernel_arg_type_qualifier;
+typedef cl_uint             cl_kernel_work_group_info;
+typedef cl_uint             cl_kernel_sub_group_info;
+typedef cl_uint             cl_event_info;
+typedef cl_uint             cl_command_type;
+typedef cl_uint             cl_profiling_info;
+typedef cl_properties       cl_sampler_properties;
+typedef cl_uint             cl_kernel_exec_info;
+typedef cl_bitfield         cl_device_atomic_capabilities;
+typedef cl_bitfield         cl_device_device_enqueue_capabilities;
+typedef cl_uint             cl_khronos_vendor_id;
+typedef cl_properties       cl_mem_properties;
+typedef cl_uint             cl_version;
+
+typedef struct _cl_image_format {
+    cl_channel_order        image_channel_order;
+    cl_channel_type         image_channel_data_type;
+} cl_image_format;
+
+typedef struct _cl_image_desc {
+    cl_mem_object_type      image_type;
+    size_t                  image_width;
+    size_t                  image_height;
+    size_t                  image_depth;
+    size_t                  image_array_size;
+    size_t                  image_row_pitch;
+    size_t                  image_slice_pitch;
+    cl_uint                 num_mip_levels;
+    cl_uint                 num_samples;
+#ifdef __GNUC__
+    __extension__   /* Prevents warnings about anonymous union in -pedantic builds */
+#endif
+    union {
+      cl_mem                  buffer;
+      cl_mem                  mem_object;
+    };
+} cl_image_desc;
+
+typedef struct _cl_buffer_region {
+    size_t                  origin;
+    size_t                  size;
+} cl_buffer_region;
+
+#define CL_NAME_VERSION_MAX_NAME_SIZE 64
+
+typedef struct _cl_name_version {
+    cl_version              version;
+    char                    name[CL_NAME_VERSION_MAX_NAME_SIZE];
+} cl_name_version;
+
+/******************************************************************************/
+
+/* Error Codes */
+#define CL_SUCCESS                                  0
+#define CL_DEVICE_NOT_FOUND                         -1
+#define CL_DEVICE_NOT_AVAILABLE                     -2
+#define CL_COMPILER_NOT_AVAILABLE                   -3
+#define CL_MEM_OBJECT_ALLOCATION_FAILURE            -4
+#define CL_OUT_OF_RESOURCES                         -5
+#define CL_OUT_OF_HOST_MEMORY                       -6
+#define CL_PROFILING_INFO_NOT_AVAILABLE             -7
+#define CL_MEM_COPY_OVERLAP                         -8
+#define CL_IMAGE_FORMAT_MISMATCH                    -9
+#define CL_IMAGE_FORMAT_NOT_SUPPORTED               -10
+#define CL_BUILD_PROGRAM_FAILURE                    -11
+#define CL_MAP_FAILURE                              -12
+#define CL_MISALIGNED_SUB_BUFFER_OFFSET             -13
+#define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14
+#define CL_COMPILE_PROGRAM_FAILURE                  -15
+#define CL_LINKER_NOT_AVAILABLE                     -16
+#define CL_LINK_PROGRAM_FAILURE                     -17
+#define CL_DEVICE_PARTITION_FAILED                  -18
+#define CL_KERNEL_ARG_INFO_NOT_AVAILABLE            -19
+
+#define CL_INVALID_VALUE                            -30
+#define CL_INVALID_DEVICE_TYPE                      -31
+#define CL_INVALID_PLATFORM                         -32
+#define CL_INVALID_DEVICE                           -33
+#define CL_INVALID_CONTEXT                          -34
+#define CL_INVALID_QUEUE_PROPERTIES                 -35
+#define CL_INVALID_COMMAND_QUEUE                    -36
+#define CL_INVALID_HOST_PTR                         -37
+#define CL_INVALID_MEM_OBJECT                       -38
+#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR          -39
+#define CL_INVALID_IMAGE_SIZE                       -40
+#define CL_INVALID_SAMPLER                          -41
+#define CL_INVALID_BINARY                           -42
+#define CL_INVALID_BUILD_OPTIONS                    -43
+#define CL_INVALID_PROGRAM                          -44
+#define CL_INVALID_PROGRAM_EXECUTABLE               -45
+#define CL_INVALID_KERNEL_NAME                      -46
+#define CL_INVALID_KERNEL_DEFINITION                -47
+#define CL_INVALID_KERNEL                           -48
+#define CL_INVALID_ARG_INDEX                        -49
+#define CL_INVALID_ARG_VALUE                        -50
+#define CL_INVALID_ARG_SIZE                         -51
+#define CL_INVALID_KERNEL_ARGS                      -52
+#define CL_INVALID_WORK_DIMENSION                   -53
+#define CL_INVALID_WORK_GROUP_SIZE                  -54
+#define CL_INVALID_WORK_ITEM_SIZE                   -55
+#define CL_INVALID_GLOBAL_OFFSET                    -56
+#define CL_INVALID_EVENT_WAIT_LIST                  -57
+#define CL_INVALID_EVENT                            -58
+#define CL_INVALID_OPERATION                        -59
+#define CL_INVALID_GL_OBJECT                        -60
+#define CL_INVALID_BUFFER_SIZE                      -61
+#define CL_INVALID_MIP_LEVEL                        -62
+#define CL_INVALID_GLOBAL_WORK_SIZE                 -63
+#define CL_INVALID_PROPERTY                         -64
+#define CL_INVALID_IMAGE_DESCRIPTOR                 -65
+#define CL_INVALID_COMPILER_OPTIONS                 -66
+#define CL_INVALID_LINKER_OPTIONS                   -67
+#define CL_INVALID_DEVICE_PARTITION_COUNT           -68
+#define CL_INVALID_PIPE_SIZE                        -69
+#define CL_INVALID_DEVICE_QUEUE                     -70
+#define CL_INVALID_SPEC_ID                          -71
+#define CL_MAX_SIZE_RESTRICTION_EXCEEDED            -72
+
+/* OpenCL Version */
+#define CL_VERSION_1_0                              1
+#define CL_VERSION_1_1                              1
+#define CL_VERSION_1_2                              1
+#define CL_VERSION_2_0                              1
+#define CL_VERSION_2_1                              1
+#define CL_VERSION_2_2                              1
+#define CL_VERSION_3_0                              1
+
+/* cl_bool */
+#define CL_FALSE                                    0
+#define CL_TRUE                                     1
+#define CL_BLOCKING                                 CL_TRUE
+#define CL_NON_BLOCKING                             CL_FALSE
+
+/* cl_platform_info */
+#define CL_PLATFORM_PROFILE                         0x0900
+#define CL_PLATFORM_VERSION                         0x0901
+#define CL_PLATFORM_NAME                            0x0902
+#define CL_PLATFORM_VENDOR                          0x0903
+#define CL_PLATFORM_EXTENSIONS                      0x0904
+#define CL_PLATFORM_HOST_TIMER_RESOLUTION           0x0905
+#define CL_PLATFORM_NUMERIC_VERSION                 0x0906
+#define CL_PLATFORM_EXTENSIONS_WITH_VERSION         0x0907
+
+/* cl_device_type - bitfield */
+#define CL_DEVICE_TYPE_DEFAULT                      (1 << 0)
+#define CL_DEVICE_TYPE_CPU                          (1 << 1)
+#define CL_DEVICE_TYPE_GPU                          (1 << 2)
+#define CL_DEVICE_TYPE_ACCELERATOR                  (1 << 3)
+#define CL_DEVICE_TYPE_CUSTOM                       (1 << 4)
+#define CL_DEVICE_TYPE_ALL                          0xFFFFFFFF
+
+/* cl_device_info */
+#define CL_DEVICE_TYPE                                   0x1000
+#define CL_DEVICE_VENDOR_ID                              0x1001
+#define CL_DEVICE_MAX_COMPUTE_UNITS                      0x1002
+#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS               0x1003
+#define CL_DEVICE_MAX_WORK_GROUP_SIZE                    0x1004
+#define CL_DEVICE_MAX_WORK_ITEM_SIZES                    0x1005
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR            0x1006
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT           0x1007
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT             0x1008
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG            0x1009
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT           0x100A
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE          0x100B
+#define CL_DEVICE_MAX_CLOCK_FREQUENCY                    0x100C
+#define CL_DEVICE_ADDRESS_BITS                           0x100D
+#define CL_DEVICE_MAX_READ_IMAGE_ARGS                    0x100E
+#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS                   0x100F
+#define CL_DEVICE_MAX_MEM_ALLOC_SIZE                     0x1010
+#define CL_DEVICE_IMAGE2D_MAX_WIDTH                      0x1011
+#define CL_DEVICE_IMAGE2D_MAX_HEIGHT                     0x1012
+#define CL_DEVICE_IMAGE3D_MAX_WIDTH                      0x1013
+#define CL_DEVICE_IMAGE3D_MAX_HEIGHT                     0x1014
+#define CL_DEVICE_IMAGE3D_MAX_DEPTH                      0x1015
+#define CL_DEVICE_IMAGE_SUPPORT                          0x1016
+#define CL_DEVICE_MAX_PARAMETER_SIZE                     0x1017
+#define CL_DEVICE_MAX_SAMPLERS                           0x1018
+#define CL_DEVICE_MEM_BASE_ADDR_ALIGN                    0x1019
+#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE               0x101A
+#define CL_DEVICE_SINGLE_FP_CONFIG                       0x101B
+#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE                  0x101C
+#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE              0x101D
+#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE                  0x101E
+#define CL_DEVICE_GLOBAL_MEM_SIZE                        0x101F
+#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE               0x1020
+#define CL_DEVICE_MAX_CONSTANT_ARGS                      0x1021
+#define CL_DEVICE_LOCAL_MEM_TYPE                         0x1022
+#define CL_DEVICE_LOCAL_MEM_SIZE                         0x1023
+#define CL_DEVICE_ERROR_CORRECTION_SUPPORT               0x1024
+#define CL_DEVICE_PROFILING_TIMER_RESOLUTION             0x1025
+#define CL_DEVICE_ENDIAN_LITTLE                          0x1026
+#define CL_DEVICE_AVAILABLE                              0x1027
+#define CL_DEVICE_COMPILER_AVAILABLE                     0x1028
+#define CL_DEVICE_EXECUTION_CAPABILITIES                 0x1029
+#define CL_DEVICE_QUEUE_PROPERTIES                       0x102A    /* deprecated */
+#define CL_DEVICE_QUEUE_ON_HOST_PROPERTIES               0x102A
+#define CL_DEVICE_NAME                                   0x102B
+#define CL_DEVICE_VENDOR                                 0x102C
+#define CL_DRIVER_VERSION                                0x102D
+#define CL_DEVICE_PROFILE                                0x102E
+#define CL_DEVICE_VERSION                                0x102F
+#define CL_DEVICE_EXTENSIONS                             0x1030
+#define CL_DEVICE_PLATFORM                               0x1031
+#define CL_DEVICE_DOUBLE_FP_CONFIG                       0x1032
+/* 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG which is already defined in "cl_ext.h" */
+#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF            0x1034
+#define CL_DEVICE_HOST_UNIFIED_MEMORY                    0x1035   /* deprecated */
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR               0x1036
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT              0x1037
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT                0x1038
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG               0x1039
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT              0x103A
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE             0x103B
+#define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF               0x103C
+#define CL_DEVICE_OPENCL_C_VERSION                       0x103D
+#define CL_DEVICE_LINKER_AVAILABLE                       0x103E
+#define CL_DEVICE_BUILT_IN_KERNELS                       0x103F
+#define CL_DEVICE_IMAGE_MAX_BUFFER_SIZE                  0x1040
+#define CL_DEVICE_IMAGE_MAX_ARRAY_SIZE                   0x1041
+#define CL_DEVICE_PARENT_DEVICE                          0x1042
+#define CL_DEVICE_PARTITION_MAX_SUB_DEVICES              0x1043
+#define CL_DEVICE_PARTITION_PROPERTIES                   0x1044
+#define CL_DEVICE_PARTITION_AFFINITY_DOMAIN              0x1045
+#define CL_DEVICE_PARTITION_TYPE                         0x1046
+#define CL_DEVICE_REFERENCE_COUNT                        0x1047
+#define CL_DEVICE_PREFERRED_INTEROP_USER_SYNC            0x1048
+#define CL_DEVICE_PRINTF_BUFFER_SIZE                     0x1049
+#define CL_DEVICE_IMAGE_PITCH_ALIGNMENT                  0x104A
+#define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT           0x104B
+#define CL_DEVICE_MAX_READ_WRITE_IMAGE_ARGS              0x104C
+#define CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE               0x104D
+#define CL_DEVICE_QUEUE_ON_DEVICE_PROPERTIES             0x104E
+#define CL_DEVICE_QUEUE_ON_DEVICE_PREFERRED_SIZE         0x104F
+#define CL_DEVICE_QUEUE_ON_DEVICE_MAX_SIZE               0x1050
+#define CL_DEVICE_MAX_ON_DEVICE_QUEUES                   0x1051
+#define CL_DEVICE_MAX_ON_DEVICE_EVENTS                   0x1052
+#define CL_DEVICE_SVM_CAPABILITIES                       0x1053
+#define CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE   0x1054
+#define CL_DEVICE_MAX_PIPE_ARGS                          0x1055
+#define CL_DEVICE_PIPE_MAX_ACTIVE_RESERVATIONS           0x1056
+#define CL_DEVICE_PIPE_MAX_PACKET_SIZE                   0x1057
+#define CL_DEVICE_PREFERRED_PLATFORM_ATOMIC_ALIGNMENT    0x1058
+#define CL_DEVICE_PREFERRED_GLOBAL_ATOMIC_ALIGNMENT      0x1059
+#define CL_DEVICE_PREFERRED_LOCAL_ATOMIC_ALIGNMENT       0x105A
+#define CL_DEVICE_IL_VERSION                             0x105B
+#define CL_DEVICE_MAX_NUM_SUB_GROUPS                     0x105C
+#define CL_DEVICE_SUB_GROUP_INDEPENDENT_FORWARD_PROGRESS 0x105D
+#define CL_DEVICE_NUMERIC_VERSION                        0x105E
+#define CL_DEVICE_EXTENSIONS_WITH_VERSION                0x1060
+#define CL_DEVICE_ILS_WITH_VERSION                       0x1061
+#define CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION          0x1062
+#define CL_DEVICE_ATOMIC_MEMORY_CAPABILITIES             0x1063
+#define CL_DEVICE_ATOMIC_FENCE_CAPABILITIES              0x1064
+#define CL_DEVICE_NON_UNIFORM_WORK_GROUP_SUPPORT         0x1065
+#define CL_DEVICE_OPENCL_C_ALL_VERSIONS                  0x1066
+#define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_MULTIPLE     0x1067
+#define CL_DEVICE_WORK_GROUP_COLLECTIVE_FUNCTIONS_SUPPORT 0x1068
+#define CL_DEVICE_GENERIC_ADDRESS_SPACE_SUPPORT          0x1069
+/* 0x106A to 0x106E - Reserved for upcoming KHR extension */
+#define CL_DEVICE_OPENCL_C_FEATURES                      0x106F
+#define CL_DEVICE_DEVICE_ENQUEUE_CAPABILITIES            0x1070
+#define CL_DEVICE_PIPE_SUPPORT                           0x1071
+#define CL_DEVICE_LATEST_CONFORMANCE_VERSION_PASSED      0x1072
+
+/* cl_device_fp_config - bitfield */
+#define CL_FP_DENORM                                (1 << 0)
+#define CL_FP_INF_NAN                               (1 << 1)
+#define CL_FP_ROUND_TO_NEAREST                      (1 << 2)
+#define CL_FP_ROUND_TO_ZERO                         (1 << 3)
+#define CL_FP_ROUND_TO_INF                          (1 << 4)
+#define CL_FP_FMA                                   (1 << 5)
+#define CL_FP_SOFT_FLOAT                            (1 << 6)
+#define CL_FP_CORRECTLY_ROUNDED_DIVIDE_SQRT         (1 << 7)
+
+/* cl_device_mem_cache_type */
+#define CL_NONE                                     0x0
+#define CL_READ_ONLY_CACHE                          0x1
+#define CL_READ_WRITE_CACHE                         0x2
+
+/* cl_device_local_mem_type */
+#define CL_LOCAL                                    0x1
+#define CL_GLOBAL                                   0x2
+
+/* cl_device_exec_capabilities - bitfield */
+#define CL_EXEC_KERNEL                              (1 << 0)
+#define CL_EXEC_NATIVE_KERNEL                       (1 << 1)
+
+/* cl_command_queue_properties - bitfield */
+#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE      (1 << 0)
+#define CL_QUEUE_PROFILING_ENABLE                   (1 << 1)
+#define CL_QUEUE_ON_DEVICE                          (1 << 2)
+#define CL_QUEUE_ON_DEVICE_DEFAULT                  (1 << 3)
+
+/* cl_context_info */
+#define CL_CONTEXT_REFERENCE_COUNT                  0x1080
+#define CL_CONTEXT_DEVICES                          0x1081
+#define CL_CONTEXT_PROPERTIES                       0x1082
+#define CL_CONTEXT_NUM_DEVICES                      0x1083
+
+/* cl_context_properties */
+#define CL_CONTEXT_PLATFORM                         0x1084
+#define CL_CONTEXT_INTEROP_USER_SYNC                0x1085
+
+/* cl_device_partition_property */
+#define CL_DEVICE_PARTITION_EQUALLY                 0x1086
+#define CL_DEVICE_PARTITION_BY_COUNTS               0x1087
+#define CL_DEVICE_PARTITION_BY_COUNTS_LIST_END      0x0
+#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN      0x1088
+
+/* cl_device_affinity_domain */
+#define CL_DEVICE_AFFINITY_DOMAIN_NUMA               (1 << 0)
+#define CL_DEVICE_AFFINITY_DOMAIN_L4_CACHE           (1 << 1)
+#define CL_DEVICE_AFFINITY_DOMAIN_L3_CACHE           (1 << 2)
+#define CL_DEVICE_AFFINITY_DOMAIN_L2_CACHE           (1 << 3)
+#define CL_DEVICE_AFFINITY_DOMAIN_L1_CACHE           (1 << 4)
+#define CL_DEVICE_AFFINITY_DOMAIN_NEXT_PARTITIONABLE (1 << 5)
+
+/* cl_device_svm_capabilities */
+#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER           (1 << 0)
+#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER             (1 << 1)
+#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM             (1 << 2)
+#define CL_DEVICE_SVM_ATOMICS                       (1 << 3)
+
+/* cl_command_queue_info */
+#define CL_QUEUE_CONTEXT                            0x1090
+#define CL_QUEUE_DEVICE                             0x1091
+#define CL_QUEUE_REFERENCE_COUNT                    0x1092
+#define CL_QUEUE_PROPERTIES                         0x1093
+#define CL_QUEUE_SIZE                               0x1094
+#define CL_QUEUE_DEVICE_DEFAULT                     0x1095
+#define CL_QUEUE_PROPERTIES_ARRAY                   0x1098
+
+/* cl_mem_flags and cl_svm_mem_flags - bitfield */
+#define CL_MEM_READ_WRITE                           (1 << 0)
+#define CL_MEM_WRITE_ONLY                           (1 << 1)
+#define CL_MEM_READ_ONLY                            (1 << 2)
+#define CL_MEM_USE_HOST_PTR                         (1 << 3)
+#define CL_MEM_ALLOC_HOST_PTR                       (1 << 4)
+#define CL_MEM_COPY_HOST_PTR                        (1 << 5)
+/* reserved                                         (1 << 6)    */
+#define CL_MEM_HOST_WRITE_ONLY                      (1 << 7)
+#define CL_MEM_HOST_READ_ONLY                       (1 << 8)
+#define CL_MEM_HOST_NO_ACCESS                       (1 << 9)
+#define CL_MEM_SVM_FINE_GRAIN_BUFFER                (1 << 10)   /* used by cl_svm_mem_flags only */
+#define CL_MEM_SVM_ATOMICS                          (1 << 11)   /* used by cl_svm_mem_flags only */
+#define CL_MEM_KERNEL_READ_AND_WRITE                (1 << 12)
+
+/* cl_mem_migration_flags - bitfield */
+#define CL_MIGRATE_MEM_OBJECT_HOST                  (1 << 0)
+#define CL_MIGRATE_MEM_OBJECT_CONTENT_UNDEFINED     (1 << 1)
+
+/* cl_channel_order */
+#define CL_R                                        0x10B0
+#define CL_A                                        0x10B1
+#define CL_RG                                       0x10B2
+#define CL_RA                                       0x10B3
+#define CL_RGB                                      0x10B4
+#define CL_RGBA                                     0x10B5
+#define CL_BGRA                                     0x10B6
+#define CL_ARGB                                     0x10B7
+#define CL_INTENSITY                                0x10B8
+#define CL_LUMINANCE                                0x10B9
+#define CL_Rx                                       0x10BA
+#define CL_RGx                                      0x10BB
+#define CL_RGBx                                     0x10BC
+#define CL_DEPTH                                    0x10BD
+#define CL_DEPTH_STENCIL                            0x10BE
+#define CL_sRGB                                     0x10BF
+#define CL_sRGBx                                    0x10C0
+#define CL_sRGBA                                    0x10C1
+#define CL_sBGRA                                    0x10C2
+#define CL_ABGR                                     0x10C3
+
+/* cl_channel_type */
+#define CL_SNORM_INT8                               0x10D0
+#define CL_SNORM_INT16                              0x10D1
+#define CL_UNORM_INT8                               0x10D2
+#define CL_UNORM_INT16                              0x10D3
+#define CL_UNORM_SHORT_565                          0x10D4
+#define CL_UNORM_SHORT_555                          0x10D5
+#define CL_UNORM_INT_101010                         0x10D6
+#define CL_SIGNED_INT8                              0x10D7
+#define CL_SIGNED_INT16                             0x10D8
+#define CL_SIGNED_INT32                             0x10D9
+#define CL_UNSIGNED_INT8                            0x10DA
+#define CL_UNSIGNED_INT16                           0x10DB
+#define CL_UNSIGNED_INT32                           0x10DC
+#define CL_HALF_FLOAT                               0x10DD
+#define CL_FLOAT                                    0x10DE
+#define CL_UNORM_INT24                              0x10DF
+#define CL_UNORM_INT_101010_2                       0x10E0
+
+/* cl_mem_object_type */
+#define CL_MEM_OBJECT_BUFFER                        0x10F0
+#define CL_MEM_OBJECT_IMAGE2D                       0x10F1
+#define CL_MEM_OBJECT_IMAGE3D                       0x10F2
+#define CL_MEM_OBJECT_IMAGE2D_ARRAY                 0x10F3
+#define CL_MEM_OBJECT_IMAGE1D                       0x10F4
+#define CL_MEM_OBJECT_IMAGE1D_ARRAY                 0x10F5
+#define CL_MEM_OBJECT_IMAGE1D_BUFFER                0x10F6
+#define CL_MEM_OBJECT_PIPE                          0x10F7
+
+/* cl_mem_info */
+#define CL_MEM_TYPE                                 0x1100
+#define CL_MEM_FLAGS                                0x1101
+#define CL_MEM_SIZE                                 0x1102
+#define CL_MEM_HOST_PTR                             0x1103
+#define CL_MEM_MAP_COUNT                            0x1104
+#define CL_MEM_REFERENCE_COUNT                      0x1105
+#define CL_MEM_CONTEXT                              0x1106
+#define CL_MEM_ASSOCIATED_MEMOBJECT                 0x1107
+#define CL_MEM_OFFSET                               0x1108
+#define CL_MEM_USES_SVM_POINTER                     0x1109
+#define CL_MEM_PROPERTIES                           0x110A
+
+/* cl_image_info */
+#define CL_IMAGE_FORMAT                             0x1110
+#define CL_IMAGE_ELEMENT_SIZE                       0x1111
+#define CL_IMAGE_ROW_PITCH                          0x1112
+#define CL_IMAGE_SLICE_PITCH                        0x1113
+#define CL_IMAGE_WIDTH                              0x1114
+#define CL_IMAGE_HEIGHT                             0x1115
+#define CL_IMAGE_DEPTH                              0x1116
+#define CL_IMAGE_ARRAY_SIZE                         0x1117
+#define CL_IMAGE_BUFFER                             0x1118
+#define CL_IMAGE_NUM_MIP_LEVELS                     0x1119
+#define CL_IMAGE_NUM_SAMPLES                        0x111A
+
+/* cl_pipe_info */
+#define CL_PIPE_PACKET_SIZE                         0x1120
+#define CL_PIPE_MAX_PACKETS                         0x1121
+#define CL_PIPE_PROPERTIES                          0x1122
+
+/* cl_addressing_mode */
+#define CL_ADDRESS_NONE                             0x1130
+#define CL_ADDRESS_CLAMP_TO_EDGE                    0x1131
+#define CL_ADDRESS_CLAMP                            0x1132
+#define CL_ADDRESS_REPEAT                           0x1133
+#define CL_ADDRESS_MIRRORED_REPEAT                  0x1134
+
+/* cl_filter_mode */
+#define CL_FILTER_NEAREST                           0x1140
+#define CL_FILTER_LINEAR                            0x1141
+
+/* cl_sampler_info */
+#define CL_SAMPLER_REFERENCE_COUNT                  0x1150
+#define CL_SAMPLER_CONTEXT                          0x1151
+#define CL_SAMPLER_NORMALIZED_COORDS                0x1152
+#define CL_SAMPLER_ADDRESSING_MODE                  0x1153
+#define CL_SAMPLER_FILTER_MODE                      0x1154
+/* These enumerants are for the cl_khr_mipmap_image extension.
+   They have since been added to cl_ext.h with an appropriate
+   KHR suffix, but are left here for backwards compatibility. */
+#define CL_SAMPLER_MIP_FILTER_MODE                  0x1155
+#define CL_SAMPLER_LOD_MIN                          0x1156
+#define CL_SAMPLER_LOD_MAX                          0x1157
+#define CL_SAMPLER_PROPERTIES                       0x1158
+
+/* cl_map_flags - bitfield */
+#define CL_MAP_READ                                 (1 << 0)
+#define CL_MAP_WRITE                                (1 << 1)
+#define CL_MAP_WRITE_INVALIDATE_REGION              (1 << 2)
+
+/* cl_program_info */
+#define CL_PROGRAM_REFERENCE_COUNT                  0x1160
+#define CL_PROGRAM_CONTEXT                          0x1161
+#define CL_PROGRAM_NUM_DEVICES                      0x1162
+#define CL_PROGRAM_DEVICES                          0x1163
+#define CL_PROGRAM_SOURCE                           0x1164
+#define CL_PROGRAM_BINARY_SIZES                     0x1165
+#define CL_PROGRAM_BINARIES                         0x1166
+#define CL_PROGRAM_NUM_KERNELS                      0x1167
+#define CL_PROGRAM_KERNEL_NAMES                     0x1168
+#define CL_PROGRAM_IL                               0x1169
+#define CL_PROGRAM_SCOPE_GLOBAL_CTORS_PRESENT       0x116A
+#define CL_PROGRAM_SCOPE_GLOBAL_DTORS_PRESENT       0x116B
+
+/* cl_program_build_info */
+#define CL_PROGRAM_BUILD_STATUS                     0x1181
+#define CL_PROGRAM_BUILD_OPTIONS                    0x1182
+#define CL_PROGRAM_BUILD_LOG                        0x1183
+#define CL_PROGRAM_BINARY_TYPE                      0x1184
+#define CL_PROGRAM_BUILD_GLOBAL_VARIABLE_TOTAL_SIZE 0x1185
+
+/* cl_program_binary_type */
+#define CL_PROGRAM_BINARY_TYPE_NONE                 0x0
+#define CL_PROGRAM_BINARY_TYPE_COMPILED_OBJECT      0x1
+#define CL_PROGRAM_BINARY_TYPE_LIBRARY              0x2
+#define CL_PROGRAM_BINARY_TYPE_EXECUTABLE           0x4
+
+/* cl_build_status */
+#define CL_BUILD_SUCCESS                            0
+#define CL_BUILD_NONE                               -1
+#define CL_BUILD_ERROR                              -2
+#define CL_BUILD_IN_PROGRESS                        -3
+
+/* cl_kernel_info */
+#define CL_KERNEL_FUNCTION_NAME                     0x1190
+#define CL_KERNEL_NUM_ARGS                          0x1191
+#define CL_KERNEL_REFERENCE_COUNT                   0x1192
+#define CL_KERNEL_CONTEXT                           0x1193
+#define CL_KERNEL_PROGRAM                           0x1194
+#define CL_KERNEL_ATTRIBUTES                        0x1195
+
+/* cl_kernel_arg_info */
+#define CL_KERNEL_ARG_ADDRESS_QUALIFIER             0x1196
+#define CL_KERNEL_ARG_ACCESS_QUALIFIER              0x1197
+#define CL_KERNEL_ARG_TYPE_NAME                     0x1198
+#define CL_KERNEL_ARG_TYPE_QUALIFIER                0x1199
+#define CL_KERNEL_ARG_NAME                          0x119A
+
+/* cl_kernel_arg_address_qualifier */
+#define CL_KERNEL_ARG_ADDRESS_GLOBAL                0x119B
+#define CL_KERNEL_ARG_ADDRESS_LOCAL                 0x119C
+#define CL_KERNEL_ARG_ADDRESS_CONSTANT              0x119D
+#define CL_KERNEL_ARG_ADDRESS_PRIVATE               0x119E
+
+/* cl_kernel_arg_access_qualifier */
+#define CL_KERNEL_ARG_ACCESS_READ_ONLY              0x11A0
+#define CL_KERNEL_ARG_ACCESS_WRITE_ONLY             0x11A1
+#define CL_KERNEL_ARG_ACCESS_READ_WRITE             0x11A2
+#define CL_KERNEL_ARG_ACCESS_NONE                   0x11A3
+
+/* cl_kernel_arg_type_qualifier */
+#define CL_KERNEL_ARG_TYPE_NONE                     0
+#define CL_KERNEL_ARG_TYPE_CONST                    (1 << 0)
+#define CL_KERNEL_ARG_TYPE_RESTRICT                 (1 << 1)
+#define CL_KERNEL_ARG_TYPE_VOLATILE                 (1 << 2)
+#define CL_KERNEL_ARG_TYPE_PIPE                     (1 << 3)
+
+/* cl_kernel_work_group_info */
+#define CL_KERNEL_WORK_GROUP_SIZE                   0x11B0
+#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE           0x11B1
+#define CL_KERNEL_LOCAL_MEM_SIZE                    0x11B2
+#define CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x11B3
+#define CL_KERNEL_PRIVATE_MEM_SIZE                  0x11B4
+#define CL_KERNEL_GLOBAL_WORK_SIZE                  0x11B5
+
+/* cl_kernel_sub_group_info */
+#define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE    0x2033
+#define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE       0x2034
+#define CL_KERNEL_LOCAL_SIZE_FOR_SUB_GROUP_COUNT    0x11B8
+#define CL_KERNEL_MAX_NUM_SUB_GROUPS                0x11B9
+#define CL_KERNEL_COMPILE_NUM_SUB_GROUPS            0x11BA
+
+/* cl_kernel_exec_info */
+#define CL_KERNEL_EXEC_INFO_SVM_PTRS                0x11B6
+#define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM   0x11B7
+
+/* cl_event_info */
+#define CL_EVENT_COMMAND_QUEUE                      0x11D0
+#define CL_EVENT_COMMAND_TYPE                       0x11D1
+#define CL_EVENT_REFERENCE_COUNT                    0x11D2
+#define CL_EVENT_COMMAND_EXECUTION_STATUS           0x11D3
+#define CL_EVENT_CONTEXT                            0x11D4
+
+/* cl_command_type */
+#define CL_COMMAND_NDRANGE_KERNEL                   0x11F0
+#define CL_COMMAND_TASK                             0x11F1
+#define CL_COMMAND_NATIVE_KERNEL                    0x11F2
+#define CL_COMMAND_READ_BUFFER                      0x11F3
+#define CL_COMMAND_WRITE_BUFFER                     0x11F4
+#define CL_COMMAND_COPY_BUFFER                      0x11F5
+#define CL_COMMAND_READ_IMAGE                       0x11F6
+#define CL_COMMAND_WRITE_IMAGE                      0x11F7
+#define CL_COMMAND_COPY_IMAGE                       0x11F8
+#define CL_COMMAND_COPY_IMAGE_TO_BUFFER             0x11F9
+#define CL_COMMAND_COPY_BUFFER_TO_IMAGE             0x11FA
+#define CL_COMMAND_MAP_BUFFER                       0x11FB
+#define CL_COMMAND_MAP_IMAGE                        0x11FC
+#define CL_COMMAND_UNMAP_MEM_OBJECT                 0x11FD
+#define CL_COMMAND_MARKER                           0x11FE
+#define CL_COMMAND_ACQUIRE_GL_OBJECTS               0x11FF
+#define CL_COMMAND_RELEASE_GL_OBJECTS               0x1200
+#define CL_COMMAND_READ_BUFFER_RECT                 0x1201
+#define CL_COMMAND_WRITE_BUFFER_RECT                0x1202
+#define CL_COMMAND_COPY_BUFFER_RECT                 0x1203
+#define CL_COMMAND_USER                             0x1204
+#define CL_COMMAND_BARRIER                          0x1205
+#define CL_COMMAND_MIGRATE_MEM_OBJECTS              0x1206
+#define CL_COMMAND_FILL_BUFFER                      0x1207
+#define CL_COMMAND_FILL_IMAGE                       0x1208
+#define CL_COMMAND_SVM_FREE                         0x1209
+#define CL_COMMAND_SVM_MEMCPY                       0x120A
+#define CL_COMMAND_SVM_MEMFILL                      0x120B
+#define CL_COMMAND_SVM_MAP                          0x120C
+#define CL_COMMAND_SVM_UNMAP                        0x120D
+#define CL_COMMAND_SVM_MIGRATE_MEM                  0x120E
+
+/* command execution status */
+#define CL_COMPLETE                                 0x0
+#define CL_RUNNING                                  0x1
+#define CL_SUBMITTED                                0x2
+#define CL_QUEUED                                   0x3
+
+/* cl_buffer_create_type */
+#define CL_BUFFER_CREATE_TYPE_REGION                0x1220
+
+/* cl_profiling_info */
+#define CL_PROFILING_COMMAND_QUEUED                 0x1280
+#define CL_PROFILING_COMMAND_SUBMIT                 0x1281
+#define CL_PROFILING_COMMAND_START                  0x1282
+#define CL_PROFILING_COMMAND_END                    0x1283
+#define CL_PROFILING_COMMAND_COMPLETE               0x1284
+
+/* cl_device_atomic_capabilities - bitfield */
+#define CL_DEVICE_ATOMIC_ORDER_RELAXED          (1 << 0)
+#define CL_DEVICE_ATOMIC_ORDER_ACQ_REL          (1 << 1)
+#define CL_DEVICE_ATOMIC_ORDER_SEQ_CST          (1 << 2)
+#define CL_DEVICE_ATOMIC_SCOPE_WORK_ITEM        (1 << 3)
+#define CL_DEVICE_ATOMIC_SCOPE_WORK_GROUP       (1 << 4)
+#define CL_DEVICE_ATOMIC_SCOPE_DEVICE           (1 << 5)
+#define CL_DEVICE_ATOMIC_SCOPE_ALL_DEVICES      (1 << 6)
+
+/* cl_device_device_enqueue_capabilities - bitfield */
+#define CL_DEVICE_QUEUE_SUPPORTED               (1 << 0)
+#define CL_DEVICE_QUEUE_REPLACEABLE_DEFAULT     (1 << 1)
+
+/* cl_khronos_vendor_id */
+#define CL_KHRONOS_VENDOR_ID_CODEPLAY               0x10004
+
+/* cl_version */
+#define CL_VERSION_MAJOR_BITS (10)
+#define CL_VERSION_MINOR_BITS (10)
+#define CL_VERSION_PATCH_BITS (12)
+
+#define CL_VERSION_MAJOR_MASK ((1 << CL_VERSION_MAJOR_BITS) - 1)
+#define CL_VERSION_MINOR_MASK ((1 << CL_VERSION_MINOR_BITS) - 1)
+#define CL_VERSION_PATCH_MASK ((1 << CL_VERSION_PATCH_BITS) - 1)
+
+#define CL_VERSION_MAJOR(version) \
+  ((version) >> (CL_VERSION_MINOR_BITS + CL_VERSION_PATCH_BITS))
+
+#define CL_VERSION_MINOR(version) \
+  (((version) >> CL_VERSION_PATCH_BITS) & CL_VERSION_MINOR_MASK)
+
+#define CL_VERSION_PATCH(version) ((version) & CL_VERSION_PATCH_MASK)
+
+#define CL_MAKE_VERSION(major, minor, patch)                      \
+  ((((major) & CL_VERSION_MAJOR_MASK)                             \
+       << (CL_VERSION_MINOR_BITS + CL_VERSION_PATCH_BITS)) |      \
+   (((minor) & CL_VERSION_MINOR_MASK) << CL_VERSION_PATCH_BITS) | \
+   ((patch) & CL_VERSION_PATCH_MASK))
+
+/********************************************************************************************************/
+
+/* Platform API */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetPlatformIDs(cl_uint          num_entries,
+                 cl_platform_id * platforms,
+                 cl_uint *        num_platforms) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetPlatformInfo(cl_platform_id   platform,
+                  cl_platform_info param_name,
+                  size_t           param_value_size,
+                  void *           param_value,
+                  size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+/* Device APIs */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceIDs(cl_platform_id   platform,
+               cl_device_type   device_type,
+               cl_uint          num_entries,
+               cl_device_id *   devices,
+               cl_uint *        num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceInfo(cl_device_id    device,
+                cl_device_info  param_name,
+                size_t          param_value_size,
+                void *          param_value,
+                size_t *        param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clCreateSubDevices(cl_device_id                         in_device,
+                   const cl_device_partition_property * properties,
+                   cl_uint                              num_devices,
+                   cl_device_id *                       out_devices,
+                   cl_uint *                            num_devices_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseDevice(cl_device_id device) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetDefaultDeviceCommandQueue(cl_context           context,
+                               cl_device_id         device,
+                               cl_command_queue     command_queue) CL_API_SUFFIX__VERSION_2_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceAndHostTimer(cl_device_id    device,
+                        cl_ulong*       device_timestamp,
+                        cl_ulong*       host_timestamp) CL_API_SUFFIX__VERSION_2_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetHostTimer(cl_device_id device,
+               cl_ulong *   host_timestamp) CL_API_SUFFIX__VERSION_2_1;
+
+/* Context APIs */
+extern CL_API_ENTRY cl_context CL_API_CALL
+clCreateContext(const cl_context_properties * properties,
+                cl_uint              num_devices,
+                const cl_device_id * devices,
+                void (CL_CALLBACK * pfn_notify)(const char * errinfo,
+                                                const void * private_info,
+                                                size_t       cb,
+                                                void *       user_data),
+                void *               user_data,
+                cl_int *             errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_context CL_API_CALL
+clCreateContextFromType(const cl_context_properties * properties,
+                        cl_device_type      device_type,
+                        void (CL_CALLBACK * pfn_notify)(const char * errinfo,
+                                                        const void * private_info,
+                                                        size_t       cb,
+                                                        void *       user_data),
+                        void *              user_data,
+                        cl_int *            errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainContext(cl_context context) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseContext(cl_context context) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetContextInfo(cl_context         context,
+                 cl_context_info    param_name,
+                 size_t             param_value_size,
+                 void *             param_value,
+                 size_t *           param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetContextDestructorCallback(cl_context         context,
+                               void (CL_CALLBACK* pfn_notify)(cl_context context,
+                                                              void* user_data),
+                               void*              user_data) CL_API_SUFFIX__VERSION_3_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueTask(cl_command_queue  command_queue,
+              cl_kernel         kernel,
+              cl_uint           num_events_in_wait_list,
+              const cl_event *  event_wait_list,
+              cl_event *        event) CL_API_SUFFIX__VERSION_1_0;
+
+/* Command Queue APIs */
+extern CL_API_ENTRY cl_command_queue CL_API_CALL
+clCreateCommandQueue(cl_context                     context,
+                     cl_device_id                   device,
+                     cl_command_queue_properties    properties,
+                     cl_int *                       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_command_queue CL_API_CALL
+clCreateCommandQueueWithProperties(cl_context               context,
+                                   cl_device_id             device,
+                                   const cl_queue_properties *    properties,
+                                   cl_int *                 errcode_ret) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseCommandQueue(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetCommandQueueInfo(cl_command_queue      command_queue,
+                      cl_command_queue_info param_name,
+                      size_t                param_value_size,
+                      void *                param_value,
+                      size_t *              param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+/* Memory Object APIs */
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBuffer(cl_context   context,
+               cl_mem_flags flags,
+               size_t       size,
+               void *       host_ptr,
+               cl_int *     errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateSubBuffer(cl_mem                   buffer,
+                  cl_mem_flags             flags,
+                  cl_buffer_create_type    buffer_create_type,
+                  const void *             buffer_create_info,
+                  cl_int *                 errcode_ret) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImage(cl_context              context,
+              cl_mem_flags            flags,
+              const cl_image_format * image_format,
+              const cl_image_desc *   image_desc,
+              void *                  host_ptr,
+              cl_int *                errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreatePipe(cl_context                 context,
+             cl_mem_flags               flags,
+             cl_uint                    pipe_packet_size,
+             cl_uint                    pipe_max_packets,
+             const cl_pipe_properties * properties,
+             cl_int *                   errcode_ret) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBufferWithProperties(cl_context                context,
+                             const cl_mem_properties * properties,
+                             cl_mem_flags              flags,
+                             size_t                    size,
+                             void *                    host_ptr,
+                             cl_int *                  errcode_ret) CL_API_SUFFIX__VERSION_3_0;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImageWithProperties(cl_context                context,
+                            const cl_mem_properties * properties,
+                            cl_mem_flags              flags,
+                            const cl_image_format *   image_format,
+                            const cl_image_desc *     image_desc,
+                            void *                    host_ptr,
+                            cl_int *                  errcode_ret) CL_API_SUFFIX__VERSION_3_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseMemObject(cl_mem memobj) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetSupportedImageFormats(cl_context           context,
+                           cl_mem_flags         flags,
+                           cl_mem_object_type   image_type,
+                           cl_uint              num_entries,
+                           cl_image_format *    image_formats,
+                           cl_uint *            num_image_formats) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetMemObjectInfo(cl_mem           memobj,
+                   cl_mem_info      param_name,
+                   size_t           param_value_size,
+                   void *           param_value,
+                   size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetImageInfo(cl_mem           image,
+               cl_image_info    param_name,
+               size_t           param_value_size,
+               void *           param_value,
+               size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetPipeInfo(cl_mem           pipe,
+              cl_pipe_info     param_name,
+              size_t           param_value_size,
+              void *           param_value,
+              size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetMemObjectDestructorCallback(cl_mem memobj,
+                                 void (CL_CALLBACK * pfn_notify)(cl_mem memobj,
+                                                                 void * user_data),
+                                 void * user_data) CL_API_SUFFIX__VERSION_1_1;
+
+/* SVM Allocation APIs */
+extern CL_API_ENTRY void * CL_API_CALL
+clSVMAlloc(cl_context       context,
+           cl_svm_mem_flags flags,
+           size_t           size,
+           cl_uint          alignment) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY void CL_API_CALL
+clSVMFree(cl_context        context,
+          void *            svm_pointer) CL_API_SUFFIX__VERSION_2_0;
+
+/* Sampler APIs */
+extern CL_API_ENTRY cl_sampler CL_API_CALL
+clCreateSampler(cl_context          context,
+                cl_bool             normalized_coords,
+                cl_addressing_mode  addressing_mode,
+                cl_filter_mode      filter_mode,
+                cl_int *            errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_sampler CL_API_CALL
+clCreateSamplerWithProperties(cl_context                     context,
+                              const cl_sampler_properties *  sampler_properties,
+                              cl_int *                       errcode_ret) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseSampler(cl_sampler sampler) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetSamplerInfo(cl_sampler         sampler,
+                 cl_sampler_info    param_name,
+                 size_t             param_value_size,
+                 void *             param_value,
+                 size_t *           param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+/* Program Object APIs */
+extern CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithSource(cl_context        context,
+                          cl_uint           count,
+                          const char **     strings,
+                          const size_t *    lengths,
+                          cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithBinary(cl_context                     context,
+                          cl_uint                        num_devices,
+                          const cl_device_id *           device_list,
+                          const size_t *                 lengths,
+                          const unsigned char **         binaries,
+                          cl_int *                       binary_status,
+                          cl_int *                       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithBuiltInKernels(cl_context            context,
+                                  cl_uint               num_devices,
+                                  const cl_device_id *  device_list,
+                                  const char *          kernel_names,
+                                  cl_int *              errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithIL(cl_context    context,
+                     const void*    il,
+                     size_t         length,
+                     cl_int*        errcode_ret) CL_API_SUFFIX__VERSION_2_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseProgram(cl_program program) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clBuildProgram(cl_program           program,
+               cl_uint              num_devices,
+               const cl_device_id * device_list,
+               const char *         options,
+               void (CL_CALLBACK *  pfn_notify)(cl_program program,
+                                                void * user_data),
+               void *               user_data) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clCompileProgram(cl_program           program,
+                 cl_uint              num_devices,
+                 const cl_device_id * device_list,
+                 const char *         options,
+                 cl_uint              num_input_headers,
+                 const cl_program *   input_headers,
+                 const char **        header_include_names,
+                 void (CL_CALLBACK *  pfn_notify)(cl_program program,
+                                                  void * user_data),
+                 void *               user_data) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_program CL_API_CALL
+clLinkProgram(cl_context           context,
+              cl_uint              num_devices,
+              const cl_device_id * device_list,
+              const char *         options,
+              cl_uint              num_input_programs,
+              const cl_program *   input_programs,
+              void (CL_CALLBACK *  pfn_notify)(cl_program program,
+                                               void * user_data),
+              void *               user_data,
+              cl_int *             errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_2_2_DEPRECATED cl_int CL_API_CALL
+clSetProgramReleaseCallback(cl_program          program,
+                            void (CL_CALLBACK * pfn_notify)(cl_program program,
+                                                            void * user_data),
+                            void *              user_data) CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetProgramSpecializationConstant(cl_program  program,
+                                   cl_uint     spec_id,
+                                   size_t      spec_size,
+                                   const void* spec_value) CL_API_SUFFIX__VERSION_2_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetProgramInfo(cl_program         program,
+                 cl_program_info    param_name,
+                 size_t             param_value_size,
+                 void *             param_value,
+                 size_t *           param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetProgramBuildInfo(cl_program            program,
+                      cl_device_id          device,
+                      cl_program_build_info param_name,
+                      size_t                param_value_size,
+                      void *                param_value,
+                      size_t *              param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+/* Kernel Object APIs */
+extern CL_API_ENTRY cl_kernel CL_API_CALL
+clCreateKernel(cl_program      program,
+               const char *    kernel_name,
+               cl_int *        errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clCreateKernelsInProgram(cl_program     program,
+                         cl_uint        num_kernels,
+                         cl_kernel *    kernels,
+                         cl_uint *      num_kernels_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_kernel CL_API_CALL
+clCloneKernel(cl_kernel     source_kernel,
+              cl_int*       errcode_ret) CL_API_SUFFIX__VERSION_2_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainKernel(cl_kernel    kernel) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseKernel(cl_kernel   kernel) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelArg(cl_kernel    kernel,
+               cl_uint      arg_index,
+               size_t       arg_size,
+               const void * arg_value) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelArgSVMPointer(cl_kernel    kernel,
+                         cl_uint      arg_index,
+                         const void * arg_value) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelExecInfo(cl_kernel            kernel,
+                    cl_kernel_exec_info  param_name,
+                    size_t               param_value_size,
+                    const void *         param_value) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelInfo(cl_kernel       kernel,
+                cl_kernel_info  param_name,
+                size_t          param_value_size,
+                void *          param_value,
+                size_t *        param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelArgInfo(cl_kernel       kernel,
+                   cl_uint         arg_indx,
+                   cl_kernel_arg_info  param_name,
+                   size_t          param_value_size,
+                   void *          param_value,
+                   size_t *        param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelWorkGroupInfo(cl_kernel                  kernel,
+                         cl_device_id               device,
+                         cl_kernel_work_group_info  param_name,
+                         size_t                     param_value_size,
+                         void *                     param_value,
+                         size_t *                   param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelSubGroupInfo(cl_kernel                   kernel,
+                        cl_device_id                device,
+                        cl_kernel_sub_group_info    param_name,
+                        size_t                      input_value_size,
+                        const void*                 input_value,
+                        size_t                      param_value_size,
+                        void*                       param_value,
+                        size_t*                     param_value_size_ret) CL_API_SUFFIX__VERSION_2_1;
+
+/* Event Object APIs */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clWaitForEvents(cl_uint             num_events,
+                const cl_event *    event_list) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetEventInfo(cl_event         event,
+               cl_event_info    param_name,
+               size_t           param_value_size,
+               void *           param_value,
+               size_t *         param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_event CL_API_CALL
+clCreateUserEvent(cl_context    context,
+                  cl_int *      errcode_ret) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseEvent(cl_event event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetUserEventStatus(cl_event   event,
+                     cl_int     execution_status) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetEventCallback(cl_event    event,
+                   cl_int      command_exec_callback_type,
+                   void (CL_CALLBACK * pfn_notify)(cl_event event,
+                                                   cl_int   event_command_status,
+                                                   void *   user_data),
+                   void *      user_data) CL_API_SUFFIX__VERSION_1_1;
+
+/* Profiling APIs */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetEventProfilingInfo(cl_event            event,
+                        cl_profiling_info   param_name,
+                        size_t              param_value_size,
+                        void *              param_value,
+                        size_t *            param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+/* Flush and Finish APIs */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clFlush(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clFinish(cl_command_queue command_queue) CL_API_SUFFIX__VERSION_1_0;
+
+/* Enqueued Commands APIs */
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadBuffer(cl_command_queue    command_queue,
+                    cl_mem              buffer,
+                    cl_bool             blocking_read,
+                    size_t              offset,
+                    size_t              size,
+                    void *              ptr,
+                    cl_uint             num_events_in_wait_list,
+                    const cl_event *    event_wait_list,
+                    cl_event *          event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadBufferRect(cl_command_queue    command_queue,
+                        cl_mem              buffer,
+                        cl_bool             blocking_read,
+                        const size_t *      buffer_offset,
+                        const size_t *      host_offset,
+                        const size_t *      region,
+                        size_t              buffer_row_pitch,
+                        size_t              buffer_slice_pitch,
+                        size_t              host_row_pitch,
+                        size_t              host_slice_pitch,
+                        void *              ptr,
+                        cl_uint             num_events_in_wait_list,
+                        const cl_event *    event_wait_list,
+                        cl_event *          event) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteBuffer(cl_command_queue   command_queue,
+                     cl_mem             buffer,
+                     cl_bool            blocking_write,
+                     size_t             offset,
+                     size_t             size,
+                     const void *       ptr,
+                     cl_uint            num_events_in_wait_list,
+                     const cl_event *   event_wait_list,
+                     cl_event *         event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteBufferRect(cl_command_queue    command_queue,
+                         cl_mem              buffer,
+                         cl_bool             blocking_write,
+                         const size_t *      buffer_offset,
+                         const size_t *      host_offset,
+                         const size_t *      region,
+                         size_t              buffer_row_pitch,
+                         size_t              buffer_slice_pitch,
+                         size_t              host_row_pitch,
+                         size_t              host_slice_pitch,
+                         const void *        ptr,
+                         cl_uint             num_events_in_wait_list,
+                         const cl_event *    event_wait_list,
+                         cl_event *          event) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueFillBuffer(cl_command_queue   command_queue,
+                    cl_mem             buffer,
+                    const void *       pattern,
+                    size_t             pattern_size,
+                    size_t             offset,
+                    size_t             size,
+                    cl_uint            num_events_in_wait_list,
+                    const cl_event *   event_wait_list,
+                    cl_event *         event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBuffer(cl_command_queue    command_queue,
+                    cl_mem              src_buffer,
+                    cl_mem              dst_buffer,
+                    size_t              src_offset,
+                    size_t              dst_offset,
+                    size_t              size,
+                    cl_uint             num_events_in_wait_list,
+                    const cl_event *    event_wait_list,
+                    cl_event *          event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBufferRect(cl_command_queue    command_queue,
+                        cl_mem              src_buffer,
+                        cl_mem              dst_buffer,
+                        const size_t *      src_origin,
+                        const size_t *      dst_origin,
+                        const size_t *      region,
+                        size_t              src_row_pitch,
+                        size_t              src_slice_pitch,
+                        size_t              dst_row_pitch,
+                        size_t              dst_slice_pitch,
+                        cl_uint             num_events_in_wait_list,
+                        const cl_event *    event_wait_list,
+                        cl_event *          event) CL_API_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReadImage(cl_command_queue     command_queue,
+                   cl_mem               image,
+                   cl_bool              blocking_read,
+                   const size_t *       origin,
+                   const size_t *       region,
+                   size_t               row_pitch,
+                   size_t               slice_pitch,
+                   void *               ptr,
+                   cl_uint              num_events_in_wait_list,
+                   const cl_event *     event_wait_list,
+                   cl_event *           event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWriteImage(cl_command_queue    command_queue,
+                    cl_mem              image,
+                    cl_bool             blocking_write,
+                    const size_t *      origin,
+                    const size_t *      region,
+                    size_t              input_row_pitch,
+                    size_t              input_slice_pitch,
+                    const void *        ptr,
+                    cl_uint             num_events_in_wait_list,
+                    const cl_event *    event_wait_list,
+                    cl_event *          event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueFillImage(cl_command_queue   command_queue,
+                   cl_mem             image,
+                   const void *       fill_color,
+                   const size_t *     origin,
+                   const size_t *     region,
+                   cl_uint            num_events_in_wait_list,
+                   const cl_event *   event_wait_list,
+                   cl_event *         event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyImage(cl_command_queue     command_queue,
+                   cl_mem               src_image,
+                   cl_mem               dst_image,
+                   const size_t *       src_origin,
+                   const size_t *       dst_origin,
+                   const size_t *       region,
+                   cl_uint              num_events_in_wait_list,
+                   const cl_event *     event_wait_list,
+                   cl_event *           event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyImageToBuffer(cl_command_queue command_queue,
+                           cl_mem           src_image,
+                           cl_mem           dst_buffer,
+                           const size_t *   src_origin,
+                           const size_t *   region,
+                           size_t           dst_offset,
+                           cl_uint          num_events_in_wait_list,
+                           const cl_event * event_wait_list,
+                           cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueCopyBufferToImage(cl_command_queue command_queue,
+                           cl_mem           src_buffer,
+                           cl_mem           dst_image,
+                           size_t           src_offset,
+                           const size_t *   dst_origin,
+                           const size_t *   region,
+                           cl_uint          num_events_in_wait_list,
+                           const cl_event * event_wait_list,
+                           cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY void * CL_API_CALL
+clEnqueueMapBuffer(cl_command_queue command_queue,
+                   cl_mem           buffer,
+                   cl_bool          blocking_map,
+                   cl_map_flags     map_flags,
+                   size_t           offset,
+                   size_t           size,
+                   cl_uint          num_events_in_wait_list,
+                   const cl_event * event_wait_list,
+                   cl_event *       event,
+                   cl_int *         errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY void * CL_API_CALL
+clEnqueueMapImage(cl_command_queue  command_queue,
+                  cl_mem            image,
+                  cl_bool           blocking_map,
+                  cl_map_flags      map_flags,
+                  const size_t *    origin,
+                  const size_t *    region,
+                  size_t *          image_row_pitch,
+                  size_t *          image_slice_pitch,
+                  cl_uint           num_events_in_wait_list,
+                  const cl_event *  event_wait_list,
+                  cl_event *        event,
+                  cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueUnmapMemObject(cl_command_queue command_queue,
+                        cl_mem           memobj,
+                        void *           mapped_ptr,
+                        cl_uint          num_events_in_wait_list,
+                        const cl_event * event_wait_list,
+                        cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMigrateMemObjects(cl_command_queue       command_queue,
+                           cl_uint                num_mem_objects,
+                           const cl_mem *         mem_objects,
+                           cl_mem_migration_flags flags,
+                           cl_uint                num_events_in_wait_list,
+                           const cl_event *       event_wait_list,
+                           cl_event *             event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueNDRangeKernel(cl_command_queue command_queue,
+                       cl_kernel        kernel,
+                       cl_uint          work_dim,
+                       const size_t *   global_work_offset,
+                       const size_t *   global_work_size,
+                       const size_t *   local_work_size,
+                       cl_uint          num_events_in_wait_list,
+                       const cl_event * event_wait_list,
+                       cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueNativeKernel(cl_command_queue  command_queue,
+                      void (CL_CALLBACK * user_func)(void *),
+                      void *            args,
+                      size_t            cb_args,
+                      cl_uint           num_mem_objects,
+                      const cl_mem *    mem_list,
+                      const void **     args_mem_loc,
+                      cl_uint           num_events_in_wait_list,
+                      const cl_event *  event_wait_list,
+                      cl_event *        event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMarkerWithWaitList(cl_command_queue  command_queue,
+                            cl_uint           num_events_in_wait_list,
+                            const cl_event *  event_wait_list,
+                            cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueBarrierWithWaitList(cl_command_queue  command_queue,
+                             cl_uint           num_events_in_wait_list,
+                             const cl_event *  event_wait_list,
+                             cl_event *        event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMFree(cl_command_queue  command_queue,
+                 cl_uint           num_svm_pointers,
+                 void *            svm_pointers[],
+                 void (CL_CALLBACK * pfn_free_func)(cl_command_queue queue,
+                                                    cl_uint          num_svm_pointers,
+                                                    void *           svm_pointers[],
+                                                    void *           user_data),
+                 void *            user_data,
+                 cl_uint           num_events_in_wait_list,
+                 const cl_event *  event_wait_list,
+                 cl_event *        event) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemcpy(cl_command_queue  command_queue,
+                   cl_bool           blocking_copy,
+                   void *            dst_ptr,
+                   const void *      src_ptr,
+                   size_t            size,
+                   cl_uint           num_events_in_wait_list,
+                   const cl_event *  event_wait_list,
+                   cl_event *        event) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemFill(cl_command_queue  command_queue,
+                    void *            svm_ptr,
+                    const void *      pattern,
+                    size_t            pattern_size,
+                    size_t            size,
+                    cl_uint           num_events_in_wait_list,
+                    const cl_event *  event_wait_list,
+                    cl_event *        event) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMap(cl_command_queue  command_queue,
+                cl_bool           blocking_map,
+                cl_map_flags      flags,
+                void *            svm_ptr,
+                size_t            size,
+                cl_uint           num_events_in_wait_list,
+                const cl_event *  event_wait_list,
+                cl_event *        event) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMUnmap(cl_command_queue  command_queue,
+                  void *            svm_ptr,
+                  cl_uint           num_events_in_wait_list,
+                  const cl_event *  event_wait_list,
+                  cl_event *        event) CL_API_SUFFIX__VERSION_2_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMigrateMem(cl_command_queue         command_queue,
+                       cl_uint                  num_svm_pointers,
+                       const void **            svm_pointers,
+                       const size_t *           sizes,
+                       cl_mem_migration_flags   flags,
+                       cl_uint                  num_events_in_wait_list,
+                       const cl_event *         event_wait_list,
+                       cl_event *               event) CL_API_SUFFIX__VERSION_2_1;
+
+/* Extension function access
+ *
+ * Returns the extension function address for the given function name,
+ * or NULL if a valid function can not be found.  The client must
+ * check to make sure the address is not NULL, before using or
+ * calling the returned function address.
+ */
+extern CL_API_ENTRY void * CL_API_CALL
+clGetExtensionFunctionAddressForPlatform(cl_platform_id platform,
+                                         const char *   func_name) CL_API_SUFFIX__VERSION_1_2;
+
+#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
+    /*
+     *  WARNING:
+     *     This API introduces mutable state into the OpenCL implementation. It has been REMOVED
+     *  to better facilitate thread safety.  The 1.0 API is not thread safe. It is not tested by the
+     *  OpenCL 1.1 conformance test, and consequently may not work or may not work dependably.
+     *  It is likely to be non-performant. Use of this API is not advised. Use at your own risk.
+     *
+     *  Software developers previously relying on this API are instructed to set the command queue
+     *  properties when creating the queue, instead.
+     */
+    extern CL_API_ENTRY cl_int CL_API_CALL
+    clSetCommandQueueProperty(cl_command_queue              command_queue,
+                              cl_command_queue_properties   properties,
+                              cl_bool                       enable,
+                              cl_command_queue_properties * old_properties) CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED;
+#endif /* CL_USE_DEPRECATED_OPENCL_1_0_APIS */
+
+/* Deprecated OpenCL 1.1 APIs */
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
+clCreateImage2D(cl_context              context,
+                cl_mem_flags            flags,
+                const cl_image_format * image_format,
+                size_t                  image_width,
+                size_t                  image_height,
+                size_t                  image_row_pitch,
+                void *                  host_ptr,
+                cl_int *                errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
+clCreateImage3D(cl_context              context,
+                cl_mem_flags            flags,
+                const cl_image_format * image_format,
+                size_t                  image_width,
+                size_t                  image_height,
+                size_t                  image_depth,
+                size_t                  image_row_pitch,
+                size_t                  image_slice_pitch,
+                void *                  host_ptr,
+                cl_int *                errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
+clEnqueueMarker(cl_command_queue    command_queue,
+                cl_event *          event) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
+clEnqueueWaitForEvents(cl_command_queue  command_queue,
+                        cl_uint          num_events,
+                        const cl_event * event_list) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
+clEnqueueBarrier(cl_command_queue command_queue) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int CL_API_CALL
+clUnloadCompiler(void) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED void * CL_API_CALL
+clGetExtensionFunctionAddress(const char * func_name) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_CL_H */
diff --git a/ext/cudart/include/CL/cl.hpp b/ext/cudart/include/CL/cl.hpp
new file mode 100644
index 00000000..263e0ab4
--- /dev/null
+++ b/ext/cudart/include/CL/cl.hpp
@@ -0,0 +1,12419 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2013 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ ******************************************************************************/
+
+/*! \file
+ *
+ *   \brief C++ bindings for OpenCL 1.0 (rev 48), OpenCL 1.1 (rev 33) and 
+ *       OpenCL 1.2 (rev 15)    
+ *   \author Benedict R. Gaster, Laurent Morichetti and Lee Howes
+ *   
+ *   Additions and fixes from:
+ *       Brian Cole, March 3rd 2010 and April 2012 
+ *       Matt Gruenke, April 2012.
+ *       Bruce Merry, February 2013.
+ *   
+ *   \version 1.2.5
+ *   \date June 2013
+ *
+ *   Optional extension support
+ *
+ *         cl
+ *         cl_ext_device_fission
+ *				#define USE_CL_DEVICE_FISSION
+ */
+
+/*! \mainpage
+ * \section intro Introduction
+ * For many large applications C++ is the language of choice and so it seems
+ * reasonable to define C++ bindings for OpenCL.
+ *
+ *
+ * The interface is contained with a single C++ header file \em cl.hpp and all
+ * definitions are contained within the namespace \em cl. There is no additional
+ * requirement to include \em cl.h and to use either the C++ or original C
+ * bindings it is enough to simply include \em cl.hpp.
+ *
+ * The bindings themselves are lightweight and correspond closely to the
+ * underlying C API. Using the C++ bindings introduces no additional execution
+ * overhead.
+ *
+ * For detail documentation on the bindings see:
+ *
+ * The OpenCL C++ Wrapper API 1.2 (revision 09)
+ *  http://www.khronos.org/registry/cl/specs/opencl-cplusplus-1.2.pdf
+ *
+ * \section example Example
+ *
+ * The following example shows a general use case for the C++
+ * bindings, including support for the optional exception feature and
+ * also the supplied vector and string classes, see following sections for
+ * decriptions of these features.
+ *
+ * \code
+ * #define __CL_ENABLE_EXCEPTIONS
+ * 
+ * #if defined(__APPLE__) || defined(__MACOSX)
+ * #include <OpenCL/cl.hpp>
+ * #else
+ * #include <CL/cl.hpp>
+ * #endif
+ * #include <cstdio>
+ * #include <cstdlib>
+ * #include <iostream>
+ * 
+ *  const char * helloStr  = "__kernel void "
+ *                           "hello(void) "
+ *                           "{ "
+ *                           "  "
+ *                           "} ";
+ * 
+ *  int
+ *  main(void)
+ *  {
+ *     cl_int err = CL_SUCCESS;
+ *     try {
+ *
+ *       std::vector<cl::Platform> platforms;
+ *       cl::Platform::get(&platforms);
+ *       if (platforms.size() == 0) {
+ *           std::cout << "Platform size 0\n";
+ *           return -1;
+ *       }
+ *
+ *       cl_context_properties properties[] = 
+ *          { CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[0])(), 0};
+ *       cl::Context context(CL_DEVICE_TYPE_CPU, properties); 
+ * 
+ *       std::vector<cl::Device> devices = context.getInfo<CL_CONTEXT_DEVICES>();
+ * 
+ *       cl::Program::Sources source(1,
+ *           std::make_pair(helloStr,strlen(helloStr)));
+ *       cl::Program program_ = cl::Program(context, source);
+ *       program_.build(devices);
+ * 
+ *       cl::Kernel kernel(program_, "hello", &err);
+ * 
+ *       cl::Event event;
+ *       cl::CommandQueue queue(context, devices[0], 0, &err);
+ *       queue.enqueueNDRangeKernel(
+ *           kernel, 
+ *           cl::NullRange, 
+ *           cl::NDRange(4,4),
+ *           cl::NullRange,
+ *           NULL,
+ *           &event); 
+ * 
+ *       event.wait();
+ *     }
+ *     catch (cl::Error err) {
+ *        std::cerr 
+ *           << "ERROR: "
+ *           << err.what()
+ *           << "("
+ *           << err.err()
+ *           << ")"
+ *           << std::endl;
+ *     }
+ * 
+ *    return EXIT_SUCCESS;
+ *  }
+ * 
+ * \endcode
+ *
+ */
+#ifndef CL_HPP_
+#define CL_HPP_
+
+#ifdef _WIN32
+
+#include <windows.h>
+#include <malloc.h>
+#include <iterator>
+#include <intrin.h>
+
+#if defined(__CL_ENABLE_EXCEPTIONS)
+#include <exception>
+#endif // #if defined(__CL_ENABLE_EXCEPTIONS)
+
+#pragma push_macro("max")
+#undef max
+#if defined(USE_DX_INTEROP)
+#include <CL/cl_d3d10.h>
+#include <CL/cl_dx9_media_sharing.h>
+#endif
+#endif // _WIN32
+
+// 
+#if defined(USE_CL_DEVICE_FISSION)
+#include <CL/cl_ext.h>
+#endif
+
+#if defined(__APPLE__) || defined(__MACOSX)
+#include <OpenGL/OpenGL.h>
+#include <OpenCL/opencl.h>
+#include <libkern/OSAtomic.h>
+#else
+#include <GL/gl.h>
+#include <CL/opencl.h>
+#endif // !__APPLE__
+
+// To avoid accidentally taking ownership of core OpenCL types
+// such as cl_kernel constructors are made explicit
+// under OpenCL 1.2
+#if defined(CL_VERSION_1_2) && !defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+#define __CL_EXPLICIT_CONSTRUCTORS explicit
+#else // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+#define __CL_EXPLICIT_CONSTRUCTORS 
+#endif // #if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+
+// Define deprecated prefixes and suffixes to ensure compilation
+// in case they are not pre-defined
+#if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
+#define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED  
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
+#if !defined(CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED)
+#define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_1_1_DEPRECATED)
+#if !defined(CL_EXT_PREFIX__VERSION_1_2_DEPRECATED)
+#define CL_EXT_PREFIX__VERSION_1_2_DEPRECATED  
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_1_2_DEPRECATED)
+#if !defined(CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED)
+#define CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_1_2_DEPRECATED)
+#if !defined(CL_EXT_PREFIX__VERSION_2_0_DEPRECATED)
+#define CL_EXT_PREFIX__VERSION_2_0_DEPRECATED  
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_0_DEPRECATED)
+#if !defined(CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED)
+#define CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_0_DEPRECATED)
+#if !defined(CL_EXT_PREFIX__VERSION_2_1_DEPRECATED)
+#define CL_EXT_PREFIX__VERSION_2_1_DEPRECATED  
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_1_DEPRECATED)
+#if !defined(CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED)
+#define CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_1_DEPRECATED)
+#if !defined(CL_EXT_PREFIX__VERSION_2_2_DEPRECATED)
+#define CL_EXT_PREFIX__VERSION_2_2_DEPRECATED  
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_2_DEPRECATED)
+#if !defined(CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED)
+#define CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED
+#endif // #if !defined(CL_EXT_PREFIX__VERSION_2_2_DEPRECATED)
+
+#if !defined(CL_CALLBACK)
+#define CL_CALLBACK
+#endif //CL_CALLBACK
+
+#include <utility>
+#include <limits>
+
+#if !defined(__NO_STD_VECTOR)
+#include <vector>
+#endif
+
+#if !defined(__NO_STD_STRING)
+#include <string>
+#endif 
+
+#if defined(linux) || defined(__APPLE__) || defined(__MACOSX)
+#include <alloca.h>
+
+#include <emmintrin.h>
+#include <xmmintrin.h>
+#endif // linux
+
+#include <cstring>
+
+
+/*! \namespace cl
+ *
+ * \brief The OpenCL C++ bindings are defined within this namespace.
+ *
+ */
+namespace cl {
+
+class Memory;
+
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) 
+#define __INIT_CL_EXT_FCN_PTR(name) \
+    if(!pfn_##name) { \
+        pfn_##name = (PFN_##name) \
+            clGetExtensionFunctionAddress(#name); \
+        if(!pfn_##name) { \
+        } \
+    }
+#endif // #if defined(CL_VERSION_1_1)
+
+#if defined(CL_VERSION_1_2)
+#define __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, name) \
+    if(!pfn_##name) { \
+        pfn_##name = (PFN_##name) \
+            clGetExtensionFunctionAddressForPlatform(platform, #name); \
+        if(!pfn_##name) { \
+        } \
+    }
+#endif // #if defined(CL_VERSION_1_1)
+
+class Program;
+class Device;
+class Context;
+class CommandQueue;
+class Memory;
+class Buffer;
+
+#if defined(__CL_ENABLE_EXCEPTIONS)
+/*! \brief Exception class 
+ * 
+ *  This may be thrown by API functions when __CL_ENABLE_EXCEPTIONS is defined.
+ */
+class Error : public std::exception
+{
+private:
+    cl_int err_;
+    const char * errStr_;
+public:
+    /*! \brief Create a new CL error exception for a given error code
+     *  and corresponding message.
+     * 
+     *  \param err error code value.
+     *
+     *  \param errStr a descriptive string that must remain in scope until
+     *                handling of the exception has concluded.  If set, it
+     *                will be returned by what().
+     */
+    Error(cl_int err, const char * errStr = NULL) : err_(err), errStr_(errStr)
+    {}
+
+    ~Error() throw() {}
+
+    /*! \brief Get error string associated with exception
+     *
+     * \return A memory pointer to the error message string.
+     */
+    virtual const char * what() const throw ()
+    {
+        if (errStr_ == NULL) {
+            return "empty";
+        }
+        else {
+            return errStr_;
+        }
+    }
+
+    /*! \brief Get error code associated with exception
+     *
+     *  \return The error code.
+     */
+    cl_int err(void) const { return err_; }
+};
+
+#define __ERR_STR(x) #x
+#else
+#define __ERR_STR(x) NULL
+#endif // __CL_ENABLE_EXCEPTIONS
+
+
+namespace detail
+{
+#if defined(__CL_ENABLE_EXCEPTIONS)
+static inline cl_int errHandler (
+    cl_int err,
+    const char * errStr = NULL)
+{
+    if (err != CL_SUCCESS) {
+        throw Error(err, errStr);
+    }
+    return err;
+}
+#else
+static inline cl_int errHandler (cl_int err, const char * errStr = NULL)
+{
+    (void) errStr; // suppress unused variable warning
+    return err;
+}
+#endif // __CL_ENABLE_EXCEPTIONS
+}
+
+
+
+//! \cond DOXYGEN_DETAIL
+#if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
+#define __GET_DEVICE_INFO_ERR               __ERR_STR(clGetDeviceInfo)
+#define __GET_PLATFORM_INFO_ERR             __ERR_STR(clGetPlatformInfo)
+#define __GET_DEVICE_IDS_ERR                __ERR_STR(clGetDeviceIDs)
+#define __GET_PLATFORM_IDS_ERR              __ERR_STR(clGetPlatformIDs)
+#define __GET_CONTEXT_INFO_ERR              __ERR_STR(clGetContextInfo)
+#define __GET_EVENT_INFO_ERR                __ERR_STR(clGetEventInfo)
+#define __GET_EVENT_PROFILE_INFO_ERR        __ERR_STR(clGetEventProfileInfo)
+#define __GET_MEM_OBJECT_INFO_ERR           __ERR_STR(clGetMemObjectInfo)
+#define __GET_IMAGE_INFO_ERR                __ERR_STR(clGetImageInfo)
+#define __GET_SAMPLER_INFO_ERR              __ERR_STR(clGetSamplerInfo)
+#define __GET_KERNEL_INFO_ERR               __ERR_STR(clGetKernelInfo)
+#if defined(CL_VERSION_1_2)
+#define __GET_KERNEL_ARG_INFO_ERR               __ERR_STR(clGetKernelArgInfo)
+#endif // #if defined(CL_VERSION_1_2)
+#define __GET_KERNEL_WORK_GROUP_INFO_ERR    __ERR_STR(clGetKernelWorkGroupInfo)
+#define __GET_PROGRAM_INFO_ERR              __ERR_STR(clGetProgramInfo)
+#define __GET_PROGRAM_BUILD_INFO_ERR        __ERR_STR(clGetProgramBuildInfo)
+#define __GET_COMMAND_QUEUE_INFO_ERR        __ERR_STR(clGetCommandQueueInfo)
+
+#define __CREATE_CONTEXT_ERR                __ERR_STR(clCreateContext)
+#define __CREATE_CONTEXT_FROM_TYPE_ERR      __ERR_STR(clCreateContextFromType)
+#define __GET_SUPPORTED_IMAGE_FORMATS_ERR   __ERR_STR(clGetSupportedImageFormats)
+
+#define __CREATE_BUFFER_ERR                 __ERR_STR(clCreateBuffer)
+#define __COPY_ERR                          __ERR_STR(cl::copy)
+#define __CREATE_SUBBUFFER_ERR              __ERR_STR(clCreateSubBuffer)
+#define __CREATE_GL_BUFFER_ERR              __ERR_STR(clCreateFromGLBuffer)
+#define __CREATE_GL_RENDER_BUFFER_ERR       __ERR_STR(clCreateFromGLBuffer)
+#define __GET_GL_OBJECT_INFO_ERR            __ERR_STR(clGetGLObjectInfo)
+#if defined(CL_VERSION_1_2)
+#define __CREATE_IMAGE_ERR                  __ERR_STR(clCreateImage)
+#define __CREATE_GL_TEXTURE_ERR             __ERR_STR(clCreateFromGLTexture)
+#define __IMAGE_DIMENSION_ERR               __ERR_STR(Incorrect image dimensions)
+#endif // #if defined(CL_VERSION_1_2)
+#define __CREATE_SAMPLER_PROPERTY_ERR       __ERR_STR(clCreateSamplerWithProperties)
+#define __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR __ERR_STR(clSetMemObjectDestructorCallback)
+
+#define __CREATE_USER_EVENT_ERR             __ERR_STR(clCreateUserEvent)
+#define __SET_USER_EVENT_STATUS_ERR         __ERR_STR(clSetUserEventStatus)
+#define __SET_EVENT_CALLBACK_ERR            __ERR_STR(clSetEventCallback)
+#define __WAIT_FOR_EVENTS_ERR               __ERR_STR(clWaitForEvents)
+
+#define __CREATE_KERNEL_ERR                 __ERR_STR(clCreateKernel)
+#define __SET_KERNEL_ARGS_ERR               __ERR_STR(clSetKernelArg)
+#define __CREATE_PROGRAM_WITH_SOURCE_ERR    __ERR_STR(clCreateProgramWithSource)
+#define __CREATE_PROGRAM_WITH_BINARY_ERR    __ERR_STR(clCreateProgramWithBinary)
+#if defined(CL_VERSION_1_2)
+#define __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR    __ERR_STR(clCreateProgramWithBuiltInKernels)
+#endif // #if defined(CL_VERSION_1_2)
+#define __BUILD_PROGRAM_ERR                 __ERR_STR(clBuildProgram)
+#if defined(CL_VERSION_1_2)
+#define __COMPILE_PROGRAM_ERR                  __ERR_STR(clCompileProgram)
+
+#endif // #if defined(CL_VERSION_1_2)
+#define __CREATE_KERNELS_IN_PROGRAM_ERR     __ERR_STR(clCreateKernelsInProgram)
+
+#define __CREATE_COMMAND_QUEUE_PROPERTY_ERR __ERR_STR(clCreateCommandQueueWithProperties)
+#define __SET_COMMAND_QUEUE_PROPERTY_ERR    __ERR_STR(clSetCommandQueueProperty)
+#define __ENQUEUE_READ_BUFFER_ERR           __ERR_STR(clEnqueueReadBuffer)
+#define __ENQUEUE_READ_BUFFER_RECT_ERR      __ERR_STR(clEnqueueReadBufferRect)
+#define __ENQUEUE_WRITE_BUFFER_ERR          __ERR_STR(clEnqueueWriteBuffer)
+#define __ENQUEUE_WRITE_BUFFER_RECT_ERR     __ERR_STR(clEnqueueWriteBufferRect)
+#define __ENQEUE_COPY_BUFFER_ERR            __ERR_STR(clEnqueueCopyBuffer)
+#define __ENQEUE_COPY_BUFFER_RECT_ERR       __ERR_STR(clEnqueueCopyBufferRect)
+#define __ENQUEUE_FILL_BUFFER_ERR           __ERR_STR(clEnqueueFillBuffer)
+#define __ENQUEUE_READ_IMAGE_ERR            __ERR_STR(clEnqueueReadImage)
+#define __ENQUEUE_WRITE_IMAGE_ERR           __ERR_STR(clEnqueueWriteImage)
+#define __ENQUEUE_COPY_IMAGE_ERR            __ERR_STR(clEnqueueCopyImage)
+#define __ENQUEUE_FILL_IMAGE_ERR           __ERR_STR(clEnqueueFillImage)
+#define __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR  __ERR_STR(clEnqueueCopyImageToBuffer)
+#define __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR  __ERR_STR(clEnqueueCopyBufferToImage)
+#define __ENQUEUE_MAP_BUFFER_ERR            __ERR_STR(clEnqueueMapBuffer)
+#define __ENQUEUE_MAP_IMAGE_ERR             __ERR_STR(clEnqueueMapImage)
+#define __ENQUEUE_UNMAP_MEM_OBJECT_ERR      __ERR_STR(clEnqueueUnMapMemObject)
+#define __ENQUEUE_NDRANGE_KERNEL_ERR        __ERR_STR(clEnqueueNDRangeKernel)
+#define __ENQUEUE_NATIVE_KERNEL             __ERR_STR(clEnqueueNativeKernel)
+#if defined(CL_VERSION_1_2)
+#define __ENQUEUE_MIGRATE_MEM_OBJECTS_ERR   __ERR_STR(clEnqueueMigrateMemObjects)
+#endif // #if defined(CL_VERSION_1_2)
+
+#define __ENQUEUE_ACQUIRE_GL_ERR            __ERR_STR(clEnqueueAcquireGLObjects)
+#define __ENQUEUE_RELEASE_GL_ERR            __ERR_STR(clEnqueueReleaseGLObjects)
+
+
+#define __RETAIN_ERR                        __ERR_STR(Retain Object)
+#define __RELEASE_ERR                       __ERR_STR(Release Object)
+#define __FLUSH_ERR                         __ERR_STR(clFlush)
+#define __FINISH_ERR                        __ERR_STR(clFinish)
+#define __VECTOR_CAPACITY_ERR               __ERR_STR(Vector capacity error)
+
+/**
+ * CL 1.2 version that uses device fission.
+ */
+#if defined(CL_VERSION_1_2)
+#define __CREATE_SUB_DEVICES                __ERR_STR(clCreateSubDevices)
+#else
+#define __CREATE_SUB_DEVICES                __ERR_STR(clCreateSubDevicesEXT)
+#endif // #if defined(CL_VERSION_1_2)
+
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) 
+#define __ENQUEUE_MARKER_ERR                __ERR_STR(clEnqueueMarker)
+#define __ENQUEUE_WAIT_FOR_EVENTS_ERR       __ERR_STR(clEnqueueWaitForEvents)
+#define __ENQUEUE_BARRIER_ERR               __ERR_STR(clEnqueueBarrier)
+#define __UNLOAD_COMPILER_ERR               __ERR_STR(clUnloadCompiler)
+#define __CREATE_GL_TEXTURE_2D_ERR          __ERR_STR(clCreateFromGLTexture2D)
+#define __CREATE_GL_TEXTURE_3D_ERR          __ERR_STR(clCreateFromGLTexture3D)
+#define __CREATE_IMAGE2D_ERR                __ERR_STR(clCreateImage2D)
+#define __CREATE_IMAGE3D_ERR                __ERR_STR(clCreateImage3D)
+#endif // #if defined(CL_VERSION_1_1)
+
+#if defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS) || !defined(CL_VERSION_2_0)
+#define __CREATE_COMMAND_QUEUE_ERR          __ERR_STR(clCreateCommandQueue)
+#define __CREATE_SAMPLER_ERR                __ERR_STR(clCreateSampler)
+#define __ENQUEUE_TASK_ERR                  __ERR_STR(clEnqueueTask)
+#endif // #if defined(CL_VERSION_1_2)
+
+#endif // __CL_USER_OVERRIDE_ERROR_STRINGS
+//! \endcond
+
+/**
+ * CL 1.2 marker and barrier commands
+ */
+#if defined(CL_VERSION_1_2)
+#define __ENQUEUE_MARKER_WAIT_LIST_ERR                __ERR_STR(clEnqueueMarkerWithWaitList)
+#define __ENQUEUE_BARRIER_WAIT_LIST_ERR               __ERR_STR(clEnqueueBarrierWithWaitList)
+#endif // #if defined(CL_VERSION_1_2)
+
+#if !defined(__USE_DEV_STRING) && !defined(__NO_STD_STRING)
+typedef std::string STRING_CLASS;
+#elif !defined(__USE_DEV_STRING) 
+
+/*! \class string
+ * \brief Simple string class, that provides a limited subset of std::string
+ * functionality but avoids many of the issues that come with that class.
+ 
+ *  \note Deprecated. Please use std::string as default or
+ *  re-define the string class to match the std::string
+ *  interface by defining STRING_CLASS
+ */
+class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED string CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+private:
+    ::size_t size_;
+    char * str_;
+public:
+    //! \brief Constructs an empty string, allocating no memory.
+    string(void) : size_(0), str_(NULL)
+    {
+    }
+
+    /*! \brief Constructs a string populated from an arbitrary value of
+     *  specified size.
+     * 
+     *  An extra '\0' is added, in case none was contained in str.
+     *
+     *  \param str the initial value of the string instance.  Note that '\0'     
+     *             characters receive no special treatment.  If NULL,
+     *             the string is left empty, with a size of 0.
+     *
+     *  \param size the number of characters to copy from str.
+     */
+    string(const char * str, ::size_t size) :
+        size_(size),
+        str_(NULL)
+    {
+        if( size > 0 ) {
+            str_ = new char[size_+1];
+            if (str_ != NULL) {
+                memcpy(str_, str, size_  * sizeof(char));
+                str_[size_] = '\0';
+            }
+            else {
+                size_ = 0;
+            }
+        }
+    }
+
+    /*! \brief Constructs a string populated from a null-terminated value.
+     *
+     *  \param str the null-terminated initial value of the string instance.
+     *             If NULL, the string is left empty, with a size of 0.
+     */
+    string(const char * str) :
+        size_(0),
+        str_(NULL)
+    {
+        if( str ) {
+            size_= ::strlen(str);
+        }
+        if( size_ > 0 ) {
+            str_ = new char[size_ + 1];
+            if (str_ != NULL) {
+                memcpy(str_, str, (size_ + 1) * sizeof(char));
+            }
+        }
+    }
+
+    void resize( ::size_t n )
+    {
+        if( size_ == n ) {
+            return;
+        }
+        if (n == 0) {
+            if( str_ ) {
+                delete [] str_;
+            }
+            str_ = NULL;
+            size_ = 0;
+        } 
+        else {
+            char *newString = new char[n + 1];
+            int copySize = n;
+            if( size_ < n ) {
+                copySize = size_;
+            }
+            size_ = n;
+            
+            if(str_) {
+                memcpy(newString, str_, (copySize + 1) * sizeof(char));
+            }
+            if( copySize < size_ ) {
+                memset(newString + copySize, 0, size_ - copySize);
+            }
+            newString[size_] = '\0';
+
+            delete [] str_;
+            str_ = newString;
+        }
+    }
+
+    const char& operator[] ( ::size_t pos ) const
+    {
+        return str_[pos];
+    }
+
+    char& operator[] ( ::size_t pos )
+    {
+        return str_[pos];
+    }
+
+    /*! \brief Copies the value of another string to this one.
+     *
+     *  \param rhs the string to copy.
+     *
+     *  \returns a reference to the modified instance.
+     */
+    string& operator=(const string& rhs)
+    {
+        if (this == &rhs) {
+            return *this;
+        }
+
+        if( str_ != NULL ) {
+            delete [] str_;
+            str_ = NULL;
+            size_ = 0;
+        }
+
+        if (rhs.size_ == 0 || rhs.str_ == NULL) {
+            str_ = NULL;
+            size_ = 0;
+        } 
+        else {
+            str_ = new char[rhs.size_ + 1];
+            size_ = rhs.size_;
+            
+            if (str_ != NULL) {
+                memcpy(str_, rhs.str_, (size_ + 1) * sizeof(char));
+            }
+            else {
+                size_ = 0;
+            }
+        }
+
+        return *this;
+    }
+
+    /*! \brief Constructs a string by copying the value of another instance.
+     *
+     *  \param rhs the string to copy.
+     */
+    string(const string& rhs) :
+        size_(0),
+        str_(NULL)
+    {
+        *this = rhs;
+    }
+
+    //! \brief Destructor - frees memory used to hold the current value.
+    ~string()
+    {
+        delete[] str_;
+        str_ = NULL;
+    }
+    
+    //! \brief Queries the length of the string, excluding any added '\0's.
+    ::size_t size(void) const   { return size_; }
+
+    //! \brief Queries the length of the string, excluding any added '\0's.
+    ::size_t length(void) const { return size(); }
+
+    /*! \brief Returns a pointer to the private copy held by this instance,
+     *  or "" if empty/unset.
+     */
+    const char * c_str(void) const { return (str_) ? str_ : "";}
+};
+typedef cl::string STRING_CLASS;
+#endif // #elif !defined(__USE_DEV_STRING) 
+
+#if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
+#define VECTOR_CLASS std::vector
+#elif !defined(__USE_DEV_VECTOR) 
+#define VECTOR_CLASS cl::vector 
+
+#if !defined(__MAX_DEFAULT_VECTOR_SIZE)
+#define __MAX_DEFAULT_VECTOR_SIZE 10
+#endif
+
+/*! \class vector
+ * \brief Fixed sized vector implementation that mirroring 
+ *
+ *  \note Deprecated. Please use std::vector as default or
+ *  re-define the vector class to match the std::vector
+ *  interface by defining VECTOR_CLASS
+
+ *  \note Not recommended for use with custom objects as
+ *  current implementation will construct N elements
+ *
+ * std::vector functionality.
+ *  \brief Fixed sized vector compatible with std::vector.
+ *
+ *  \note
+ *  This differs from std::vector<> not just in memory allocation,
+ *  but also in terms of when members are constructed, destroyed,
+ *  and assigned instead of being copy constructed.
+ *
+ *  \param T type of element contained in the vector.
+ *
+ *  \param N maximum size of the vector.
+ */
+template <typename T, unsigned int N = __MAX_DEFAULT_VECTOR_SIZE>
+class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED vector CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+{
+private:
+    T data_[N];
+    unsigned int size_;
+
+public:
+    //! \brief Constructs an empty vector with no memory allocated.
+    vector() :  
+        size_(static_cast<unsigned int>(0))
+    {}
+
+    //! \brief Deallocates the vector's memory and destroys all of its elements.
+    ~vector() 
+    {
+        clear();
+    }
+
+    //! \brief Returns the number of elements currently contained.
+    unsigned int size(void) const
+    {
+        return size_;
+    }
+    
+    /*! \brief Empties the vector of all elements.
+     *  \note
+     *  This does not deallocate memory but will invoke destructors
+     *  on contained elements.
+     */
+    void clear()
+    {
+        while(!empty()) {
+            pop_back();
+        }
+    }
+
+    /*! \brief Appends an element after the last valid element.
+     * Calling this on a vector that has reached capacity will throw an 
+     * exception if exceptions are enabled.
+     */
+    void push_back (const T& x)
+    { 
+        if (size() < N) {    
+            new (&data_[size_]) T(x);
+            size_++;
+        } else {
+            detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR);
+        }
+    }
+
+    /*! \brief Removes the last valid element from the vector.
+     * Calling this on an empty vector will throw an exception
+     * if exceptions are enabled.
+     */
+    void pop_back(void)
+    {
+        if (size_ != 0) {
+            --size_;
+            data_[size_].~T();
+        } else {
+            detail::errHandler(CL_MEM_OBJECT_ALLOCATION_FAILURE, __VECTOR_CAPACITY_ERR);
+        }
+    }
+  
+    /*! \brief Constructs with a value copied from another.
+     *
+     *  \param vec the vector to copy.
+     */
+    vector(const vector<T, N>& vec) : 
+        size_(vec.size_)
+    {
+        if (size_ != 0) {	
+            assign(vec.begin(), vec.end());
+        }
+    } 
+
+    /*! \brief Constructs with a specified number of initial elements.
+     *
+     *  \param size number of initial elements.
+     *
+     *  \param val value of initial elements.
+     */
+    vector(unsigned int size, const T& val = T()) :
+        size_(0)
+    {
+        for (unsigned int i = 0; i < size; i++) {
+            push_back(val);
+        }
+    }
+
+    /*! \brief Overwrites the current content with that copied from another
+     *         instance.
+     *
+     *  \param rhs vector to copy.
+     *
+     *  \returns a reference to this.
+     */
+    vector<T, N>& operator=(const vector<T, N>& rhs)
+    {
+        if (this == &rhs) {
+            return *this;
+        }
+
+        if (rhs.size_ != 0) {	
+            assign(rhs.begin(), rhs.end());
+        } else {
+            clear();
+        }
+    
+        return *this;
+    }
+
+    /*! \brief Tests equality against another instance.
+     *
+     *  \param vec the vector against which to compare.
+     */
+    bool operator==(vector<T,N> &vec)
+    {
+        if (size() != vec.size()) {
+            return false;
+        }
+
+        for( unsigned int i = 0; i < size(); ++i ) {
+            if( operator[](i) != vec[i] ) {
+                return false;
+            }
+        }
+        return true;
+    }
+  
+    //! \brief Conversion operator to T*.
+    operator T* ()             { return data_; }
+
+    //! \brief Conversion operator to const T*.
+    operator const T* () const { return data_; }
+   
+    //! \brief Tests whether this instance has any elements.
+    bool empty (void) const
+    {
+        return size_==0;
+    }
+  
+    //! \brief Returns the maximum number of elements this instance can hold.
+    unsigned int max_size (void) const
+    {
+        return N;
+    }
+
+    //! \brief Returns the maximum number of elements this instance can hold.
+    unsigned int capacity () const
+    {
+        return N;
+    }
+
+    /*! \brief Returns a reference to a given element.
+     *
+     *  \param index which element to access.     *
+     *  \note
+     *  The caller is responsible for ensuring index is >= 0 and < size().
+     */
+    T& operator[](int index)
+    {
+        return data_[index];
+    }
+  
+    /*! \brief Returns a const reference to a given element.
+     *
+     *  \param index which element to access.
+     *
+     *  \note
+     *  The caller is responsible for ensuring index is >= 0 and < size().
+     */
+    const T& operator[](int index) const
+    {
+        return data_[index];
+    }
+  
+    /*! \brief Assigns elements of the vector based on a source iterator range.
+     *
+     *  \param start Beginning iterator of source range
+     *  \param end Enditerator of source range
+     *
+     *  \note
+     *  Will throw an exception if exceptions are enabled and size exceeded.
+     */
+    template<class I>
+    void assign(I start, I end)
+    {
+        clear();   
+        while(start != end) {
+            push_back(*start);
+            start++;
+        }
+    }
+
+    /*! \class iterator
+     * \brief Const iterator class for vectors
+     */
+    class iterator
+    {
+    private:
+        const vector<T,N> *vec_;
+        int index_;
+
+        /**
+         * Internal iterator constructor to capture reference
+         * to the vector it iterates over rather than taking 
+         * the vector by copy.
+         */
+        iterator (const vector<T,N> &vec, int index) :
+            vec_(&vec)
+        {            
+            if( !vec.empty() ) {
+                index_ = index;
+            } else {
+                index_ = -1;
+            }
+        }
+
+    public:
+        iterator(void) : 
+            index_(-1),
+            vec_(NULL)
+        {
+        }
+
+        iterator(const iterator& rhs) :
+            vec_(rhs.vec_),
+            index_(rhs.index_)
+        {
+        }
+
+        ~iterator(void) {}
+
+        static iterator begin(const cl::vector<T,N> &vec)
+        {
+            iterator i(vec, 0);
+
+            return i;
+        }
+
+        static iterator end(const cl::vector<T,N> &vec)
+        {
+            iterator i(vec, vec.size());
+
+            return i;
+        }
+    
+        bool operator==(iterator i)
+        {
+            return ((vec_ == i.vec_) && 
+                    (index_ == i.index_));
+        }
+
+        bool operator!=(iterator i)
+        {
+            return (!(*this==i));
+        }
+
+        iterator& operator++()
+        {
+            ++index_;
+            return *this;
+        }
+
+        iterator operator++(int)
+        {
+            iterator retVal(*this);
+            ++index_;
+            return retVal;
+        }
+
+        iterator& operator--()
+        {
+            --index_;
+            return *this;
+        }
+
+        iterator operator--(int)
+        {
+            iterator retVal(*this);
+            --index_;
+            return retVal;
+        }
+
+        const T& operator *() const
+        {
+            return (*vec_)[index_];
+        }
+    };
+
+    iterator begin(void)
+    {
+        return iterator::begin(*this);
+    }
+
+    iterator begin(void) const
+    {
+        return iterator::begin(*this);
+    }
+
+    iterator end(void)
+    {
+        return iterator::end(*this);
+    }
+
+    iterator end(void) const
+    {
+        return iterator::end(*this);
+    }
+
+    T& front(void)
+    {
+        return data_[0];
+    }
+
+    T& back(void)
+    {
+        return data_[size_];
+    }
+
+    const T& front(void) const
+    {
+        return data_[0];
+    }
+
+    const T& back(void) const
+    {
+        return data_[size_-1];
+    }
+};  
+#endif // #if !defined(__USE_DEV_VECTOR) && !defined(__NO_STD_VECTOR)
+
+
+
+
+
+namespace detail {
+#define __DEFAULT_NOT_INITIALIZED 1 
+#define __DEFAULT_BEING_INITIALIZED 2
+#define __DEFAULT_INITIALIZED 4
+
+    /*
+     * Compare and exchange primitives are needed for handling of defaults
+    */
+    inline int compare_exchange(volatile int * dest, int exchange, int comparand)
+    {
+#ifdef _WIN32
+        return (int)(InterlockedCompareExchange(
+           (volatile long*)dest, 
+           (long)exchange, 
+           (long)comparand));
+#elif defined(__APPLE__) || defined(__MACOSX)
+		return OSAtomicOr32Orig((uint32_t)exchange, (volatile uint32_t*)dest);
+#else // !_WIN32 || defined(__APPLE__) || defined(__MACOSX)
+        return (__sync_val_compare_and_swap(
+            dest, 
+            comparand, 
+            exchange));
+#endif // !_WIN32
+    }
+
+    inline void fence() { _mm_mfence(); }
+}; // namespace detail
+
+    
+/*! \brief class used to interface between C++ and
+ *  OpenCL C calls that require arrays of size_t values, whose
+ *  size is known statically.
+ */
+template <int N>
+class size_t
+{ 
+private:
+    ::size_t data_[N];
+
+public:
+    //! \brief Initialize size_t to all 0s
+    size_t()
+    {
+        for( int i = 0; i < N; ++i ) {
+            data_[i] = 0;
+        }
+    }
+
+    ::size_t& operator[](int index)
+    {
+        return data_[index];
+    }
+
+    const ::size_t& operator[](int index) const
+    {
+        return data_[index];
+    }
+
+    //! \brief Conversion operator to T*.
+    operator ::size_t* ()             { return data_; }
+
+    //! \brief Conversion operator to const T*.
+    operator const ::size_t* () const { return data_; }
+};
+
+namespace detail {
+
+// Generic getInfoHelper. The final parameter is used to guide overload
+// resolution: the actual parameter passed is an int, which makes this
+// a worse conversion sequence than a specialization that declares the
+// parameter as an int.
+template<typename Functor, typename T>
+inline cl_int getInfoHelper(Functor f, cl_uint name, T* param, long)
+{
+    return f(name, sizeof(T), param, NULL);
+}
+
+// Specialized getInfoHelper for VECTOR_CLASS params
+template <typename Func, typename T>
+inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<T>* param, long)
+{
+    ::size_t required;
+    cl_int err = f(name, 0, NULL, &required);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    T* value = (T*) alloca(required);
+    err = f(name, required, value, NULL);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    param->assign(&value[0], &value[required/sizeof(T)]);
+    return CL_SUCCESS;
+}
+
+/* Specialization for reference-counted types. This depends on the
+ * existence of Wrapper<T>::cl_type, and none of the other types having the
+ * cl_type member. Note that simplify specifying the parameter as Wrapper<T>
+ * does not work, because when using a derived type (e.g. Context) the generic
+ * template will provide a better match.
+ */
+template <typename Func, typename T>
+inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<T>* param, int, typename T::cl_type = 0)
+{
+    ::size_t required;
+    cl_int err = f(name, 0, NULL, &required);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    typename T::cl_type * value = (typename T::cl_type *) alloca(required);
+    err = f(name, required, value, NULL);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    ::size_t elements = required / sizeof(typename T::cl_type);
+    param->assign(&value[0], &value[elements]);
+    for (::size_t i = 0; i < elements; i++)
+    {
+        if (value[i] != NULL)
+        {
+            err = (*param)[i].retain();
+            if (err != CL_SUCCESS) {
+                return err;
+            }
+        }
+    }
+    return CL_SUCCESS;
+}
+
+// Specialized for getInfo<CL_PROGRAM_BINARIES>
+template <typename Func>
+inline cl_int getInfoHelper(Func f, cl_uint name, VECTOR_CLASS<char *>* param, int)
+{
+    cl_int err = f(name, param->size() * sizeof(char *), &(*param)[0], NULL);
+
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    return CL_SUCCESS;
+}
+
+// Specialized GetInfoHelper for STRING_CLASS params
+template <typename Func>
+inline cl_int getInfoHelper(Func f, cl_uint name, STRING_CLASS* param, long)
+{
+    ::size_t required;
+    cl_int err = f(name, 0, NULL, &required);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    char* value = (char*) alloca(required);
+    err = f(name, required, value, NULL);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    *param = value;
+    return CL_SUCCESS;
+}
+
+// Specialized GetInfoHelper for cl::size_t params
+template <typename Func, ::size_t N>
+inline cl_int getInfoHelper(Func f, cl_uint name, size_t<N>* param, long)
+{
+    ::size_t required;
+    cl_int err = f(name, 0, NULL, &required);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    ::size_t* value = (::size_t*) alloca(required);
+    err = f(name, required, value, NULL);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+
+    for(int i = 0; i < N; ++i) {
+        (*param)[i] = value[i];
+    }
+
+    return CL_SUCCESS;
+}
+
+template<typename T> struct ReferenceHandler;
+
+/* Specialization for reference-counted types. This depends on the
+ * existence of Wrapper<T>::cl_type, and none of the other types having the
+ * cl_type member. Note that simplify specifying the parameter as Wrapper<T>
+ * does not work, because when using a derived type (e.g. Context) the generic
+ * template will provide a better match.
+ */
+template<typename Func, typename T>
+inline cl_int getInfoHelper(Func f, cl_uint name, T* param, int, typename T::cl_type = 0)
+{
+    typename T::cl_type value;
+    cl_int err = f(name, sizeof(value), &value, NULL);
+    if (err != CL_SUCCESS) {
+        return err;
+    }
+    *param = value;
+    if (value != NULL)
+    {
+        err = param->retain();
+        if (err != CL_SUCCESS) {
+            return err;
+        }
+    }
+    return CL_SUCCESS;
+}
+
+#define __PARAM_NAME_INFO_1_0(F) \
+    F(cl_platform_info, CL_PLATFORM_PROFILE, STRING_CLASS) \
+    F(cl_platform_info, CL_PLATFORM_VERSION, STRING_CLASS) \
+    F(cl_platform_info, CL_PLATFORM_NAME, STRING_CLASS) \
+    F(cl_platform_info, CL_PLATFORM_VENDOR, STRING_CLASS) \
+    F(cl_platform_info, CL_PLATFORM_EXTENSIONS, STRING_CLASS) \
+    \
+    F(cl_device_info, CL_DEVICE_TYPE, cl_device_type) \
+    F(cl_device_info, CL_DEVICE_VENDOR_ID, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_COMPUTE_UNITS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_WORK_GROUP_SIZE, ::size_t) \
+    F(cl_device_info, CL_DEVICE_MAX_WORK_ITEM_SIZES, VECTOR_CLASS< ::size_t>) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_CLOCK_FREQUENCY, cl_uint) \
+    F(cl_device_info, CL_DEVICE_ADDRESS_BITS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_READ_IMAGE_ARGS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MAX_MEM_ALLOC_SIZE, cl_ulong) \
+    F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_WIDTH, ::size_t) \
+    F(cl_device_info, CL_DEVICE_IMAGE2D_MAX_HEIGHT, ::size_t) \
+    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_WIDTH, ::size_t) \
+    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_HEIGHT, ::size_t) \
+    F(cl_device_info, CL_DEVICE_IMAGE3D_MAX_DEPTH, ::size_t) \
+    F(cl_device_info, CL_DEVICE_IMAGE_SUPPORT, cl_bool) \
+    F(cl_device_info, CL_DEVICE_MAX_PARAMETER_SIZE, ::size_t) \
+    F(cl_device_info, CL_DEVICE_MAX_SAMPLERS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MEM_BASE_ADDR_ALIGN, cl_uint) \
+    F(cl_device_info, CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE, cl_uint) \
+    F(cl_device_info, CL_DEVICE_SINGLE_FP_CONFIG, cl_device_fp_config) \
+    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_TYPE, cl_device_mem_cache_type) \
+    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE, cl_uint)\
+    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_CACHE_SIZE, cl_ulong) \
+    F(cl_device_info, CL_DEVICE_GLOBAL_MEM_SIZE, cl_ulong) \
+    F(cl_device_info, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, cl_ulong) \
+    F(cl_device_info, CL_DEVICE_MAX_CONSTANT_ARGS, cl_uint) \
+    F(cl_device_info, CL_DEVICE_LOCAL_MEM_TYPE, cl_device_local_mem_type) \
+    F(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE, cl_ulong) \
+    F(cl_device_info, CL_DEVICE_ERROR_CORRECTION_SUPPORT, cl_bool) \
+    F(cl_device_info, CL_DEVICE_PROFILING_TIMER_RESOLUTION, ::size_t) \
+    F(cl_device_info, CL_DEVICE_ENDIAN_LITTLE, cl_bool) \
+    F(cl_device_info, CL_DEVICE_AVAILABLE, cl_bool) \
+    F(cl_device_info, CL_DEVICE_COMPILER_AVAILABLE, cl_bool) \
+    F(cl_device_info, CL_DEVICE_EXECUTION_CAPABILITIES, cl_device_exec_capabilities) \
+    F(cl_device_info, CL_DEVICE_QUEUE_PROPERTIES, cl_command_queue_properties) \
+    F(cl_device_info, CL_DEVICE_PLATFORM, cl_platform_id) \
+    F(cl_device_info, CL_DEVICE_NAME, STRING_CLASS) \
+    F(cl_device_info, CL_DEVICE_VENDOR, STRING_CLASS) \
+    F(cl_device_info, CL_DRIVER_VERSION, STRING_CLASS) \
+    F(cl_device_info, CL_DEVICE_PROFILE, STRING_CLASS) \
+    F(cl_device_info, CL_DEVICE_VERSION, STRING_CLASS) \
+    F(cl_device_info, CL_DEVICE_EXTENSIONS, STRING_CLASS) \
+    \
+    F(cl_context_info, CL_CONTEXT_REFERENCE_COUNT, cl_uint) \
+    F(cl_context_info, CL_CONTEXT_DEVICES, VECTOR_CLASS<Device>) \
+    F(cl_context_info, CL_CONTEXT_PROPERTIES, VECTOR_CLASS<cl_context_properties>) \
+    \
+    F(cl_event_info, CL_EVENT_COMMAND_QUEUE, cl::CommandQueue) \
+    F(cl_event_info, CL_EVENT_COMMAND_TYPE, cl_command_type) \
+    F(cl_event_info, CL_EVENT_REFERENCE_COUNT, cl_uint) \
+    F(cl_event_info, CL_EVENT_COMMAND_EXECUTION_STATUS, cl_uint) \
+    \
+    F(cl_profiling_info, CL_PROFILING_COMMAND_QUEUED, cl_ulong) \
+    F(cl_profiling_info, CL_PROFILING_COMMAND_SUBMIT, cl_ulong) \
+    F(cl_profiling_info, CL_PROFILING_COMMAND_START, cl_ulong) \
+    F(cl_profiling_info, CL_PROFILING_COMMAND_END, cl_ulong) \
+    \
+    F(cl_mem_info, CL_MEM_TYPE, cl_mem_object_type) \
+    F(cl_mem_info, CL_MEM_FLAGS, cl_mem_flags) \
+    F(cl_mem_info, CL_MEM_SIZE, ::size_t) \
+    F(cl_mem_info, CL_MEM_HOST_PTR, void*) \
+    F(cl_mem_info, CL_MEM_MAP_COUNT, cl_uint) \
+    F(cl_mem_info, CL_MEM_REFERENCE_COUNT, cl_uint) \
+    F(cl_mem_info, CL_MEM_CONTEXT, cl::Context) \
+    \
+    F(cl_image_info, CL_IMAGE_FORMAT, cl_image_format) \
+    F(cl_image_info, CL_IMAGE_ELEMENT_SIZE, ::size_t) \
+    F(cl_image_info, CL_IMAGE_ROW_PITCH, ::size_t) \
+    F(cl_image_info, CL_IMAGE_SLICE_PITCH, ::size_t) \
+    F(cl_image_info, CL_IMAGE_WIDTH, ::size_t) \
+    F(cl_image_info, CL_IMAGE_HEIGHT, ::size_t) \
+    F(cl_image_info, CL_IMAGE_DEPTH, ::size_t) \
+    \
+    F(cl_sampler_info, CL_SAMPLER_REFERENCE_COUNT, cl_uint) \
+    F(cl_sampler_info, CL_SAMPLER_CONTEXT, cl::Context) \
+    F(cl_sampler_info, CL_SAMPLER_NORMALIZED_COORDS, cl_addressing_mode) \
+    F(cl_sampler_info, CL_SAMPLER_ADDRESSING_MODE, cl_filter_mode) \
+    F(cl_sampler_info, CL_SAMPLER_FILTER_MODE, cl_bool) \
+    \
+    F(cl_program_info, CL_PROGRAM_REFERENCE_COUNT, cl_uint) \
+    F(cl_program_info, CL_PROGRAM_CONTEXT, cl::Context) \
+    F(cl_program_info, CL_PROGRAM_NUM_DEVICES, cl_uint) \
+    F(cl_program_info, CL_PROGRAM_DEVICES, VECTOR_CLASS<Device>) \
+    F(cl_program_info, CL_PROGRAM_SOURCE, STRING_CLASS) \
+    F(cl_program_info, CL_PROGRAM_BINARY_SIZES, VECTOR_CLASS< ::size_t>) \
+    F(cl_program_info, CL_PROGRAM_BINARIES, VECTOR_CLASS<char *>) \
+    \
+    F(cl_program_build_info, CL_PROGRAM_BUILD_STATUS, cl_build_status) \
+    F(cl_program_build_info, CL_PROGRAM_BUILD_OPTIONS, STRING_CLASS) \
+    F(cl_program_build_info, CL_PROGRAM_BUILD_LOG, STRING_CLASS) \
+    \
+    F(cl_kernel_info, CL_KERNEL_FUNCTION_NAME, STRING_CLASS) \
+    F(cl_kernel_info, CL_KERNEL_NUM_ARGS, cl_uint) \
+    F(cl_kernel_info, CL_KERNEL_REFERENCE_COUNT, cl_uint) \
+    F(cl_kernel_info, CL_KERNEL_CONTEXT, cl::Context) \
+    F(cl_kernel_info, CL_KERNEL_PROGRAM, cl::Program) \
+    \
+    F(cl_kernel_work_group_info, CL_KERNEL_WORK_GROUP_SIZE, ::size_t) \
+    F(cl_kernel_work_group_info, CL_KERNEL_COMPILE_WORK_GROUP_SIZE, cl::size_t<3>) \
+    F(cl_kernel_work_group_info, CL_KERNEL_LOCAL_MEM_SIZE, cl_ulong) \
+    \
+    F(cl_command_queue_info, CL_QUEUE_CONTEXT, cl::Context) \
+    F(cl_command_queue_info, CL_QUEUE_DEVICE, cl::Device) \
+    F(cl_command_queue_info, CL_QUEUE_REFERENCE_COUNT, cl_uint) \
+    F(cl_command_queue_info, CL_QUEUE_PROPERTIES, cl_command_queue_properties)
+
+#if defined(CL_VERSION_1_1)
+#define __PARAM_NAME_INFO_1_1(F) \
+    F(cl_context_info, CL_CONTEXT_NUM_DEVICES, cl_uint)\
+    F(cl_device_info, CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_INT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE, cl_uint) \
+    F(cl_device_info, CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF, cl_uint) \
+    F(cl_device_info, CL_DEVICE_DOUBLE_FP_CONFIG, cl_device_fp_config) \
+    F(cl_device_info, CL_DEVICE_HALF_FP_CONFIG, cl_device_fp_config) \
+    F(cl_device_info, CL_DEVICE_HOST_UNIFIED_MEMORY, cl_bool) \
+    F(cl_device_info, CL_DEVICE_OPENCL_C_VERSION, STRING_CLASS) \
+    \
+    F(cl_mem_info, CL_MEM_ASSOCIATED_MEMOBJECT, cl::Memory) \
+    F(cl_mem_info, CL_MEM_OFFSET, ::size_t) \
+    \
+    F(cl_kernel_work_group_info, CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE, ::size_t) \
+    F(cl_kernel_work_group_info, CL_KERNEL_PRIVATE_MEM_SIZE, cl_ulong) \
+    \
+    F(cl_event_info, CL_EVENT_CONTEXT, cl::Context)
+#endif // CL_VERSION_1_1
+
+    
+#if defined(CL_VERSION_1_2)
+#define __PARAM_NAME_INFO_1_2(F) \
+    F(cl_image_info, CL_IMAGE_BUFFER, cl::Buffer) \
+    \
+    F(cl_program_info, CL_PROGRAM_NUM_KERNELS, ::size_t) \
+    F(cl_program_info, CL_PROGRAM_KERNEL_NAMES, STRING_CLASS) \
+    \
+    F(cl_program_build_info, CL_PROGRAM_BINARY_TYPE, cl_program_binary_type) \
+    \
+    F(cl_kernel_info, CL_KERNEL_ATTRIBUTES, STRING_CLASS) \
+    \
+    F(cl_kernel_arg_info, CL_KERNEL_ARG_ADDRESS_QUALIFIER, cl_kernel_arg_address_qualifier) \
+    F(cl_kernel_arg_info, CL_KERNEL_ARG_ACCESS_QUALIFIER, cl_kernel_arg_access_qualifier) \
+    F(cl_kernel_arg_info, CL_KERNEL_ARG_TYPE_NAME, STRING_CLASS) \
+    F(cl_kernel_arg_info, CL_KERNEL_ARG_NAME, STRING_CLASS) \
+    \
+    F(cl_device_info, CL_DEVICE_PARENT_DEVICE, cl_device_id) \
+    F(cl_device_info, CL_DEVICE_PARTITION_PROPERTIES, VECTOR_CLASS<cl_device_partition_property>) \
+    F(cl_device_info, CL_DEVICE_PARTITION_TYPE, VECTOR_CLASS<cl_device_partition_property>)  \
+    F(cl_device_info, CL_DEVICE_REFERENCE_COUNT, cl_uint) \
+    F(cl_device_info, CL_DEVICE_PREFERRED_INTEROP_USER_SYNC, ::size_t) \
+    F(cl_device_info, CL_DEVICE_PARTITION_AFFINITY_DOMAIN, cl_device_affinity_domain) \
+    F(cl_device_info, CL_DEVICE_BUILT_IN_KERNELS, STRING_CLASS)
+#endif // #if defined(CL_VERSION_1_2)
+
+#if defined(USE_CL_DEVICE_FISSION)
+#define __PARAM_NAME_DEVICE_FISSION(F) \
+    F(cl_device_info, CL_DEVICE_PARENT_DEVICE_EXT, cl_device_id) \
+    F(cl_device_info, CL_DEVICE_PARTITION_TYPES_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
+    F(cl_device_info, CL_DEVICE_AFFINITY_DOMAINS_EXT, VECTOR_CLASS<cl_device_partition_property_ext>) \
+    F(cl_device_info, CL_DEVICE_REFERENCE_COUNT_EXT , cl_uint) \
+    F(cl_device_info, CL_DEVICE_PARTITION_STYLE_EXT, VECTOR_CLASS<cl_device_partition_property_ext>)
+#endif // USE_CL_DEVICE_FISSION
+
+template <typename enum_type, cl_int Name>
+struct param_traits {};
+
+#define __CL_DECLARE_PARAM_TRAITS(token, param_name, T) \
+struct token;                                        \
+template<>                                           \
+struct param_traits<detail:: token,param_name>       \
+{                                                    \
+    enum { value = param_name };                     \
+    typedef T param_type;                            \
+};
+
+__PARAM_NAME_INFO_1_0(__CL_DECLARE_PARAM_TRAITS)
+#if defined(CL_VERSION_1_1)
+__PARAM_NAME_INFO_1_1(__CL_DECLARE_PARAM_TRAITS)
+#endif // CL_VERSION_1_1
+#if defined(CL_VERSION_1_2)
+__PARAM_NAME_INFO_1_2(__CL_DECLARE_PARAM_TRAITS)
+#endif // CL_VERSION_1_1
+
+#if defined(USE_CL_DEVICE_FISSION)
+__PARAM_NAME_DEVICE_FISSION(__CL_DECLARE_PARAM_TRAITS);
+#endif // USE_CL_DEVICE_FISSION
+
+#ifdef CL_PLATFORM_ICD_SUFFIX_KHR
+__CL_DECLARE_PARAM_TRAITS(cl_platform_info, CL_PLATFORM_ICD_SUFFIX_KHR, STRING_CLASS)
+#endif
+
+#ifdef CL_DEVICE_PROFILING_TIMER_OFFSET_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_PROFILING_TIMER_OFFSET_AMD, cl_ulong)
+#endif
+
+#ifdef CL_DEVICE_GLOBAL_FREE_MEMORY_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_FREE_MEMORY_AMD, VECTOR_CLASS< ::size_t>)
+#endif
+#ifdef CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_SIMD_WIDTH_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_WIDTH_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_WAVEFRONT_WIDTH_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WAVEFRONT_WIDTH_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD, cl_uint)
+#endif
+#ifdef CL_DEVICE_LOCAL_MEM_BANKS_AMD
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_LOCAL_MEM_BANKS_AMD, cl_uint)
+#endif
+
+#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV, cl_uint)
+#endif
+#ifdef CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV, cl_uint)
+#endif
+#ifdef CL_DEVICE_REGISTERS_PER_BLOCK_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_REGISTERS_PER_BLOCK_NV, cl_uint)
+#endif
+#ifdef CL_DEVICE_WARP_SIZE_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_WARP_SIZE_NV, cl_uint)
+#endif
+#ifdef CL_DEVICE_GPU_OVERLAP_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_GPU_OVERLAP_NV, cl_bool)
+#endif
+#ifdef CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV, cl_bool)
+#endif
+#ifdef CL_DEVICE_INTEGRATED_MEMORY_NV
+__CL_DECLARE_PARAM_TRAITS(cl_device_info, CL_DEVICE_INTEGRATED_MEMORY_NV, cl_bool)
+#endif
+
+// Convenience functions
+
+template <typename Func, typename T>
+inline cl_int
+getInfo(Func f, cl_uint name, T* param)
+{
+    return getInfoHelper(f, name, param, 0);
+}
+
+template <typename Func, typename Arg0>
+struct GetInfoFunctor0
+{
+    Func f_; const Arg0& arg0_;
+    cl_int operator ()(
+        cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
+    { return f_(arg0_, param, size, value, size_ret); }
+};
+
+template <typename Func, typename Arg0, typename Arg1>
+struct GetInfoFunctor1
+{
+    Func f_; const Arg0& arg0_; const Arg1& arg1_;
+    cl_int operator ()(
+        cl_uint param, ::size_t size, void* value, ::size_t* size_ret)
+    { return f_(arg0_, arg1_, param, size, value, size_ret); }
+};
+
+template <typename Func, typename Arg0, typename T>
+inline cl_int
+getInfo(Func f, const Arg0& arg0, cl_uint name, T* param)
+{
+    GetInfoFunctor0<Func, Arg0> f0 = { f, arg0 };
+    return getInfoHelper(f0, name, param, 0);
+}
+
+template <typename Func, typename Arg0, typename Arg1, typename T>
+inline cl_int
+getInfo(Func f, const Arg0& arg0, const Arg1& arg1, cl_uint name, T* param)
+{
+    GetInfoFunctor1<Func, Arg0, Arg1> f0 = { f, arg0, arg1 };
+    return getInfoHelper(f0, name, param, 0);
+}
+
+template<typename T>
+struct ReferenceHandler
+{ };
+
+#if defined(CL_VERSION_1_2)
+/**
+ * OpenCL 1.2 devices do have retain/release.
+ */
+template <>
+struct ReferenceHandler<cl_device_id>
+{
+    /**
+     * Retain the device.
+     * \param device A valid device created using createSubDevices
+     * \return 
+     *   CL_SUCCESS if the function executed successfully.
+     *   CL_INVALID_DEVICE if device was not a valid subdevice
+     *   CL_OUT_OF_RESOURCES
+     *   CL_OUT_OF_HOST_MEMORY
+     */
+    static cl_int retain(cl_device_id device)
+    { return ::clRetainDevice(device); }
+    /**
+     * Retain the device.
+     * \param device A valid device created using createSubDevices
+     * \return 
+     *   CL_SUCCESS if the function executed successfully.
+     *   CL_INVALID_DEVICE if device was not a valid subdevice
+     *   CL_OUT_OF_RESOURCES
+     *   CL_OUT_OF_HOST_MEMORY
+     */
+    static cl_int release(cl_device_id device)
+    { return ::clReleaseDevice(device); }
+};
+#else // #if defined(CL_VERSION_1_2)
+/**
+ * OpenCL 1.1 devices do not have retain/release.
+ */
+template <>
+struct ReferenceHandler<cl_device_id>
+{
+    // cl_device_id does not have retain().
+    static cl_int retain(cl_device_id)
+    { return CL_SUCCESS; }
+    // cl_device_id does not have release().
+    static cl_int release(cl_device_id)
+    { return CL_SUCCESS; }
+};
+#endif // #if defined(CL_VERSION_1_2)
+
+template <>
+struct ReferenceHandler<cl_platform_id>
+{
+    // cl_platform_id does not have retain().
+    static cl_int retain(cl_platform_id)
+    { return CL_SUCCESS; }
+    // cl_platform_id does not have release().
+    static cl_int release(cl_platform_id)
+    { return CL_SUCCESS; }
+};
+
+template <>
+struct ReferenceHandler<cl_context>
+{
+    static cl_int retain(cl_context context)
+    { return ::clRetainContext(context); }
+    static cl_int release(cl_context context)
+    { return ::clReleaseContext(context); }
+};
+
+template <>
+struct ReferenceHandler<cl_command_queue>
+{
+    static cl_int retain(cl_command_queue queue)
+    { return ::clRetainCommandQueue(queue); }
+    static cl_int release(cl_command_queue queue)
+    { return ::clReleaseCommandQueue(queue); }
+};
+
+template <>
+struct ReferenceHandler<cl_mem>
+{
+    static cl_int retain(cl_mem memory)
+    { return ::clRetainMemObject(memory); }
+    static cl_int release(cl_mem memory)
+    { return ::clReleaseMemObject(memory); }
+};
+
+template <>
+struct ReferenceHandler<cl_sampler>
+{
+    static cl_int retain(cl_sampler sampler)
+    { return ::clRetainSampler(sampler); }
+    static cl_int release(cl_sampler sampler)
+    { return ::clReleaseSampler(sampler); }
+};
+
+template <>
+struct ReferenceHandler<cl_program>
+{
+    static cl_int retain(cl_program program)
+    { return ::clRetainProgram(program); }
+    static cl_int release(cl_program program)
+    { return ::clReleaseProgram(program); }
+};
+
+template <>
+struct ReferenceHandler<cl_kernel>
+{
+    static cl_int retain(cl_kernel kernel)
+    { return ::clRetainKernel(kernel); }
+    static cl_int release(cl_kernel kernel)
+    { return ::clReleaseKernel(kernel); }
+};
+
+template <>
+struct ReferenceHandler<cl_event>
+{
+    static cl_int retain(cl_event event)
+    { return ::clRetainEvent(event); }
+    static cl_int release(cl_event event)
+    { return ::clReleaseEvent(event); }
+};
+
+
+// Extracts version number with major in the upper 16 bits, minor in the lower 16
+static cl_uint getVersion(const char *versionInfo)
+{
+    int highVersion = 0;
+    int lowVersion = 0;
+    int index = 7;
+    while(versionInfo[index] != '.' ) {
+        highVersion *= 10;
+        highVersion += versionInfo[index]-'0';
+        ++index;
+    }
+    ++index;
+    while(versionInfo[index] != ' ' ) {
+        lowVersion *= 10;
+        lowVersion += versionInfo[index]-'0';
+        ++index;
+    }
+    return (highVersion << 16) | lowVersion;
+}
+
+static cl_uint getPlatformVersion(cl_platform_id platform)
+{
+    ::size_t size = 0;
+    clGetPlatformInfo(platform, CL_PLATFORM_VERSION, 0, NULL, &size);
+    char *versionInfo = (char *) alloca(size);
+    clGetPlatformInfo(platform, CL_PLATFORM_VERSION, size, &versionInfo[0], &size);
+    return getVersion(versionInfo);
+}
+
+static cl_uint getDevicePlatformVersion(cl_device_id device)
+{
+    cl_platform_id platform;
+    clGetDeviceInfo(device, CL_DEVICE_PLATFORM, sizeof(platform), &platform, NULL);
+    return getPlatformVersion(platform);
+}
+
+#if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+static cl_uint getContextPlatformVersion(cl_context context)
+{
+    // The platform cannot be queried directly, so we first have to grab a
+    // device and obtain its context
+    ::size_t size = 0;
+    clGetContextInfo(context, CL_CONTEXT_DEVICES, 0, NULL, &size);
+    if (size == 0)
+        return 0;
+    cl_device_id *devices = (cl_device_id *) alloca(size);
+    clGetContextInfo(context, CL_CONTEXT_DEVICES, size, devices, NULL);
+    return getDevicePlatformVersion(devices[0]);
+}
+#endif // #if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+
+template <typename T>
+class Wrapper
+{
+public:
+    typedef T cl_type;
+
+protected:
+    cl_type object_;
+
+public:
+    Wrapper() : object_(NULL) { }
+
+    Wrapper(const cl_type &obj) : object_(obj) { }
+
+    ~Wrapper()
+    {
+        if (object_ != NULL) { release(); }
+    }
+
+    Wrapper(const Wrapper<cl_type>& rhs)
+    {
+        object_ = rhs.object_;
+        if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
+    }
+
+    Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
+    {
+        if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
+        object_ = rhs.object_;
+        if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
+        return *this;
+    }
+
+    Wrapper<cl_type>& operator = (const cl_type &rhs)
+    {
+        if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
+        object_ = rhs;
+        return *this;
+    }
+
+    cl_type operator ()() const { return object_; }
+
+    cl_type& operator ()() { return object_; }
+
+protected:
+    template<typename Func, typename U>
+    friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type);
+
+    cl_int retain() const
+    {
+        return ReferenceHandler<cl_type>::retain(object_);
+    }
+
+    cl_int release() const
+    {
+        return ReferenceHandler<cl_type>::release(object_);
+    }
+};
+
+template <>
+class Wrapper<cl_device_id>
+{
+public:
+    typedef cl_device_id cl_type;
+
+protected:
+    cl_type object_;
+    bool referenceCountable_;
+
+    static bool isReferenceCountable(cl_device_id device)
+    {
+        bool retVal = false;
+        if (device != NULL) {
+            int version = getDevicePlatformVersion(device);
+            if(version > ((1 << 16) + 1)) {
+                retVal = true;
+            }
+        }
+        return retVal;
+    }
+
+public:
+    Wrapper() : object_(NULL), referenceCountable_(false) 
+    { 
+    }
+    
+    Wrapper(const cl_type &obj) : object_(obj), referenceCountable_(false) 
+    {
+        referenceCountable_ = isReferenceCountable(obj); 
+    }
+
+    ~Wrapper()
+    {
+        if (object_ != NULL) { release(); }
+    }
+    
+    Wrapper(const Wrapper<cl_type>& rhs)
+    {
+        object_ = rhs.object_;
+        referenceCountable_ = isReferenceCountable(object_); 
+        if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
+    }
+
+    Wrapper<cl_type>& operator = (const Wrapper<cl_type>& rhs)
+    {
+        if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
+        object_ = rhs.object_;
+        referenceCountable_ = rhs.referenceCountable_;
+        if (object_ != NULL) { detail::errHandler(retain(), __RETAIN_ERR); }
+        return *this;
+    }
+
+    Wrapper<cl_type>& operator = (const cl_type &rhs)
+    {
+        if (object_ != NULL) { detail::errHandler(release(), __RELEASE_ERR); }
+        object_ = rhs;
+        referenceCountable_ = isReferenceCountable(object_); 
+        return *this;
+    }
+
+    cl_type operator ()() const { return object_; }
+
+    cl_type& operator ()() { return object_; }
+
+protected:
+    template<typename Func, typename U>
+    friend inline cl_int getInfoHelper(Func, cl_uint, U*, int, typename U::cl_type);
+
+    template<typename Func, typename U>
+    friend inline cl_int getInfoHelper(Func, cl_uint, VECTOR_CLASS<U>*, int, typename U::cl_type);
+
+    cl_int retain() const
+    {
+        if( referenceCountable_ ) {
+            return ReferenceHandler<cl_type>::retain(object_);
+        }
+        else {
+            return CL_SUCCESS;
+        }
+    }
+
+    cl_int release() const
+    {
+        if( referenceCountable_ ) {
+            return ReferenceHandler<cl_type>::release(object_);
+        }
+        else {
+            return CL_SUCCESS;
+        }
+    }
+};
+
+} // namespace detail
+//! \endcond
+
+/*! \stuct ImageFormat
+ *  \brief Adds constructors and member functions for cl_image_format.
+ *
+ *  \see cl_image_format
+ */
+struct ImageFormat : public cl_image_format
+{
+    //! \brief Default constructor - performs no initialization.
+    ImageFormat(){}
+
+    //! \brief Initializing constructor.
+    ImageFormat(cl_channel_order order, cl_channel_type type)
+    {
+        image_channel_order = order;
+        image_channel_data_type = type;
+    }
+
+    //! \brief Assignment operator.
+    ImageFormat& operator = (const ImageFormat& rhs)
+    {
+        if (this != &rhs) {
+            this->image_channel_data_type = rhs.image_channel_data_type;
+            this->image_channel_order     = rhs.image_channel_order;
+        }
+        return *this;
+    }
+};
+
+/*! \brief Class interface for cl_device_id.
+ *
+ *  \note Copies of these objects are inexpensive, since they don't 'own'
+ *        any underlying resources or data structures.
+ *
+ *  \see cl_device_id
+ */
+class Device : public detail::Wrapper<cl_device_id>
+{
+public:
+    //! \brief Default constructor - initializes to NULL.
+    Device() : detail::Wrapper<cl_type>() { }
+
+    /*! \brief Copy constructor.
+     * 
+     *  This simply copies the device ID value, which is an inexpensive operation.
+     */
+    Device(const Device& device) : detail::Wrapper<cl_type>(device) { }
+
+    /*! \brief Constructor from cl_device_id.
+     * 
+     *  This simply copies the device ID value, which is an inexpensive operation.
+     */
+    Device(const cl_device_id &device) : detail::Wrapper<cl_type>(device) { }
+
+    /*! \brief Returns the first device on the default context.
+     *
+     *  \see Context::getDefault()
+     */
+    static Device getDefault(cl_int * err = NULL);
+
+    /*! \brief Assignment operator from Device.
+     * 
+     *  This simply copies the device ID value, which is an inexpensive operation.
+     */
+    Device& operator = (const Device& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_device_id.
+     * 
+     *  This simply copies the device ID value, which is an inexpensive operation.
+     */
+    Device& operator = (const cl_device_id& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetDeviceInfo().
+    template <typename T>
+    cl_int getInfo(cl_device_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetDeviceInfo, object_, name, param),
+            __GET_DEVICE_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetDeviceInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_device_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_device_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    /**
+     * CL 1.2 version
+     */
+#if defined(CL_VERSION_1_2)
+    //! \brief Wrapper for clCreateSubDevicesEXT().
+    cl_int createSubDevices(
+        const cl_device_partition_property * properties,
+        VECTOR_CLASS<Device>* devices)
+    {
+        cl_uint n = 0;
+        cl_int err = clCreateSubDevices(object_, properties, 0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_SUB_DEVICES);
+        }
+
+        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
+        err = clCreateSubDevices(object_, properties, n, ids, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_SUB_DEVICES);
+        }
+
+        devices->assign(&ids[0], &ids[n]);
+        return CL_SUCCESS;
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+/**
+ * CL 1.1 version that uses device fission.
+ */
+#if defined(CL_VERSION_1_1)
+#if defined(USE_CL_DEVICE_FISSION)
+    cl_int createSubDevices(
+        const cl_device_partition_property_ext * properties,
+        VECTOR_CLASS<Device>* devices)
+    {
+        typedef CL_API_ENTRY cl_int 
+            ( CL_API_CALL * PFN_clCreateSubDevicesEXT)(
+                cl_device_id /*in_device*/,
+                const cl_device_partition_property_ext * /* properties */,
+                cl_uint /*num_entries*/,
+                cl_device_id * /*out_devices*/,
+                cl_uint * /*num_devices*/ ) CL_EXT_SUFFIX__VERSION_1_1;
+
+        static PFN_clCreateSubDevicesEXT pfn_clCreateSubDevicesEXT = NULL;
+        __INIT_CL_EXT_FCN_PTR(clCreateSubDevicesEXT);
+
+        cl_uint n = 0;
+        cl_int err = pfn_clCreateSubDevicesEXT(object_, properties, 0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_SUB_DEVICES);
+        }
+
+        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
+        err = pfn_clCreateSubDevicesEXT(object_, properties, n, ids, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_SUB_DEVICES);
+        }
+
+        devices->assign(&ids[0], &ids[n]);
+        return CL_SUCCESS;
+    }
+#endif // #if defined(USE_CL_DEVICE_FISSION)
+#endif // #if defined(CL_VERSION_1_1)
+};
+
+/*! \brief Class interface for cl_platform_id.
+ *
+ *  \note Copies of these objects are inexpensive, since they don't 'own'
+ *        any underlying resources or data structures.
+ *
+ *  \see cl_platform_id
+ */
+class Platform : public detail::Wrapper<cl_platform_id>
+{
+public:
+    //! \brief Default constructor - initializes to NULL.
+    Platform() : detail::Wrapper<cl_type>()  { }
+
+    /*! \brief Copy constructor.
+     * 
+     *  This simply copies the platform ID value, which is an inexpensive operation.
+     */
+    Platform(const Platform& platform) : detail::Wrapper<cl_type>(platform) { }
+
+    /*! \brief Constructor from cl_platform_id.
+     * 
+     *  This simply copies the platform ID value, which is an inexpensive operation.
+     */
+    Platform(const cl_platform_id &platform) : detail::Wrapper<cl_type>(platform) { }
+
+    /*! \brief Assignment operator from Platform.
+     * 
+     *  This simply copies the platform ID value, which is an inexpensive operation.
+     */
+    Platform& operator = (const Platform& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_platform_id.
+     * 
+     *  This simply copies the platform ID value, which is an inexpensive operation.
+     */
+    Platform& operator = (const cl_platform_id& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetPlatformInfo().
+    cl_int getInfo(cl_platform_info name, STRING_CLASS* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetPlatformInfo, object_, name, param),
+            __GET_PLATFORM_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetPlatformInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_platform_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_platform_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    /*! \brief Gets a list of devices for this platform.
+     * 
+     *  Wraps clGetDeviceIDs().
+     */
+    cl_int getDevices(
+        cl_device_type type,
+        VECTOR_CLASS<Device>* devices) const
+    {
+        cl_uint n = 0;
+        if( devices == NULL ) {
+            return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
+        }
+        cl_int err = ::clGetDeviceIDs(object_, type, 0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
+        }
+
+        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
+        err = ::clGetDeviceIDs(object_, type, n, ids, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
+        }
+
+        devices->assign(&ids[0], &ids[n]);
+        return CL_SUCCESS;
+    }
+
+#if defined(USE_DX_INTEROP)
+   /*! \brief Get the list of available D3D10 devices.
+     *
+     *  \param d3d_device_source.
+     *
+     *  \param d3d_object.
+     *
+     *  \param d3d_device_set.
+     *
+     *  \param devices returns a vector of OpenCL D3D10 devices found. The cl::Device
+     *  values returned in devices can be used to identify a specific OpenCL
+     *  device. If \a devices argument is NULL, this argument is ignored.
+     *
+     *  \return One of the following values:
+     *    - CL_SUCCESS if the function is executed successfully.
+     *
+     *  The application can query specific capabilities of the OpenCL device(s)
+     *  returned by cl::getDevices. This can be used by the application to
+     *  determine which device(s) to use.
+     *
+     * \note In the case that exceptions are enabled and a return value
+     * other than CL_SUCCESS is generated, then cl::Error exception is
+     * generated.
+     */
+    cl_int getDevices(
+        cl_d3d10_device_source_khr d3d_device_source,
+        void *                     d3d_object,
+        cl_d3d10_device_set_khr    d3d_device_set,
+        VECTOR_CLASS<Device>* devices) const
+    {
+        typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clGetDeviceIDsFromD3D10KHR)(
+            cl_platform_id platform, 
+            cl_d3d10_device_source_khr d3d_device_source, 
+            void * d3d_object,
+            cl_d3d10_device_set_khr d3d_device_set,
+            cl_uint num_entries,
+            cl_device_id * devices,
+            cl_uint* num_devices);
+
+        if( devices == NULL ) {
+            return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_DEVICE_IDS_ERR);
+        }
+
+        static PFN_clGetDeviceIDsFromD3D10KHR pfn_clGetDeviceIDsFromD3D10KHR = NULL;
+        __INIT_CL_EXT_FCN_PTR_PLATFORM(object_, clGetDeviceIDsFromD3D10KHR);
+
+        cl_uint n = 0;
+        cl_int err = pfn_clGetDeviceIDsFromD3D10KHR(
+            object_, 
+            d3d_device_source, 
+            d3d_object,
+            d3d_device_set, 
+            0, 
+            NULL, 
+            &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
+        }
+
+        cl_device_id* ids = (cl_device_id*) alloca(n * sizeof(cl_device_id));
+        err = pfn_clGetDeviceIDsFromD3D10KHR(
+            object_, 
+            d3d_device_source, 
+            d3d_object,
+            d3d_device_set,
+            n, 
+            ids, 
+            NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_DEVICE_IDS_ERR);
+        }
+
+        devices->assign(&ids[0], &ids[n]);
+        return CL_SUCCESS;
+    }
+#endif
+
+    /*! \brief Gets a list of available platforms.
+     * 
+     *  Wraps clGetPlatformIDs().
+     */
+    static cl_int get(
+        VECTOR_CLASS<Platform>* platforms)
+    {
+        cl_uint n = 0;
+
+        if( platforms == NULL ) {
+            return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR);
+        }
+
+        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+        }
+
+        cl_platform_id* ids = (cl_platform_id*) alloca(
+            n * sizeof(cl_platform_id));
+        err = ::clGetPlatformIDs(n, ids, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+        }
+
+        platforms->assign(&ids[0], &ids[n]);
+        return CL_SUCCESS;
+    }
+
+    /*! \brief Gets the first available platform.
+     * 
+     *  Wraps clGetPlatformIDs(), returning the first result.
+     */
+    static cl_int get(
+        Platform * platform)
+    {
+        cl_uint n = 0;
+
+        if( platform == NULL ) {
+            return detail::errHandler(CL_INVALID_ARG_VALUE, __GET_PLATFORM_IDS_ERR);
+        }
+
+        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+        }
+
+        cl_platform_id* ids = (cl_platform_id*) alloca(
+            n * sizeof(cl_platform_id));
+        err = ::clGetPlatformIDs(n, ids, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+        }
+
+        *platform = ids[0];
+        return CL_SUCCESS;
+    }
+
+    /*! \brief Gets the first available platform, returning it by value.
+     * 
+     *  Wraps clGetPlatformIDs(), returning the first result.
+     */
+    static Platform get(
+        cl_int * errResult = NULL)
+    {
+        Platform platform;
+        cl_uint n = 0;
+        cl_int err = ::clGetPlatformIDs(0, NULL, &n);
+        if (err != CL_SUCCESS) {
+            detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+            if (errResult != NULL) {
+                *errResult = err;
+            }
+        }
+
+        cl_platform_id* ids = (cl_platform_id*) alloca(
+            n * sizeof(cl_platform_id));
+        err = ::clGetPlatformIDs(n, ids, NULL);
+
+        if (err != CL_SUCCESS) {
+            detail::errHandler(err, __GET_PLATFORM_IDS_ERR);
+        }
+
+        if (errResult != NULL) {
+            *errResult = err;
+        }
+        
+        return ids[0];
+    }
+
+    static Platform getDefault( 
+        cl_int *errResult = NULL )
+    {
+        return get(errResult);
+    }
+
+    
+#if defined(CL_VERSION_1_2)
+    //! \brief Wrapper for clUnloadCompiler().
+    cl_int
+    unloadCompiler()
+    {
+        return ::clUnloadPlatformCompiler(object_);
+    }
+#endif // #if defined(CL_VERSION_1_2)
+}; // class Platform
+
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2))
+/**
+ * Unload the OpenCL compiler.
+ * \note Deprecated for OpenCL 1.2. Use Platform::unloadCompiler instead.
+ */
+inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_int
+UnloadCompiler() CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+inline cl_int
+UnloadCompiler()
+{
+    return ::clUnloadCompiler();
+}
+#endif // #if defined(CL_VERSION_1_1)
+
+/*! \brief Class interface for cl_context.
+ *
+ *  \note Copies of these objects are shallow, meaning that the copy will refer
+ *        to the same underlying cl_context as the original.  For details, see
+ *        clRetainContext() and clReleaseContext().
+ *
+ *  \see cl_context
+ */
+class Context 
+    : public detail::Wrapper<cl_context>
+{
+private:
+    static volatile int default_initialized_;
+    static Context default_;
+    static volatile cl_int default_error_;
+public:
+    /*! \brief Destructor.
+     *
+     *  This calls clReleaseContext() on the value held by this instance.
+     */
+    ~Context() { }
+
+    /*! \brief Constructs a context including a list of specified devices.
+     *
+     *  Wraps clCreateContext().
+     */
+    Context(
+        const VECTOR_CLASS<Device>& devices,
+        cl_context_properties* properties = NULL,
+        void (CL_CALLBACK * notifyFptr)(
+            const char *,
+            const void *,
+            ::size_t,
+            void *) = NULL,
+        void* data = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        ::size_t numDevices = devices.size();
+        cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
+        for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
+            deviceIDs[deviceIndex] = (devices[deviceIndex])();
+        }
+
+        object_ = ::clCreateContext(
+            properties, (cl_uint) numDevices,
+            deviceIDs,
+            notifyFptr, data, &error);
+
+        detail::errHandler(error, __CREATE_CONTEXT_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Context(
+        const Device& device,
+        cl_context_properties* properties = NULL,
+        void (CL_CALLBACK * notifyFptr)(
+            const char *,
+            const void *,
+            ::size_t,
+            void *) = NULL,
+        void* data = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        cl_device_id deviceID = device();
+
+        object_ = ::clCreateContext(
+            properties, 1,
+            &deviceID,
+            notifyFptr, data, &error);
+
+        detail::errHandler(error, __CREATE_CONTEXT_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    /*! \brief Constructs a context including all devices of a specified type.
+     *
+     *  Wraps clCreateContextFromType().
+     */
+    Context(
+        cl_device_type type,
+        cl_context_properties* properties = NULL,
+        void (CL_CALLBACK * notifyFptr)(
+            const char *,
+            const void *,
+            ::size_t,
+            void *) = NULL,
+        void* data = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+#if !defined(__APPLE__) || !defined(__MACOS)
+        cl_context_properties prop[4] = {CL_CONTEXT_PLATFORM, 0, 0, 0 };	
+        if (properties == NULL) {
+            prop[1] = (cl_context_properties)Platform::get(&error)();
+            if (error != CL_SUCCESS) {
+                detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
+                if (err != NULL) {
+                    *err = error;
+                    return;
+                }
+            }
+
+            properties = &prop[0];
+        }
+#endif
+        object_ = ::clCreateContextFromType(
+            properties, type, notifyFptr, data, &error);
+
+        detail::errHandler(error, __CREATE_CONTEXT_FROM_TYPE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    /*! \brief Returns a singleton context including all devices of CL_DEVICE_TYPE_DEFAULT.
+     *
+     *  \note All calls to this function return the same cl_context as the first.
+     */
+    static Context getDefault(cl_int * err = NULL) 
+    {
+        int state = detail::compare_exchange(
+            &default_initialized_, 
+            __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
+        
+        if (state & __DEFAULT_INITIALIZED) {
+            if (err != NULL) {
+                *err = default_error_;
+            }
+            return default_;
+        }
+
+        if (state & __DEFAULT_BEING_INITIALIZED) {
+              // Assume writes will propagate eventually...
+              while(default_initialized_ != __DEFAULT_INITIALIZED) {
+                  detail::fence();
+              }
+
+            if (err != NULL) {
+                *err = default_error_;
+            }
+            return default_;
+        }
+
+        cl_int error;
+        default_ = Context(
+            CL_DEVICE_TYPE_DEFAULT,
+            NULL,
+            NULL,
+            NULL,
+            &error);
+
+        detail::fence();
+
+        default_error_ = error;
+        // Assume writes will propagate eventually...
+        default_initialized_ = __DEFAULT_INITIALIZED;
+
+        detail::fence();
+
+        if (err != NULL) {
+            *err = default_error_;
+        }
+        return default_;
+
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Context() : detail::Wrapper<cl_type>() { }
+
+    /*! \brief Copy constructor.
+     * 
+     *  This calls clRetainContext() on the parameter's cl_context.
+     */
+    Context(const Context& context) : detail::Wrapper<cl_type>(context) { }
+
+    /*! \brief Constructor from cl_context - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the cl_context
+     *  into the new Context object.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Context(const cl_context& context) : detail::Wrapper<cl_type>(context) { }
+
+    /*! \brief Assignment operator from Context.
+     * 
+     *  This calls clRetainContext() on the parameter and clReleaseContext() on
+     *  the previous value held by this instance.
+     */
+    Context& operator = (const Context& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_context - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the rhs and calls
+     *  clReleaseContext() on the value previously held by this instance.
+     */
+    Context& operator = (const cl_context& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetContextInfo().
+    template <typename T>
+    cl_int getInfo(cl_context_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetContextInfo, object_, name, param),
+            __GET_CONTEXT_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetContextInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_context_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_context_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    /*! \brief Gets a list of supported image formats.
+     *  
+     *  Wraps clGetSupportedImageFormats().
+     */
+    cl_int getSupportedImageFormats(
+        cl_mem_flags flags,
+        cl_mem_object_type type,
+        VECTOR_CLASS<ImageFormat>* formats) const
+    {
+        cl_uint numEntries;
+        cl_int err = ::clGetSupportedImageFormats(
+           object_, 
+           flags,
+           type, 
+           0, 
+           NULL, 
+           &numEntries);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
+        }
+
+        ImageFormat* value = (ImageFormat*)
+            alloca(numEntries * sizeof(ImageFormat));
+        err = ::clGetSupportedImageFormats(
+            object_, 
+            flags, 
+            type, 
+            numEntries,
+            (cl_image_format*) value, 
+            NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __GET_SUPPORTED_IMAGE_FORMATS_ERR);
+        }
+
+        formats->assign(&value[0], &value[numEntries]);
+        return CL_SUCCESS;
+    }
+};
+
+inline Device Device::getDefault(cl_int * err)
+{
+    cl_int error;
+    Device device;
+
+    Context context = Context::getDefault(&error);
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+    detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+#else
+    detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+#endif
+
+    if (error != CL_SUCCESS) {
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+    else {
+        device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
+        if (err != NULL) {
+            *err = CL_SUCCESS;
+        }
+    }
+
+    return device;
+}
+
+
+#ifdef _WIN32
+__declspec(selectany) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
+__declspec(selectany) Context Context::default_;
+__declspec(selectany) volatile cl_int Context::default_error_ = CL_SUCCESS;
+#else
+__attribute__((weak)) volatile int Context::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
+__attribute__((weak)) Context Context::default_;
+__attribute__((weak)) volatile cl_int Context::default_error_ = CL_SUCCESS;
+#endif
+
+/*! \brief Class interface for cl_event.
+ *
+ *  \note Copies of these objects are shallow, meaning that the copy will refer
+ *        to the same underlying cl_event as the original.  For details, see
+ *        clRetainEvent() and clReleaseEvent().
+ *
+ *  \see cl_event
+ */
+class Event : public detail::Wrapper<cl_event>
+{
+public:
+    /*! \brief Destructor.
+     *
+     *  This calls clReleaseEvent() on the value held by this instance.
+     */
+    ~Event() { }
+ 
+    //! \brief Default constructor - initializes to NULL.
+    Event() : detail::Wrapper<cl_type>() { }
+
+    /*! \brief Copy constructor.
+     * 
+     *  This calls clRetainEvent() on the parameter's cl_event.
+     */
+    Event(const Event& event) : detail::Wrapper<cl_type>(event) { }
+
+    /*! \brief Constructor from cl_event - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the cl_event
+     *  into the new Event object.
+     */
+    Event(const cl_event& event) : detail::Wrapper<cl_type>(event) { }
+
+    /*! \brief Assignment operator from cl_event - takes ownership.
+     *
+     *  This effectively transfers ownership of a refcount on the rhs and calls
+     *  clReleaseEvent() on the value previously held by this instance.
+     */
+    Event& operator = (const Event& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_event.
+     * 
+     *  This calls clRetainEvent() on the parameter and clReleaseEvent() on
+     *  the previous value held by this instance.
+     */
+    Event& operator = (const cl_event& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetEventInfo().
+    template <typename T>
+    cl_int getInfo(cl_event_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetEventInfo, object_, name, param),
+            __GET_EVENT_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetEventInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_event_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_event_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    //! \brief Wrapper for clGetEventProfilingInfo().
+    template <typename T>
+    cl_int getProfilingInfo(cl_profiling_info name, T* param) const
+    {
+        return detail::errHandler(detail::getInfo(
+            &::clGetEventProfilingInfo, object_, name, param),
+            __GET_EVENT_PROFILE_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetEventProfilingInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_profiling_info, name>::param_type
+    getProfilingInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_profiling_info, name>::param_type param;
+        cl_int result = getProfilingInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    /*! \brief Blocks the calling thread until this event completes.
+     * 
+     *  Wraps clWaitForEvents().
+     */
+    cl_int wait() const
+    {
+        return detail::errHandler(
+            ::clWaitForEvents(1, &object_),
+            __WAIT_FOR_EVENTS_ERR);
+    }
+
+#if defined(CL_VERSION_1_1)
+    /*! \brief Registers a user callback function for a specific command execution status.
+     *
+     *  Wraps clSetEventCallback().
+     */
+    cl_int setCallback(
+        cl_int type,
+        void (CL_CALLBACK * pfn_notify)(cl_event, cl_int, void *),		
+        void * user_data = NULL)
+    {
+        return detail::errHandler(
+            ::clSetEventCallback(
+                object_,
+                type,
+                pfn_notify,
+                user_data), 
+            __SET_EVENT_CALLBACK_ERR);
+    }
+#endif
+
+    /*! \brief Blocks the calling thread until every event specified is complete.
+     * 
+     *  Wraps clWaitForEvents().
+     */
+    static cl_int
+    waitForEvents(const VECTOR_CLASS<Event>& events)
+    {
+        return detail::errHandler(
+            ::clWaitForEvents(
+                (cl_uint) events.size(), (cl_event*)&events.front()),
+            __WAIT_FOR_EVENTS_ERR);
+    }
+};
+
+#if defined(CL_VERSION_1_1)
+/*! \brief Class interface for user events (a subset of cl_event's).
+ * 
+ *  See Event for details about copy semantics, etc.
+ */
+class UserEvent : public Event
+{
+public:
+    /*! \brief Constructs a user event on a given context.
+     *
+     *  Wraps clCreateUserEvent().
+     */
+    UserEvent(
+        const Context& context,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateUserEvent(
+            context(),
+            &error);
+
+        detail::errHandler(error, __CREATE_USER_EVENT_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    UserEvent() : Event() { }
+
+    //! \brief Copy constructor - performs shallow copy.
+    UserEvent(const UserEvent& event) : Event(event) { }
+
+    //! \brief Assignment Operator - performs shallow copy.
+    UserEvent& operator = (const UserEvent& rhs)
+    {
+        if (this != &rhs) {
+            Event::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Sets the execution status of a user event object.
+     *
+     *  Wraps clSetUserEventStatus().
+     */
+    cl_int setStatus(cl_int status)
+    {
+        return detail::errHandler(
+            ::clSetUserEventStatus(object_,status), 
+            __SET_USER_EVENT_STATUS_ERR);
+    }
+};
+#endif
+
+/*! \brief Blocks the calling thread until every event specified is complete.
+ * 
+ *  Wraps clWaitForEvents().
+ */
+inline static cl_int
+WaitForEvents(const VECTOR_CLASS<Event>& events)
+{
+    return detail::errHandler(
+        ::clWaitForEvents(
+            (cl_uint) events.size(), (cl_event*)&events.front()),
+        __WAIT_FOR_EVENTS_ERR);
+}
+
+/*! \brief Class interface for cl_mem.
+ *
+ *  \note Copies of these objects are shallow, meaning that the copy will refer
+ *        to the same underlying cl_mem as the original.  For details, see
+ *        clRetainMemObject() and clReleaseMemObject().
+ *
+ *  \see cl_mem
+ */
+class Memory : public detail::Wrapper<cl_mem>
+{
+public:
+ 
+    /*! \brief Destructor.
+     *
+     *  This calls clReleaseMemObject() on the value held by this instance.
+     */
+    ~Memory() {}
+
+    //! \brief Default constructor - initializes to NULL.
+    Memory() : detail::Wrapper<cl_type>() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     * 
+     *  This calls clRetainMemObject() on the parameter's cl_mem.
+     */
+    Memory(const Memory& memory) : detail::Wrapper<cl_type>(memory) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the cl_mem
+     *  into the new Memory object.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Memory(const cl_mem& memory) : detail::Wrapper<cl_type>(memory) { }
+
+    /*! \brief Assignment operator from Memory.
+     * 
+     *  This calls clRetainMemObject() on the parameter and clReleaseMemObject()
+     *  on the previous value held by this instance.
+     */
+    Memory& operator = (const Memory& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_mem - takes ownership.
+     *
+     *  This effectively transfers ownership of a refcount on the rhs and calls
+     *  clReleaseMemObject() on the value previously held by this instance.
+     */
+    Memory& operator = (const cl_mem& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetMemObjectInfo().
+    template <typename T>
+    cl_int getInfo(cl_mem_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetMemObjectInfo, object_, name, param),
+            __GET_MEM_OBJECT_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetMemObjectInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_mem_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_mem_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+#if defined(CL_VERSION_1_1)
+    /*! \brief Registers a callback function to be called when the memory object
+     *         is no longer needed.
+     *
+     *  Wraps clSetMemObjectDestructorCallback().
+     *
+     *  Repeated calls to this function, for a given cl_mem value, will append
+     *  to the list of functions called (in reverse order) when memory object's
+     *  resources are freed and the memory object is deleted.
+     *
+     *  \note
+     *  The registered callbacks are associated with the underlying cl_mem
+     *  value - not the Memory class instance.
+     */
+    cl_int setDestructorCallback(
+        void (CL_CALLBACK * pfn_notify)(cl_mem, void *),		
+        void * user_data = NULL)
+    {
+        return detail::errHandler(
+            ::clSetMemObjectDestructorCallback(
+                object_,
+                pfn_notify,
+                user_data), 
+            __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR);
+    }
+#endif
+
+};
+
+// Pre-declare copy functions
+class Buffer;
+template< typename IteratorType >
+cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer );
+template< typename IteratorType >
+cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator );
+
+/*! \brief Class interface for Buffer Memory Objects.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ *
+ *  \see Memory
+ */
+class Buffer : public Memory
+{
+public:
+
+    /*! \brief Constructs a Buffer in a specified context.
+     *
+     *  Wraps clCreateBuffer().
+     *
+     *  \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was
+     *                  specified.  Note alignment & exclusivity requirements.
+     */
+    Buffer(
+        const Context& context,
+        cl_mem_flags flags,
+        ::size_t size,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
+
+        detail::errHandler(error, __CREATE_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    /*! \brief Constructs a Buffer in the default context.
+     *
+     *  Wraps clCreateBuffer().
+     *
+     *  \param host_ptr Storage to be used if the CL_MEM_USE_HOST_PTR flag was
+     *                  specified.  Note alignment & exclusivity requirements.
+     *
+     *  \see Context::getDefault()
+     */
+    Buffer(
+         cl_mem_flags flags,
+        ::size_t size,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        Context context = Context::getDefault(err);
+
+        object_ = ::clCreateBuffer(context(), flags, size, host_ptr, &error);
+
+        detail::errHandler(error, __CREATE_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    /*!
+     * \brief Construct a Buffer from a host container via iterators.
+     * If useHostPtr is specified iterators must be random access.
+     */
+    template< typename IteratorType >
+    Buffer(
+        IteratorType startIterator,
+        IteratorType endIterator,
+        bool readOnly,
+        bool useHostPtr = false,
+        cl_int* err = NULL)
+    {
+        typedef typename std::iterator_traits<IteratorType>::value_type DataType;
+        cl_int error;
+
+        cl_mem_flags flags = 0;
+        if( readOnly ) {
+            flags |= CL_MEM_READ_ONLY;
+        }
+        else {
+            flags |= CL_MEM_READ_WRITE;
+        }
+        if( useHostPtr ) {
+            flags |= CL_MEM_USE_HOST_PTR;
+        }
+        
+        ::size_t size = sizeof(DataType)*(endIterator - startIterator);
+
+        Context context = Context::getDefault(err);
+
+        if( useHostPtr ) {
+            object_ = ::clCreateBuffer(context(), flags, size, static_cast<DataType*>(&*startIterator), &error);
+        } else {
+            object_ = ::clCreateBuffer(context(), flags, size, 0, &error);
+        }
+
+        detail::errHandler(error, __CREATE_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+
+        if( !useHostPtr ) {
+            error = cl::copy(startIterator, endIterator, *this);
+            detail::errHandler(error, __CREATE_BUFFER_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Buffer() : Memory() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Buffer(const Buffer& buffer) : Memory(buffer) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Buffer(const cl_mem& buffer) : Memory(buffer) { }
+
+    /*! \brief Assignment from Buffer - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Buffer& operator = (const Buffer& rhs)
+    {
+        if (this != &rhs) {
+            Memory::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Buffer& operator = (const cl_mem& rhs)
+    {
+        Memory::operator=(rhs);
+        return *this;
+    }
+
+#if defined(CL_VERSION_1_1)
+    /*! \brief Creates a new buffer object from this.
+     *
+     *  Wraps clCreateSubBuffer().
+     */
+    Buffer createSubBuffer(
+        cl_mem_flags flags,
+        cl_buffer_create_type buffer_create_type,
+        const void * buffer_create_info,
+        cl_int * err = NULL)
+    {
+        Buffer result;
+        cl_int error;
+        result.object_ = ::clCreateSubBuffer(
+            object_, 
+            flags, 
+            buffer_create_type, 
+            buffer_create_info, 
+            &error);
+
+        detail::errHandler(error, __CREATE_SUBBUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+
+        return result;
+    }		
+#endif
+};
+
+#if defined (USE_DX_INTEROP)
+/*! \brief Class interface for creating OpenCL buffers from ID3D10Buffer's.
+ *
+ *  This is provided to facilitate interoperability with Direct3D.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ *
+ *  \see Memory
+ */
+class BufferD3D10 : public Buffer
+{
+public:
+    typedef CL_API_ENTRY cl_mem (CL_API_CALL *PFN_clCreateFromD3D10BufferKHR)(
+    cl_context context, cl_mem_flags flags, ID3D10Buffer*  buffer,
+    cl_int* errcode_ret);
+
+    /*! \brief Constructs a BufferD3D10, in a specified context, from a
+     *         given ID3D10Buffer.
+     *
+     *  Wraps clCreateFromD3D10BufferKHR().
+     */
+    BufferD3D10(
+        const Context& context,
+        cl_mem_flags flags,
+        ID3D10Buffer* bufobj,
+        cl_int * err = NULL)
+    {
+        static PFN_clCreateFromD3D10BufferKHR pfn_clCreateFromD3D10BufferKHR = NULL;
+
+#if defined(CL_VERSION_1_2)
+        vector<cl_context_properties> props = context.getInfo<CL_CONTEXT_PROPERTIES>();
+        cl_platform platform = -1;
+        for( int i = 0; i < props.size(); ++i ) {
+            if( props[i] == CL_CONTEXT_PLATFORM ) {
+                platform = props[i+1];
+            }
+        }
+        __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clCreateFromD3D10BufferKHR);
+#endif
+#if defined(CL_VERSION_1_1)
+        __INIT_CL_EXT_FCN_PTR(clCreateFromD3D10BufferKHR);
+#endif
+
+        cl_int error;
+        object_ = pfn_clCreateFromD3D10BufferKHR(
+            context(),
+            flags,
+            bufobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    BufferD3D10() : Buffer() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferD3D10(const BufferD3D10& buffer) : Buffer(buffer) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS BufferD3D10(const cl_mem& buffer) : Buffer(buffer) { }
+
+    /*! \brief Assignment from BufferD3D10 - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferD3D10& operator = (const BufferD3D10& rhs)
+    {
+        if (this != &rhs) {
+            Buffer::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferD3D10& operator = (const cl_mem& rhs)
+    {
+        Buffer::operator=(rhs);
+        return *this;
+    }
+};
+#endif
+
+/*! \brief Class interface for GL Buffer Memory Objects.
+ *
+ *  This is provided to facilitate interoperability with OpenGL.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class BufferGL : public Buffer
+{
+public:
+    /*! \brief Constructs a BufferGL in a specified context, from a given
+     *         GL buffer.
+     *
+     *  Wraps clCreateFromGLBuffer().
+     */
+    BufferGL(
+        const Context& context,
+        cl_mem_flags flags,
+        GLuint bufobj,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateFromGLBuffer(
+            context(),
+            flags,
+            bufobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    BufferGL() : Buffer() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferGL(const BufferGL& buffer) : Buffer(buffer) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS BufferGL(const cl_mem& buffer) : Buffer(buffer) { }
+
+    /*! \brief Assignment from BufferGL - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferGL& operator = (const BufferGL& rhs)
+    {
+        if (this != &rhs) {
+            Buffer::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferGL& operator = (const cl_mem& rhs)
+    {
+        Buffer::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetGLObjectInfo().
+    cl_int getObjectInfo(
+        cl_gl_object_type *type,
+        GLuint * gl_object_name)
+    {
+        return detail::errHandler(
+            ::clGetGLObjectInfo(object_,type,gl_object_name),
+            __GET_GL_OBJECT_INFO_ERR);
+    }
+};
+
+/*! \brief Class interface for GL Render Buffer Memory Objects.
+ *
+ *  This is provided to facilitate interoperability with OpenGL.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class BufferRenderGL : public Buffer
+{
+public:
+    /*! \brief Constructs a BufferRenderGL in a specified context, from a given
+     *         GL Renderbuffer.
+     *
+     *  Wraps clCreateFromGLRenderbuffer().
+     */
+    BufferRenderGL(
+        const Context& context,
+        cl_mem_flags flags,
+        GLuint bufobj,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateFromGLRenderbuffer(
+            context(),
+            flags,
+            bufobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_RENDER_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    BufferRenderGL() : Buffer() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferRenderGL(const BufferGL& buffer) : Buffer(buffer) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS BufferRenderGL(const cl_mem& buffer) : Buffer(buffer) { }
+
+    /*! \brief Assignment from BufferGL - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferRenderGL& operator = (const BufferRenderGL& rhs)
+    {
+        if (this != &rhs) {
+            Buffer::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    BufferRenderGL& operator = (const cl_mem& rhs)
+    {
+        Buffer::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetGLObjectInfo().
+    cl_int getObjectInfo(
+        cl_gl_object_type *type,
+        GLuint * gl_object_name)
+    {
+        return detail::errHandler(
+            ::clGetGLObjectInfo(object_,type,gl_object_name),
+            __GET_GL_OBJECT_INFO_ERR);
+    }
+};
+
+/*! \brief C++ base class for Image Memory objects.
+ *
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class Image : public Memory
+{
+protected:
+    //! \brief Default constructor - initializes to NULL.
+    Image() : Memory() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image(const Image& image) : Memory(image) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image(const cl_mem& image) : Memory(image) { }
+
+    /*! \brief Assignment from Image - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image& operator = (const Image& rhs)
+    {
+        if (this != &rhs) {
+            Memory::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image& operator = (const cl_mem& rhs)
+    {
+        Memory::operator=(rhs);
+        return *this;
+    }
+
+public:
+    //! \brief Wrapper for clGetImageInfo().
+    template <typename T>
+    cl_int getImageInfo(cl_image_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetImageInfo, object_, name, param),
+            __GET_IMAGE_INFO_ERR);
+    }
+    
+    //! \brief Wrapper for clGetImageInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_image_info, name>::param_type
+    getImageInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_image_info, name>::param_type param;
+        cl_int result = getImageInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+};
+
+#if defined(CL_VERSION_1_2)
+/*! \brief Class interface for 1D Image Memory objects.
+ *
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class Image1D : public Image
+{
+public:
+    /*! \brief Constructs a 1D Image in a specified context.
+     *
+     *  Wraps clCreateImage().
+     */
+    Image1D(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t width,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        cl_image_desc desc;
+        desc.image_type = CL_MEM_OBJECT_IMAGE1D;
+        desc.image_width = width;
+        desc.image_row_pitch = 0;
+        desc.num_mip_levels = 0;
+        desc.num_samples = 0;
+        desc.buffer = 0;
+        object_ = ::clCreateImage(
+            context(), 
+            flags, 
+            &format, 
+            &desc, 
+            host_ptr, 
+            &error);
+
+        detail::errHandler(error, __CREATE_IMAGE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Image1D() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image1D(const Image1D& image1D) : Image(image1D) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image1D(const cl_mem& image1D) : Image(image1D) { }
+
+    /*! \brief Assignment from Image1D - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image1D& operator = (const Image1D& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image1D& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+
+/*! \class Image1DBuffer
+ * \brief Image interface for 1D buffer images.
+ */
+class Image1DBuffer : public Image
+{
+public:
+    Image1DBuffer(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t width,
+        const Buffer &buffer,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        cl_image_desc desc;
+        desc.image_type = CL_MEM_OBJECT_IMAGE1D_BUFFER;
+        desc.image_width = width;
+        desc.image_row_pitch = 0;
+        desc.num_mip_levels = 0;
+        desc.num_samples = 0;
+        desc.buffer = buffer();
+        object_ = ::clCreateImage(
+            context(), 
+            flags, 
+            &format, 
+            &desc, 
+            NULL, 
+            &error);
+
+        detail::errHandler(error, __CREATE_IMAGE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Image1DBuffer() { }
+
+    Image1DBuffer(const Image1DBuffer& image1D) : Image(image1D) { }
+
+    __CL_EXPLICIT_CONSTRUCTORS Image1DBuffer(const cl_mem& image1D) : Image(image1D) { }
+
+    Image1DBuffer& operator = (const Image1DBuffer& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    Image1DBuffer& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+
+/*! \class Image1DArray
+ * \brief Image interface for arrays of 1D images.
+ */
+class Image1DArray : public Image
+{
+public:
+    Image1DArray(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t arraySize,
+        ::size_t width,
+        ::size_t rowPitch,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        cl_image_desc desc;
+        desc.image_type = CL_MEM_OBJECT_IMAGE1D_ARRAY;
+        desc.image_array_size = arraySize;
+        desc.image_width = width;
+        desc.image_row_pitch = rowPitch;
+        desc.num_mip_levels = 0;
+        desc.num_samples = 0;
+        desc.buffer = 0;
+        object_ = ::clCreateImage(
+            context(), 
+            flags, 
+            &format, 
+            &desc, 
+            host_ptr, 
+            &error);
+
+        detail::errHandler(error, __CREATE_IMAGE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Image1DArray() { }
+
+    Image1DArray(const Image1DArray& imageArray) : Image(imageArray) { }
+
+    __CL_EXPLICIT_CONSTRUCTORS Image1DArray(const cl_mem& imageArray) : Image(imageArray) { }
+
+    Image1DArray& operator = (const Image1DArray& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    Image1DArray& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+#endif // #if defined(CL_VERSION_1_2)
+
+
+/*! \brief Class interface for 2D Image Memory objects.
+ *
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class Image2D : public Image
+{
+public:
+    /*! \brief Constructs a 1D Image in a specified context.
+     *
+     *  Wraps clCreateImage().
+     */
+    Image2D(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t width,
+        ::size_t height,
+        ::size_t row_pitch = 0,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        bool useCreateImage;
+
+#if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+        // Run-time decision based on the actual platform
+        {
+            cl_uint version = detail::getContextPlatformVersion(context());
+            useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above
+        }
+#elif defined(CL_VERSION_1_2)
+        useCreateImage = true;
+#else
+        useCreateImage = false;
+#endif
+
+#if defined(CL_VERSION_1_2)
+        if (useCreateImage)
+        {
+            cl_image_desc desc;
+            desc.image_type = CL_MEM_OBJECT_IMAGE2D;
+            desc.image_width = width;
+            desc.image_height = height;
+            desc.image_row_pitch = row_pitch;
+            desc.num_mip_levels = 0;
+            desc.num_samples = 0;
+            desc.buffer = 0;
+            object_ = ::clCreateImage(
+                context(),
+                flags,
+                &format,
+                &desc,
+                host_ptr,
+                &error);
+
+            detail::errHandler(error, __CREATE_IMAGE_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+#endif // #if defined(CL_VERSION_1_2)
+#if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+        if (!useCreateImage)
+        {
+            object_ = ::clCreateImage2D(
+                context(), flags,&format, width, height, row_pitch, host_ptr, &error);
+
+            detail::errHandler(error, __CREATE_IMAGE2D_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+#endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Image2D() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2D(const Image2D& image2D) : Image(image2D) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image2D(const cl_mem& image2D) : Image(image2D) { }
+
+    /*! \brief Assignment from Image2D - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2D& operator = (const Image2D& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2D& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+
+
+#if !defined(CL_VERSION_1_2)
+/*! \brief Class interface for GL 2D Image Memory objects.
+ *
+ *  This is provided to facilitate interoperability with OpenGL.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ *  \note Deprecated for OpenCL 1.2. Please use ImageGL instead.
+ */
+class CL_EXT_PREFIX__VERSION_1_1_DEPRECATED Image2DGL CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED : public Image2D
+{
+public:
+    /*! \brief Constructs an Image2DGL in a specified context, from a given
+     *         GL Texture.
+     *
+     *  Wraps clCreateFromGLTexture2D().
+     */
+    Image2DGL(
+        const Context& context,
+        cl_mem_flags flags,
+        GLenum target,
+        GLint  miplevel,
+        GLuint texobj,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateFromGLTexture2D(
+            context(),
+            flags,
+            target,
+            miplevel,
+            texobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_TEXTURE_2D_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+
+    }
+    
+    //! \brief Default constructor - initializes to NULL.
+    Image2DGL() : Image2D() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2DGL(const Image2DGL& image) : Image2D(image) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image2DGL(const cl_mem& image) : Image2D(image) { }
+
+    /*! \brief Assignment from Image2DGL - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2DGL& operator = (const Image2DGL& rhs)
+    {
+        if (this != &rhs) {
+            Image2D::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image2DGL& operator = (const cl_mem& rhs)
+    {
+        Image2D::operator=(rhs);
+        return *this;
+    }
+};
+#endif // #if !defined(CL_VERSION_1_2)
+
+#if defined(CL_VERSION_1_2)
+/*! \class Image2DArray
+ * \brief Image interface for arrays of 2D images.
+ */
+class Image2DArray : public Image
+{
+public:
+    Image2DArray(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t arraySize,
+        ::size_t width,
+        ::size_t height,
+        ::size_t rowPitch,
+        ::size_t slicePitch,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        cl_image_desc desc;
+        desc.image_type = CL_MEM_OBJECT_IMAGE2D_ARRAY;
+        desc.image_array_size = arraySize;
+        desc.image_width = width;
+        desc.image_height = height;
+        desc.image_row_pitch = rowPitch;
+        desc.image_slice_pitch = slicePitch;
+        desc.num_mip_levels = 0;
+        desc.num_samples = 0;
+        desc.buffer = 0;
+        object_ = ::clCreateImage(
+            context(), 
+            flags, 
+            &format, 
+            &desc, 
+            host_ptr, 
+            &error);
+
+        detail::errHandler(error, __CREATE_IMAGE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Image2DArray() { }
+
+    Image2DArray(const Image2DArray& imageArray) : Image(imageArray) { }
+
+    __CL_EXPLICIT_CONSTRUCTORS Image2DArray(const cl_mem& imageArray) : Image(imageArray) { }
+
+    Image2DArray& operator = (const Image2DArray& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    Image2DArray& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+#endif // #if defined(CL_VERSION_1_2)
+
+/*! \brief Class interface for 3D Image Memory objects.
+ *
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class Image3D : public Image
+{
+public:
+    /*! \brief Constructs a 3D Image in a specified context.
+     *
+     *  Wraps clCreateImage().
+     */
+    Image3D(
+        const Context& context,
+        cl_mem_flags flags,
+        ImageFormat format,
+        ::size_t width,
+        ::size_t height,
+        ::size_t depth,
+        ::size_t row_pitch = 0,
+        ::size_t slice_pitch = 0,
+        void* host_ptr = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        bool useCreateImage;
+
+#if defined(CL_VERSION_1_2) && defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+        // Run-time decision based on the actual platform
+        {
+            cl_uint version = detail::getContextPlatformVersion(context());
+            useCreateImage = (version >= 0x10002); // OpenCL 1.2 or above
+        }
+#elif defined(CL_VERSION_1_2)
+        useCreateImage = true;
+#else
+        useCreateImage = false;
+#endif
+
+#if defined(CL_VERSION_1_2)
+        if (useCreateImage)
+        {
+            cl_image_desc desc;
+            desc.image_type = CL_MEM_OBJECT_IMAGE3D;
+            desc.image_width = width;
+            desc.image_height = height;
+            desc.image_depth = depth;
+            desc.image_row_pitch = row_pitch;
+            desc.image_slice_pitch = slice_pitch;
+            desc.num_mip_levels = 0;
+            desc.num_samples = 0;
+            desc.buffer = 0;
+            object_ = ::clCreateImage(
+                context(), 
+                flags, 
+                &format, 
+                &desc, 
+                host_ptr, 
+                &error);
+
+            detail::errHandler(error, __CREATE_IMAGE_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+#endif  // #if defined(CL_VERSION_1_2)
+#if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+        if (!useCreateImage)
+        {
+            object_ = ::clCreateImage3D(
+                context(), flags, &format, width, height, depth, row_pitch,
+                slice_pitch, host_ptr, &error);
+
+            detail::errHandler(error, __CREATE_IMAGE3D_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+#endif // #if !defined(CL_VERSION_1_2) || defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS)
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Image3D() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3D(const Image3D& image3D) : Image(image3D) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image3D(const cl_mem& image3D) : Image(image3D) { }
+
+    /*! \brief Assignment from Image3D - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3D& operator = (const Image3D& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3D& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+
+#if !defined(CL_VERSION_1_2)
+/*! \brief Class interface for GL 3D Image Memory objects.
+ *
+ *  This is provided to facilitate interoperability with OpenGL.
+ * 
+ *  See Memory for details about copy semantics, etc.
+ * 
+ *  \see Memory
+ */
+class Image3DGL : public Image3D
+{
+public:
+    /*! \brief Constructs an Image3DGL in a specified context, from a given
+     *         GL Texture.
+     *
+     *  Wraps clCreateFromGLTexture3D().
+     */
+    Image3DGL(
+        const Context& context,
+        cl_mem_flags flags,
+        GLenum target,
+        GLint  miplevel,
+        GLuint texobj,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateFromGLTexture3D(
+            context(),
+            flags,
+            target,
+            miplevel,
+            texobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_TEXTURE_3D_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    //! \brief Default constructor - initializes to NULL.
+    Image3DGL() : Image3D() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3DGL(const Image3DGL& image) : Image3D(image) { }
+
+    /*! \brief Constructor from cl_mem - takes ownership.
+     *
+     *  See Memory for further details.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Image3DGL(const cl_mem& image) : Image3D(image) { }
+
+    /*! \brief Assignment from Image3DGL - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3DGL& operator = (const Image3DGL& rhs)
+    {
+        if (this != &rhs) {
+            Image3D::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment from cl_mem - performs shallow copy.
+     *
+     *  See Memory for further details.
+     */
+    Image3DGL& operator = (const cl_mem& rhs)
+    {
+        Image3D::operator=(rhs);
+        return *this;
+    }
+};
+#endif // #if !defined(CL_VERSION_1_2)
+
+#if defined(CL_VERSION_1_2)
+/*! \class ImageGL
+ * \brief general image interface for GL interop.
+ * We abstract the 2D and 3D GL images into a single instance here
+ * that wraps all GL sourced images on the grounds that setup information
+ * was performed by OpenCL anyway.
+ */
+class ImageGL : public Image
+{
+public:
+    ImageGL(
+        const Context& context,
+        cl_mem_flags flags,
+        GLenum target,
+        GLint  miplevel,
+        GLuint texobj,
+        cl_int * err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateFromGLTexture(
+            context(), 
+            flags, 
+            target,
+            miplevel,
+            texobj,
+            &error);
+
+        detail::errHandler(error, __CREATE_GL_TEXTURE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    ImageGL() : Image() { }
+
+    ImageGL(const ImageGL& image) : Image(image) { }
+
+    __CL_EXPLICIT_CONSTRUCTORS ImageGL(const cl_mem& image) : Image(image) { }
+
+    ImageGL& operator = (const ImageGL& rhs)
+    {
+        if (this != &rhs) {
+            Image::operator=(rhs);
+        }
+        return *this;
+    }
+
+    ImageGL& operator = (const cl_mem& rhs)
+    {
+        Image::operator=(rhs);
+        return *this;
+    }
+};
+#endif // #if defined(CL_VERSION_1_2)
+
+/*! \brief Class interface for cl_sampler.
+ *
+ *  \note Copies of these objects are shallow, meaning that the copy will refer
+ *        to the same underlying cl_sampler as the original.  For details, see
+ *        clRetainSampler() and clReleaseSampler().
+ *
+ *  \see cl_sampler 
+ */
+class Sampler : public detail::Wrapper<cl_sampler>
+{
+public:
+    /*! \brief Destructor.
+     *
+     *  This calls clReleaseSampler() on the value held by this instance.
+     */
+    ~Sampler() { }
+
+    //! \brief Default constructor - initializes to NULL.
+    Sampler() { }
+
+    /*! \brief Constructs a Sampler in a specified context.
+     *
+     *  Wraps clCreateSampler().
+     */
+
+    #if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+    Sampler(
+        const Context& context,
+        cl_bool normalized_coords,
+        cl_addressing_mode addressing_mode,
+        cl_filter_mode filter_mode,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateSampler(
+            context(), 
+            normalized_coords,
+            addressing_mode,
+            filter_mode,
+            &error);
+
+        detail::errHandler(error, __CREATE_SAMPLER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+#else
+    Sampler(
+        const Context& context,
+        const cl_sampler_properties *sampler_properties,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        object_ = ::clCreateSamplerWithProperties(
+            context(), 
+            sampler_properties,
+            &error);
+
+        detail::errHandler(error, __CREATE_SAMPLER_PROPERTY_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+#endif
+
+    /*! \brief Copy constructor - performs shallow copy.
+     * 
+     *  This calls clRetainSampler() on the parameter's cl_sampler.
+     */
+    Sampler(const Sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
+
+    /*! \brief Constructor from cl_sampler - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the cl_sampler
+     *  into the new Sampler object.
+     */
+    Sampler(const cl_sampler& sampler) : detail::Wrapper<cl_type>(sampler) { }
+
+    /*! \brief Assignment operator from Sampler.
+     * 
+     *  This calls clRetainSampler() on the parameter and clReleaseSampler()
+     *  on the previous value held by this instance.
+     */
+    Sampler& operator = (const Sampler& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_sampler - takes ownership.
+     *
+     *  This effectively transfers ownership of a refcount on the rhs and calls
+     *  clReleaseSampler() on the value previously held by this instance.
+     */
+    Sampler& operator = (const cl_sampler& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    //! \brief Wrapper for clGetSamplerInfo().
+    template <typename T>
+    cl_int getInfo(cl_sampler_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetSamplerInfo, object_, name, param),
+            __GET_SAMPLER_INFO_ERR);
+    }
+
+    //! \brief Wrapper for clGetSamplerInfo() that returns by value.
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_sampler_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_sampler_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+};
+
+class Program;
+class CommandQueue;
+class Kernel;
+
+//! \brief Class interface for specifying NDRange values.
+class NDRange
+{
+private:
+    size_t<3> sizes_;
+    cl_uint dimensions_;
+
+public:
+    //! \brief Default constructor - resulting range has zero dimensions.
+    NDRange()
+        : dimensions_(0)
+    { }
+
+    //! \brief Constructs one-dimensional range.
+    NDRange(::size_t size0)
+        : dimensions_(1)
+    {
+        sizes_[0] = size0;
+    }
+
+    //! \brief Constructs two-dimensional range.
+    NDRange(::size_t size0, ::size_t size1)
+        : dimensions_(2)
+    {
+        sizes_[0] = size0;
+        sizes_[1] = size1;
+    }
+
+    //! \brief Constructs three-dimensional range.
+    NDRange(::size_t size0, ::size_t size1, ::size_t size2)
+        : dimensions_(3)
+    {
+        sizes_[0] = size0;
+        sizes_[1] = size1;
+        sizes_[2] = size2;
+    }
+
+    /*! \brief Conversion operator to const ::size_t *.
+     *  
+     *  \returns a pointer to the size of the first dimension.
+     */
+    operator const ::size_t*() const { 
+        return (const ::size_t*) sizes_; 
+    }
+
+    //! \brief Queries the number of dimensions in the range.
+    ::size_t dimensions() const { return dimensions_; }
+};
+
+//! \brief A zero-dimensional range.
+static const NDRange NullRange;
+
+//! \brief Local address wrapper for use with Kernel::setArg
+struct LocalSpaceArg
+{
+    ::size_t size_;
+};
+
+namespace detail {
+
+template <typename T>
+struct KernelArgumentHandler
+{
+    static ::size_t size(const T&) { return sizeof(T); }
+    static T* ptr(T& value) { return &value; }
+};
+
+template <>
+struct KernelArgumentHandler<LocalSpaceArg>
+{
+    static ::size_t size(const LocalSpaceArg& value) { return value.size_; }
+    static void* ptr(LocalSpaceArg&) { return NULL; }
+};
+
+} 
+//! \endcond
+
+/*! __local
+ * \brief Helper function for generating LocalSpaceArg objects.
+ * Deprecated. Replaced with Local.
+ */
+inline CL_EXT_PREFIX__VERSION_1_1_DEPRECATED LocalSpaceArg
+__local(::size_t size) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+inline LocalSpaceArg
+__local(::size_t size)
+{
+    LocalSpaceArg ret = { size };
+    return ret;
+}
+
+/*! Local
+ * \brief Helper function for generating LocalSpaceArg objects.
+ */
+inline LocalSpaceArg
+Local(::size_t size)
+{
+    LocalSpaceArg ret = { size };
+    return ret;
+}
+
+//class KernelFunctor;
+
+/*! \brief Class interface for cl_kernel.
+ *
+ *  \note Copies of these objects are shallow, meaning that the copy will refer
+ *        to the same underlying cl_kernel as the original.  For details, see
+ *        clRetainKernel() and clReleaseKernel().
+ *
+ *  \see cl_kernel
+ */
+class Kernel : public detail::Wrapper<cl_kernel>
+{
+public:
+    inline Kernel(const Program& program, const char* name, cl_int* err = NULL);
+
+    /*! \brief Destructor.
+     *
+     *  This calls clReleaseKernel() on the value held by this instance.
+     */
+    ~Kernel() { }
+
+    //! \brief Default constructor - initializes to NULL.
+    Kernel() { }
+
+    /*! \brief Copy constructor - performs shallow copy.
+     * 
+     *  This calls clRetainKernel() on the parameter's cl_kernel.
+     */
+    Kernel(const Kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
+
+    /*! \brief Constructor from cl_kernel - takes ownership.
+     * 
+     *  This effectively transfers ownership of a refcount on the cl_kernel
+     *  into the new Kernel object.
+     */
+    __CL_EXPLICIT_CONSTRUCTORS Kernel(const cl_kernel& kernel) : detail::Wrapper<cl_type>(kernel) { }
+
+    /*! \brief Assignment operator from Kernel.
+     * 
+     *  This calls clRetainKernel() on the parameter and clReleaseKernel()
+     *  on the previous value held by this instance.
+     */
+    Kernel& operator = (const Kernel& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    /*! \brief Assignment operator from cl_kernel - takes ownership.
+     *
+     *  This effectively transfers ownership of a refcount on the rhs and calls
+     *  clReleaseKernel() on the value previously held by this instance.
+     */
+    Kernel& operator = (const cl_kernel& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    template <typename T>
+    cl_int getInfo(cl_kernel_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetKernelInfo, object_, name, param),
+            __GET_KERNEL_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_kernel_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_kernel_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+#if defined(CL_VERSION_1_2)
+    template <typename T>
+    cl_int getArgInfo(cl_uint argIndex, cl_kernel_arg_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetKernelArgInfo, object_, argIndex, name, param),
+            __GET_KERNEL_ARG_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_kernel_arg_info, name>::param_type
+    getArgInfo(cl_uint argIndex, cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_kernel_arg_info, name>::param_type param;
+        cl_int result = getArgInfo(argIndex, name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+    template <typename T>
+    cl_int getWorkGroupInfo(
+        const Device& device, cl_kernel_work_group_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(
+                &::clGetKernelWorkGroupInfo, object_, device(), name, param),
+                __GET_KERNEL_WORK_GROUP_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_kernel_work_group_info, name>::param_type
+        getWorkGroupInfo(const Device& device, cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+        detail::cl_kernel_work_group_info, name>::param_type param;
+        cl_int result = getWorkGroupInfo(device, name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    template <typename T>
+    cl_int setArg(cl_uint index, T value)
+    {
+        return detail::errHandler(
+            ::clSetKernelArg(
+                object_,
+                index,
+                detail::KernelArgumentHandler<T>::size(value),
+                detail::KernelArgumentHandler<T>::ptr(value)),
+            __SET_KERNEL_ARGS_ERR);
+    }
+
+    cl_int setArg(cl_uint index, ::size_t size, void* argPtr)
+    {
+        return detail::errHandler(
+            ::clSetKernelArg(object_, index, size, argPtr),
+            __SET_KERNEL_ARGS_ERR);
+    }
+};
+
+/*! \class Program
+ * \brief Program interface that implements cl_program.
+ */
+class Program : public detail::Wrapper<cl_program>
+{
+public:
+    typedef VECTOR_CLASS<std::pair<const void*, ::size_t> > Binaries;
+    typedef VECTOR_CLASS<std::pair<const char*, ::size_t> > Sources;
+
+    Program(
+        const STRING_CLASS& source,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        const char * strings = source.c_str();
+        const ::size_t length  = source.size();
+
+        Context context = Context::getDefault(err);
+
+        object_ = ::clCreateProgramWithSource(
+            context(), (cl_uint)1, &strings, &length, &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
+
+        if (error == CL_SUCCESS) {
+
+            error = ::clBuildProgram(
+                object_,
+                0,
+                NULL,
+                "",
+                NULL,
+                NULL);
+
+            detail::errHandler(error, __BUILD_PROGRAM_ERR);
+        }
+
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Program(
+        const STRING_CLASS& source,
+		bool build,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        const char * strings = source.c_str();
+        const ::size_t length  = source.size();
+
+        Context context = Context::getDefault(err);
+
+        object_ = ::clCreateProgramWithSource(
+            context(), (cl_uint)1, &strings, &length, &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
+
+        if (error == CL_SUCCESS && build) {
+
+            error = ::clBuildProgram(
+                object_,
+                0,
+                NULL,
+                "",
+                NULL,
+                NULL);
+
+            detail::errHandler(error, __BUILD_PROGRAM_ERR);
+        }
+
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Program(
+        const Context& context,
+        const STRING_CLASS& source,
+        bool build = false,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        const char * strings = source.c_str();
+        const ::size_t length  = source.size();
+
+        object_ = ::clCreateProgramWithSource(
+            context(), (cl_uint)1, &strings, &length, &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
+
+        if (error == CL_SUCCESS && build) {
+
+            error = ::clBuildProgram(
+                object_,
+                0,
+                NULL,
+                "",
+                NULL,
+                NULL);
+
+            detail::errHandler(error, __BUILD_PROGRAM_ERR);
+        }
+
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    Program(
+        const Context& context,
+        const Sources& sources,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        const ::size_t n = (::size_t)sources.size();
+        ::size_t* lengths = (::size_t*) alloca(n * sizeof(::size_t));
+        const char** strings = (const char**) alloca(n * sizeof(const char*));
+
+        for (::size_t i = 0; i < n; ++i) {
+            strings[i] = sources[(int)i].first;
+            lengths[i] = sources[(int)i].second;
+        }
+
+        object_ = ::clCreateProgramWithSource(
+            context(), (cl_uint)n, strings, lengths, &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_SOURCE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    /**
+     * Construct a program object from a list of devices and a per-device list of binaries.
+     * \param context A valid OpenCL context in which to construct the program.
+     * \param devices A vector of OpenCL device objects for which the program will be created.
+     * \param binaries A vector of pairs of a pointer to a binary object and its length.
+     * \param binaryStatus An optional vector that on completion will be resized to
+     *   match the size of binaries and filled with values to specify if each binary
+     *   was successfully loaded.
+     *   Set to CL_SUCCESS if the binary was successfully loaded.
+     *   Set to CL_INVALID_VALUE if the length is 0 or the binary pointer is NULL.
+     *   Set to CL_INVALID_BINARY if the binary provided is not valid for the matching device.
+     * \param err if non-NULL will be set to CL_SUCCESS on successful operation or one of the following errors:
+     *   CL_INVALID_CONTEXT if context is not a valid context.
+     *   CL_INVALID_VALUE if the length of devices is zero; or if the length of binaries does not match the length of devices; 
+     *     or if any entry in binaries is NULL or has length 0.
+     *   CL_INVALID_DEVICE if OpenCL devices listed in devices are not in the list of devices associated with context.
+     *   CL_INVALID_BINARY if an invalid program binary was encountered for any device. binaryStatus will return specific status for each device.
+     *   CL_OUT_OF_HOST_MEMORY if there is a failure to allocate resources required by the OpenCL implementation on the host.
+     */
+    Program(
+        const Context& context,
+        const VECTOR_CLASS<Device>& devices,
+        const Binaries& binaries,
+        VECTOR_CLASS<cl_int>* binaryStatus = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+        
+        const ::size_t numDevices = devices.size();
+        
+        // Catch size mismatch early and return
+        if(binaries.size() != numDevices) {
+            error = CL_INVALID_VALUE;
+            detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+            return;
+        }
+
+        ::size_t* lengths = (::size_t*) alloca(numDevices * sizeof(::size_t));
+        const unsigned char** images = (const unsigned char**) alloca(numDevices * sizeof(const unsigned char**));
+
+        for (::size_t i = 0; i < numDevices; ++i) {
+            images[i] = (const unsigned char*)binaries[i].first;
+            lengths[i] = binaries[(int)i].second;
+        }
+
+        cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
+        for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
+            deviceIDs[deviceIndex] = (devices[deviceIndex])();
+        }
+
+        if(binaryStatus) {
+            binaryStatus->resize(numDevices);
+        }
+        
+        object_ = ::clCreateProgramWithBinary(
+            context(), (cl_uint) devices.size(),
+            deviceIDs,
+            lengths, images, binaryStatus != NULL
+               ? &binaryStatus->front()
+               : NULL, &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_BINARY_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+
+    
+#if defined(CL_VERSION_1_2)
+    /**
+     * Create program using builtin kernels.
+     * \param kernelNames Semi-colon separated list of builtin kernel names
+     */
+    Program(
+        const Context& context,
+        const VECTOR_CLASS<Device>& devices,
+        const STRING_CLASS& kernelNames,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+
+        ::size_t numDevices = devices.size();
+        cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
+        for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
+            deviceIDs[deviceIndex] = (devices[deviceIndex])();
+        }
+        
+        object_ = ::clCreateProgramWithBuiltInKernels(
+            context(), 
+            (cl_uint) devices.size(),
+            deviceIDs,
+            kernelNames.c_str(), 
+            &error);
+
+        detail::errHandler(error, __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+    Program() { }
+
+    Program(const Program& program) : detail::Wrapper<cl_type>(program) { }
+
+    __CL_EXPLICIT_CONSTRUCTORS Program(const cl_program& program) : detail::Wrapper<cl_type>(program) { }
+
+    Program& operator = (const Program& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    Program& operator = (const cl_program& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    cl_int build(
+        const VECTOR_CLASS<Device>& devices,
+        const char* options = NULL,
+        void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
+        void* data = NULL) const
+    {
+        ::size_t numDevices = devices.size();
+        cl_device_id* deviceIDs = (cl_device_id*) alloca(numDevices * sizeof(cl_device_id));
+        for( ::size_t deviceIndex = 0; deviceIndex < numDevices; ++deviceIndex ) {
+            deviceIDs[deviceIndex] = (devices[deviceIndex])();
+        }
+
+        return detail::errHandler(
+            ::clBuildProgram(
+                object_,
+                (cl_uint)
+                devices.size(),
+                deviceIDs,
+                options,
+                notifyFptr,
+                data),
+                __BUILD_PROGRAM_ERR);
+    }
+
+    cl_int build(
+        const char* options = NULL,
+        void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
+        void* data = NULL) const
+    {
+        return detail::errHandler(
+            ::clBuildProgram(
+                object_,
+                0,
+                NULL,
+                options,
+                notifyFptr,
+                data),
+                __BUILD_PROGRAM_ERR);
+    }
+
+#if defined(CL_VERSION_1_2)
+	cl_int compile(
+        const char* options = NULL,
+        void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
+        void* data = NULL) const
+    {
+        return detail::errHandler(
+            ::clCompileProgram(
+                object_,
+                0,
+                NULL,
+                options,
+				0,
+				NULL,
+				NULL,
+                notifyFptr,
+                data),
+                __COMPILE_PROGRAM_ERR);
+    }
+#endif
+
+    template <typename T>
+    cl_int getInfo(cl_program_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(&::clGetProgramInfo, object_, name, param),
+            __GET_PROGRAM_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_program_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_program_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    template <typename T>
+    cl_int getBuildInfo(
+        const Device& device, cl_program_build_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(
+                &::clGetProgramBuildInfo, object_, device(), name, param),
+                __GET_PROGRAM_BUILD_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_program_build_info, name>::param_type
+    getBuildInfo(const Device& device, cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_program_build_info, name>::param_type param;
+        cl_int result = getBuildInfo(device, name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    cl_int createKernels(VECTOR_CLASS<Kernel>* kernels)
+    {
+        cl_uint numKernels;
+        cl_int err = ::clCreateKernelsInProgram(object_, 0, NULL, &numKernels);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
+        }
+
+        Kernel* value = (Kernel*) alloca(numKernels * sizeof(Kernel));
+        err = ::clCreateKernelsInProgram(
+            object_, numKernels, (cl_kernel*) value, NULL);
+        if (err != CL_SUCCESS) {
+            return detail::errHandler(err, __CREATE_KERNELS_IN_PROGRAM_ERR);
+        }
+
+        kernels->assign(&value[0], &value[numKernels]);
+        return CL_SUCCESS;
+    }
+};
+
+#if defined(CL_VERSION_1_2)
+inline Program linkProgram(
+    Program input1,
+    Program input2,
+    const char* options = NULL,
+    void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
+    void* data = NULL,
+    cl_int* err = NULL) 
+{
+    cl_int err_local = CL_SUCCESS;
+
+    cl_program programs[2] = { input1(), input2() };
+
+    Context ctx = input1.getInfo<CL_PROGRAM_CONTEXT>();
+
+    cl_program prog = ::clLinkProgram(
+        ctx(),
+        0,
+        NULL,
+        options,
+        2,
+        programs,
+        notifyFptr,
+        data,
+        &err_local);
+
+    detail::errHandler(err_local,__COMPILE_PROGRAM_ERR);
+    if (err != NULL) {
+        *err = err_local;
+    }
+
+    return Program(prog);
+}
+
+inline Program linkProgram(
+    VECTOR_CLASS<Program> inputPrograms,
+    const char* options = NULL,
+    void (CL_CALLBACK * notifyFptr)(cl_program, void *) = NULL,
+    void* data = NULL,
+    cl_int* err = NULL) 
+{
+    cl_int err_local = CL_SUCCESS;
+
+    cl_program * programs = (cl_program*) alloca(inputPrograms.size() * sizeof(cl_program));
+
+    if (programs != NULL) {
+        for (unsigned int i = 0; i < inputPrograms.size(); i++) {
+          programs[i] = inputPrograms[i]();
+        }
+    } 
+
+    cl_program prog = ::clLinkProgram(
+        Context::getDefault()(),
+        0,
+        NULL,
+        options,
+        (cl_uint)inputPrograms.size(),
+        programs,
+        notifyFptr,
+        data,
+        &err_local);
+
+    detail::errHandler(err_local,__COMPILE_PROGRAM_ERR);
+    if (err != NULL) {
+        *err = err_local;
+    }
+
+    return Program(prog);
+}
+#endif
+
+template<>
+inline VECTOR_CLASS<char *> cl::Program::getInfo<CL_PROGRAM_BINARIES>(cl_int* err) const
+{
+    VECTOR_CLASS< ::size_t> sizes = getInfo<CL_PROGRAM_BINARY_SIZES>();
+    VECTOR_CLASS<char *> binaries;
+    for (VECTOR_CLASS< ::size_t>::iterator s = sizes.begin(); s != sizes.end(); ++s) 
+    {
+        char *ptr = NULL;
+        if (*s != 0) 
+            ptr = new char[*s];
+        binaries.push_back(ptr);
+    }
+    
+    cl_int result = getInfo(CL_PROGRAM_BINARIES, &binaries);
+    if (err != NULL) {
+        *err = result;
+    }
+    return binaries;
+}
+
+inline Kernel::Kernel(const Program& program, const char* name, cl_int* err)
+{
+    cl_int error;
+
+    object_ = ::clCreateKernel(program(), name, &error);
+    detail::errHandler(error, __CREATE_KERNEL_ERR);
+
+    if (err != NULL) {
+        *err = error;
+    }
+
+}
+
+/*! \class CommandQueue
+ * \brief CommandQueue interface for cl_command_queue.
+ */
+class CommandQueue : public detail::Wrapper<cl_command_queue>
+{
+private:
+    static volatile int default_initialized_;
+    static CommandQueue default_;
+    static volatile cl_int default_error_;
+public:
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+   CommandQueue(
+        cl_command_queue_properties properties,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        Context context = Context::getDefault(&error);
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+
+        if (error != CL_SUCCESS) {
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+        else {
+            Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
+
+            object_ = ::clCreateCommandQueue(
+                context(), device(), properties, &error);
+
+            detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+    }
+#else
+    CommandQueue(
+        const cl_queue_properties *properties,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        Context context = Context::getDefault(&error);
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+
+        if (error != CL_SUCCESS) {
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+        else {
+            Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
+
+            object_ = ::clCreateCommandQueueWithProperties(
+                context(), device(), properties, &error);
+
+            detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+    }
+#endif
+
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+    CommandQueue(
+        const Context& context,
+        const Device& device,
+        cl_command_queue_properties properties = 0,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        object_ = ::clCreateCommandQueue(
+            context(), device(), properties, &error);
+
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+#else
+    CommandQueue(
+        const Context& context,
+        const Device& device,
+        const cl_queue_properties *properties = NULL,
+        cl_int* err = NULL)
+    {
+        cl_int error;
+
+        object_ = ::clCreateCommandQueueWithProperties(
+            context(), device(), properties, &error);
+
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+    }
+#endif
+
+    static CommandQueue getDefault(cl_int * err = NULL) 
+    {
+        int state = detail::compare_exchange(
+            &default_initialized_, 
+            __DEFAULT_BEING_INITIALIZED, __DEFAULT_NOT_INITIALIZED);
+        
+        if (state & __DEFAULT_INITIALIZED) {
+            if (err != NULL) {
+                *err = default_error_;
+            }
+            return default_;
+        }
+
+        if (state & __DEFAULT_BEING_INITIALIZED) {
+              // Assume writes will propagate eventually...
+              while(default_initialized_ != __DEFAULT_INITIALIZED) {
+                  detail::fence();
+              }
+
+            if (err != NULL) {
+                *err = default_error_;
+            }
+            return default_;
+        }
+
+        cl_int error;
+
+        Context context = Context::getDefault(&error);
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+#else
+        detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+#endif
+
+        if (error != CL_SUCCESS) {
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+        else {
+            Device device = context.getInfo<CL_CONTEXT_DEVICES>()[0];
+
+            default_ = CommandQueue(context, device, 0, &error);
+
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+            detail::errHandler(error, __CREATE_COMMAND_QUEUE_ERR);
+#else
+            detail::errHandler(error, __CREATE_COMMAND_QUEUE_PROPERTY_ERR);
+#endif
+            if (err != NULL) {
+                *err = error;
+            }
+        }
+
+        detail::fence();
+
+        default_error_ = error;
+        // Assume writes will propagate eventually...
+        default_initialized_ = __DEFAULT_INITIALIZED;
+
+        detail::fence();
+
+        if (err != NULL) {
+            *err = default_error_;
+        }
+        return default_;
+
+    }
+
+    CommandQueue() { }
+
+    CommandQueue(const CommandQueue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
+
+    CommandQueue(const cl_command_queue& commandQueue) : detail::Wrapper<cl_type>(commandQueue) { }
+
+    CommandQueue& operator = (const CommandQueue& rhs)
+    {
+        if (this != &rhs) {
+            detail::Wrapper<cl_type>::operator=(rhs);
+        }
+        return *this;
+    }
+
+    CommandQueue& operator = (const cl_command_queue& rhs)
+    {
+        detail::Wrapper<cl_type>::operator=(rhs);
+        return *this;
+    }
+
+    template <typename T>
+    cl_int getInfo(cl_command_queue_info name, T* param) const
+    {
+        return detail::errHandler(
+            detail::getInfo(
+                &::clGetCommandQueueInfo, object_, name, param),
+                __GET_COMMAND_QUEUE_INFO_ERR);
+    }
+
+    template <cl_int name> typename
+    detail::param_traits<detail::cl_command_queue_info, name>::param_type
+    getInfo(cl_int* err = NULL) const
+    {
+        typename detail::param_traits<
+            detail::cl_command_queue_info, name>::param_type param;
+        cl_int result = getInfo(name, &param);
+        if (err != NULL) {
+            *err = result;
+        }
+        return param;
+    }
+
+    cl_int enqueueReadBuffer(
+        const Buffer& buffer,
+        cl_bool blocking,
+        ::size_t offset,
+        ::size_t size,
+        void* ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueReadBuffer(
+                object_, buffer(), blocking, offset, size,
+                ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_READ_BUFFER_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueWriteBuffer(
+        const Buffer& buffer,
+        cl_bool blocking,
+        ::size_t offset,
+        ::size_t size,
+        const void* ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueWriteBuffer(
+                object_, buffer(), blocking, offset, size,
+                ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_WRITE_BUFFER_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueCopyBuffer(
+        const Buffer& src,
+        const Buffer& dst,
+        ::size_t src_offset,
+        ::size_t dst_offset,
+        ::size_t size,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueCopyBuffer(
+                object_, src(), dst(), src_offset, dst_offset, size,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQEUE_COPY_BUFFER_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueReadBufferRect(
+        const Buffer& buffer,
+        cl_bool blocking,
+        const size_t<3>& buffer_offset,
+        const size_t<3>& host_offset,
+        const size_t<3>& region,
+        ::size_t buffer_row_pitch,
+        ::size_t buffer_slice_pitch,
+        ::size_t host_row_pitch,
+        ::size_t host_slice_pitch,
+        void *ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueReadBufferRect(
+                object_, 
+                buffer(), 
+                blocking, 
+                (const ::size_t *)buffer_offset,
+                (const ::size_t *)host_offset,
+                (const ::size_t *)region,
+                buffer_row_pitch,
+                buffer_slice_pitch,
+                host_row_pitch,
+                host_slice_pitch,
+                ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_READ_BUFFER_RECT_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueWriteBufferRect(
+        const Buffer& buffer,
+        cl_bool blocking,
+        const size_t<3>& buffer_offset,
+        const size_t<3>& host_offset,
+        const size_t<3>& region,
+        ::size_t buffer_row_pitch,
+        ::size_t buffer_slice_pitch,
+        ::size_t host_row_pitch,
+        ::size_t host_slice_pitch,
+        void *ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueWriteBufferRect(
+                object_, 
+                buffer(), 
+                blocking, 
+                (const ::size_t *)buffer_offset,
+                (const ::size_t *)host_offset,
+                (const ::size_t *)region,
+                buffer_row_pitch,
+                buffer_slice_pitch,
+                host_row_pitch,
+                host_slice_pitch,
+                ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_WRITE_BUFFER_RECT_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueCopyBufferRect(
+        const Buffer& src,
+        const Buffer& dst,
+        const size_t<3>& src_origin,
+        const size_t<3>& dst_origin,
+        const size_t<3>& region,
+        ::size_t src_row_pitch,
+        ::size_t src_slice_pitch,
+        ::size_t dst_row_pitch,
+        ::size_t dst_slice_pitch,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueCopyBufferRect(
+                object_, 
+                src(), 
+                dst(), 
+                (const ::size_t *)src_origin, 
+                (const ::size_t *)dst_origin, 
+                (const ::size_t *)region,
+                src_row_pitch,
+                src_slice_pitch,
+                dst_row_pitch,
+                dst_slice_pitch,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQEUE_COPY_BUFFER_RECT_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+#if defined(CL_VERSION_1_2)
+    /**
+     * Enqueue a command to fill a buffer object with a pattern
+     * of a given size. The pattern is specified a as vector.
+     * \tparam PatternType The datatype of the pattern field. 
+     *     The pattern type must be an accepted OpenCL data type.
+     */
+    template<typename PatternType>
+    cl_int enqueueFillBuffer(
+        const Buffer& buffer,
+        PatternType pattern,
+        ::size_t offset,
+        ::size_t size,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueFillBuffer(
+                object_, 
+                buffer(),
+                static_cast<void*>(&pattern),
+                sizeof(PatternType), 
+                offset, 
+                size,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_FILL_BUFFER_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+    cl_int enqueueReadImage(
+        const Image& image,
+        cl_bool blocking,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        ::size_t row_pitch,
+        ::size_t slice_pitch,
+        void* ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueReadImage(
+                object_, image(), blocking, (const ::size_t *) origin,
+                (const ::size_t *) region, row_pitch, slice_pitch, ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_READ_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueWriteImage(
+        const Image& image,
+        cl_bool blocking,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        ::size_t row_pitch,
+        ::size_t slice_pitch,
+        void* ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueWriteImage(
+                object_, image(), blocking, (const ::size_t *) origin,
+                (const ::size_t *) region, row_pitch, slice_pitch, ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_WRITE_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueCopyImage(
+        const Image& src,
+        const Image& dst,
+        const size_t<3>& src_origin,
+        const size_t<3>& dst_origin,
+        const size_t<3>& region,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueCopyImage(
+                object_, src(), dst(), (const ::size_t *) src_origin,
+                (const ::size_t *)dst_origin, (const ::size_t *) region,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_COPY_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+#if defined(CL_VERSION_1_2)
+    /**
+     * Enqueue a command to fill an image object with a specified color.
+     * \param fillColor is the color to use to fill the image.
+     *     This is a four component RGBA floating-point color value if
+     *     the image channel data type is not an unnormalized signed or
+     *     unsigned data type.
+     */
+    cl_int enqueueFillImage(
+        const Image& image,
+        cl_float4 fillColor,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueFillImage(
+                object_, 
+                image(),
+                static_cast<void*>(&fillColor), 
+                (const ::size_t *) origin, 
+                (const ::size_t *) region,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_FILL_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    /**
+     * Enqueue a command to fill an image object with a specified color.
+     * \param fillColor is the color to use to fill the image.
+     *     This is a four component RGBA signed integer color value if
+     *     the image channel data type is an unnormalized signed integer
+     *     type.
+     */
+    cl_int enqueueFillImage(
+        const Image& image,
+        cl_int4 fillColor,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueFillImage(
+                object_, 
+                image(),
+                static_cast<void*>(&fillColor), 
+                (const ::size_t *) origin, 
+                (const ::size_t *) region,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_FILL_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    /**
+     * Enqueue a command to fill an image object with a specified color.
+     * \param fillColor is the color to use to fill the image.
+     *     This is a four component RGBA unsigned integer color value if
+     *     the image channel data type is an unnormalized unsigned integer
+     *     type.
+     */
+    cl_int enqueueFillImage(
+        const Image& image,
+        cl_uint4 fillColor,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueFillImage(
+                object_, 
+                image(),
+                static_cast<void*>(&fillColor), 
+                (const ::size_t *) origin, 
+                (const ::size_t *) region,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+                __ENQUEUE_FILL_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+    cl_int enqueueCopyImageToBuffer(
+        const Image& src,
+        const Buffer& dst,
+        const size_t<3>& src_origin,
+        const size_t<3>& region,
+        ::size_t dst_offset,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueCopyImageToBuffer(
+                object_, src(), dst(), (const ::size_t *) src_origin,
+                (const ::size_t *) region, dst_offset,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    cl_int enqueueCopyBufferToImage(
+        const Buffer& src,
+        const Image& dst,
+        ::size_t src_offset,
+        const size_t<3>& dst_origin,
+        const size_t<3>& region,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueCopyBufferToImage(
+                object_, src(), dst(), src_offset,
+                (const ::size_t *) dst_origin, (const ::size_t *) region,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    void* enqueueMapBuffer(
+        const Buffer& buffer,
+        cl_bool blocking,
+        cl_map_flags flags,
+        ::size_t offset,
+        ::size_t size,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL,
+        cl_int* err = NULL) const
+    {
+        cl_int error;
+        void * result = ::clEnqueueMapBuffer(
+            object_, buffer(), blocking, flags, offset, size,
+            (events != NULL) ? (cl_uint) events->size() : 0,
+            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+            (cl_event*) event,
+            &error);
+
+        detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
+        if (err != NULL) {
+            *err = error;
+        }
+        return result;
+    }
+
+    void* enqueueMapImage(
+        const Image& buffer,
+        cl_bool blocking,
+        cl_map_flags flags,
+        const size_t<3>& origin,
+        const size_t<3>& region,
+        ::size_t * row_pitch,
+        ::size_t * slice_pitch,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL,
+        cl_int* err = NULL) const
+    {
+        cl_int error;
+        void * result = ::clEnqueueMapImage(
+            object_, buffer(), blocking, flags,
+            (const ::size_t *) origin, (const ::size_t *) region,
+            row_pitch, slice_pitch,
+            (events != NULL) ? (cl_uint) events->size() : 0,
+            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+            (cl_event*) event,
+            &error);
+
+        detail::errHandler(error, __ENQUEUE_MAP_IMAGE_ERR);
+        if (err != NULL) {
+              *err = error;
+        }
+        return result;
+    }
+
+    cl_int enqueueUnmapMemObject(
+        const Memory& memory,
+        void* mapped_ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueUnmapMemObject(
+                object_, memory(), mapped_ptr,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+#if defined(CL_VERSION_1_2)
+    /**
+     * Enqueues a marker command which waits for either a list of events to complete, 
+     * or all previously enqueued commands to complete.
+     *
+     * Enqueues a marker command which waits for either a list of events to complete, 
+     * or if the list is empty it waits for all commands previously enqueued in command_queue 
+     * to complete before it completes. This command returns an event which can be waited on, 
+     * i.e. this event can be waited on to insure that all events either in the event_wait_list 
+     * or all previously enqueued commands, queued before this command to command_queue, 
+     * have completed.
+     */
+    cl_int enqueueMarkerWithWaitList(
+        const VECTOR_CLASS<Event> *events = 0,
+        Event *event = 0)
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueMarkerWithWaitList(
+                object_,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_MARKER_WAIT_LIST_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+    /**
+     * A synchronization point that enqueues a barrier operation.
+     *
+     * Enqueues a barrier command which waits for either a list of events to complete, 
+     * or if the list is empty it waits for all commands previously enqueued in command_queue 
+     * to complete before it completes. This command blocks command execution, that is, any 
+     * following commands enqueued after it do not execute until it completes. This command 
+     * returns an event which can be waited on, i.e. this event can be waited on to insure that 
+     * all events either in the event_wait_list or all previously enqueued commands, queued 
+     * before this command to command_queue, have completed.
+     */
+    cl_int enqueueBarrierWithWaitList(
+        const VECTOR_CLASS<Event> *events = 0,
+        Event *event = 0)
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueBarrierWithWaitList(
+                object_,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_BARRIER_WAIT_LIST_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+    
+    /**
+     * Enqueues a command to indicate with which device a set of memory objects
+     * should be associated.
+     */
+    cl_int enqueueMigrateMemObjects(
+        const VECTOR_CLASS<Memory> &memObjects,
+        cl_mem_migration_flags flags,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL
+        )
+    {
+        cl_event tmp;
+        
+        cl_mem* localMemObjects = static_cast<cl_mem*>(alloca(memObjects.size() * sizeof(cl_mem)));
+        for( int i = 0; i < (int)memObjects.size(); ++i ) {
+            localMemObjects[i] = memObjects[i]();
+        }
+
+
+        cl_int err = detail::errHandler(
+            ::clEnqueueMigrateMemObjects(
+                object_, 
+                (cl_uint)memObjects.size(), 
+                static_cast<const cl_mem*>(localMemObjects),
+                flags,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+#endif // #if defined(CL_VERSION_1_2)
+
+    cl_int enqueueNDRangeKernel(
+        const Kernel& kernel,
+        const NDRange& offset,
+        const NDRange& global,
+        const NDRange& local = NullRange,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueNDRangeKernel(
+                object_, kernel(), (cl_uint) global.dimensions(),
+                offset.dimensions() != 0 ? (const ::size_t*) offset : NULL,
+                (const ::size_t*) global,
+                local.dimensions() != 0 ? (const ::size_t*) local : NULL,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_NDRANGE_KERNEL_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+#if !defined(CL_VERSION_2_0) || defined(CL_USE_DEPRECATED_OPENCL_1_2_APIS)
+    cl_int enqueueTask(
+        const Kernel& kernel,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueTask(
+                object_, kernel(),
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_TASK_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+#endif
+
+    cl_int enqueueNativeKernel(
+        void (CL_CALLBACK *userFptr)(void *),
+        std::pair<void*, ::size_t> args,
+        const VECTOR_CLASS<Memory>* mem_objects = NULL,
+        const VECTOR_CLASS<const void*>* mem_locs = NULL,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL) const
+    {
+        cl_mem * mems = (mem_objects != NULL && mem_objects->size() > 0) 
+            ? (cl_mem*) alloca(mem_objects->size() * sizeof(cl_mem))
+            : NULL;
+
+        if (mems != NULL) {
+            for (unsigned int i = 0; i < mem_objects->size(); i++) {
+                mems[i] = ((*mem_objects)[i])();
+            }
+        }
+
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            ::clEnqueueNativeKernel(
+                object_, userFptr, args.first, args.second,
+                (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
+                mems,
+                (mem_locs != NULL) ? (const void **) &mem_locs->front() : NULL,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_NATIVE_KERNEL);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) 
+    CL_EXT_PREFIX__VERSION_1_1_DEPRECATED 
+    cl_int enqueueMarker(Event* event = NULL) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+    {
+        return detail::errHandler(
+            ::clEnqueueMarker(object_, (cl_event*) event),
+            __ENQUEUE_MARKER_ERR);
+    }
+
+    CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
+    cl_int enqueueWaitForEvents(const VECTOR_CLASS<Event>& events) const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+    {
+        return detail::errHandler(
+            ::clEnqueueWaitForEvents(
+                object_,
+                (cl_uint) events.size(),
+                (const cl_event*) &events.front()),
+            __ENQUEUE_WAIT_FOR_EVENTS_ERR);
+    }
+#endif // #if defined(CL_VERSION_1_1)
+
+    cl_int enqueueAcquireGLObjects(
+         const VECTOR_CLASS<Memory>* mem_objects = NULL,
+         const VECTOR_CLASS<Event>* events = NULL,
+         Event* event = NULL) const
+     {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+             ::clEnqueueAcquireGLObjects(
+                 object_,
+                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
+                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
+                 (events != NULL) ? (cl_uint) events->size() : 0,
+                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                 (event != NULL) ? &tmp : NULL),
+             __ENQUEUE_ACQUIRE_GL_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+     }
+
+    cl_int enqueueReleaseGLObjects(
+         const VECTOR_CLASS<Memory>* mem_objects = NULL,
+         const VECTOR_CLASS<Event>* events = NULL,
+         Event* event = NULL) const
+     {
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+             ::clEnqueueReleaseGLObjects(
+                 object_,
+                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
+                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
+                 (events != NULL) ? (cl_uint) events->size() : 0,
+                 (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+                 (event != NULL) ? &tmp : NULL),
+             __ENQUEUE_RELEASE_GL_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+     }
+
+#if defined (USE_DX_INTEROP)
+typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueAcquireD3D10ObjectsKHR)(
+    cl_command_queue command_queue, cl_uint num_objects,
+    const cl_mem* mem_objects, cl_uint num_events_in_wait_list,
+    const cl_event* event_wait_list, cl_event* event);
+typedef CL_API_ENTRY cl_int (CL_API_CALL *PFN_clEnqueueReleaseD3D10ObjectsKHR)(
+    cl_command_queue command_queue, cl_uint num_objects,
+    const cl_mem* mem_objects,  cl_uint num_events_in_wait_list,
+    const cl_event* event_wait_list, cl_event* event);
+
+    cl_int enqueueAcquireD3D10Objects(
+         const VECTOR_CLASS<Memory>* mem_objects = NULL,
+         const VECTOR_CLASS<Event>* events = NULL,
+         Event* event = NULL) const
+    {
+        static PFN_clEnqueueAcquireD3D10ObjectsKHR pfn_clEnqueueAcquireD3D10ObjectsKHR = NULL;
+#if defined(CL_VERSION_1_2)
+        cl_context context = getInfo<CL_QUEUE_CONTEXT>();
+        cl::Device device(getInfo<CL_QUEUE_DEVICE>());
+        cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>();
+        __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueAcquireD3D10ObjectsKHR);
+#endif
+#if defined(CL_VERSION_1_1)
+        __INIT_CL_EXT_FCN_PTR(clEnqueueAcquireD3D10ObjectsKHR);
+#endif
+        
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+             pfn_clEnqueueAcquireD3D10ObjectsKHR(
+                 object_,
+                 (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
+                 (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
+                 (events != NULL) ? (cl_uint) events->size() : 0,
+                 (events != NULL) ? (cl_event*) &events->front() : NULL,
+                 (event != NULL) ? &tmp : NULL),
+             __ENQUEUE_ACQUIRE_GL_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+     }
+
+    cl_int enqueueReleaseD3D10Objects(
+         const VECTOR_CLASS<Memory>* mem_objects = NULL,
+         const VECTOR_CLASS<Event>* events = NULL,
+         Event* event = NULL) const
+    {
+        static PFN_clEnqueueReleaseD3D10ObjectsKHR pfn_clEnqueueReleaseD3D10ObjectsKHR = NULL;
+#if defined(CL_VERSION_1_2)
+        cl_context context = getInfo<CL_QUEUE_CONTEXT>();
+        cl::Device device(getInfo<CL_QUEUE_DEVICE>());
+        cl_platform_id platform = device.getInfo<CL_DEVICE_PLATFORM>();
+        __INIT_CL_EXT_FCN_PTR_PLATFORM(platform, clEnqueueReleaseD3D10ObjectsKHR);
+#endif // #if defined(CL_VERSION_1_2)
+#if defined(CL_VERSION_1_1)
+        __INIT_CL_EXT_FCN_PTR(clEnqueueReleaseD3D10ObjectsKHR);
+#endif // #if defined(CL_VERSION_1_1)
+
+        cl_event tmp;
+        cl_int err = detail::errHandler(
+            pfn_clEnqueueReleaseD3D10ObjectsKHR(
+                object_,
+                (mem_objects != NULL) ? (cl_uint) mem_objects->size() : 0,
+                (mem_objects != NULL) ? (const cl_mem *) &mem_objects->front(): NULL,
+                (events != NULL) ? (cl_uint) events->size() : 0,
+                (events != NULL) ? (cl_event*) &events->front() : NULL,
+                (event != NULL) ? &tmp : NULL),
+            __ENQUEUE_RELEASE_GL_ERR);
+
+        if (event != NULL && err == CL_SUCCESS)
+            *event = tmp;
+
+        return err;
+    }
+#endif
+
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_USE_DEPRECATED_OPENCL_1_1_APIS) || (defined(CL_VERSION_1_1) && !defined(CL_VERSION_1_2)) 
+    CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
+    cl_int enqueueBarrier() const CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+    {
+        return detail::errHandler(
+            ::clEnqueueBarrier(object_),
+            __ENQUEUE_BARRIER_ERR);
+    }
+#endif // #if defined(CL_VERSION_1_1)
+
+    cl_int flush() const
+    {
+        return detail::errHandler(::clFlush(object_), __FLUSH_ERR);
+    }
+
+    cl_int finish() const
+    {
+        return detail::errHandler(::clFinish(object_), __FINISH_ERR);
+    }
+};
+
+#ifdef _WIN32
+__declspec(selectany) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
+__declspec(selectany) CommandQueue CommandQueue::default_;
+__declspec(selectany) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
+#else
+__attribute__((weak)) volatile int CommandQueue::default_initialized_ = __DEFAULT_NOT_INITIALIZED;
+__attribute__((weak)) CommandQueue CommandQueue::default_;
+__attribute__((weak)) volatile cl_int CommandQueue::default_error_ = CL_SUCCESS;
+#endif
+
+inline cl_int enqueueReadBuffer(
+    const Buffer& buffer,
+    cl_bool blocking,
+    ::size_t offset,
+    ::size_t size,
+    void* ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueReadBuffer(buffer, blocking, offset, size, ptr, events, event);
+}
+
+inline cl_int enqueueWriteBuffer(
+        const Buffer& buffer,
+        cl_bool blocking,
+        ::size_t offset,
+        ::size_t size,
+        const void* ptr,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueWriteBuffer(buffer, blocking, offset, size, ptr, events, event);
+}
+
+inline void* enqueueMapBuffer(
+        const Buffer& buffer,
+        cl_bool blocking,
+        cl_map_flags flags,
+        ::size_t offset,
+        ::size_t size,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL,
+        cl_int* err = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+    detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
+    if (err != NULL) {
+        *err = error;
+    }
+
+    void * result = ::clEnqueueMapBuffer(
+            queue(), buffer(), blocking, flags, offset, size,
+            (events != NULL) ? (cl_uint) events->size() : 0,
+            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+            (cl_event*) event,
+            &error);
+
+    detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
+    if (err != NULL) {
+        *err = error;
+    }
+    return result;
+}
+
+inline cl_int enqueueUnmapMemObject(
+    const Memory& memory,
+    void* mapped_ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+    detail::errHandler(error, __ENQUEUE_MAP_BUFFER_ERR);
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    cl_event tmp;
+    cl_int err = detail::errHandler(
+        ::clEnqueueUnmapMemObject(
+            queue(), memory(), mapped_ptr,
+            (events != NULL) ? (cl_uint) events->size() : 0,
+            (events != NULL && events->size() > 0) ? (cl_event*) &events->front() : NULL,
+            (event != NULL) ? &tmp : NULL),
+        __ENQUEUE_UNMAP_MEM_OBJECT_ERR);
+
+    if (event != NULL && err == CL_SUCCESS)
+        *event = tmp;
+
+    return err;
+}
+
+inline cl_int enqueueCopyBuffer(
+        const Buffer& src,
+        const Buffer& dst,
+        ::size_t src_offset,
+        ::size_t dst_offset,
+        ::size_t size,
+        const VECTOR_CLASS<Event>* events = NULL,
+        Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueCopyBuffer(src, dst, src_offset, dst_offset, size, events, event);
+}
+
+/**
+ * Blocking copy operation between iterators and a buffer.
+ */
+template< typename IteratorType >
+inline cl_int copy( IteratorType startIterator, IteratorType endIterator, cl::Buffer &buffer )
+{
+    typedef typename std::iterator_traits<IteratorType>::value_type DataType;
+    cl_int error;
+    
+    ::size_t length = endIterator-startIterator;
+    ::size_t byteLength = length*sizeof(DataType);
+
+    DataType *pointer = 
+        static_cast<DataType*>(enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_WRITE, 0, byteLength, 0, 0, &error));
+    // if exceptions enabled, enqueueMapBuffer will throw
+    if( error != CL_SUCCESS ) {
+        return error;
+    }
+#if defined(_MSC_VER)
+    std::copy(
+        startIterator, 
+        endIterator, 
+        stdext::checked_array_iterator<DataType*>(
+            pointer, length));
+#else
+    std::copy(startIterator, endIterator, pointer);
+#endif
+    Event endEvent;
+    error = enqueueUnmapMemObject(buffer, pointer, 0, &endEvent);
+    // if exceptions enabled, enqueueUnmapMemObject will throw
+    if( error != CL_SUCCESS ) { 
+        return error;
+    }
+    endEvent.wait();
+    return CL_SUCCESS;
+}
+
+/**
+ * Blocking copy operation between iterators and a buffer.
+ */
+template< typename IteratorType >
+inline cl_int copy( const cl::Buffer &buffer, IteratorType startIterator, IteratorType endIterator )
+{
+    typedef typename std::iterator_traits<IteratorType>::value_type DataType;
+    cl_int error;
+        
+    ::size_t length = endIterator-startIterator;
+    ::size_t byteLength = length*sizeof(DataType);
+
+    DataType *pointer = 
+        static_cast<DataType*>(enqueueMapBuffer(buffer, CL_TRUE, CL_MAP_READ, 0, byteLength, 0, 0, &error));
+    // if exceptions enabled, enqueueMapBuffer will throw
+    if( error != CL_SUCCESS ) {
+        return error;
+    }
+    std::copy(pointer, pointer + length, startIterator);
+    Event endEvent;
+    error = enqueueUnmapMemObject(buffer, pointer, 0, &endEvent);
+    // if exceptions enabled, enqueueUnmapMemObject will throw
+    if( error != CL_SUCCESS ) { 
+        return error;
+    }
+    endEvent.wait();
+    return CL_SUCCESS;
+}
+
+#if defined(CL_VERSION_1_1)
+inline cl_int enqueueReadBufferRect(
+    const Buffer& buffer,
+    cl_bool blocking,
+    const size_t<3>& buffer_offset,
+    const size_t<3>& host_offset,
+    const size_t<3>& region,
+    ::size_t buffer_row_pitch,
+    ::size_t buffer_slice_pitch,
+    ::size_t host_row_pitch,
+    ::size_t host_slice_pitch,
+    void *ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueReadBufferRect(
+        buffer, 
+        blocking, 
+        buffer_offset, 
+        host_offset,
+        region,
+        buffer_row_pitch,
+        buffer_slice_pitch,
+        host_row_pitch,
+        host_slice_pitch,
+        ptr, 
+        events, 
+        event);
+}
+
+inline cl_int enqueueWriteBufferRect(
+    const Buffer& buffer,
+    cl_bool blocking,
+    const size_t<3>& buffer_offset,
+    const size_t<3>& host_offset,
+    const size_t<3>& region,
+    ::size_t buffer_row_pitch,
+    ::size_t buffer_slice_pitch,
+    ::size_t host_row_pitch,
+    ::size_t host_slice_pitch,
+    void *ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueWriteBufferRect(
+        buffer, 
+        blocking, 
+        buffer_offset, 
+        host_offset,
+        region,
+        buffer_row_pitch,
+        buffer_slice_pitch,
+        host_row_pitch,
+        host_slice_pitch,
+        ptr, 
+        events, 
+        event);
+}
+
+inline cl_int enqueueCopyBufferRect(
+    const Buffer& src,
+    const Buffer& dst,
+    const size_t<3>& src_origin,
+    const size_t<3>& dst_origin,
+    const size_t<3>& region,
+    ::size_t src_row_pitch,
+    ::size_t src_slice_pitch,
+    ::size_t dst_row_pitch,
+    ::size_t dst_slice_pitch,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueCopyBufferRect(
+        src,
+        dst,
+        src_origin,
+        dst_origin,
+        region,
+        src_row_pitch,
+        src_slice_pitch,
+        dst_row_pitch,
+        dst_slice_pitch,
+        events, 
+        event);
+}
+#endif
+
+inline cl_int enqueueReadImage(
+    const Image& image,
+    cl_bool blocking,
+    const size_t<3>& origin,
+    const size_t<3>& region,
+    ::size_t row_pitch,
+    ::size_t slice_pitch,
+    void* ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL) 
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueReadImage(
+        image,
+        blocking,
+        origin,
+        region,
+        row_pitch,
+        slice_pitch,
+        ptr,
+        events, 
+        event);
+}
+
+inline cl_int enqueueWriteImage(
+    const Image& image,
+    cl_bool blocking,
+    const size_t<3>& origin,
+    const size_t<3>& region,
+    ::size_t row_pitch,
+    ::size_t slice_pitch,
+    void* ptr,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueWriteImage(
+        image,
+        blocking,
+        origin,
+        region,
+        row_pitch,
+        slice_pitch,
+        ptr,
+        events, 
+        event);
+}
+
+inline cl_int enqueueCopyImage(
+    const Image& src,
+    const Image& dst,
+    const size_t<3>& src_origin,
+    const size_t<3>& dst_origin,
+    const size_t<3>& region,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueCopyImage(
+        src,
+        dst,
+        src_origin,
+        dst_origin,
+        region,
+        events,
+        event);
+}
+
+inline cl_int enqueueCopyImageToBuffer(
+    const Image& src,
+    const Buffer& dst,
+    const size_t<3>& src_origin,
+    const size_t<3>& region,
+    ::size_t dst_offset,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueCopyImageToBuffer(
+        src,
+        dst,
+        src_origin,
+        region,
+        dst_offset,
+        events,
+        event);
+}
+
+inline cl_int enqueueCopyBufferToImage(
+    const Buffer& src,
+    const Image& dst,
+    ::size_t src_offset,
+    const size_t<3>& dst_origin,
+    const size_t<3>& region,
+    const VECTOR_CLASS<Event>* events = NULL,
+    Event* event = NULL)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.enqueueCopyBufferToImage(
+        src,
+        dst,
+        src_offset,
+        dst_origin,
+        region,
+        events,
+        event);
+}
+
+
+inline cl_int flush(void)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    }
+
+    return queue.flush();
+}
+
+inline cl_int finish(void)
+{
+    cl_int error;
+    CommandQueue queue = CommandQueue::getDefault(&error);
+
+    if (error != CL_SUCCESS) {
+        return error;
+    } 
+
+
+    return queue.finish();
+}
+
+// Kernel Functor support
+// New interface as of September 2011
+// Requires the C++11 std::tr1::function (note do not support TR1)
+// Visual Studio 2010 and GCC 4.2
+
+struct EnqueueArgs
+{
+    CommandQueue queue_;
+    const NDRange offset_;
+    const NDRange global_;
+    const NDRange local_;
+    VECTOR_CLASS<Event> events_;
+
+    EnqueueArgs(NDRange global) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange)
+    {
+
+    }
+
+    EnqueueArgs(NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(local)
+    {
+
+    }
+
+    EnqueueArgs(NDRange offset, NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(offset), 
+      global_(global),
+      local_(local)
+    {
+
+    }
+
+    EnqueueArgs(Event e, NDRange global) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(Event e, NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(local)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(Event e, NDRange offset, NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(offset), 
+      global_(global),
+      local_(local)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange global) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange),
+      events_(events)
+    {
+
+    }
+
+    EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(NullRange), 
+      global_(global),
+      local_(local),
+      events_(events)
+    {
+
+    }
+
+    EnqueueArgs(const VECTOR_CLASS<Event> &events, NDRange offset, NDRange global, NDRange local) : 
+      queue_(CommandQueue::getDefault()),
+      offset_(offset), 
+      global_(global),
+      local_(local),
+      events_(events)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, NDRange global) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(local)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, NDRange offset, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(offset), 
+      global_(global),
+      local_(local)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, Event e, NDRange global) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(CommandQueue &queue, Event e, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(local)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(CommandQueue &queue, Event e, NDRange offset, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(offset), 
+      global_(global),
+      local_(local)
+    {
+        events_.push_back(e);
+    }
+
+    EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange global) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(NullRange),
+      events_(events)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(NullRange), 
+      global_(global),
+      local_(local),
+      events_(events)
+    {
+
+    }
+
+    EnqueueArgs(CommandQueue &queue, const VECTOR_CLASS<Event> &events, NDRange offset, NDRange global, NDRange local) : 
+      queue_(queue),
+      offset_(offset), 
+      global_(global),
+      local_(local),
+      events_(events)
+    {
+
+    }
+};
+
+namespace detail {
+
+class NullType {};
+
+template<int index, typename T0>
+struct SetArg
+{
+    static void set (Kernel kernel, T0 arg)
+    {
+        kernel.setArg(index, arg);
+    }
+};  
+
+template<int index>
+struct SetArg<index, NullType>
+{
+    static void set (Kernel, NullType)
+    { 
+    }
+};
+
+template <
+   typename T0,   typename T1,   typename T2,   typename T3,
+   typename T4,   typename T5,   typename T6,   typename T7,
+   typename T8,   typename T9,   typename T10,   typename T11,
+   typename T12,   typename T13,   typename T14,   typename T15,
+   typename T16,   typename T17,   typename T18,   typename T19,
+   typename T20,   typename T21,   typename T22,   typename T23,
+   typename T24,   typename T25,   typename T26,   typename T27,
+   typename T28,   typename T29,   typename T30,   typename T31
+>
+class KernelFunctorGlobal
+{
+private:
+    Kernel kernel_;
+
+public:
+   KernelFunctorGlobal(
+        Kernel kernel) :
+            kernel_(kernel)
+    {}
+
+   KernelFunctorGlobal(
+        const Program& program,
+        const STRING_CLASS name,
+        cl_int * err = NULL) :
+            kernel_(program, name.c_str(), err)
+    {}
+
+    Event operator() (
+        const EnqueueArgs& args,
+        T0 t0,
+        T1 t1 = NullType(),
+        T2 t2 = NullType(),
+        T3 t3 = NullType(),
+        T4 t4 = NullType(),
+        T5 t5 = NullType(),
+        T6 t6 = NullType(),
+        T7 t7 = NullType(),
+        T8 t8 = NullType(),
+        T9 t9 = NullType(),
+        T10 t10 = NullType(),
+        T11 t11 = NullType(),
+        T12 t12 = NullType(),
+        T13 t13 = NullType(),
+        T14 t14 = NullType(),
+        T15 t15 = NullType(),
+        T16 t16 = NullType(),
+        T17 t17 = NullType(),
+        T18 t18 = NullType(),
+        T19 t19 = NullType(),
+        T20 t20 = NullType(),
+        T21 t21 = NullType(),
+        T22 t22 = NullType(),
+        T23 t23 = NullType(),
+        T24 t24 = NullType(),
+        T25 t25 = NullType(),
+        T26 t26 = NullType(),
+        T27 t27 = NullType(),
+        T28 t28 = NullType(),
+        T29 t29 = NullType(),
+        T30 t30 = NullType(),
+        T31 t31 = NullType()
+        )
+    {
+        Event event;
+        SetArg<0, T0>::set(kernel_, t0);
+        SetArg<1, T1>::set(kernel_, t1);
+        SetArg<2, T2>::set(kernel_, t2);
+        SetArg<3, T3>::set(kernel_, t3);
+        SetArg<4, T4>::set(kernel_, t4);
+        SetArg<5, T5>::set(kernel_, t5);
+        SetArg<6, T6>::set(kernel_, t6);
+        SetArg<7, T7>::set(kernel_, t7);
+        SetArg<8, T8>::set(kernel_, t8);
+        SetArg<9, T9>::set(kernel_, t9);
+        SetArg<10, T10>::set(kernel_, t10);
+        SetArg<11, T11>::set(kernel_, t11);
+        SetArg<12, T12>::set(kernel_, t12);
+        SetArg<13, T13>::set(kernel_, t13);
+        SetArg<14, T14>::set(kernel_, t14);
+        SetArg<15, T15>::set(kernel_, t15);
+        SetArg<16, T16>::set(kernel_, t16);
+        SetArg<17, T17>::set(kernel_, t17);
+        SetArg<18, T18>::set(kernel_, t18);
+        SetArg<19, T19>::set(kernel_, t19);
+        SetArg<20, T20>::set(kernel_, t20);
+        SetArg<21, T21>::set(kernel_, t21);
+        SetArg<22, T22>::set(kernel_, t22);
+        SetArg<23, T23>::set(kernel_, t23);
+        SetArg<24, T24>::set(kernel_, t24);
+        SetArg<25, T25>::set(kernel_, t25);
+        SetArg<26, T26>::set(kernel_, t26);
+        SetArg<27, T27>::set(kernel_, t27);
+        SetArg<28, T28>::set(kernel_, t28);
+        SetArg<29, T29>::set(kernel_, t29);
+        SetArg<30, T30>::set(kernel_, t30);
+        SetArg<31, T31>::set(kernel_, t31);
+        
+        args.queue_.enqueueNDRangeKernel(
+            kernel_,
+            args.offset_,
+            args.global_,
+            args.local_,
+            &args.events_,
+            &event);
+        
+        return event;
+    }
+
+};
+
+//------------------------------------------------------------------------------------------------------
+
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26,
+	typename T27,
+	typename T28,
+	typename T29,
+	typename T30,
+	typename T31>
+struct functionImplementation_
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29,
+		T30,
+		T31> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 32))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29,
+		T30,
+		T31);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26,
+		T27 arg27,
+		T28 arg28,
+		T29 arg29,
+		T30 arg30,
+		T31 arg31)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26,
+			arg27,
+			arg28,
+			arg29,
+			arg30,
+			arg31);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26,
+	typename T27,
+	typename T28,
+	typename T29,
+	typename T30>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	T26,
+	T27,
+	T28,
+	T29,
+	T30,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29,
+		T30,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 31))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29,
+		T30);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26,
+		T27 arg27,
+		T28 arg28,
+		T29 arg29,
+		T30 arg30)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26,
+			arg27,
+			arg28,
+			arg29,
+			arg30);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26,
+	typename T27,
+	typename T28,
+	typename T29>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	T26,
+	T27,
+	T28,
+	T29,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 30))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		T29);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26,
+		T27 arg27,
+		T28 arg28,
+		T29 arg29)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26,
+			arg27,
+			arg28,
+			arg29);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26,
+	typename T27,
+	typename T28>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	T26,
+	T27,
+	T28,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 29))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		T28);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26,
+		T27 arg27,
+		T28 arg28)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26,
+			arg27,
+			arg28);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26,
+	typename T27>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	T26,
+	T27,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 28))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		T27);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26,
+		T27 arg27)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26,
+			arg27);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25,
+	typename T26>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	T26,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 27))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		T26);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25,
+		T26 arg26)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25,
+			arg26);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24,
+	typename T25>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	T25,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 26))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		T25);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24,
+		T25 arg25)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24,
+			arg25);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23,
+	typename T24>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	T24,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 25))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		T24);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23,
+		T24 arg24)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23,
+			arg24);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22,
+	typename T23>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	T23,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 24))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		T23);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22,
+		T23 arg23)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22,
+			arg23);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21,
+	typename T22>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	T22,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 23))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		T22);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21,
+		T22 arg22)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21,
+			arg22);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20,
+	typename T21>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	T21,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 22))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		T21);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20,
+		T21 arg21)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20,
+			arg21);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19,
+	typename T20>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	T20,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 21))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		T20);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19,
+		T20 arg20)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19,
+			arg20);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18,
+	typename T19>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	T19,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 20))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		T19);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18,
+		T19 arg19)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18,
+			arg19);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17,
+	typename T18>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	T18,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 19))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		T18);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17,
+		T18 arg18)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17,
+			arg18);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16,
+	typename T17>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	T17,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 18))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		T17);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16,
+		T17 arg17)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16,
+			arg17);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15,
+	typename T16>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	T16,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 17))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		T16);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15,
+		T16 arg16)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15,
+			arg16);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14,
+	typename T15>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	T15,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 16))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		T15);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14,
+		T15 arg15)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14,
+			arg15);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13,
+	typename T14>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	T14,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 15))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		T14);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13,
+		T14 arg14)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13,
+			arg14);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12,
+	typename T13>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	T13,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 14))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		T13);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12,
+		T13 arg13)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12,
+			arg13);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11,
+	typename T12>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	T12,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 13))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		T12);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11,
+		T12 arg12)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11,
+			arg12);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10,
+	typename T11>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	T11,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 12))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		T11);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10,
+		T11 arg11)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10,
+			arg11);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9,
+	typename T10>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	T10,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 11))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		T10);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9,
+		T10 arg10)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9,
+			arg10);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8,
+	typename T9>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	T9,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 10))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		T9);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8,
+		T9 arg9)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8,
+			arg9);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7,
+	typename T8>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	T8,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 9))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		T8);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7,
+		T8 arg8)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7,
+			arg8);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6,
+	typename T7>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	T7,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 8))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		T7);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6,
+		T7 arg7)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6,
+			arg7);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5,
+	typename T6>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	T6,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 7))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		T6);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5,
+		T6 arg6)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5,
+			arg6);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4,
+	typename T5>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	T5,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 6))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		T5);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4,
+		T5 arg5)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4,
+			arg5);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3,
+	typename T4>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	T4,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		T4,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 5))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3,
+		T4);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3,
+		T4 arg4)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3,
+			arg4);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2,
+	typename T3>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	T3,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		T3,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 4))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2,
+		T3);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2,
+		T3 arg3)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2,
+			arg3);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1,
+	typename T2>
+struct functionImplementation_
+<	T0,
+	T1,
+	T2,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		T2,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 3))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1,
+		T2);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1,
+		T2 arg2)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1,
+			arg2);
+	}
+
+
+};
+
+template<
+	typename T0,
+	typename T1>
+struct functionImplementation_
+<	T0,
+	T1,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		T1,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 2))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0,
+		T1);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0,
+		T1 arg1)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0,
+			arg1);
+	}
+
+
+};
+
+template<
+	typename T0>
+struct functionImplementation_
+<	T0,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType,
+	NullType>
+{
+	typedef detail::KernelFunctorGlobal<
+		T0,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType,
+		NullType> FunctorType;
+
+    FunctorType functor_;
+
+    functionImplementation_(const FunctorType &functor) :
+        functor_(functor)
+    {
+    
+        #if (defined(_WIN32) && defined(_VARIADIC_MAX) && (_VARIADIC_MAX < 1))
+        // Fail variadic expansion for dev11
+        static_assert(0, "Visual Studio has a hard limit of argument count for a std::function expansion. Please define _VARIADIC_MAX to be 10. If you need more arguments than that VC12 and below cannot support it.");
+        #endif
+            
+    }
+
+	//! \brief Return type of the functor
+	typedef Event result_type;
+
+	//! \brief Function signature of kernel functor with no event dependency.
+	typedef Event type_(
+		const EnqueueArgs&,
+		T0);
+
+	Event operator()(
+		const EnqueueArgs& enqueueArgs,
+		T0 arg0)
+	{
+		return functor_(
+			enqueueArgs,
+			arg0);
+	}
+
+
+};
+
+
+
+
+
+} // namespace detail
+
+//----------------------------------------------------------------------------------------------
+
+template <
+   typename T0,   typename T1 = detail::NullType,   typename T2 = detail::NullType,
+   typename T3 = detail::NullType,   typename T4 = detail::NullType,
+   typename T5 = detail::NullType,   typename T6 = detail::NullType,
+   typename T7 = detail::NullType,   typename T8 = detail::NullType,
+   typename T9 = detail::NullType,   typename T10 = detail::NullType,
+   typename T11 = detail::NullType,   typename T12 = detail::NullType,
+   typename T13 = detail::NullType,   typename T14 = detail::NullType,
+   typename T15 = detail::NullType,   typename T16 = detail::NullType,
+   typename T17 = detail::NullType,   typename T18 = detail::NullType,
+   typename T19 = detail::NullType,   typename T20 = detail::NullType,
+   typename T21 = detail::NullType,   typename T22 = detail::NullType,
+   typename T23 = detail::NullType,   typename T24 = detail::NullType,
+   typename T25 = detail::NullType,   typename T26 = detail::NullType,
+   typename T27 = detail::NullType,   typename T28 = detail::NullType,
+   typename T29 = detail::NullType,   typename T30 = detail::NullType,
+   typename T31 = detail::NullType
+>
+struct make_kernel :
+    public detail::functionImplementation_<
+               T0,   T1,   T2,   T3,
+               T4,   T5,   T6,   T7,
+               T8,   T9,   T10,   T11,
+               T12,   T13,   T14,   T15,
+               T16,   T17,   T18,   T19,
+               T20,   T21,   T22,   T23,
+               T24,   T25,   T26,   T27,
+               T28,   T29,   T30,   T31
+    >
+{
+public:
+	typedef detail::KernelFunctorGlobal<             
+		       T0,   T1,   T2,   T3,
+               T4,   T5,   T6,   T7,
+               T8,   T9,   T10,   T11,
+               T12,   T13,   T14,   T15,
+               T16,   T17,   T18,   T19,
+               T20,   T21,   T22,   T23,
+               T24,   T25,   T26,   T27,
+               T28,   T29,   T30,   T31
+    > FunctorType;
+
+    make_kernel(
+        const Program& program,
+        const STRING_CLASS name,
+        cl_int * err = NULL) :
+           detail::functionImplementation_<
+                    T0,   T1,   T2,   T3,
+                       T4,   T5,   T6,   T7,
+                       T8,   T9,   T10,   T11,
+                       T12,   T13,   T14,   T15,
+                       T16,   T17,   T18,   T19,
+                       T20,   T21,   T22,   T23,
+                       T24,   T25,   T26,   T27,
+                       T28,   T29,   T30,   T31
+           >(
+            FunctorType(program, name, err)) 
+    {}
+
+    make_kernel(
+        const Kernel kernel) :
+           detail::functionImplementation_<
+                    T0,   T1,   T2,   T3,
+                       T4,   T5,   T6,   T7,
+                       T8,   T9,   T10,   T11,
+                       T12,   T13,   T14,   T15,
+                       T16,   T17,   T18,   T19,
+                       T20,   T21,   T22,   T23,
+                       T24,   T25,   T26,   T27,
+                       T28,   T29,   T30,   T31
+           >(
+            FunctorType(kernel)) 
+    {}    
+};
+
+
+//----------------------------------------------------------------------------------------------------------------------
+
+#undef __ERR_STR
+#if !defined(__CL_USER_OVERRIDE_ERROR_STRINGS)
+#undef __GET_DEVICE_INFO_ERR
+#undef __GET_PLATFORM_INFO_ERR
+#undef __GET_DEVICE_IDS_ERR
+#undef __GET_CONTEXT_INFO_ERR
+#undef __GET_EVENT_INFO_ERR
+#undef __GET_EVENT_PROFILE_INFO_ERR
+#undef __GET_MEM_OBJECT_INFO_ERR
+#undef __GET_IMAGE_INFO_ERR
+#undef __GET_SAMPLER_INFO_ERR
+#undef __GET_KERNEL_INFO_ERR
+#undef __GET_KERNEL_ARG_INFO_ERR
+#undef __GET_KERNEL_WORK_GROUP_INFO_ERR
+#undef __GET_PROGRAM_INFO_ERR
+#undef __GET_PROGRAM_BUILD_INFO_ERR
+#undef __GET_COMMAND_QUEUE_INFO_ERR
+
+#undef __CREATE_CONTEXT_ERR
+#undef __CREATE_CONTEXT_FROM_TYPE_ERR
+#undef __GET_SUPPORTED_IMAGE_FORMATS_ERR
+
+#undef __CREATE_BUFFER_ERR
+#undef __CREATE_SUBBUFFER_ERR
+#undef __CREATE_IMAGE2D_ERR
+#undef __CREATE_IMAGE3D_ERR
+#undef __CREATE_SAMPLER_ERR
+#undef __CREATE_SAMPLER_PROPERTY_ERR
+#undef __SET_MEM_OBJECT_DESTRUCTOR_CALLBACK_ERR
+
+#undef __CREATE_USER_EVENT_ERR
+#undef __SET_USER_EVENT_STATUS_ERR
+#undef __SET_EVENT_CALLBACK_ERR
+#undef __SET_PRINTF_CALLBACK_ERR
+
+#undef __WAIT_FOR_EVENTS_ERR
+
+#undef __CREATE_KERNEL_ERR
+#undef __SET_KERNEL_ARGS_ERR
+#undef __CREATE_PROGRAM_WITH_SOURCE_ERR
+#undef __CREATE_PROGRAM_WITH_BINARY_ERR
+#undef __CREATE_PROGRAM_WITH_BUILT_IN_KERNELS_ERR
+#undef __BUILD_PROGRAM_ERR
+#undef __CREATE_KERNELS_IN_PROGRAM_ERR
+
+#undef __CREATE_COMMAND_QUEUE_ERR
+#undef __CREATE_COMMAND_QUEUE_PROPERTY_ERR
+#undef __SET_COMMAND_QUEUE_PROPERTY_ERR
+#undef __ENQUEUE_READ_BUFFER_ERR
+#undef __ENQUEUE_WRITE_BUFFER_ERR
+#undef __ENQUEUE_READ_BUFFER_RECT_ERR
+#undef __ENQUEUE_WRITE_BUFFER_RECT_ERR
+#undef __ENQEUE_COPY_BUFFER_ERR
+#undef __ENQEUE_COPY_BUFFER_RECT_ERR
+#undef __ENQUEUE_READ_IMAGE_ERR
+#undef __ENQUEUE_WRITE_IMAGE_ERR
+#undef __ENQUEUE_COPY_IMAGE_ERR
+#undef __ENQUEUE_COPY_IMAGE_TO_BUFFER_ERR
+#undef __ENQUEUE_COPY_BUFFER_TO_IMAGE_ERR
+#undef __ENQUEUE_MAP_BUFFER_ERR
+#undef __ENQUEUE_MAP_IMAGE_ERR
+#undef __ENQUEUE_UNMAP_MEM_OBJECT_ERR
+#undef __ENQUEUE_NDRANGE_KERNEL_ERR
+#undef __ENQUEUE_TASK_ERR
+#undef __ENQUEUE_NATIVE_KERNEL
+
+#undef __CL_EXPLICIT_CONSTRUCTORS
+
+#undef __UNLOAD_COMPILER_ERR
+#endif //__CL_USER_OVERRIDE_ERROR_STRINGS
+
+#undef __CL_FUNCTION_TYPE
+
+// Extensions
+/**
+ * Deprecated APIs for 1.2
+ */
+#if defined(CL_VERSION_1_1)
+#undef __INIT_CL_EXT_FCN_PTR
+#endif // #if defined(CL_VERSION_1_1)
+#undef __CREATE_SUB_DEVICES
+
+#if defined(USE_CL_DEVICE_FISSION)
+#undef __PARAM_NAME_DEVICE_FISSION
+#endif // USE_CL_DEVICE_FISSION
+
+#undef __DEFAULT_NOT_INITIALIZED 
+#undef __DEFAULT_BEING_INITIALIZED 
+#undef __DEFAULT_INITIALIZED
+
+} // namespace cl
+
+#ifdef _WIN32
+#pragma pop_macro("max")
+#endif // _WIN32
+
+#endif // CL_HPP_
diff --git a/ext/cudart/include/CL/cl_d3d10.h b/ext/cudart/include/CL/cl_d3d10.h
new file mode 100644
index 00000000..89f4bfba
--- /dev/null
+++ b/ext/cudart/include/CL/cl_d3d10.h
@@ -0,0 +1,129 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_D3D10_H
+#define __OPENCL_CL_D3D10_H
+
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( push )
+#pragma warning( disable : 4201 )
+#endif
+#endif
+#include <d3d10.h>
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( pop )
+#endif
+#endif
+
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************
+ * cl_khr_d3d10_sharing                                                       */
+#define cl_khr_d3d10_sharing 1
+
+typedef cl_uint cl_d3d10_device_source_khr;
+typedef cl_uint cl_d3d10_device_set_khr;
+
+/******************************************************************************/
+
+/* Error Codes */
+#define CL_INVALID_D3D10_DEVICE_KHR                  -1002
+#define CL_INVALID_D3D10_RESOURCE_KHR                -1003
+#define CL_D3D10_RESOURCE_ALREADY_ACQUIRED_KHR       -1004
+#define CL_D3D10_RESOURCE_NOT_ACQUIRED_KHR           -1005
+
+/* cl_d3d10_device_source_nv */
+#define CL_D3D10_DEVICE_KHR                          0x4010
+#define CL_D3D10_DXGI_ADAPTER_KHR                    0x4011
+
+/* cl_d3d10_device_set_nv */
+#define CL_PREFERRED_DEVICES_FOR_D3D10_KHR           0x4012
+#define CL_ALL_DEVICES_FOR_D3D10_KHR                 0x4013
+
+/* cl_context_info */
+#define CL_CONTEXT_D3D10_DEVICE_KHR                  0x4014
+#define CL_CONTEXT_D3D10_PREFER_SHARED_RESOURCES_KHR 0x402C
+
+/* cl_mem_info */
+#define CL_MEM_D3D10_RESOURCE_KHR                    0x4015
+
+/* cl_image_info */
+#define CL_IMAGE_D3D10_SUBRESOURCE_KHR               0x4016
+
+/* cl_command_type */
+#define CL_COMMAND_ACQUIRE_D3D10_OBJECTS_KHR         0x4017
+#define CL_COMMAND_RELEASE_D3D10_OBJECTS_KHR         0x4018
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D10KHR_fn)(
+    cl_platform_id             platform,
+    cl_d3d10_device_source_khr d3d_device_source,
+    void *                     d3d_object,
+    cl_d3d10_device_set_khr    d3d_device_set,
+    cl_uint                    num_entries,
+    cl_device_id *             devices,
+    cl_uint *                  num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10BufferKHR_fn)(
+    cl_context     context,
+    cl_mem_flags   flags,
+    ID3D10Buffer * resource,
+    cl_int *       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture2DKHR_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D10Texture2D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture3DKHR_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D10Texture3D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D10ObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D10ObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_CL_D3D10_H */
+
diff --git a/ext/cudart/include/CL/cl_d3d10_ext.h b/ext/cudart/include/CL/cl_d3d10_ext.h
new file mode 100644
index 00000000..acbc1b52
--- /dev/null
+++ b/ext/cudart/include/CL/cl_d3d10_ext.h
@@ -0,0 +1,122 @@
+/**********************************************************************************
+ * Copyright (c) 2008-2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ **********************************************************************************/
+
+#ifndef __OPENCL_CL_D3D10_EXT_H
+#define __OPENCL_CL_D3D10_EXT_H
+
+#include <d3d10.h>
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************
+ * cl_nv_d3d10_sharing                                                        */
+
+typedef cl_uint cl_d3d10_device_source_nv;
+typedef cl_uint cl_d3d10_device_set_nv;
+
+/******************************************************************************/
+
+// Error Codes
+#define CL_INVALID_D3D10_DEVICE_NV             -1002
+#define CL_INVALID_D3D10_RESOURCE_NV           -1003
+#define CL_D3D10_RESOURCE_ALREADY_ACQUIRED_NV  -1004
+#define CL_D3D10_RESOURCE_NOT_ACQUIRED_NV      -1005
+
+// cl_d3d10_device_source_nv
+#define CL_D3D10_DEVICE_NV                     0x4010
+#define CL_D3D10_DXGI_ADAPTER_NV               0x4011
+
+// cl_d3d10_device_set_nv
+#define CL_PREFERRED_DEVICES_FOR_D3D10_NV      0x4012
+#define CL_ALL_DEVICES_FOR_D3D10_NV            0x4013
+
+// cl_context_info
+#define CL_CONTEXT_D3D10_DEVICE_NV             0x4014
+
+// cl_mem_info
+#define CL_MEM_D3D10_RESOURCE_NV               0x4015
+
+// cl_image_info
+#define CL_IMAGE_D3D10_SUBRESOURCE_NV          0x4016
+
+// cl_command_type
+#define CL_COMMAND_ACQUIRE_D3D10_OBJECTS_NV    0x4017
+#define CL_COMMAND_RELEASE_D3D10_OBJECTS_NV    0x4018
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D10NV_fn)(
+    cl_platform_id            platform,
+    cl_d3d10_device_source_nv d3d_device_source,
+    void *                    d3d_object,
+    cl_d3d10_device_set_nv    d3d_device_set,
+    cl_uint                   num_entries, 
+    cl_device_id *            devices, 
+    cl_uint *                 num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10BufferNV_fn)(
+    cl_context     context,
+    cl_mem_flags   flags,
+    ID3D10Buffer * resource,
+    cl_int *       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture2DNV_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D10Texture2D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D10Texture3DNV_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D10Texture3D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D10ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D10ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    cl_mem *         mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __OPENCL_CL_D3D10_H
+
diff --git a/ext/cudart/include/CL/cl_d3d11.h b/ext/cudart/include/CL/cl_d3d11.h
new file mode 100644
index 00000000..10023dde
--- /dev/null
+++ b/ext/cudart/include/CL/cl_d3d11.h
@@ -0,0 +1,128 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_D3D11_H
+#define __OPENCL_CL_D3D11_H
+
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( push )
+#pragma warning( disable : 4201 )
+#endif
+#endif
+#include <d3d11.h>
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( pop )
+#endif
+#endif
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************
+ * cl_khr_d3d11_sharing                                                       */
+#define cl_khr_d3d11_sharing 1
+
+typedef cl_uint cl_d3d11_device_source_khr;
+typedef cl_uint cl_d3d11_device_set_khr;
+
+/******************************************************************************/
+
+/* Error Codes */
+#define CL_INVALID_D3D11_DEVICE_KHR                  -1006
+#define CL_INVALID_D3D11_RESOURCE_KHR                -1007
+#define CL_D3D11_RESOURCE_ALREADY_ACQUIRED_KHR       -1008
+#define CL_D3D11_RESOURCE_NOT_ACQUIRED_KHR           -1009
+
+/* cl_d3d11_device_source */
+#define CL_D3D11_DEVICE_KHR                          0x4019
+#define CL_D3D11_DXGI_ADAPTER_KHR                    0x401A
+
+/* cl_d3d11_device_set */
+#define CL_PREFERRED_DEVICES_FOR_D3D11_KHR           0x401B
+#define CL_ALL_DEVICES_FOR_D3D11_KHR                 0x401C
+
+/* cl_context_info */
+#define CL_CONTEXT_D3D11_DEVICE_KHR                  0x401D
+#define CL_CONTEXT_D3D11_PREFER_SHARED_RESOURCES_KHR 0x402D
+
+/* cl_mem_info */
+#define CL_MEM_D3D11_RESOURCE_KHR                    0x401E
+
+/* cl_image_info */
+#define CL_IMAGE_D3D11_SUBRESOURCE_KHR               0x401F
+
+/* cl_command_type */
+#define CL_COMMAND_ACQUIRE_D3D11_OBJECTS_KHR         0x4020
+#define CL_COMMAND_RELEASE_D3D11_OBJECTS_KHR         0x4021
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D11KHR_fn)(
+    cl_platform_id             platform,
+    cl_d3d11_device_source_khr d3d_device_source,
+    void *                     d3d_object,
+    cl_d3d11_device_set_khr    d3d_device_set,
+    cl_uint                    num_entries,
+    cl_device_id *             devices,
+    cl_uint *                  num_devices) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11BufferKHR_fn)(
+    cl_context     context,
+    cl_mem_flags   flags,
+    ID3D11Buffer * resource,
+    cl_int *       errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture2DKHR_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D11Texture2D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture3DKHR_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D11Texture3D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D11ObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D11ObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_2;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_CL_D3D11_H */
+
diff --git a/ext/cudart/include/CL/cl_d3d11_ext.h b/ext/cudart/include/CL/cl_d3d11_ext.h
new file mode 100644
index 00000000..99b2c5bd
--- /dev/null
+++ b/ext/cudart/include/CL/cl_d3d11_ext.h
@@ -0,0 +1,122 @@
+/**********************************************************************************
+ * Copyright (c) 2008-2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ **********************************************************************************/
+
+#ifndef __OPENCL_CL_D3D11_EXT_H
+#define __OPENCL_CL_D3D11_EXT_H
+
+#include <d3d11.h>
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************
+ * cl_nv_d3d11_sharing                                                        */
+
+typedef cl_uint cl_d3d11_device_source_nv;
+typedef cl_uint cl_d3d11_device_set_nv;
+
+/******************************************************************************/
+
+// Error Codes
+#define CL_INVALID_D3D11_DEVICE_NV             -1006
+#define CL_INVALID_D3D11_RESOURCE_NV           -1007
+#define CL_D3D11_RESOURCE_ALREADY_ACQUIRED_NV  -1008
+#define CL_D3D11_RESOURCE_NOT_ACQUIRED_NV      -1009
+
+// cl_d3d11_device_source_nv
+#define CL_D3D11_DEVICE_NV                     0x4019
+#define CL_D3D11_DXGI_ADAPTER_NV               0x401A
+
+// cl_d3d11_device_set_nv
+#define CL_PREFERRED_DEVICES_FOR_D3D11_NV      0x401B
+#define CL_ALL_DEVICES_FOR_D3D11_NV            0x401C
+
+// cl_context_info
+#define CL_CONTEXT_D3D11_DEVICE_NV             0x401D
+
+// cl_mem_info
+#define CL_MEM_D3D11_RESOURCE_NV               0x401E
+
+// cl_image_info
+#define CL_IMAGE_D3D11_SUBRESOURCE_NV          0x401F
+
+// cl_command_type
+#define CL_COMMAND_ACQUIRE_D3D11_OBJECTS_NV    0x4020
+#define CL_COMMAND_RELEASE_D3D11_OBJECTS_NV    0x4021
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D11NV_fn)(
+    cl_platform_id            platform,
+    cl_d3d11_device_source_nv d3d_device_source,
+    void *                    d3d_object,
+    cl_d3d11_device_set_nv    d3d_device_set,
+    cl_uint                   num_entries, 
+    cl_device_id *            devices, 
+    cl_uint *                 num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11BufferNV_fn)(
+    cl_context     context,
+    cl_mem_flags   flags,
+    ID3D11Buffer * resource,
+    cl_int *       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture2DNV_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D11Texture2D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D11Texture3DNV_fn)(
+    cl_context        context,
+    cl_mem_flags      flags,
+    ID3D11Texture3D * resource,
+    UINT              subresource,
+    cl_int *          errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D11ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D11ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    cl_mem *         mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __OPENCL_CL_D3D11_H
+
diff --git a/ext/cudart/include/CL/cl_d3d9_ext.h b/ext/cudart/include/CL/cl_d3d9_ext.h
new file mode 100644
index 00000000..ab8d6cf0
--- /dev/null
+++ b/ext/cudart/include/CL/cl_d3d9_ext.h
@@ -0,0 +1,143 @@
+/**********************************************************************************
+ * Copyright (c) 2008-2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ **********************************************************************************/
+
+#ifndef __OPENCL_CL_D3D9_EXT_H
+#define __OPENCL_CL_D3D9_EXT_H
+
+#include <d3d9.h>
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************
+ * cl_nv_d3d9_sharing                                                         */
+
+typedef cl_uint cl_d3d9_device_source_nv;
+typedef cl_uint cl_d3d9_device_set_nv;
+
+/******************************************************************************/
+
+// Error Codes
+#define CL_INVALID_D3D9_DEVICE_NV              -1010
+#define CL_INVALID_D3D9_RESOURCE_NV            -1011
+#define CL_D3D9_RESOURCE_ALREADY_ACQUIRED_NV   -1012
+#define CL_D3D9_RESOURCE_NOT_ACQUIRED_NV       -1013
+
+// cl_d3d9_device_source_nv
+#define CL_D3D9_DEVICE_NV                      0x4022
+#define CL_D3D9_ADAPTER_NAME_NV                0x4023
+
+// cl_d3d9_device_set_nv
+#define CL_PREFERRED_DEVICES_FOR_D3D9_NV       0x4024
+#define CL_ALL_DEVICES_FOR_D3D9_NV             0x4025
+
+// cl_context_info
+#define CL_CONTEXT_D3D9_DEVICE_NV              0x4026
+
+// cl_mem_info
+#define CL_MEM_D3D9_RESOURCE_NV                0x4027
+
+// cl_image_info
+#define CL_IMAGE_D3D9_FACE_NV                  0x4028
+#define CL_IMAGE_D3D9_LEVEL_NV                 0x4029
+
+// cl_command_type
+#define CL_COMMAND_ACQUIRE_D3D9_OBJECTS_NV     0x402A
+#define CL_COMMAND_RELEASE_D3D9_OBJECTS_NV     0x402B
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromD3D9NV_fn)(
+    cl_platform_id            platform,
+    cl_d3d9_device_source_nv  d3d_device_source,
+    void *                    d3d_object,
+    cl_d3d9_device_set_nv     d3d_device_set,
+    cl_uint                   num_entries, 
+    cl_device_id *            devices, 
+    cl_uint *                 num_devices) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9VertexBufferNV_fn)(
+    cl_context               context,
+    cl_mem_flags             flags,
+    IDirect3DVertexBuffer9 * resource,
+    cl_int *                 errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9IndexBufferNV_fn)(
+    cl_context              context,
+    cl_mem_flags            flags,
+    IDirect3DIndexBuffer9 * resource,
+    cl_int *                errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9SurfaceNV_fn)(
+    cl_context          context,
+    cl_mem_flags        flags,
+    IDirect3DSurface9 * resource,
+    cl_int *            errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9TextureNV_fn)(
+    cl_context         context,
+    cl_mem_flags       flags,
+    IDirect3DTexture9 *resource,
+    UINT               miplevel,
+    cl_int *           errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9CubeTextureNV_fn)(
+    cl_context              context,
+    cl_mem_flags            flags,
+    IDirect3DCubeTexture9 * resource,
+    D3DCUBEMAP_FACES        facetype,
+    UINT                    miplevel,
+    cl_int *                errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromD3D9VolumeTextureNV_fn)(
+    cl_context                context,
+    cl_mem_flags              flags,
+    IDirect3DVolumeTexture9 * resource,
+    UINT                      miplevel,
+    cl_int *                  errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireD3D9ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint num_objects,
+    const cl_mem *mem_objects,
+    cl_uint num_events_in_wait_list,
+    const cl_event *event_wait_list,
+    cl_event *event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseD3D9ObjectsNV_fn)(
+    cl_command_queue command_queue,
+    cl_uint num_objects,
+    cl_mem *mem_objects,
+    cl_uint num_events_in_wait_list,
+    const cl_event *event_wait_list,
+    cl_event *event) CL_API_SUFFIX__VERSION_1_0;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  // __OPENCL_CL_D3D9_H
+
diff --git a/ext/cudart/include/CL/cl_dx9_media_sharing.h b/ext/cudart/include/CL/cl_dx9_media_sharing.h
new file mode 100644
index 00000000..04893700
--- /dev/null
+++ b/ext/cudart/include/CL/cl_dx9_media_sharing.h
@@ -0,0 +1,118 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_DX9_MEDIA_SHARING_H
+#define __OPENCL_CL_DX9_MEDIA_SHARING_H
+
+#include <CL/cl.h>
+#include <CL/cl_platform.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/******************************************************************************/
+/* cl_khr_dx9_media_sharing                                                   */
+#define cl_khr_dx9_media_sharing 1
+
+typedef cl_uint             cl_dx9_media_adapter_type_khr;
+typedef cl_uint             cl_dx9_media_adapter_set_khr;
+    
+#if defined(_WIN32)
+#include <d3d9.h>
+typedef struct _cl_dx9_surface_info_khr
+{
+    IDirect3DSurface9 *resource;
+    HANDLE shared_handle;
+} cl_dx9_surface_info_khr;
+#endif
+
+
+/******************************************************************************/
+
+/* Error Codes */
+#define CL_INVALID_DX9_MEDIA_ADAPTER_KHR                -1010
+#define CL_INVALID_DX9_MEDIA_SURFACE_KHR                -1011
+#define CL_DX9_MEDIA_SURFACE_ALREADY_ACQUIRED_KHR       -1012
+#define CL_DX9_MEDIA_SURFACE_NOT_ACQUIRED_KHR           -1013
+
+/* cl_media_adapter_type_khr */
+#define CL_ADAPTER_D3D9_KHR                              0x2020
+#define CL_ADAPTER_D3D9EX_KHR                            0x2021
+#define CL_ADAPTER_DXVA_KHR                              0x2022
+
+/* cl_media_adapter_set_khr */
+#define CL_PREFERRED_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR   0x2023
+#define CL_ALL_DEVICES_FOR_DX9_MEDIA_ADAPTER_KHR         0x2024
+
+/* cl_context_info */
+#define CL_CONTEXT_ADAPTER_D3D9_KHR                      0x2025
+#define CL_CONTEXT_ADAPTER_D3D9EX_KHR                    0x2026
+#define CL_CONTEXT_ADAPTER_DXVA_KHR                      0x2027
+
+/* cl_mem_info */
+#define CL_MEM_DX9_MEDIA_ADAPTER_TYPE_KHR                0x2028
+#define CL_MEM_DX9_MEDIA_SURFACE_INFO_KHR                0x2029
+
+/* cl_image_info */
+#define CL_IMAGE_DX9_MEDIA_PLANE_KHR                     0x202A
+
+/* cl_command_type */
+#define CL_COMMAND_ACQUIRE_DX9_MEDIA_SURFACES_KHR        0x202B
+#define CL_COMMAND_RELEASE_DX9_MEDIA_SURFACES_KHR        0x202C
+
+/******************************************************************************/
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetDeviceIDsFromDX9MediaAdapterKHR_fn)(
+    cl_platform_id                   platform,
+    cl_uint                          num_media_adapters,
+    cl_dx9_media_adapter_type_khr *  media_adapter_type,
+    void *                           media_adapters,
+    cl_dx9_media_adapter_set_khr     media_adapter_set,
+    cl_uint                          num_entries,
+    cl_device_id *                   devices,
+    cl_uint *                        num_devices) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromDX9MediaSurfaceKHR_fn)(
+    cl_context                    context,
+    cl_mem_flags                  flags,
+    cl_dx9_media_adapter_type_khr adapter_type,
+    void *                        surface_info,
+    cl_uint                       plane,                                                                          
+    cl_int *                      errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireDX9MediaSurfacesKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseDX9MediaSurfacesKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event) CL_API_SUFFIX__VERSION_1_2;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_CL_DX9_MEDIA_SHARING_H */
+
diff --git a/ext/cudart/include/CL/cl_egl.h b/ext/cudart/include/CL/cl_egl.h
new file mode 100644
index 00000000..6fb3721f
--- /dev/null
+++ b/ext/cudart/include/CL/cl_egl.h
@@ -0,0 +1,123 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_EGL_H
+#define __OPENCL_CL_EGL_H
+
+#ifdef __APPLE__
+#else
+#include <CL/cl.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Command type for events created with clEnqueueAcquireEGLObjectsKHR */
+#define CL_COMMAND_EGL_FENCE_SYNC_OBJECT_KHR  0x202F
+#define CL_COMMAND_ACQUIRE_EGL_OBJECTS_KHR    0x202D
+#define CL_COMMAND_RELEASE_EGL_OBJECTS_KHR    0x202E
+
+/* Error type for clCreateFromEGLImageKHR */
+#define CL_INVALID_EGL_OBJECT_KHR             -1093
+#define CL_EGL_RESOURCE_NOT_ACQUIRED_KHR      -1092
+
+/* CLeglImageKHR is an opaque handle to an EGLImage */
+typedef void* CLeglImageKHR;
+
+/* CLeglDisplayKHR is an opaque handle to an EGLDisplay */
+typedef void* CLeglDisplayKHR;
+
+/* CLeglSyncKHR is an opaque handle to an EGLSync object */
+typedef void* CLeglSyncKHR;
+
+/* properties passed to clCreateFromEGLImageKHR */
+typedef intptr_t cl_egl_image_properties_khr;
+
+
+#define cl_khr_egl_image 1
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromEGLImageKHR(cl_context                  context,
+                        CLeglDisplayKHR             egldisplay,
+                        CLeglImageKHR               eglimage,
+                        cl_mem_flags                flags,
+                        const cl_egl_image_properties_khr * properties,
+                        cl_int *                    errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_mem (CL_API_CALL *clCreateFromEGLImageKHR_fn)(
+    cl_context                  context,
+    CLeglDisplayKHR             egldisplay,
+    CLeglImageKHR               eglimage,
+    cl_mem_flags                flags,
+    const cl_egl_image_properties_khr * properties,
+    cl_int *                    errcode_ret);
+
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireEGLObjectsKHR(cl_command_queue command_queue,
+                              cl_uint          num_objects,
+                              const cl_mem *   mem_objects,
+                              cl_uint          num_events_in_wait_list,
+                              const cl_event * event_wait_list,
+                              cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueAcquireEGLObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event);
+
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseEGLObjectsKHR(cl_command_queue command_queue,
+                              cl_uint          num_objects,
+                              const cl_mem *   mem_objects,
+                              cl_uint          num_events_in_wait_list,
+                              const cl_event * event_wait_list,
+                              cl_event *       event) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clEnqueueReleaseEGLObjectsKHR_fn)(
+    cl_command_queue command_queue,
+    cl_uint          num_objects,
+    const cl_mem *   mem_objects,
+    cl_uint          num_events_in_wait_list,
+    const cl_event * event_wait_list,
+    cl_event *       event);
+
+
+#define cl_khr_egl_event 1
+
+extern CL_API_ENTRY cl_event CL_API_CALL
+clCreateEventFromEGLSyncKHR(cl_context      context,
+                            CLeglSyncKHR    sync,
+                            CLeglDisplayKHR display,
+                            cl_int *        errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_event (CL_API_CALL *clCreateEventFromEGLSyncKHR_fn)(
+    cl_context      context,
+    CLeglSyncKHR    sync,
+    CLeglDisplayKHR display,
+    cl_int *        errcode_ret);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __OPENCL_CL_EGL_H */
diff --git a/ext/cudart/include/CL/cl_ext.h b/ext/cudart/include/CL/cl_ext.h
new file mode 100644
index 00000000..b8b26159
--- /dev/null
+++ b/ext/cudart/include/CL/cl_ext.h
@@ -0,0 +1,1131 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+/* cl_ext.h contains OpenCL extensions which don't have external */
+/* (OpenGL, D3D) dependencies.                                   */
+
+#ifndef __CL_EXT_H
+#define __CL_EXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __APPLE__
+    #include <OpenCL/cl.h>
+    #include <AvailabilityMacros.h>
+#else
+    #include <CL/cl.h>
+#endif
+
+/* cl_khr_fp64 extension - no extension #define since it has no functions  */
+/* CL_DEVICE_DOUBLE_FP_CONFIG is defined in CL.h for OpenCL >= 120 */
+#define CL_DEVICE_DOUBLE_FP_CONFIG                  0x1032
+
+/* cl_khr_fp16 extension - no extension #define since it has no functions  */
+#define CL_DEVICE_HALF_FP_CONFIG                    0x1033
+
+/* Memory object destruction
+ *
+ * Apple extension for use to manage externally allocated buffers used with cl_mem objects with CL_MEM_USE_HOST_PTR
+ *
+ * Registers a user callback function that will be called when the memory object is deleted and its resources
+ * freed. Each call to clSetMemObjectCallbackFn registers the specified user callback function on a callback
+ * stack associated with memobj. The registered user callback functions are called in the reverse order in
+ * which they were registered. The user callback functions are called and then the memory object is deleted
+ * and its resources freed. This provides a mechanism for the application (and libraries) using memobj to be
+ * notified when the memory referenced by host_ptr, specified when the memory object is created and used as
+ * the storage bits for the memory object, can be reused or freed.
+ *
+ * The application may not call CL api's with the cl_mem object passed to the pfn_notify.
+ *
+ * Please check for the "cl_APPLE_SetMemObjectDestructor" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
+ * before using.
+ */
+#define cl_APPLE_SetMemObjectDestructor 1
+cl_int  CL_API_ENTRY clSetMemObjectDestructorAPPLE(  cl_mem memobj,
+                                        void (* pfn_notify)(cl_mem memobj, void * user_data),
+                                        void * user_data)             CL_EXT_SUFFIX__VERSION_1_0;
+
+
+/* Context Logging Functions
+ *
+ * The next three convenience functions are intended to be used as the pfn_notify parameter to clCreateContext().
+ * Please check for the "cl_APPLE_ContextLoggingFunctions" extension using clGetDeviceInfo(CL_DEVICE_EXTENSIONS)
+ * before using.
+ *
+ * clLogMessagesToSystemLog forwards on all log messages to the Apple System Logger
+ */
+#define cl_APPLE_ContextLoggingFunctions 1
+extern void CL_API_ENTRY clLogMessagesToSystemLogAPPLE(  const char * errstr,
+                                            const void * private_info,
+                                            size_t       cb,
+                                            void *       user_data)  CL_EXT_SUFFIX__VERSION_1_0;
+
+/* clLogMessagesToStdout sends all log messages to the file descriptor stdout */
+extern void CL_API_ENTRY clLogMessagesToStdoutAPPLE(   const char * errstr,
+                                          const void * private_info,
+                                          size_t       cb,
+                                          void *       user_data)    CL_EXT_SUFFIX__VERSION_1_0;
+
+/* clLogMessagesToStderr sends all log messages to the file descriptor stderr */
+extern void CL_API_ENTRY clLogMessagesToStderrAPPLE(   const char * errstr,
+                                          const void * private_info,
+                                          size_t       cb,
+                                          void *       user_data)    CL_EXT_SUFFIX__VERSION_1_0;
+
+
+/************************
+* cl_khr_icd extension *
+************************/
+#define cl_khr_icd 1
+
+/* cl_platform_info                                                        */
+#define CL_PLATFORM_ICD_SUFFIX_KHR                  0x0920
+
+/* Additional Error Codes                                                  */
+#define CL_PLATFORM_NOT_FOUND_KHR                   -1001
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clIcdGetPlatformIDsKHR(cl_uint          num_entries,
+                       cl_platform_id * platforms,
+                       cl_uint *        num_platforms);
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL *clIcdGetPlatformIDsKHR_fn)(cl_uint          num_entries,
+                                         cl_platform_id * platforms,
+                                         cl_uint *        num_platforms);
+
+
+/*******************************
+ * cl_khr_il_program extension *
+ *******************************/
+#define cl_khr_il_program 1
+
+/* New property to clGetDeviceInfo for retrieving supported intermediate
+ * languages
+ */
+#define CL_DEVICE_IL_VERSION_KHR                    0x105B
+
+/* New property to clGetProgramInfo for retrieving for retrieving the IL of a
+ * program
+ */
+#define CL_PROGRAM_IL_KHR                           0x1169
+
+extern CL_API_ENTRY cl_program CL_API_CALL
+clCreateProgramWithILKHR(cl_context   context,
+                         const void * il,
+                         size_t       length,
+                         cl_int *     errcode_ret);
+
+typedef CL_API_ENTRY cl_program
+(CL_API_CALL *clCreateProgramWithILKHR_fn)(cl_context   context,
+                                           const void * il,
+                                           size_t       length,
+                                           cl_int *     errcode_ret) CL_EXT_SUFFIX__VERSION_1_2;
+
+/* Extension: cl_khr_image2d_from_buffer
+ *
+ * This extension allows a 2D image to be created from a cl_mem buffer without
+ * a copy. The type associated with a 2D image created from a buffer in an
+ * OpenCL program is image2d_t. Both the sampler and sampler-less read_image
+ * built-in functions are supported for 2D images and 2D images created from
+ * a buffer.  Similarly, the write_image built-ins are also supported for 2D
+ * images created from a buffer.
+ *
+ * When the 2D image from buffer is created, the client must specify the
+ * width, height, image format (i.e. channel order and channel data type)
+ * and optionally the row pitch.
+ *
+ * The pitch specified must be a multiple of
+ * CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR pixels.
+ * The base address of the buffer must be aligned to
+ * CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR pixels.
+ */
+
+#define CL_DEVICE_IMAGE_PITCH_ALIGNMENT_KHR              0x104A
+#define CL_DEVICE_IMAGE_BASE_ADDRESS_ALIGNMENT_KHR       0x104B
+
+
+/**************************************
+ * cl_khr_initialize_memory extension *
+ **************************************/
+
+#define CL_CONTEXT_MEMORY_INITIALIZE_KHR            0x2030
+
+
+/**************************************
+ * cl_khr_terminate_context extension *
+ **************************************/
+
+#define CL_CONTEXT_TERMINATED_KHR                   -1121
+
+#define CL_DEVICE_TERMINATE_CAPABILITY_KHR          0x2031
+#define CL_CONTEXT_TERMINATE_KHR                    0x2032
+
+#define cl_khr_terminate_context 1
+extern CL_API_ENTRY cl_int CL_API_CALL
+clTerminateContextKHR(cl_context context) CL_EXT_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL *clTerminateContextKHR_fn)(cl_context context) CL_EXT_SUFFIX__VERSION_1_2;
+
+
+/*
+ * Extension: cl_khr_spir
+ *
+ * This extension adds support to create an OpenCL program object from a
+ * Standard Portable Intermediate Representation (SPIR) instance
+ */
+
+#define CL_DEVICE_SPIR_VERSIONS                     0x40E0
+#define CL_PROGRAM_BINARY_TYPE_INTERMEDIATE         0x40E1
+
+
+/*****************************************
+ * cl_khr_create_command_queue extension *
+ *****************************************/
+#define cl_khr_create_command_queue 1
+
+typedef cl_properties cl_queue_properties_khr;
+
+extern CL_API_ENTRY cl_command_queue CL_API_CALL
+clCreateCommandQueueWithPropertiesKHR(cl_context context,
+                                      cl_device_id device,
+                                      const cl_queue_properties_khr* properties,
+                                      cl_int* errcode_ret) CL_EXT_SUFFIX__VERSION_1_2;
+
+typedef CL_API_ENTRY cl_command_queue
+(CL_API_CALL *clCreateCommandQueueWithPropertiesKHR_fn)(cl_context context,
+                                                        cl_device_id device,
+                                                        const cl_queue_properties_khr* properties,
+                                                        cl_int* errcode_ret) CL_EXT_SUFFIX__VERSION_1_2;
+
+
+/******************************************
+* cl_khr_semaphore extension *
+******************************************/
+
+typedef enum _cl_semaphore_type__enum {
+    CL_SEMAPHORE_TYPE_BINARY_KHR       = 1,
+} cl_semaphore_type;
+
+typedef cl_properties cl_semaphore_properties_khr;
+
+typedef cl_uint cl_semaphore_info_khr;
+
+typedef struct _cl_semaphore* cl_semaphore_khr;
+typedef cl_ulong cl_semaphore_payload_khr;
+
+extern CL_API_ENTRY cl_semaphore_khr CL_API_CALL
+clCreateSemaphoreWithPropertiesKHR(cl_context context,
+                                   cl_semaphore_properties_khr *sema_props,
+                                   cl_int *errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueWaitSemaphoresKHR(cl_command_queue command_queue,
+                              cl_uint num_sema_objects,
+                              const cl_semaphore_khr *sema_objects,
+                              const cl_semaphore_payload_khr *sema_payload_list,
+                              cl_uint num_events_in_wait_list,
+                              const cl_event *event_wait_list,
+                              cl_event *event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSignalSemaphoresKHR(cl_command_queue command_queue,
+                             cl_uint num_sema_objects,
+                             const cl_semaphore_khr *sema_objects,
+                             const cl_semaphore_payload_khr *sema_payload_list,
+                             cl_uint num_events_in_wait_list,
+                             const cl_event *event_wait_list,
+                             cl_event *event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetSemaphoreInfoKHR(const cl_semaphore_khr sema_object,
+                      cl_semaphore_info_khr param_name,
+                      size_t param_value_size,
+                      void *param_value,
+                      size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseSemaphoreKHR(cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainSemaphoreKHR(cl_semaphore_khr sema_object) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseSemaphoreObjectKHR(cl_semaphore_khr sema_object)  CL_API_SUFFIX__VERSION_1_2;
+
+#define CL_COMMAND_SEMAPHORE_WAIT_KHR               0x2042
+#define CL_COMMAND_SEMAPHORE_SIGNAL_KHR             0x2043
+#define CL_SEMAPHORE_CONTEXT_KHR                    0x2039
+#define CL_SEMAPHORE_REFERENCE_COUNT_KHR            0x203A
+#define CL_SEMAPHORE_PROPERTIES_KHR                 0x203B
+#define CL_SEMAPHORE_TYPE_KHR                       0x203D
+#define CL_PLATFORM_SEMAPHORE_TYPES_KHR             0x2036
+#define CL_SEMAPHORE_PAYLOAD_KHR                    0x203C
+
+/******************************************
+* cl_khr_external_semaphore extension *
+******************************************/
+
+typedef enum _cl_external_context_type_enum {
+    CL_EXTERNAL_CONTEXT_TYPE_NONE       = 0,
+    CL_EXTERNAL_CONTEXT_TYPE_CL         = 1,
+    CL_EXTERNAL_CONTEXT_TYPE_VULKAN     = 2,
+} cl_external_context_type_khr;
+
+typedef cl_uint cl_external_semaphore_handle_type_khr;
+// API-agnostic semaphore handles are defined here in this spec.
+#define CL_SEMAPHORE_HANDLE_OPAQUE_FD_KHR                      0x2055
+#define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KHR                   0x2056
+#define CL_SEMAPHORE_HANDLE_OPAQUE_WIN32_KMT_KHR               0x2057
+
+typedef struct _cl_semaphore_desc_khr_st {
+    cl_external_semaphore_handle_type_khr type;
+    void *handle_ptr;
+} cl_semaphore_desc_khr;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetSemaphoreHandleForTypeKHR(const cl_semaphore_khr                sema_object,
+                               const cl_device_id                    device,
+                               cl_external_semaphore_handle_type_khr handle_type,
+                               size_t                                handle_size,
+                               void                                  *handle_ptr,
+                               size_t                                *handle_size_ret) CL_API_SUFFIX__VERSION_1_2;
+
+#define CL_SEMAPHORE_DESC_KHR                                   0x2460
+#define CL_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR                    0x203F
+
+#define CL_PLATFORM_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR           0x2037
+#define CL_PLATFORM_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR           0x2038
+
+#define CL_DEVICE_SEMAPHORE_IMPORT_HANDLE_TYPES_KHR                         0x204D
+#define CL_DEVICE_SEMAPHORE_EXPORT_HANDLE_TYPES_KHR                         0x204E
+
+// error codes
+#define CL_INVALID_SEMAPHORE_KHR                                -1142
+
+/******************************************
+* cl_khr_external_memory extension *
+******************************************/
+
+typedef cl_uint cl_external_context_info;
+
+typedef enum _cl_external_context_type_enum cl_external_context_type_khr;
+
+typedef cl_properties cl_mem_properties_khr;
+
+typedef cl_uint cl_external_mem_handle_type_khr;
+// API-agnostic memory handles are defined here in this spec.
+#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_FD_KHR            0x2060
+#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KHR         0x2061
+#define CL_EXTERNAL_MEMORY_HANDLE_OPAQUE_WIN32_KMT_KHR     0x2062
+
+typedef struct _cl_external_mem_desc_khr_st {
+    cl_external_mem_handle_type_khr type;
+    void *handle_ptr;
+    size_t offset;
+    unsigned long long size;
+} cl_external_mem_desc_khr;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetExternalContextInfoKHR(const cl_context_properties  *properties,
+                            cl_external_context_info  param_name,   
+                            size_t  param_value_size,
+                            void  *param_value,
+                            size_t  *param_value_size_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireExternalMemObjectsKHR(cl_command_queue command_queue, 
+                                      cl_uint num_mem_objects,
+                                      const cl_mem *mem_objects,
+                                      cl_uint num_events_in_wait_list,
+                                      const cl_event *event_wait_list,
+                                      cl_event *event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseExternalMemObjectsKHR(cl_command_queue command_queue,
+                                      cl_uint num_mem_objects,
+                                      const cl_mem *mem_objects,
+                                      cl_uint num_events_in_wait_list,
+                                      const cl_event *event_wait_list,
+                                      cl_event *event) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBufferFromExternalMemoryKHR(cl_context context,
+                                    const cl_mem_properties_khr* properties,
+                                    cl_mem_flags flags,
+                                    cl_external_mem_desc_khr extMem,
+                                    cl_int *errcode_ret)  CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateImageFromExternalMemoryKHR(cl_context context,
+                                   const cl_mem_properties_khr* properties,
+                                   cl_mem_flags flags,
+                                   cl_external_mem_desc_khr extMem,
+                                   const cl_image_format *image_format,
+                                   const cl_image_desc *image_desc,
+                                   cl_int *errcode_ret)  CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_semaphore_khr CL_API_CALL
+clCreateFromExternalSemaphoreKHR(cl_context context,
+                                 cl_semaphore_properties_khr *sema_props,
+                                 cl_semaphore_desc_khr sema_desc,
+                                 cl_int *errcode_ret)  
+                                 CL_API_SUFFIX__VERSION_1_2;
+
+#define CL_INVALID_EXTERNAL_DEVICEGROUP_REFERENCE_KHR   -1122
+#define CL_INVALID_EXT_MEM_DESC_KHR                     -1123
+#define CL_INVALID_EXT_MEM_HANDLE_TYPE_KHR              -1148
+#define CL_INVALID_EXT_MEM_HANDLE_KHR                   -1149
+#define CL_INVALID_EXT_MEM_OFFSET_KHR                   -1150
+#define CL_INVALID_EXT_MEM_SIZE_KHR                     -1140
+
+#define CL_CURRENT_DEVICE_FOR_EXTERNAL_CONTEXT_KHR      0x2036
+#define CL_DEVICES_FOR_EXTERNAL_CONTEXT_KHR             0x2037
+#define CL_EXTERNAL_DEVICE_KHR                          0x2038
+#define CL_EXTERNAL_DEVICEGROUP_KHR                     0x2039
+#define CL_EXTERNAL_CONTEXT_TYPE_KHR                    0x204B
+#define CL_DEVICE_HANDLE_LIST_KHR                       0x2051
+#define CL_DEVICE_HANDLE_LIST_END_KHR                   0x0
+
+
+#define CL_COMMAND_ACQUIRE_EXTERNAL_MEM_OBJECTS_KHR     0x2047
+#define CL_COMMAND_RELEASE_EXTERNAL_MEM_OBJECTS_KHR     0x2048
+#define CL_EXTERNAL_MEM_DESC_KHR                        0x203C
+#define CL_EXTERNAL_IMAGE_INFO_KHR                      0x203D
+#define CL_PLATFORM_EXTERNAL_HANDLE_TYPES_KHR           0x203E
+#define CL_PLATFORM_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR  0x2044
+#define CL_DEVICE_EXTERNAL_MEMORY_IMPORT_HANDLE_TYPES_KHR    0x204F
+#define CL_DEVICE_EXTERNAL_MEMORY_PROPERTIES_KHR             0x2050
+
+
+/******************************************
+* cl_nv_device_attribute_query extension *
+******************************************/
+
+/* cl_nv_device_attribute_query extension - no extension #define since it has no functions */
+#define CL_DEVICE_COMPUTE_CAPABILITY_MAJOR_NV       0x4000
+#define CL_DEVICE_COMPUTE_CAPABILITY_MINOR_NV       0x4001
+#define CL_DEVICE_REGISTERS_PER_BLOCK_NV            0x4002
+#define CL_DEVICE_WARP_SIZE_NV                      0x4003
+#define CL_DEVICE_GPU_OVERLAP_NV                    0x4004
+#define CL_DEVICE_KERNEL_EXEC_TIMEOUT_NV            0x4005
+#define CL_DEVICE_INTEGRATED_MEMORY_NV              0x4006
+#define CL_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT_NV   0x4007
+#define CL_DEVICE_PCI_BUS_ID_NV                     0x4008
+#define CL_DEVICE_PCI_SLOT_ID_NV                    0x4009
+#define CL_DEVICE_PCI_DOMAIN_ID_NV                  0x400A
+#define CL_DEVICE_MAX_LOCAL_MEMORY_PER_SM_NV        0x400B
+#define CL_DEVICE_UUID_KHR                          0x106A 
+#define CL_DRIVER_UUID_KHR                          0x106B    
+#define CL_DEVICE_LUID_VALID_KHR                    0x106C     
+#define CL_DEVICE_LUID_KHR                          0x106D     
+#define CL_DEVICE_NODE_MASK_KHR                     0x106E     
+#define CL_UUID_SIZE_KHR                            16
+#define CL_LUID_SIZE_KHR                            8
+
+/******************************************
+* cl_nv_create_buffer extension *
+******************************************/
+
+typedef cl_bitfield         cl_mem_flags_NV;
+CL_API_ENTRY cl_mem CL_API_CALL
+clCreateBufferNV(cl_context     context,
+               cl_mem_flags     flags,
+               cl_mem_flags_NV  flags_NV,
+               size_t           size,
+               void             *host_ptr,
+               cl_int           *errcode_ret);
+
+/******************************************
+* cl_kernel_attribute_nv extension *
+*******************************************/
+
+typedef enum kernel_attribute_enum {
+    CL_KERNEL_PREFERRED_LOCAL_MEMORY_SIZE_NV = 0,   /* setting preferred shared memory size */
+} cl_kernel_attribute_nv;
+
+CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelAttributeNV(cl_kernel kernel,
+                       cl_device_id device,
+                       cl_kernel_attribute_nv k_attr,
+                       size_t param_value_size,
+                       const void *param_value);
+
+CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelAttributeNV(cl_kernel kernel,
+                       cl_device_id device,
+                       cl_kernel_attribute_nv k_attr,
+                       size_t param_value_size,
+                       void *param_value,
+                       size_t *param_value_size_ret);
+
+#define CL_MEM_LOCATION_HOST_NV                     (1 << 0)
+#define CL_MEM_PINNED_NV                            (1 << 1)
+
+/*********************************
+* cl_amd_device_attribute_query *
+*********************************/
+
+#define CL_DEVICE_PROFILING_TIMER_OFFSET_AMD            0x4036
+#define CL_DEVICE_TOPOLOGY_AMD                          0x4037
+#define CL_DEVICE_BOARD_NAME_AMD                        0x4038
+#define CL_DEVICE_GLOBAL_FREE_MEMORY_AMD                0x4039
+#define CL_DEVICE_SIMD_PER_COMPUTE_UNIT_AMD             0x4040
+#define CL_DEVICE_SIMD_WIDTH_AMD                        0x4041
+#define CL_DEVICE_SIMD_INSTRUCTION_WIDTH_AMD            0x4042
+#define CL_DEVICE_WAVEFRONT_WIDTH_AMD                   0x4043
+#define CL_DEVICE_GLOBAL_MEM_CHANNELS_AMD               0x4044
+#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANKS_AMD          0x4045
+#define CL_DEVICE_GLOBAL_MEM_CHANNEL_BANK_WIDTH_AMD     0x4046
+#define CL_DEVICE_LOCAL_MEM_SIZE_PER_COMPUTE_UNIT_AMD   0x4047
+#define CL_DEVICE_LOCAL_MEM_BANKS_AMD                   0x4048
+#define CL_DEVICE_THREAD_TRACE_SUPPORTED_AMD            0x4049
+#define CL_DEVICE_GFXIP_MAJOR_AMD                       0x404A
+#define CL_DEVICE_GFXIP_MINOR_AMD                       0x404B
+#define CL_DEVICE_AVAILABLE_ASYNC_QUEUES_AMD            0x404C
+#define CL_DEVICE_PREFERRED_WORK_GROUP_SIZE_AMD         0x4030
+#define CL_DEVICE_MAX_WORK_GROUP_SIZE_AMD               0x4031
+#define CL_DEVICE_PREFERRED_CONSTANT_BUFFER_SIZE_AMD    0x4033
+#define CL_DEVICE_PCIE_ID_AMD                           0x4034
+
+
+/*********************************
+* cl_arm_printf extension
+*********************************/
+
+#define CL_PRINTF_CALLBACK_ARM                      0x40B0
+#define CL_PRINTF_BUFFERSIZE_ARM                    0x40B1
+
+
+/***********************************
+* cl_ext_device_fission extension
+***********************************/
+#define cl_ext_device_fission   1
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clReleaseDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL *clReleaseDeviceEXT_fn)(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clRetainDeviceEXT(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL *clRetainDeviceEXT_fn)(cl_device_id device) CL_EXT_SUFFIX__VERSION_1_1;
+
+typedef cl_ulong  cl_device_partition_property_ext;
+extern CL_API_ENTRY cl_int CL_API_CALL
+clCreateSubDevicesEXT(cl_device_id   in_device,
+                      const cl_device_partition_property_ext * properties,
+                      cl_uint        num_entries,
+                      cl_device_id * out_devices,
+                      cl_uint *      num_devices) CL_EXT_SUFFIX__VERSION_1_1;
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL * clCreateSubDevicesEXT_fn)(cl_device_id   in_device,
+                                         const cl_device_partition_property_ext * properties,
+                                         cl_uint        num_entries,
+                                         cl_device_id * out_devices,
+                                         cl_uint *      num_devices) CL_EXT_SUFFIX__VERSION_1_1;
+
+/* cl_device_partition_property_ext */
+#define CL_DEVICE_PARTITION_EQUALLY_EXT             0x4050
+#define CL_DEVICE_PARTITION_BY_COUNTS_EXT           0x4051
+#define CL_DEVICE_PARTITION_BY_NAMES_EXT            0x4052
+#define CL_DEVICE_PARTITION_BY_AFFINITY_DOMAIN_EXT  0x4053
+
+/* clDeviceGetInfo selectors */
+#define CL_DEVICE_PARENT_DEVICE_EXT                 0x4054
+#define CL_DEVICE_PARTITION_TYPES_EXT               0x4055
+#define CL_DEVICE_AFFINITY_DOMAINS_EXT              0x4056
+#define CL_DEVICE_REFERENCE_COUNT_EXT               0x4057
+#define CL_DEVICE_PARTITION_STYLE_EXT               0x4058
+
+/* error codes */
+#define CL_DEVICE_PARTITION_FAILED_EXT              -1057
+#define CL_INVALID_PARTITION_COUNT_EXT              -1058
+#define CL_INVALID_PARTITION_NAME_EXT               -1059
+
+/* CL_AFFINITY_DOMAINs */
+#define CL_AFFINITY_DOMAIN_L1_CACHE_EXT             0x1
+#define CL_AFFINITY_DOMAIN_L2_CACHE_EXT             0x2
+#define CL_AFFINITY_DOMAIN_L3_CACHE_EXT             0x3
+#define CL_AFFINITY_DOMAIN_L4_CACHE_EXT             0x4
+#define CL_AFFINITY_DOMAIN_NUMA_EXT                 0x10
+#define CL_AFFINITY_DOMAIN_NEXT_FISSIONABLE_EXT     0x100
+
+/* cl_device_partition_property_ext list terminators */
+#define CL_PROPERTIES_LIST_END_EXT                  ((cl_device_partition_property_ext) 0)
+#define CL_PARTITION_BY_COUNTS_LIST_END_EXT         ((cl_device_partition_property_ext) 0)
+#define CL_PARTITION_BY_NAMES_LIST_END_EXT          ((cl_device_partition_property_ext) 0 - 1)
+
+
+/***********************************
+ * cl_ext_migrate_memobject extension definitions
+ ***********************************/
+#define cl_ext_migrate_memobject 1
+
+typedef cl_bitfield cl_mem_migration_flags_ext;
+
+#define CL_MIGRATE_MEM_OBJECT_HOST_EXT              0x1
+
+#define CL_COMMAND_MIGRATE_MEM_OBJECT_EXT           0x4040
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueMigrateMemObjectEXT(cl_command_queue command_queue,
+                             cl_uint          num_mem_objects,
+                             const cl_mem *   mem_objects,
+                             cl_mem_migration_flags_ext flags,
+                             cl_uint          num_events_in_wait_list,
+                             const cl_event * event_wait_list,
+                             cl_event *       event);
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL *clEnqueueMigrateMemObjectEXT_fn)(cl_command_queue command_queue,
+                                               cl_uint          num_mem_objects,
+                                               const cl_mem *   mem_objects,
+                                               cl_mem_migration_flags_ext flags,
+                                               cl_uint          num_events_in_wait_list,
+                                               const cl_event * event_wait_list,
+                                               cl_event *       event);
+
+
+/*********************************
+* cl_ext_cxx_for_opencl extension
+*********************************/
+#define cl_ext_cxx_for_opencl 1
+
+#define CL_DEVICE_CXX_FOR_OPENCL_NUMERIC_VERSION_EXT 0x4230
+
+/*********************************
+* cl_qcom_ext_host_ptr extension
+*********************************/
+#define cl_qcom_ext_host_ptr 1
+
+#define CL_MEM_EXT_HOST_PTR_QCOM                  (1 << 29)
+
+#define CL_DEVICE_EXT_MEM_PADDING_IN_BYTES_QCOM   0x40A0
+#define CL_DEVICE_PAGE_SIZE_QCOM                  0x40A1
+#define CL_IMAGE_ROW_ALIGNMENT_QCOM               0x40A2
+#define CL_IMAGE_SLICE_ALIGNMENT_QCOM             0x40A3
+#define CL_MEM_HOST_UNCACHED_QCOM                 0x40A4
+#define CL_MEM_HOST_WRITEBACK_QCOM                0x40A5
+#define CL_MEM_HOST_WRITETHROUGH_QCOM             0x40A6
+#define CL_MEM_HOST_WRITE_COMBINING_QCOM          0x40A7
+
+typedef cl_uint                                   cl_image_pitch_info_qcom;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetDeviceImageInfoQCOM(cl_device_id             device,
+                         size_t                   image_width,
+                         size_t                   image_height,
+                         const cl_image_format   *image_format,
+                         cl_image_pitch_info_qcom param_name,
+                         size_t                   param_value_size,
+                         void                    *param_value,
+                         size_t                  *param_value_size_ret);
+
+typedef struct _cl_mem_ext_host_ptr
+{
+    /* Type of external memory allocation. */
+    /* Legal values will be defined in layered extensions. */
+    cl_uint  allocation_type;
+
+    /* Host cache policy for this external memory allocation. */
+    cl_uint  host_cache_policy;
+
+} cl_mem_ext_host_ptr;
+
+
+/*******************************************
+* cl_qcom_ext_host_ptr_iocoherent extension
+********************************************/
+
+/* Cache policy specifying io-coherence */
+#define CL_MEM_HOST_IOCOHERENT_QCOM               0x40A9
+
+
+/*********************************
+* cl_qcom_ion_host_ptr extension
+*********************************/
+
+#define CL_MEM_ION_HOST_PTR_QCOM                  0x40A8
+
+typedef struct _cl_mem_ion_host_ptr
+{
+    /* Type of external memory allocation. */
+    /* Must be CL_MEM_ION_HOST_PTR_QCOM for ION allocations. */
+    cl_mem_ext_host_ptr  ext_host_ptr;
+
+    /* ION file descriptor */
+    int                  ion_filedesc;
+
+    /* Host pointer to the ION allocated memory */
+    void*                ion_hostptr;
+
+} cl_mem_ion_host_ptr;
+
+
+/*********************************
+* cl_qcom_android_native_buffer_host_ptr extension
+*********************************/
+
+#define CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM                  0x40C6
+
+typedef struct _cl_mem_android_native_buffer_host_ptr
+{
+    /* Type of external memory allocation. */
+    /* Must be CL_MEM_ANDROID_NATIVE_BUFFER_HOST_PTR_QCOM for Android native buffers. */
+    cl_mem_ext_host_ptr  ext_host_ptr;
+
+    /* Virtual pointer to the android native buffer */
+    void*                anb_ptr;
+
+} cl_mem_android_native_buffer_host_ptr;
+
+
+/******************************************
+ * cl_img_yuv_image extension *
+ ******************************************/
+
+/* Image formats used in clCreateImage */
+#define CL_NV21_IMG                                 0x40D0
+#define CL_YV12_IMG                                 0x40D1
+
+
+/******************************************
+ * cl_img_cached_allocations extension *
+ ******************************************/
+
+/* Flag values used by clCreateBuffer */
+#define CL_MEM_USE_UNCACHED_CPU_MEMORY_IMG          (1 << 26)
+#define CL_MEM_USE_CACHED_CPU_MEMORY_IMG            (1 << 27)
+
+
+/******************************************
+ * cl_img_use_gralloc_ptr extension *
+ ******************************************/
+#define cl_img_use_gralloc_ptr 1
+
+/* Flag values used by clCreateBuffer */
+#define CL_MEM_USE_GRALLOC_PTR_IMG                  (1 << 28)
+
+/* To be used by clGetEventInfo: */
+#define CL_COMMAND_ACQUIRE_GRALLOC_OBJECTS_IMG      0x40D2
+#define CL_COMMAND_RELEASE_GRALLOC_OBJECTS_IMG      0x40D3
+
+/* Error code from clEnqueueReleaseGrallocObjectsIMG */
+#define CL_GRALLOC_RESOURCE_NOT_ACQUIRED_IMG        0x40D4
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireGrallocObjectsIMG(cl_command_queue      command_queue,
+                                  cl_uint               num_objects,
+                                  const cl_mem *        mem_objects,
+                                  cl_uint               num_events_in_wait_list,
+                                  const cl_event *      event_wait_list,
+                                  cl_event *            event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseGrallocObjectsIMG(cl_command_queue      command_queue,
+                                  cl_uint               num_objects,
+                                  const cl_mem *        mem_objects,
+                                  cl_uint               num_events_in_wait_list,
+                                  const cl_event *      event_wait_list,
+                                  cl_event *            event) CL_EXT_SUFFIX__VERSION_1_2;
+
+
+/*********************************
+* cl_khr_subgroups extension
+*********************************/
+#define cl_khr_subgroups 1
+
+#if !defined(CL_VERSION_2_1)
+/* For OpenCL 2.1 and newer, cl_kernel_sub_group_info is declared in CL.h.
+   In hindsight, there should have been a khr suffix on this type for
+   the extension, but keeping it un-suffixed to maintain backwards
+   compatibility. */
+typedef cl_uint             cl_kernel_sub_group_info;
+#endif
+
+/* cl_kernel_sub_group_info */
+#define CL_KERNEL_MAX_SUB_GROUP_SIZE_FOR_NDRANGE_KHR    0x2033
+#define CL_KERNEL_SUB_GROUP_COUNT_FOR_NDRANGE_KHR       0x2034
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetKernelSubGroupInfoKHR(cl_kernel    in_kernel,
+                           cl_device_id in_device,
+                           cl_kernel_sub_group_info param_name,
+                           size_t       input_value_size,
+                           const void * input_value,
+                           size_t       param_value_size,
+                           void *       param_value,
+                           size_t *     param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED;
+
+typedef CL_API_ENTRY cl_int
+(CL_API_CALL * clGetKernelSubGroupInfoKHR_fn)(cl_kernel    in_kernel,
+                                              cl_device_id in_device,
+                                              cl_kernel_sub_group_info param_name,
+                                              size_t       input_value_size,
+                                              const void * input_value,
+                                              size_t       param_value_size,
+                                              void *       param_value,
+                                              size_t *     param_value_size_ret) CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED;
+
+
+/*********************************
+* cl_khr_mipmap_image extension
+*********************************/
+
+/* cl_sampler_properties */
+#define CL_SAMPLER_MIP_FILTER_MODE_KHR              0x1155
+#define CL_SAMPLER_LOD_MIN_KHR                      0x1156
+#define CL_SAMPLER_LOD_MAX_KHR                      0x1157
+
+
+/*********************************
+* cl_khr_priority_hints extension
+*********************************/
+/* This extension define is for backwards compatibility.
+   It shouldn't be required since this extension has no new functions. */
+#define cl_khr_priority_hints 1
+
+typedef cl_uint  cl_queue_priority_khr;
+
+/* cl_command_queue_properties */
+#define CL_QUEUE_PRIORITY_KHR 0x1096
+
+/* cl_queue_priority_khr */
+#define CL_QUEUE_PRIORITY_HIGH_KHR (1<<0)
+#define CL_QUEUE_PRIORITY_MED_KHR (1<<1)
+#define CL_QUEUE_PRIORITY_LOW_KHR (1<<2)
+
+
+/*********************************
+* cl_khr_throttle_hints extension
+*********************************/
+/* This extension define is for backwards compatibility.
+   It shouldn't be required since this extension has no new functions. */
+#define cl_khr_throttle_hints 1
+
+typedef cl_uint  cl_queue_throttle_khr;
+
+/* cl_command_queue_properties */
+#define CL_QUEUE_THROTTLE_KHR 0x1097
+
+/* cl_queue_throttle_khr */
+#define CL_QUEUE_THROTTLE_HIGH_KHR (1<<0)
+#define CL_QUEUE_THROTTLE_MED_KHR (1<<1)
+#define CL_QUEUE_THROTTLE_LOW_KHR (1<<2)
+
+
+/*********************************
+* cl_khr_subgroup_named_barrier
+*********************************/
+/* This extension define is for backwards compatibility.
+   It shouldn't be required since this extension has no new functions. */
+#define cl_khr_subgroup_named_barrier 1
+
+/* cl_device_info */
+#define CL_DEVICE_MAX_NAMED_BARRIER_COUNT_KHR       0x2035
+
+
+/*********************************
+* cl_khr_extended_versioning
+*********************************/
+
+#define cl_khr_extended_versioning 1
+
+#define CL_VERSION_MAJOR_BITS_KHR (10)
+#define CL_VERSION_MINOR_BITS_KHR (10)
+#define CL_VERSION_PATCH_BITS_KHR (12)
+
+#define CL_VERSION_MAJOR_MASK_KHR ((1 << CL_VERSION_MAJOR_BITS_KHR) - 1)
+#define CL_VERSION_MINOR_MASK_KHR ((1 << CL_VERSION_MINOR_BITS_KHR) - 1)
+#define CL_VERSION_PATCH_MASK_KHR ((1 << CL_VERSION_PATCH_BITS_KHR) - 1)
+
+#define CL_VERSION_MAJOR_KHR(version) ((version) >> (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR))
+#define CL_VERSION_MINOR_KHR(version) (((version) >> CL_VERSION_PATCH_BITS_KHR) & CL_VERSION_MINOR_MASK_KHR)
+#define CL_VERSION_PATCH_KHR(version) ((version) & CL_VERSION_PATCH_MASK_KHR)
+
+#define CL_MAKE_VERSION_KHR(major, minor, patch) \
+    ((((major) & CL_VERSION_MAJOR_MASK_KHR) << (CL_VERSION_MINOR_BITS_KHR + CL_VERSION_PATCH_BITS_KHR)) | \
+    (((minor) &  CL_VERSION_MINOR_MASK_KHR) << CL_VERSION_PATCH_BITS_KHR) | \
+    ((patch) & CL_VERSION_PATCH_MASK_KHR))
+
+typedef cl_uint cl_version_khr;
+
+#define CL_NAME_VERSION_MAX_NAME_SIZE_KHR 64
+
+typedef struct _cl_name_version_khr
+{
+    cl_version_khr version;
+    char name[CL_NAME_VERSION_MAX_NAME_SIZE_KHR];
+} cl_name_version_khr;
+
+/* cl_platform_info */
+#define CL_PLATFORM_NUMERIC_VERSION_KHR                  0x0906
+#define CL_PLATFORM_EXTENSIONS_WITH_VERSION_KHR          0x0907
+
+/* cl_device_info */
+#define CL_DEVICE_NUMERIC_VERSION_KHR                    0x105E
+#define CL_DEVICE_OPENCL_C_NUMERIC_VERSION_KHR           0x105F
+#define CL_DEVICE_EXTENSIONS_WITH_VERSION_KHR            0x1060
+#define CL_DEVICE_ILS_WITH_VERSION_KHR                   0x1061
+#define CL_DEVICE_BUILT_IN_KERNELS_WITH_VERSION_KHR      0x1062
+
+
+/*********************************
+* cl_khr_device_uuid extension
+*********************************/
+#define cl_khr_device_uuid 1
+
+#define CL_UUID_SIZE_KHR 16
+#define CL_LUID_SIZE_KHR 8
+
+#define CL_DEVICE_UUID_KHR          0x106A
+#define CL_DRIVER_UUID_KHR          0x106B
+#define CL_DEVICE_LUID_VALID_KHR    0x106C
+#define CL_DEVICE_LUID_KHR          0x106D
+#define CL_DEVICE_NODE_MASK_KHR     0x106E
+
+/**********************************
+ * cl_khr_pci_bus_info extension *
+ **********************************/
+#define cl_khr_pci_bus_info 1
+
+#define CL_DEVICE_PCI_BUS_INFO_KHR  0x410F 
+
+typedef struct _cl_device_pci_bus_info_khr {
+    cl_uint   pci_domain;
+    cl_uint   pci_bus;
+    cl_uint   pci_device;
+    cl_uint   pci_function;
+} cl_device_pci_bus_info_khr;
+
+/**********************************
+ * cl_arm_import_memory extension *
+ **********************************/
+#define cl_arm_import_memory 1
+
+typedef intptr_t cl_import_properties_arm;
+
+/* Default and valid proporties name for cl_arm_import_memory */
+#define CL_IMPORT_TYPE_ARM                        0x40B2
+
+/* Host process memory type default value for CL_IMPORT_TYPE_ARM property */
+#define CL_IMPORT_TYPE_HOST_ARM                   0x40B3
+
+/* DMA BUF memory type value for CL_IMPORT_TYPE_ARM property */
+#define CL_IMPORT_TYPE_DMA_BUF_ARM                0x40B4
+
+/* Protected memory property */
+#define CL_IMPORT_TYPE_PROTECTED_ARM              0x40B5
+
+/* Android hardware buffer type value for CL_IMPORT_TYPE_ARM property */
+#define CL_IMPORT_TYPE_ANDROID_HARDWARE_BUFFER_ARM 0x41E2
+
+/* Data consistency with host property */
+#define CL_IMPORT_DMA_BUF_DATA_CONSISTENCY_WITH_HOST_ARM 0x41E3
+
+/* Import memory size value to indicate a size for the whole buffer */
+#define CL_IMPORT_MEMORY_WHOLE_ALLOCATION_ARM SIZE_MAX
+
+/* This extension adds a new function that allows for direct memory import into
+ * OpenCL via the clImportMemoryARM function.
+ *
+ * Memory imported through this interface will be mapped into the device's page
+ * tables directly, providing zero copy access. It will never fall back to copy
+ * operations and aliased buffers.
+ *
+ * Types of memory supported for import are specified as additional extension
+ * strings.
+ *
+ * This extension produces cl_mem allocations which are compatible with all other
+ * users of cl_mem in the standard API.
+ *
+ * This extension maps pages with the same properties as the normal buffer creation
+ * function clCreateBuffer.
+ */
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clImportMemoryARM( cl_context context,
+                   cl_mem_flags flags,
+                   const cl_import_properties_arm *properties,
+                   void *memory,
+                   size_t size,
+                   cl_int *errcode_ret) CL_EXT_SUFFIX__VERSION_1_0;
+
+
+/******************************************
+ * cl_arm_shared_virtual_memory extension *
+ ******************************************/
+#define cl_arm_shared_virtual_memory 1
+
+/* Used by clGetDeviceInfo */
+#define CL_DEVICE_SVM_CAPABILITIES_ARM                  0x40B6
+
+/* Used by clGetMemObjectInfo */
+#define CL_MEM_USES_SVM_POINTER_ARM                     0x40B7
+
+/* Used by clSetKernelExecInfoARM: */
+#define CL_KERNEL_EXEC_INFO_SVM_PTRS_ARM                0x40B8
+#define CL_KERNEL_EXEC_INFO_SVM_FINE_GRAIN_SYSTEM_ARM   0x40B9
+
+/* To be used by clGetEventInfo: */
+#define CL_COMMAND_SVM_FREE_ARM                         0x40BA
+#define CL_COMMAND_SVM_MEMCPY_ARM                       0x40BB
+#define CL_COMMAND_SVM_MEMFILL_ARM                      0x40BC
+#define CL_COMMAND_SVM_MAP_ARM                          0x40BD
+#define CL_COMMAND_SVM_UNMAP_ARM                        0x40BE
+
+/* Flag values returned by clGetDeviceInfo with CL_DEVICE_SVM_CAPABILITIES_ARM as the param_name. */
+#define CL_DEVICE_SVM_COARSE_GRAIN_BUFFER_ARM           (1 << 0)
+#define CL_DEVICE_SVM_FINE_GRAIN_BUFFER_ARM             (1 << 1)
+#define CL_DEVICE_SVM_FINE_GRAIN_SYSTEM_ARM             (1 << 2)
+#define CL_DEVICE_SVM_ATOMICS_ARM                       (1 << 3)
+
+/* Flag values used by clSVMAllocARM: */
+#define CL_MEM_SVM_FINE_GRAIN_BUFFER_ARM                (1 << 10)
+#define CL_MEM_SVM_ATOMICS_ARM                          (1 << 11)
+
+typedef cl_bitfield cl_svm_mem_flags_arm;
+typedef cl_uint     cl_kernel_exec_info_arm;
+typedef cl_bitfield cl_device_svm_capabilities_arm;
+
+extern CL_API_ENTRY void * CL_API_CALL
+clSVMAllocARM(cl_context       context,
+              cl_svm_mem_flags_arm flags,
+              size_t           size,
+              cl_uint          alignment) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY void CL_API_CALL
+clSVMFreeARM(cl_context        context,
+             void *            svm_pointer) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMFreeARM(cl_command_queue  command_queue,
+                    cl_uint           num_svm_pointers,
+                    void *            svm_pointers[],
+                    void (CL_CALLBACK * pfn_free_func)(cl_command_queue queue,
+                                                       cl_uint          num_svm_pointers,
+                                                       void *           svm_pointers[],
+                                                       void *           user_data),
+                    void *            user_data,
+                    cl_uint           num_events_in_wait_list,
+                    const cl_event *  event_wait_list,
+                    cl_event *        event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemcpyARM(cl_command_queue  command_queue,
+                      cl_bool           blocking_copy,
+                      void *            dst_ptr,
+                      const void *      src_ptr,
+                      size_t            size,
+                      cl_uint           num_events_in_wait_list,
+                      const cl_event *  event_wait_list,
+                      cl_event *        event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMemFillARM(cl_command_queue  command_queue,
+                       void *            svm_ptr,
+                       const void *      pattern,
+                       size_t            pattern_size,
+                       size_t            size,
+                       cl_uint           num_events_in_wait_list,
+                       const cl_event *  event_wait_list,
+                       cl_event *        event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMMapARM(cl_command_queue  command_queue,
+                   cl_bool           blocking_map,
+                   cl_map_flags      flags,
+                   void *            svm_ptr,
+                   size_t            size,
+                   cl_uint           num_events_in_wait_list,
+                   const cl_event *  event_wait_list,
+                   cl_event *        event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueSVMUnmapARM(cl_command_queue  command_queue,
+                     void *            svm_ptr,
+                     cl_uint           num_events_in_wait_list,
+                     const cl_event *  event_wait_list,
+                     cl_event *        event) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelArgSVMPointerARM(cl_kernel    kernel,
+                            cl_uint      arg_index,
+                            const void * arg_value) CL_EXT_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clSetKernelExecInfoARM(cl_kernel            kernel,
+                       cl_kernel_exec_info_arm  param_name,
+                       size_t               param_value_size,
+                       const void *         param_value) CL_EXT_SUFFIX__VERSION_1_2;
+
+/********************************
+ * cl_arm_get_core_id extension *
+ ********************************/
+
+#ifdef CL_VERSION_1_2
+
+#define cl_arm_get_core_id 1
+
+/* Device info property for bitfield of cores present */
+#define CL_DEVICE_COMPUTE_UNITS_BITFIELD_ARM      0x40BF
+
+#endif  /* CL_VERSION_1_2 */
+
+/*********************************
+* cl_arm_job_slot_selection
+*********************************/
+
+#define cl_arm_job_slot_selection 1
+
+/* cl_device_info */
+#define CL_DEVICE_JOB_SLOTS_ARM                   0x41E0
+
+/* cl_command_queue_properties */
+#define CL_QUEUE_JOB_SLOT_ARM                     0x41E1
+
+/*********************************
+* cl_arm_scheduling_controls
+*********************************/
+
+#define cl_arm_scheduling_controls 1
+
+/* cl_device_info */
+#define CL_DEVICE_SCHEDULING_CONTROLS_CAPABILITIES_ARM          0x41E4
+
+#define CL_DEVICE_SCHEDULING_KERNEL_BATCHING_ARM               (1 << 0)
+#define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_ARM          (1 << 1)
+#define CL_DEVICE_SCHEDULING_WORKGROUP_BATCH_SIZE_MODIFIER_ARM (1 << 2)
+
+/* cl_kernel_info */
+#define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_ARM            0x41E5
+#define CL_KERNEL_EXEC_INFO_WORKGROUP_BATCH_SIZE_MODIFIER_ARM   0x41E6
+
+/* cl_queue_properties */
+#define CL_QUEUE_KERNEL_BATCHING_ARM                            0x41E7
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CL_EXT_H */
diff --git a/ext/cudart/include/CL/cl_gl.h b/ext/cudart/include/CL/cl_gl.h
new file mode 100644
index 00000000..4e390d19
--- /dev/null
+++ b/ext/cudart/include/CL/cl_gl.h
@@ -0,0 +1,154 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_GL_H
+#define __OPENCL_CL_GL_H
+
+#ifdef __APPLE__
+#include <OpenCL/cl.h>
+#else
+#include <CL/cl.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef cl_uint     cl_gl_object_type;
+typedef cl_uint     cl_gl_texture_info;
+typedef cl_uint     cl_gl_platform_info;
+typedef struct __GLsync *cl_GLsync;
+
+/* cl_gl_object_type = 0x2000 - 0x200F enum values are currently taken           */
+#define CL_GL_OBJECT_BUFFER                     0x2000
+#define CL_GL_OBJECT_TEXTURE2D                  0x2001
+#define CL_GL_OBJECT_TEXTURE3D                  0x2002
+#define CL_GL_OBJECT_RENDERBUFFER               0x2003
+#define CL_GL_OBJECT_TEXTURE2D_ARRAY            0x200E
+#define CL_GL_OBJECT_TEXTURE1D                  0x200F
+#define CL_GL_OBJECT_TEXTURE1D_ARRAY            0x2010
+#define CL_GL_OBJECT_TEXTURE_BUFFER             0x2011
+
+/* cl_gl_texture_info           */
+#define CL_GL_TEXTURE_TARGET                    0x2004
+#define CL_GL_MIPMAP_LEVEL                      0x2005
+#define CL_GL_NUM_SAMPLES                       0x2012
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromGLBuffer(cl_context     context,
+                     cl_mem_flags   flags,
+                     cl_GLuint      bufobj,
+                     cl_int *       errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromGLTexture(cl_context      context,
+                      cl_mem_flags    flags,
+                      cl_GLenum       target,
+                      cl_GLint        miplevel,
+                      cl_GLuint       texture,
+                      cl_int *        errcode_ret) CL_API_SUFFIX__VERSION_1_2;
+
+extern CL_API_ENTRY cl_mem CL_API_CALL
+clCreateFromGLRenderbuffer(cl_context   context,
+                           cl_mem_flags flags,
+                           cl_GLuint    renderbuffer,
+                           cl_int *     errcode_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetGLObjectInfo(cl_mem                memobj,
+                  cl_gl_object_type *   gl_object_type,
+                  cl_GLuint *           gl_object_name) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetGLTextureInfo(cl_mem               memobj,
+                   cl_gl_texture_info   param_name,
+                   size_t               param_value_size,
+                   void *               param_value,
+                   size_t *             param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueAcquireGLObjects(cl_command_queue      command_queue,
+                          cl_uint               num_objects,
+                          const cl_mem *        mem_objects,
+                          cl_uint               num_events_in_wait_list,
+                          const cl_event *      event_wait_list,
+                          cl_event *            event) CL_API_SUFFIX__VERSION_1_0;
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clEnqueueReleaseGLObjects(cl_command_queue      command_queue,
+                          cl_uint               num_objects,
+                          const cl_mem *        mem_objects,
+                          cl_uint               num_events_in_wait_list,
+                          const cl_event *      event_wait_list,
+                          cl_event *            event) CL_API_SUFFIX__VERSION_1_0;
+
+
+/* Deprecated OpenCL 1.1 APIs */
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
+clCreateFromGLTexture2D(cl_context      context,
+                        cl_mem_flags    flags,
+                        cl_GLenum       target,
+                        cl_GLint        miplevel,
+                        cl_GLuint       texture,
+                        cl_int *        errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+extern CL_API_ENTRY CL_EXT_PREFIX__VERSION_1_1_DEPRECATED cl_mem CL_API_CALL
+clCreateFromGLTexture3D(cl_context      context,
+                        cl_mem_flags    flags,
+                        cl_GLenum       target,
+                        cl_GLint        miplevel,
+                        cl_GLuint       texture,
+                        cl_int *        errcode_ret) CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED;
+
+/* cl_khr_gl_sharing extension  */
+
+#define cl_khr_gl_sharing 1
+
+typedef cl_uint     cl_gl_context_info;
+
+/* Additional Error Codes  */
+#define CL_INVALID_GL_SHAREGROUP_REFERENCE_KHR  -1000
+
+/* cl_gl_context_info  */
+#define CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR    0x2006
+#define CL_DEVICES_FOR_GL_CONTEXT_KHR           0x2007
+
+/* Additional cl_context_properties  */
+#define CL_GL_CONTEXT_KHR                       0x2008
+#define CL_EGL_DISPLAY_KHR                      0x2009
+#define CL_GLX_DISPLAY_KHR                      0x200A
+#define CL_WGL_HDC_KHR                          0x200B
+#define CL_CGL_SHAREGROUP_KHR                   0x200C
+
+extern CL_API_ENTRY cl_int CL_API_CALL
+clGetGLContextInfoKHR(const cl_context_properties * properties,
+                      cl_gl_context_info            param_name,
+                      size_t                        param_value_size,
+                      void *                        param_value,
+                      size_t *                      param_value_size_ret) CL_API_SUFFIX__VERSION_1_0;
+
+typedef CL_API_ENTRY cl_int (CL_API_CALL *clGetGLContextInfoKHR_fn)(
+    const cl_context_properties * properties,
+    cl_gl_context_info            param_name,
+    size_t                        param_value_size,
+    void *                        param_value,
+    size_t *                      param_value_size_ret);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_CL_GL_H */
\ No newline at end of file
diff --git a/ext/cudart/include/CL/cl_gl_ext.h b/ext/cudart/include/CL/cl_gl_ext.h
new file mode 100644
index 00000000..83102e34
--- /dev/null
+++ b/ext/cudart/include/CL/cl_gl_ext.h
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_CL_GL_EXT_H
+#define __OPENCL_CL_GL_EXT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __APPLE__
+    #include <OpenCL/cl_gl.h>
+#else
+    #include <CL/cl_gl.h>
+#endif
+
+/* 
+ *  cl_khr_gl_event extension
+ */
+#define CL_COMMAND_GL_FENCE_SYNC_OBJECT_KHR     0x200D
+
+extern CL_API_ENTRY cl_event CL_API_CALL
+clCreateEventFromGLsyncKHR(cl_context context,
+                           cl_GLsync  sync,
+                           cl_int *   errcode_ret) CL_EXT_SUFFIX__VERSION_1_1;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif	/* __OPENCL_CL_GL_EXT_H  */
diff --git a/ext/cudart/include/CL/cl_platform.h b/ext/cudart/include/CL/cl_platform.h
new file mode 100644
index 00000000..0fba9080
--- /dev/null
+++ b/ext/cudart/include/CL/cl_platform.h
@@ -0,0 +1,1414 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __CL_PLATFORM_H
+#define __CL_PLATFORM_H
+
+#ifdef __APPLE__
+    /* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
+    #include <AvailabilityMacros.h>
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(_WIN32)
+    #define CL_API_ENTRY
+    #define CL_API_CALL     __stdcall
+    #define CL_CALLBACK     __stdcall
+#else
+    #define CL_API_ENTRY
+    #define CL_API_CALL
+    #define CL_CALLBACK
+#endif
+
+/*
+ * Deprecation flags refer to the last version of the header in which the
+ * feature was not deprecated.
+ *
+ * E.g. VERSION_1_1_DEPRECATED means the feature is present in 1.1 without
+ * deprecation but is deprecated in versions later than 1.1.
+ */
+#ifdef __APPLE__
+    #define CL_EXTENSION_WEAK_LINK       __attribute__((weak_import))
+    #define CL_API_SUFFIX__VERSION_1_0                  AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+    #define CL_EXT_SUFFIX__VERSION_1_0                  CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
+    #define CL_API_SUFFIX__VERSION_1_1                  AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+    #define GCL_API_SUFFIX__VERSION_1_1                 AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+    #define CL_EXT_SUFFIX__VERSION_1_1                  CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+    #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED       CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_7
+    
+    #ifdef AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
+        #define CL_API_SUFFIX__VERSION_1_2              AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
+        #define GCL_API_SUFFIX__VERSION_1_2             AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
+        #define CL_EXT_SUFFIX__VERSION_1_2              CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_8_AND_LATER
+        #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
+        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED   CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER_BUT_DEPRECATED_IN_MAC_OS_X_VERSION_10_8
+    #else
+        #warning  This path should never happen outside of internal operating system development.  AvailabilityMacros do not function correctly here!
+        #define CL_API_SUFFIX__VERSION_1_2              AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+        #define GCL_API_SUFFIX__VERSION_1_2             AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+        #define CL_EXT_SUFFIX__VERSION_1_2              CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED   CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_7_AND_LATER
+    #endif
+ 
+ 
+ 
+#else
+    #define CL_EXTENSION_WEAK_LINK  
+    #define CL_API_SUFFIX__VERSION_1_0
+    #define CL_EXT_SUFFIX__VERSION_1_0
+    #define CL_API_SUFFIX__VERSION_1_1
+    #define CL_EXT_SUFFIX__VERSION_1_1
+    #define CL_API_SUFFIX__VERSION_1_2
+    #define CL_EXT_SUFFIX__VERSION_1_2
+    #define CL_API_SUFFIX__VERSION_2_0
+    #define CL_EXT_SUFFIX__VERSION_2_0
+    #define CL_API_SUFFIX__VERSION_2_1
+    #define CL_EXT_SUFFIX__VERSION_2_1
+    #define CL_API_SUFFIX__VERSION_2_2
+    #define CL_EXT_SUFFIX__VERSION_2_2
+    #define CL_API_SUFFIX__VERSION_3_0
+    #define CL_EXT_SUFFIX__VERSION_3_0
+    #define CL_API_SUFFIX__EXPERIMENTAL
+    #define CL_EXT_SUFFIX__EXPERIMENTAL
+    
+    #ifdef __GNUC__
+        #define CL_EXT_SUFFIX_DEPRECATED __attribute__((deprecated))
+        #define CL_EXT_PREFIX_DEPRECATED
+    #elif defined(_WIN32)
+        #define CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX_DEPRECATED __declspec(deprecated)
+    #else
+        #define CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
+        #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_0_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_1_1_APIS
+        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_1_1_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_1_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_1_2_APIS
+        #define CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_2_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_1_2_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_1_2_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_2_0_APIS
+        #define CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_0_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_2_0_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_0_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_2_1_APIS
+        #define CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_1_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_2_1_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_1_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+
+    #ifdef CL_USE_DEPRECATED_OPENCL_2_2_APIS
+        #define CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_2_DEPRECATED
+    #else
+        #define CL_EXT_SUFFIX__VERSION_2_2_DEPRECATED CL_EXT_SUFFIX_DEPRECATED
+        #define CL_EXT_PREFIX__VERSION_2_2_DEPRECATED CL_EXT_PREFIX_DEPRECATED
+    #endif
+#endif
+
+#if (defined (_WIN32) && defined(_MSC_VER))
+
+/* scalar types  */
+typedef signed   __int8         cl_char;
+typedef unsigned __int8         cl_uchar;
+typedef signed   __int16        cl_short;
+typedef unsigned __int16        cl_ushort;
+typedef signed   __int32        cl_int;
+typedef unsigned __int32        cl_uint;
+typedef signed   __int64        cl_long;
+typedef unsigned __int64        cl_ulong;
+
+typedef unsigned __int16        cl_half;
+typedef float                   cl_float;
+typedef double                  cl_double;
+
+/* Macro names and corresponding values defined by OpenCL */
+#define CL_CHAR_BIT         8
+#define CL_SCHAR_MAX        127
+#define CL_SCHAR_MIN        (-127-1)
+#define CL_CHAR_MAX         CL_SCHAR_MAX
+#define CL_CHAR_MIN         CL_SCHAR_MIN
+#define CL_UCHAR_MAX        255
+#define CL_SHRT_MAX         32767
+#define CL_SHRT_MIN         (-32767-1)
+#define CL_USHRT_MAX        65535
+#define CL_INT_MAX          2147483647
+#define CL_INT_MIN          (-2147483647-1)
+#define CL_UINT_MAX         0xffffffffU
+#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
+#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
+#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
+
+#define CL_FLT_DIG          6
+#define CL_FLT_MANT_DIG     24
+#define CL_FLT_MAX_10_EXP   +38
+#define CL_FLT_MAX_EXP      +128
+#define CL_FLT_MIN_10_EXP   -37
+#define CL_FLT_MIN_EXP      -125
+#define CL_FLT_RADIX        2
+#define CL_FLT_MAX          340282346638528859811704183484516925440.0f
+#define CL_FLT_MIN          1.175494350822287507969e-38f
+#define CL_FLT_EPSILON      1.1920928955078125e-7f
+
+#define CL_HALF_DIG          3
+#define CL_HALF_MANT_DIG     11
+#define CL_HALF_MAX_10_EXP   +4
+#define CL_HALF_MAX_EXP      +16
+#define CL_HALF_MIN_10_EXP   -4
+#define CL_HALF_MIN_EXP      -13
+#define CL_HALF_RADIX        2
+#define CL_HALF_MAX          65504.0f
+#define CL_HALF_MIN          6.103515625e-05f
+#define CL_HALF_EPSILON      9.765625e-04f
+
+#define CL_DBL_DIG          15
+#define CL_DBL_MANT_DIG     53
+#define CL_DBL_MAX_10_EXP   +308
+#define CL_DBL_MAX_EXP      +1024
+#define CL_DBL_MIN_10_EXP   -307
+#define CL_DBL_MIN_EXP      -1021
+#define CL_DBL_RADIX        2
+#define CL_DBL_MAX          1.7976931348623158e+308
+#define CL_DBL_MIN          2.225073858507201383090e-308
+#define CL_DBL_EPSILON      2.220446049250313080847e-16
+
+#define CL_M_E              2.7182818284590452354
+#define CL_M_LOG2E          1.4426950408889634074
+#define CL_M_LOG10E         0.43429448190325182765
+#define CL_M_LN2            0.69314718055994530942
+#define CL_M_LN10           2.30258509299404568402
+#define CL_M_PI             3.14159265358979323846
+#define CL_M_PI_2           1.57079632679489661923
+#define CL_M_PI_4           0.78539816339744830962
+#define CL_M_1_PI           0.31830988618379067154
+#define CL_M_2_PI           0.63661977236758134308
+#define CL_M_2_SQRTPI       1.12837916709551257390
+#define CL_M_SQRT2          1.41421356237309504880
+#define CL_M_SQRT1_2        0.70710678118654752440
+
+#define CL_M_E_F            2.718281828f
+#define CL_M_LOG2E_F        1.442695041f
+#define CL_M_LOG10E_F       0.434294482f
+#define CL_M_LN2_F          0.693147181f
+#define CL_M_LN10_F         2.302585093f
+#define CL_M_PI_F           3.141592654f
+#define CL_M_PI_2_F         1.570796327f
+#define CL_M_PI_4_F         0.785398163f
+#define CL_M_1_PI_F         0.318309886f
+#define CL_M_2_PI_F         0.636619772f
+#define CL_M_2_SQRTPI_F     1.128379167f
+#define CL_M_SQRT2_F        1.414213562f
+#define CL_M_SQRT1_2_F      0.707106781f
+
+#define CL_NAN              (CL_INFINITY - CL_INFINITY)
+#define CL_HUGE_VALF        ((cl_float) 1e50)
+#define CL_HUGE_VAL         ((cl_double) 1e500)
+#define CL_MAXFLOAT         CL_FLT_MAX
+#define CL_INFINITY         CL_HUGE_VALF
+
+#else
+
+#include <stdint.h>
+
+/* scalar types  */
+typedef int8_t          cl_char;
+typedef uint8_t         cl_uchar;
+typedef int16_t         cl_short;
+typedef uint16_t        cl_ushort;
+typedef int32_t         cl_int;
+typedef uint32_t        cl_uint;
+typedef int64_t         cl_long;
+typedef uint64_t        cl_ulong;
+
+typedef uint16_t        cl_half;
+typedef float           cl_float;
+typedef double          cl_double;
+
+/* Macro names and corresponding values defined by OpenCL */
+#define CL_CHAR_BIT         8
+#define CL_SCHAR_MAX        127
+#define CL_SCHAR_MIN        (-127-1)
+#define CL_CHAR_MAX         CL_SCHAR_MAX
+#define CL_CHAR_MIN         CL_SCHAR_MIN
+#define CL_UCHAR_MAX        255
+#define CL_SHRT_MAX         32767
+#define CL_SHRT_MIN         (-32767-1)
+#define CL_USHRT_MAX        65535
+#define CL_INT_MAX          2147483647
+#define CL_INT_MIN          (-2147483647-1)
+#define CL_UINT_MAX         0xffffffffU
+#define CL_LONG_MAX         ((cl_long) 0x7FFFFFFFFFFFFFFFLL)
+#define CL_LONG_MIN         ((cl_long) -0x7FFFFFFFFFFFFFFFLL - 1LL)
+#define CL_ULONG_MAX        ((cl_ulong) 0xFFFFFFFFFFFFFFFFULL)
+
+#define CL_FLT_DIG          6
+#define CL_FLT_MANT_DIG     24
+#define CL_FLT_MAX_10_EXP   +38
+#define CL_FLT_MAX_EXP      +128
+#define CL_FLT_MIN_10_EXP   -37
+#define CL_FLT_MIN_EXP      -125
+#define CL_FLT_RADIX        2
+#define CL_FLT_MAX          340282346638528859811704183484516925440.0f
+#define CL_FLT_MIN          1.175494350822287507969e-38f
+#define CL_FLT_EPSILON      1.1920928955078125e-7f
+
+#define CL_HALF_DIG          3
+#define CL_HALF_MANT_DIG     11
+#define CL_HALF_MAX_10_EXP   +4
+#define CL_HALF_MAX_EXP      +16
+#define CL_HALF_MIN_10_EXP   -4
+#define CL_HALF_MIN_EXP      -13
+#define CL_HALF_RADIX        2
+#define CL_HALF_MAX          65504.0f
+#define CL_HALF_MIN          6.103515625e-05f
+#define CL_HALF_EPSILON      9.765625e-04f
+
+#define CL_DBL_DIG          15
+#define CL_DBL_MANT_DIG     53
+#define CL_DBL_MAX_10_EXP   +308
+#define CL_DBL_MAX_EXP      +1024
+#define CL_DBL_MIN_10_EXP   -307
+#define CL_DBL_MIN_EXP      -1021
+#define CL_DBL_RADIX        2
+#define CL_DBL_MAX          179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
+#define CL_DBL_MIN          2.225073858507201383090e-308
+#define CL_DBL_EPSILON      2.220446049250313080847e-16
+
+#define CL_M_E              2.7182818284590452354
+#define CL_M_LOG2E          1.4426950408889634074
+#define CL_M_LOG10E         0.43429448190325182765
+#define CL_M_LN2            0.69314718055994530942
+#define CL_M_LN10           2.30258509299404568402
+#define CL_M_PI             3.14159265358979323846
+#define CL_M_PI_2           1.57079632679489661923
+#define CL_M_PI_4           0.78539816339744830962
+#define CL_M_1_PI           0.31830988618379067154
+#define CL_M_2_PI           0.63661977236758134308
+#define CL_M_2_SQRTPI       1.12837916709551257390
+#define CL_M_SQRT2          1.41421356237309504880
+#define CL_M_SQRT1_2        0.70710678118654752440
+
+#define CL_M_E_F            2.718281828f
+#define CL_M_LOG2E_F        1.442695041f
+#define CL_M_LOG10E_F       0.434294482f
+#define CL_M_LN2_F          0.693147181f
+#define CL_M_LN10_F         2.302585093f
+#define CL_M_PI_F           3.141592654f
+#define CL_M_PI_2_F         1.570796327f
+#define CL_M_PI_4_F         0.785398163f
+#define CL_M_1_PI_F         0.318309886f
+#define CL_M_2_PI_F         0.636619772f
+#define CL_M_2_SQRTPI_F     1.128379167f
+#define CL_M_SQRT2_F        1.414213562f
+#define CL_M_SQRT1_2_F      0.707106781f
+
+#if defined( __GNUC__ )
+   #define CL_HUGE_VALF     __builtin_huge_valf()
+   #define CL_HUGE_VAL      __builtin_huge_val()
+   #define CL_NAN           __builtin_nanf( "" )
+#else
+   #define CL_HUGE_VALF     ((cl_float) 1e50)
+   #define CL_HUGE_VAL      ((cl_double) 1e500)
+   float nanf( const char * );
+   #define CL_NAN           nanf( "" )
+#endif
+#define CL_MAXFLOAT         CL_FLT_MAX
+#define CL_INFINITY         CL_HUGE_VALF
+
+#endif
+
+#include <stddef.h>
+
+/* Mirror types to GL types. Mirror types allow us to avoid deciding which 87s to load based on whether we are using GL or GLES here. */
+typedef unsigned int cl_GLuint;
+typedef int          cl_GLint;
+typedef unsigned int cl_GLenum;
+
+/*
+ * Vector types
+ *
+ *  Note:   OpenCL requires that all types be naturally aligned.
+ *          This means that vector types must be naturally aligned.
+ *          For example, a vector of four floats must be aligned to
+ *          a 16 byte boundary (calculated as 4 * the natural 4-byte
+ *          alignment of the float).  The alignment qualifiers here
+ *          will only function properly if your compiler supports them
+ *          and if you don't actively work to defeat them.  For example,
+ *          in order for a cl_float4 to be 16 byte aligned in a struct,
+ *          the start of the struct must itself be 16-byte aligned.
+ *
+ *          Maintaining proper alignment is the user's responsibility.
+ */
+
+/* Define basic vector types */
+#if defined( __VEC__ )
+  #if !defined(__clang__)
+     #include <altivec.h>   /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
+  #endif
+   typedef __vector unsigned char     __cl_uchar16;
+   typedef __vector signed char       __cl_char16;
+   typedef __vector unsigned short    __cl_ushort8;
+   typedef __vector signed short      __cl_short8;
+   typedef __vector unsigned int      __cl_uint4;
+   typedef __vector signed int        __cl_int4;
+   typedef __vector float             __cl_float4;
+   #define  __CL_UCHAR16__  1
+   #define  __CL_CHAR16__   1
+   #define  __CL_USHORT8__  1
+   #define  __CL_SHORT8__   1
+   #define  __CL_UINT4__    1
+   #define  __CL_INT4__     1
+   #define  __CL_FLOAT4__   1
+#endif
+
+#if defined( __SSE__ )
+    #if defined( __MINGW64__ )
+        #include <intrin.h>
+    #else
+        #include <xmmintrin.h>
+    #endif
+    #if defined( __GNUC__ )
+        typedef float __cl_float4   __attribute__((vector_size(16)));
+    #else
+        typedef __m128 __cl_float4;
+    #endif
+    #define __CL_FLOAT4__   1
+#endif
+
+#if defined( __SSE2__ )
+    #if defined( __MINGW64__ )
+        #include <intrin.h>
+    #else
+        #include <emmintrin.h>
+    #endif
+    #if defined( __GNUC__ )
+        typedef cl_uchar    __cl_uchar16    __attribute__((vector_size(16)));
+        typedef cl_char     __cl_char16     __attribute__((vector_size(16)));
+        typedef cl_ushort   __cl_ushort8    __attribute__((vector_size(16)));
+        typedef cl_short    __cl_short8     __attribute__((vector_size(16)));
+        typedef cl_uint     __cl_uint4      __attribute__((vector_size(16)));
+        typedef cl_int      __cl_int4       __attribute__((vector_size(16)));
+        typedef cl_ulong    __cl_ulong2     __attribute__((vector_size(16)));
+        typedef cl_long     __cl_long2      __attribute__((vector_size(16)));
+        typedef cl_double   __cl_double2    __attribute__((vector_size(16)));
+    #else
+        typedef __m128i __cl_uchar16;
+        typedef __m128i __cl_char16;
+        typedef __m128i __cl_ushort8;
+        typedef __m128i __cl_short8;
+        typedef __m128i __cl_uint4;
+        typedef __m128i __cl_int4;
+        typedef __m128i __cl_ulong2;
+        typedef __m128i __cl_long2;
+        typedef __m128d __cl_double2;
+    #endif
+    #define __CL_UCHAR16__  1
+    #define __CL_CHAR16__   1
+    #define __CL_USHORT8__  1
+    #define __CL_SHORT8__   1
+    #define __CL_INT4__     1
+    #define __CL_UINT4__    1
+    #define __CL_ULONG2__   1
+    #define __CL_LONG2__    1
+    #define __CL_DOUBLE2__  1
+#endif
+
+#if defined( __MMX__ )
+    #include <mmintrin.h>
+    #if defined( __GNUC__ )
+        typedef cl_uchar    __cl_uchar8     __attribute__((vector_size(8)));
+        typedef cl_char     __cl_char8      __attribute__((vector_size(8)));
+        typedef cl_ushort   __cl_ushort4    __attribute__((vector_size(8)));
+        typedef cl_short    __cl_short4     __attribute__((vector_size(8)));
+        typedef cl_uint     __cl_uint2      __attribute__((vector_size(8)));
+        typedef cl_int      __cl_int2       __attribute__((vector_size(8)));
+        typedef cl_ulong    __cl_ulong1     __attribute__((vector_size(8)));
+        typedef cl_long     __cl_long1      __attribute__((vector_size(8)));
+        typedef cl_float    __cl_float2     __attribute__((vector_size(8)));
+    #else
+        typedef __m64       __cl_uchar8;
+        typedef __m64       __cl_char8;
+        typedef __m64       __cl_ushort4;
+        typedef __m64       __cl_short4;
+        typedef __m64       __cl_uint2;
+        typedef __m64       __cl_int2;
+        typedef __m64       __cl_ulong1;
+        typedef __m64       __cl_long1;
+        typedef __m64       __cl_float2;
+    #endif
+    #define __CL_UCHAR8__   1
+    #define __CL_CHAR8__    1
+    #define __CL_USHORT4__  1
+    #define __CL_SHORT4__   1
+    #define __CL_INT2__     1
+    #define __CL_UINT2__    1
+    #define __CL_ULONG1__   1
+    #define __CL_LONG1__    1
+    #define __CL_FLOAT2__   1
+#endif
+
+#if defined( __AVX__ )
+    #if defined( __MINGW64__ )
+        #include <intrin.h>
+    #else
+        #include <immintrin.h>
+    #endif
+    #if defined( __GNUC__ )
+        typedef cl_float    __cl_float8     __attribute__((vector_size(32)));
+        typedef cl_double   __cl_double4    __attribute__((vector_size(32)));
+    #else
+        typedef __m256      __cl_float8;
+        typedef __m256d     __cl_double4;
+    #endif
+    #define __CL_FLOAT8__   1
+    #define __CL_DOUBLE4__  1
+#endif
+
+/* Define capabilities for anonymous struct members. */
+#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+#define  __CL_HAS_ANON_STRUCT__ 1
+#define  __CL_ANON_STRUCT__
+#elif defined( __GNUC__) && ! defined( __STRICT_ANSI__ )
+#define  __CL_HAS_ANON_STRUCT__ 1
+#define  __CL_ANON_STRUCT__ __extension__
+#elif defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
+    #if _MSC_VER >= 1500
+   /* Microsoft Developer Studio 2008 supports anonymous structs, but
+    * complains by default. */
+    #define  __CL_HAS_ANON_STRUCT__ 1
+    #define  __CL_ANON_STRUCT__
+   /* Disable warning C4201: nonstandard extension used : nameless
+    * struct/union */
+    #pragma warning( push )
+    #pragma warning( disable : 4201 )
+    #endif
+#else
+#define  __CL_HAS_ANON_STRUCT__ 0
+#define  __CL_ANON_STRUCT__
+#endif
+
+/* Define alignment keys */
+#if defined( __GNUC__ )
+    #define CL_ALIGNED(_x)          __attribute__ ((aligned(_x)))
+#elif defined( _WIN32) && (_MSC_VER)
+    /* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements     */
+    /* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx                                                 */
+    /* #include <crtdefs.h>                                                                                             */
+    /* #define CL_ALIGNED(_x)          _CRT_ALIGN(_x)                                                                   */
+    #define CL_ALIGNED(_x)
+#else
+   #warning  Need to implement some method to align data here
+   #define  CL_ALIGNED(_x)
+#endif
+
+/* Indicate whether .xyzw, .s0123 and .hi.lo are supported */
+#if __CL_HAS_ANON_STRUCT__
+    /* .xyzw and .s0123...{f|F} are supported */
+    #define CL_HAS_NAMED_VECTOR_FIELDS 1
+    /* .hi and .lo are supported */
+    #define CL_HAS_HI_LO_VECTOR_FIELDS 1
+#endif
+
+/* Define cl_vector types */
+
+/* ---- cl_charn ---- */
+typedef union
+{
+    cl_char  CL_ALIGNED(2) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_char  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_char  lo, hi; };
+#endif
+#if defined( __CL_CHAR2__)
+    __cl_char2     v2;
+#endif
+}cl_char2;
+
+typedef union
+{
+    cl_char  CL_ALIGNED(4) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_char2 lo, hi; };
+#endif
+#if defined( __CL_CHAR2__)
+    __cl_char2     v2[2];
+#endif
+#if defined( __CL_CHAR4__)
+    __cl_char4     v4;
+#endif
+}cl_char4;
+
+/* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */
+typedef  cl_char4  cl_char3;
+
+typedef union
+{
+    cl_char   CL_ALIGNED(8) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_char4 lo, hi; };
+#endif
+#if defined( __CL_CHAR2__)
+    __cl_char2     v2[4];
+#endif
+#if defined( __CL_CHAR4__)
+    __cl_char4     v4[2];
+#endif
+#if defined( __CL_CHAR8__ )
+    __cl_char8     v8;
+#endif
+}cl_char8;
+
+typedef union
+{
+    cl_char  CL_ALIGNED(16) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_char  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_char  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_char8 lo, hi; };
+#endif
+#if defined( __CL_CHAR2__)
+    __cl_char2     v2[8];
+#endif
+#if defined( __CL_CHAR4__)
+    __cl_char4     v4[4];
+#endif
+#if defined( __CL_CHAR8__ )
+    __cl_char8     v8[2];
+#endif
+#if defined( __CL_CHAR16__ )
+    __cl_char16    v16;
+#endif
+}cl_char16;
+
+
+/* ---- cl_ucharn ---- */
+typedef union
+{
+    cl_uchar  CL_ALIGNED(2) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar  lo, hi; };
+#endif
+#if defined( __cl_uchar2__)
+    __cl_uchar2     v2;
+#endif
+}cl_uchar2;
+
+typedef union
+{
+    cl_uchar  CL_ALIGNED(4) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar2 lo, hi; };
+#endif
+#if defined( __CL_UCHAR2__)
+    __cl_uchar2     v2[2];
+#endif
+#if defined( __CL_UCHAR4__)
+    __cl_uchar4     v4;
+#endif
+}cl_uchar4;
+
+/* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */
+typedef  cl_uchar4  cl_uchar3;
+
+typedef union
+{
+    cl_uchar   CL_ALIGNED(8) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar4 lo, hi; };
+#endif
+#if defined( __CL_UCHAR2__)
+    __cl_uchar2     v2[4];
+#endif
+#if defined( __CL_UCHAR4__)
+    __cl_uchar4     v4[2];
+#endif
+#if defined( __CL_UCHAR8__ )
+    __cl_uchar8     v8;
+#endif
+}cl_uchar8;
+
+typedef union
+{
+    cl_uchar  CL_ALIGNED(16) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uchar  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_uchar8 lo, hi; };
+#endif
+#if defined( __CL_UCHAR2__)
+    __cl_uchar2     v2[8];
+#endif
+#if defined( __CL_UCHAR4__)
+    __cl_uchar4     v4[4];
+#endif
+#if defined( __CL_UCHAR8__ )
+    __cl_uchar8     v8[2];
+#endif
+#if defined( __CL_UCHAR16__ )
+    __cl_uchar16    v16;
+#endif
+}cl_uchar16;
+
+
+/* ---- cl_shortn ---- */
+typedef union
+{
+    cl_short  CL_ALIGNED(4) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_short  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_short  lo, hi; };
+#endif
+#if defined( __CL_SHORT2__)
+    __cl_short2     v2;
+#endif
+}cl_short2;
+
+typedef union
+{
+    cl_short  CL_ALIGNED(8) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_short2 lo, hi; };
+#endif
+#if defined( __CL_SHORT2__)
+    __cl_short2     v2[2];
+#endif
+#if defined( __CL_SHORT4__)
+    __cl_short4     v4;
+#endif
+}cl_short4;
+
+/* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */
+typedef  cl_short4  cl_short3;
+
+typedef union
+{
+    cl_short   CL_ALIGNED(16) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_short4 lo, hi; };
+#endif
+#if defined( __CL_SHORT2__)
+    __cl_short2     v2[4];
+#endif
+#if defined( __CL_SHORT4__)
+    __cl_short4     v4[2];
+#endif
+#if defined( __CL_SHORT8__ )
+    __cl_short8     v8;
+#endif
+}cl_short8;
+
+typedef union
+{
+    cl_short  CL_ALIGNED(32) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_short  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_short  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_short8 lo, hi; };
+#endif
+#if defined( __CL_SHORT2__)
+    __cl_short2     v2[8];
+#endif
+#if defined( __CL_SHORT4__)
+    __cl_short4     v4[4];
+#endif
+#if defined( __CL_SHORT8__ )
+    __cl_short8     v8[2];
+#endif
+#if defined( __CL_SHORT16__ )
+    __cl_short16    v16;
+#endif
+}cl_short16;
+
+
+/* ---- cl_ushortn ---- */
+typedef union
+{
+    cl_ushort  CL_ALIGNED(4) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort  lo, hi; };
+#endif
+#if defined( __CL_USHORT2__)
+    __cl_ushort2     v2;
+#endif
+}cl_ushort2;
+
+typedef union
+{
+    cl_ushort  CL_ALIGNED(8) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort2 lo, hi; };
+#endif
+#if defined( __CL_USHORT2__)
+    __cl_ushort2     v2[2];
+#endif
+#if defined( __CL_USHORT4__)
+    __cl_ushort4     v4;
+#endif
+}cl_ushort4;
+
+/* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */
+typedef  cl_ushort4  cl_ushort3;
+
+typedef union
+{
+    cl_ushort   CL_ALIGNED(16) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort4 lo, hi; };
+#endif
+#if defined( __CL_USHORT2__)
+    __cl_ushort2     v2[4];
+#endif
+#if defined( __CL_USHORT4__)
+    __cl_ushort4     v4[2];
+#endif
+#if defined( __CL_USHORT8__ )
+    __cl_ushort8     v8;
+#endif
+}cl_ushort8;
+
+typedef union
+{
+    cl_ushort  CL_ALIGNED(32) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ushort  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_ushort8 lo, hi; };
+#endif
+#if defined( __CL_USHORT2__)
+    __cl_ushort2     v2[8];
+#endif
+#if defined( __CL_USHORT4__)
+    __cl_ushort4     v4[4];
+#endif
+#if defined( __CL_USHORT8__ )
+    __cl_ushort8     v8[2];
+#endif
+#if defined( __CL_USHORT16__ )
+    __cl_ushort16    v16;
+#endif
+}cl_ushort16;
+
+
+/* ---- cl_halfn ---- */
+typedef union
+{
+    cl_half  CL_ALIGNED(4) s[2];
+#if __CL_HAS_ANON_STRUCT__
+    __CL_ANON_STRUCT__ struct{ cl_half  x, y; };
+    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1; };
+    __CL_ANON_STRUCT__ struct{ cl_half  lo, hi; };
+#endif
+#if defined( __CL_HALF2__)
+    __cl_half2     v2;
+#endif
+}cl_half2;
+
+typedef union
+{
+    cl_half  CL_ALIGNED(8) s[4];
+#if __CL_HAS_ANON_STRUCT__
+    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w; };
+    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3; };
+    __CL_ANON_STRUCT__ struct{ cl_half2 lo, hi; };
+#endif
+#if defined( __CL_HALF2__)
+    __cl_half2     v2[2];
+#endif
+#if defined( __CL_HALF4__)
+    __cl_half4     v4;
+#endif
+}cl_half4;
+
+/* cl_half3 is identical in size, alignment and behavior to cl_half4. See section 6.1.5. */
+typedef  cl_half4  cl_half3;
+
+typedef union
+{
+    cl_half   CL_ALIGNED(16) s[8];
+#if __CL_HAS_ANON_STRUCT__
+    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w; };
+    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3, s4, s5, s6, s7; };
+    __CL_ANON_STRUCT__ struct{ cl_half4 lo, hi; };
+#endif
+#if defined( __CL_HALF2__)
+    __cl_half2     v2[4];
+#endif
+#if defined( __CL_HALF4__)
+    __cl_half4     v4[2];
+#endif
+#if defined( __CL_HALF8__ )
+    __cl_half8     v8;
+#endif
+}cl_half8;
+
+typedef union
+{
+    cl_half  CL_ALIGNED(32) s[16];
+#if __CL_HAS_ANON_STRUCT__
+    __CL_ANON_STRUCT__ struct{ cl_half  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+    __CL_ANON_STRUCT__ struct{ cl_half  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+    __CL_ANON_STRUCT__ struct{ cl_half8 lo, hi; };
+#endif
+#if defined( __CL_HALF2__)
+    __cl_half2     v2[8];
+#endif
+#if defined( __CL_HALF4__)
+    __cl_half4     v4[4];
+#endif
+#if defined( __CL_HALF8__ )
+    __cl_half8     v8[2];
+#endif
+#if defined( __CL_HALF16__ )
+    __cl_half16    v16;
+#endif
+}cl_half16;
+
+/* ---- cl_intn ---- */
+typedef union
+{
+    cl_int  CL_ALIGNED(8) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_int  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_int  lo, hi; };
+#endif
+#if defined( __CL_INT2__)
+    __cl_int2     v2;
+#endif
+}cl_int2;
+
+typedef union
+{
+    cl_int  CL_ALIGNED(16) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_int2 lo, hi; };
+#endif
+#if defined( __CL_INT2__)
+    __cl_int2     v2[2];
+#endif
+#if defined( __CL_INT4__)
+    __cl_int4     v4;
+#endif
+}cl_int4;
+
+/* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */
+typedef  cl_int4  cl_int3;
+
+typedef union
+{
+    cl_int   CL_ALIGNED(32) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_int4 lo, hi; };
+#endif
+#if defined( __CL_INT2__)
+    __cl_int2     v2[4];
+#endif
+#if defined( __CL_INT4__)
+    __cl_int4     v4[2];
+#endif
+#if defined( __CL_INT8__ )
+    __cl_int8     v8;
+#endif
+}cl_int8;
+
+typedef union
+{
+    cl_int  CL_ALIGNED(64) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_int  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_int  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_int8 lo, hi; };
+#endif
+#if defined( __CL_INT2__)
+    __cl_int2     v2[8];
+#endif
+#if defined( __CL_INT4__)
+    __cl_int4     v4[4];
+#endif
+#if defined( __CL_INT8__ )
+    __cl_int8     v8[2];
+#endif
+#if defined( __CL_INT16__ )
+    __cl_int16    v16;
+#endif
+}cl_int16;
+
+
+/* ---- cl_uintn ---- */
+typedef union
+{
+    cl_uint  CL_ALIGNED(8) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uint  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_uint  lo, hi; };
+#endif
+#if defined( __CL_UINT2__)
+    __cl_uint2     v2;
+#endif
+}cl_uint2;
+
+typedef union
+{
+    cl_uint  CL_ALIGNED(16) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_uint2 lo, hi; };
+#endif
+#if defined( __CL_UINT2__)
+    __cl_uint2     v2[2];
+#endif
+#if defined( __CL_UINT4__)
+    __cl_uint4     v4;
+#endif
+}cl_uint4;
+
+/* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */
+typedef  cl_uint4  cl_uint3;
+
+typedef union
+{
+    cl_uint   CL_ALIGNED(32) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_uint4 lo, hi; };
+#endif
+#if defined( __CL_UINT2__)
+    __cl_uint2     v2[4];
+#endif
+#if defined( __CL_UINT4__)
+    __cl_uint4     v4[2];
+#endif
+#if defined( __CL_UINT8__ )
+    __cl_uint8     v8;
+#endif
+}cl_uint8;
+
+typedef union
+{
+    cl_uint  CL_ALIGNED(64) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_uint  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_uint  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_uint8 lo, hi; };
+#endif
+#if defined( __CL_UINT2__)
+    __cl_uint2     v2[8];
+#endif
+#if defined( __CL_UINT4__)
+    __cl_uint4     v4[4];
+#endif
+#if defined( __CL_UINT8__ )
+    __cl_uint8     v8[2];
+#endif
+#if defined( __CL_UINT16__ )
+    __cl_uint16    v16;
+#endif
+}cl_uint16;
+
+/* ---- cl_longn ---- */
+typedef union
+{
+    cl_long  CL_ALIGNED(16) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_long  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_long  lo, hi; };
+#endif
+#if defined( __CL_LONG2__)
+    __cl_long2     v2;
+#endif
+}cl_long2;
+
+typedef union
+{
+    cl_long  CL_ALIGNED(32) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_long2 lo, hi; };
+#endif
+#if defined( __CL_LONG2__)
+    __cl_long2     v2[2];
+#endif
+#if defined( __CL_LONG4__)
+    __cl_long4     v4;
+#endif
+}cl_long4;
+
+/* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */
+typedef  cl_long4  cl_long3;
+
+typedef union
+{
+    cl_long   CL_ALIGNED(64) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_long4 lo, hi; };
+#endif
+#if defined( __CL_LONG2__)
+    __cl_long2     v2[4];
+#endif
+#if defined( __CL_LONG4__)
+    __cl_long4     v4[2];
+#endif
+#if defined( __CL_LONG8__ )
+    __cl_long8     v8;
+#endif
+}cl_long8;
+
+typedef union
+{
+    cl_long  CL_ALIGNED(128) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_long  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_long  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_long8 lo, hi; };
+#endif
+#if defined( __CL_LONG2__)
+    __cl_long2     v2[8];
+#endif
+#if defined( __CL_LONG4__)
+    __cl_long4     v4[4];
+#endif
+#if defined( __CL_LONG8__ )
+    __cl_long8     v8[2];
+#endif
+#if defined( __CL_LONG16__ )
+    __cl_long16    v16;
+#endif
+}cl_long16;
+
+
+/* ---- cl_ulongn ---- */
+typedef union
+{
+    cl_ulong  CL_ALIGNED(16) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong  lo, hi; };
+#endif
+#if defined( __CL_ULONG2__)
+    __cl_ulong2     v2;
+#endif
+}cl_ulong2;
+
+typedef union
+{
+    cl_ulong  CL_ALIGNED(32) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong2 lo, hi; };
+#endif
+#if defined( __CL_ULONG2__)
+    __cl_ulong2     v2[2];
+#endif
+#if defined( __CL_ULONG4__)
+    __cl_ulong4     v4;
+#endif
+}cl_ulong4;
+
+/* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */
+typedef  cl_ulong4  cl_ulong3;
+
+typedef union
+{
+    cl_ulong   CL_ALIGNED(64) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong4 lo, hi; };
+#endif
+#if defined( __CL_ULONG2__)
+    __cl_ulong2     v2[4];
+#endif
+#if defined( __CL_ULONG4__)
+    __cl_ulong4     v4[2];
+#endif
+#if defined( __CL_ULONG8__ )
+    __cl_ulong8     v8;
+#endif
+}cl_ulong8;
+
+typedef union
+{
+    cl_ulong  CL_ALIGNED(128) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_ulong  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_ulong8 lo, hi; };
+#endif
+#if defined( __CL_ULONG2__)
+    __cl_ulong2     v2[8];
+#endif
+#if defined( __CL_ULONG4__)
+    __cl_ulong4     v4[4];
+#endif
+#if defined( __CL_ULONG8__ )
+    __cl_ulong8     v8[2];
+#endif
+#if defined( __CL_ULONG16__ )
+    __cl_ulong16    v16;
+#endif
+}cl_ulong16;
+
+
+/* --- cl_floatn ---- */
+
+typedef union
+{
+    cl_float  CL_ALIGNED(8) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_float  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_float  lo, hi; };
+#endif
+#if defined( __CL_FLOAT2__)
+    __cl_float2     v2;
+#endif
+}cl_float2;
+
+typedef union
+{
+    cl_float  CL_ALIGNED(16) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_float2  lo, hi; };
+#endif
+#if defined( __CL_FLOAT2__)
+    __cl_float2     v2[2];
+#endif
+#if defined( __CL_FLOAT4__)
+    __cl_float4     v4;
+#endif
+}cl_float4;
+
+/* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */
+typedef  cl_float4  cl_float3;
+
+typedef union
+{
+    cl_float   CL_ALIGNED(32) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_float   x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_float   s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_float4  lo, hi; };
+#endif
+#if defined( __CL_FLOAT2__)
+    __cl_float2     v2[4];
+#endif
+#if defined( __CL_FLOAT4__)
+    __cl_float4     v4[2];
+#endif
+#if defined( __CL_FLOAT8__ )
+    __cl_float8     v8;
+#endif
+}cl_float8;
+
+typedef union
+{
+    cl_float  CL_ALIGNED(64) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_float  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_float  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_float8 lo, hi; };
+#endif
+#if defined( __CL_FLOAT2__)
+    __cl_float2     v2[8];
+#endif
+#if defined( __CL_FLOAT4__)
+    __cl_float4     v4[4];
+#endif
+#if defined( __CL_FLOAT8__ )
+    __cl_float8     v8[2];
+#endif
+#if defined( __CL_FLOAT16__ )
+    __cl_float16    v16;
+#endif
+}cl_float16;
+
+/* --- cl_doublen ---- */
+
+typedef union
+{
+    cl_double  CL_ALIGNED(16) s[2];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_double  x, y; };
+   __CL_ANON_STRUCT__ struct{ cl_double s0, s1; };
+   __CL_ANON_STRUCT__ struct{ cl_double lo, hi; };
+#endif
+#if defined( __CL_DOUBLE2__)
+    __cl_double2     v2;
+#endif
+}cl_double2;
+
+typedef union
+{
+    cl_double  CL_ALIGNED(32) s[4];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3; };
+   __CL_ANON_STRUCT__ struct{ cl_double2 lo, hi; };
+#endif
+#if defined( __CL_DOUBLE2__)
+    __cl_double2     v2[2];
+#endif
+#if defined( __CL_DOUBLE4__)
+    __cl_double4     v4;
+#endif
+}cl_double4;
+
+/* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */
+typedef  cl_double4  cl_double3;
+
+typedef union
+{
+    cl_double   CL_ALIGNED(64) s[8];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w; };
+   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7; };
+   __CL_ANON_STRUCT__ struct{ cl_double4 lo, hi; };
+#endif
+#if defined( __CL_DOUBLE2__)
+    __cl_double2     v2[4];
+#endif
+#if defined( __CL_DOUBLE4__)
+    __cl_double4     v4[2];
+#endif
+#if defined( __CL_DOUBLE8__ )
+    __cl_double8     v8;
+#endif
+}cl_double8;
+
+typedef union
+{
+    cl_double  CL_ALIGNED(128) s[16];
+#if __CL_HAS_ANON_STRUCT__
+   __CL_ANON_STRUCT__ struct{ cl_double  x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf; };
+   __CL_ANON_STRUCT__ struct{ cl_double  s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF; };
+   __CL_ANON_STRUCT__ struct{ cl_double8 lo, hi; };
+#endif
+#if defined( __CL_DOUBLE2__)
+    __cl_double2     v2[8];
+#endif
+#if defined( __CL_DOUBLE4__)
+    __cl_double4     v4[4];
+#endif
+#if defined( __CL_DOUBLE8__ )
+    __cl_double8     v8[2];
+#endif
+#if defined( __CL_DOUBLE16__ )
+    __cl_double16    v16;
+#endif
+}cl_double16;
+
+/* Macro to facilitate debugging
+ * Usage:
+ *   Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source.
+ *   The first line ends with:   CL_PROGRAM_STRING_DEBUG_INFO \"
+ *   Each line thereafter of OpenCL C source must end with: \n\
+ *   The last line ends in ";
+ *
+ *   Example:
+ *
+ *   const char *my_program = CL_PROGRAM_STRING_DEBUG_INFO "\
+ *   kernel void foo( int a, float * b )             \n\
+ *   {                                               \n\
+ *      // my comment                                \n\
+ *      *b[ get_global_id(0)] = a;                   \n\
+ *   }                                               \n\
+ *   ";
+ *
+ * This should correctly set up the line, (column) and file information for your source
+ * string so you can do source level debugging.
+ */
+#define  __CL_STRINGIFY( _x )               # _x
+#define  _CL_STRINGIFY( _x )                __CL_STRINGIFY( _x )
+#define  CL_PROGRAM_STRING_DEBUG_INFO       "#line "  _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n"
+
+#ifdef __cplusplus
+}
+#endif
+
+#undef __CL_HAS_ANON_STRUCT__
+#undef __CL_ANON_STRUCT__
+#if defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
+    #if _MSC_VER >=1500
+    #pragma warning( pop )
+    #endif
+#endif
+
+#endif  /* __CL_PLATFORM_H  */
diff --git a/ext/cudart/include/CL/opencl.h b/ext/cudart/include/CL/opencl.h
new file mode 100644
index 00000000..bd7fa6be
--- /dev/null
+++ b/ext/cudart/include/CL/opencl.h
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2008-2020 The Khronos Group Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ ******************************************************************************/
+
+#ifndef __OPENCL_H
+#define __OPENCL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __APPLE__
+#include <OpenCL/cl.h>
+#include <OpenCL/cl_gl.h>
+#include <OpenCL/cl_gl_ext.h>
+#include <OpenCL/cl_ext.h>
+#else
+#include <CL/cl.h>
+#include <CL/cl_gl.h>
+#include <CL/cl_gl_ext.h>
+#include <CL/cl_ext.h>
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* __OPENCL_H   */
diff --git a/ext/cudart/include/builtin_types.h b/ext/cudart/include/builtin_types.h
new file mode 100644
index 00000000..5247c408
--- /dev/null
+++ b/ext/cudart/include/builtin_types.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "device_types.h"
+#if !defined(__CUDACC_RTC__)
+#define EXCLUDE_FROM_RTC
+#include "driver_types.h"
+#undef EXCLUDE_FROM_RTC
+#endif /* !__CUDACC_RTC__ */
+#include "surface_types.h"
+#include "texture_types.h"
+#include "vector_types.h"
diff --git a/ext/cudart/include/channel_descriptor.h b/ext/cudart/include/channel_descriptor.h
new file mode 100644
index 00000000..1d61d297
--- /dev/null
+++ b/ext/cudart/include/channel_descriptor.h
@@ -0,0 +1,595 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CHANNEL_DESCRIPTOR_H__)
+#define __CHANNEL_DESCRIPTOR_H__
+
+#if defined(__cplusplus)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+/**
+ * \addtogroup CUDART_HIGHLEVEL
+ *
+ * @{
+ */
+
+/**
+ * \brief \hl Returns a channel descriptor using the specified format
+ *
+ * Returns a channel descriptor with format \p f and number of bits of each
+ * component \p x, \p y, \p z, and \p w.  The ::cudaChannelFormatDesc is
+ * defined as:
+ * \code
+  struct cudaChannelFormatDesc {
+    int x, y, z, w;
+    enum cudaChannelFormatKind f;
+  };
+ * \endcode
+ *
+ * where ::cudaChannelFormatKind is one of ::cudaChannelFormatKindSigned,
+ * ::cudaChannelFormatKindUnsigned, cudaChannelFormatKindFloat,
+ * ::cudaChannelFormatKindSignedNormalized8X1, ::cudaChannelFormatKindSignedNormalized8X2,
+ * ::cudaChannelFormatKindSignedNormalized8X4,
+ * ::cudaChannelFormatKindUnsignedNormalized8X1, ::cudaChannelFormatKindUnsignedNormalized8X2,
+ * ::cudaChannelFormatKindUnsignedNormalized8X4,
+ * ::cudaChannelFormatKindSignedNormalized16X1, ::cudaChannelFormatKindSignedNormalized16X2,
+ * ::cudaChannelFormatKindSignedNormalized16X4,
+ * ::cudaChannelFormatKindUnsignedNormalized16X1, ::cudaChannelFormatKindUnsignedNormalized16X2,
+ * ::cudaChannelFormatKindUnsignedNormalized16X4
+ * or ::cudaChannelFormatKindNV12.
+ *
+ * The format is specified by the template specialization.
+ *
+ * The template function specializes for the following scalar types:
+ * char, signed char, unsigned char, short, unsigned short, int, unsigned int, long, unsigned long, and float.
+ * The template function specializes for the following vector types:
+ * char{1|2|4}, uchar{1|2|4}, short{1|2|4}, ushort{1|2|4}, int{1|2|4}, uint{1|2|4}, long{1|2|4}, ulong{1|2|4}, float{1|2|4}.
+ * The template function specializes for following cudaChannelFormatKind enum values:
+ * ::cudaChannelFormatKind{Uns|S}ignedNormalized{8|16}X{1|2|4}, and ::cudaChannelFormatKindNV12.
+ *
+ * Invoking the function on a type without a specialization defaults to creating a channel format of kind ::cudaChannelFormatKindNone
+ *
+ * \return
+ * Channel descriptor with format \p f
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int,int,int,int,cudaChannelFormatKind) "cudaCreateChannelDesc (Low level)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture< T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (High level)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture< T, dim, readMode>&, const void*, size_t) "cudaBindTexture (High level, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture< T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (High level)",
+ * \ref ::cudaBindTextureToArray(const struct texture< T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (High level)",
+ * \ref ::cudaBindTextureToArray(const struct texture< T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (High level, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture< T, dim, readMode>&) "cudaUnbindTexture (High level)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture< T, dim, readMode>&) "cudaGetTextureAlignmentOffset (High level)"
+ */
+template<class T> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc(void)
+{
+  return cudaCreateChannelDesc(0, 0, 0, 0, cudaChannelFormatKindNone);
+}
+
+static __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDescHalf(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindFloat);
+}
+
+static __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDescHalf1(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindFloat);
+}
+
+static __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDescHalf2(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindFloat);
+}
+
+static __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDescHalf4(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindFloat);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<char>(void)
+{
+  int e = (int)sizeof(char) * 8;
+
+#if defined(_CHAR_UNSIGNED) || defined(__CHAR_UNSIGNED__)
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+#else /* _CHAR_UNSIGNED || __CHAR_UNSIGNED__ */
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+#endif /* _CHAR_UNSIGNED || __CHAR_UNSIGNED__ */
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<signed char>(void)
+{
+  int e = (int)sizeof(signed char) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<unsigned char>(void)
+{
+  int e = (int)sizeof(unsigned char) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<char1>(void)
+{
+  int e = (int)sizeof(signed char) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uchar1>(void)
+{
+  int e = (int)sizeof(unsigned char) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<char2>(void)
+{
+  int e = (int)sizeof(signed char) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uchar2>(void)
+{
+  int e = (int)sizeof(unsigned char) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<char4>(void)
+{
+  int e = (int)sizeof(signed char) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uchar4>(void)
+{
+  int e = (int)sizeof(unsigned char) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<short>(void)
+{
+  int e = (int)sizeof(short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<unsigned short>(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<short1>(void)
+{
+  int e = (int)sizeof(short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ushort1>(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<short2>(void)
+{
+  int e = (int)sizeof(short) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ushort2>(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<short4>(void)
+{
+  int e = (int)sizeof(short) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ushort4>(void)
+{
+  int e = (int)sizeof(unsigned short) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<int>(void)
+{
+  int e = (int)sizeof(int) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<unsigned int>(void)
+{
+  int e = (int)sizeof(unsigned int) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<int1>(void)
+{
+  int e = (int)sizeof(int) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uint1>(void)
+{
+  int e = (int)sizeof(unsigned int) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<int2>(void)
+{
+  int e = (int)sizeof(int) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uint2>(void)
+{
+  int e = (int)sizeof(unsigned int) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<int4>(void)
+{
+  int e = (int)sizeof(int) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<uint4>(void)
+{
+  int e = (int)sizeof(unsigned int) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindUnsigned);
+}
+
+#if !defined(__LP64__)
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<long>(void)
+{
+  int e = (int)sizeof(long) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<unsigned long>(void)
+{
+  int e = (int)sizeof(unsigned long) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<long1>(void)
+{
+  int e = (int)sizeof(long) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ulong1>(void)
+{
+  int e = (int)sizeof(unsigned long) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<long2>(void)
+{
+  int e = (int)sizeof(long) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ulong2>(void)
+{
+  int e = (int)sizeof(unsigned long) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindUnsigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<long4>(void)
+{
+  int e = (int)sizeof(long) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindSigned);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<ulong4>(void)
+{
+  int e = (int)sizeof(unsigned long) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindUnsigned);
+}
+
+#endif /* !__LP64__ */
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<float>(void)
+{
+  int e = (int)sizeof(float) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindFloat);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<float1>(void)
+{
+  int e = (int)sizeof(float) * 8;
+
+  return cudaCreateChannelDesc(e, 0, 0, 0, cudaChannelFormatKindFloat);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<float2>(void)
+{
+  int e = (int)sizeof(float) * 8;
+
+  return cudaCreateChannelDesc(e, e, 0, 0, cudaChannelFormatKindFloat);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<float4>(void)
+{
+  int e = (int)sizeof(float) * 8;
+
+  return cudaCreateChannelDesc(e, e, e, e, cudaChannelFormatKindFloat);
+}
+
+static __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDescNV12(void)
+{
+    int e = (int)sizeof(char) * 8;
+
+    return cudaCreateChannelDesc(e, e, e, 0, cudaChannelFormatKindNV12);
+}
+
+template<cudaChannelFormatKind> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc(void)
+{
+    return cudaCreateChannelDesc(0, 0, 0, 0, cudaChannelFormatKindNone);
+}
+
+/* Signed 8-bit normalized integer formats */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized8X1>(void)
+{
+    return cudaCreateChannelDesc(8, 0, 0, 0, cudaChannelFormatKindSignedNormalized8X1);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized8X2>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 0, 0, cudaChannelFormatKindSignedNormalized8X2);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized8X4>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindSignedNormalized8X4);
+}
+
+/* Unsigned 8-bit normalized integer formats */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized8X1>(void)
+{
+    return cudaCreateChannelDesc(8, 0, 0, 0, cudaChannelFormatKindUnsignedNormalized8X1);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized8X2>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 0, 0, cudaChannelFormatKindUnsignedNormalized8X2);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized8X4>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedNormalized8X4);
+}
+
+/* Signed 16-bit normalized integer formats */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized16X1>(void)
+{
+    return cudaCreateChannelDesc(16, 0, 0, 0, cudaChannelFormatKindSignedNormalized16X1);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized16X2>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 0, 0, cudaChannelFormatKindSignedNormalized16X2);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedNormalized16X4>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 16, 16, cudaChannelFormatKindSignedNormalized16X4);
+}
+
+/* Unsigned 16-bit normalized integer formats */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized16X1>(void)
+{
+    return cudaCreateChannelDesc(16, 0, 0, 0, cudaChannelFormatKindUnsignedNormalized16X1);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized16X2>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 0, 0, cudaChannelFormatKindUnsignedNormalized16X2);
+}
+
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedNormalized16X4>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 16, 16, cudaChannelFormatKindUnsignedNormalized16X4);
+}
+
+/* NV12 format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindNV12>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 0, cudaChannelFormatKindNV12);
+}
+
+/* BC1 format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed1>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed1);
+}
+
+/* BC1sRGB format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed1SRGB>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed1SRGB);
+}
+
+/* BC2 format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed2>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed2);
+}
+
+/* BC2sRGB format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed2SRGB>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed2SRGB);
+}
+
+/* BC3 format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed3>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed3);
+}
+
+/* BC3sRGB format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed3SRGB>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed3SRGB);
+}
+
+/* BC4 unsigned format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed4>(void)
+{
+    return cudaCreateChannelDesc(8, 0, 0, 0, cudaChannelFormatKindUnsignedBlockCompressed4);
+}
+
+/* BC4 signed format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedBlockCompressed4>(void)
+{
+    return cudaCreateChannelDesc(8, 0, 0, 0, cudaChannelFormatKindSignedBlockCompressed4);
+}
+
+/* BC5 unsigned format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed5>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 0, 0, cudaChannelFormatKindUnsignedBlockCompressed5);
+}
+
+/* BC5 signed format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedBlockCompressed5>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 0, 0, cudaChannelFormatKindSignedBlockCompressed5);
+}
+
+/* BC6H unsigned format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed6H>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 16, 0, cudaChannelFormatKindUnsignedBlockCompressed6H);
+}
+
+/* BC6H signed format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindSignedBlockCompressed6H>(void)
+{
+    return cudaCreateChannelDesc(16, 16, 16, 0, cudaChannelFormatKindSignedBlockCompressed6H);
+}
+
+/* BC7 format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed7>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed7);
+}
+
+/* BC7sRGB format */
+template<> __inline__ __host__ cudaChannelFormatDesc cudaCreateChannelDesc<cudaChannelFormatKindUnsignedBlockCompressed7SRGB>(void)
+{
+    return cudaCreateChannelDesc(8, 8, 8, 8, cudaChannelFormatKindUnsignedBlockCompressed7SRGB);
+}
+
+#endif /* __cplusplus */
+
+/** @} */
+/** @} */ /* END CUDART_TEXTURE_HL */
+
+#endif /* !__CHANNEL_DESCRIPTOR_H__ */
diff --git a/ext/cudart/include/common_functions.h b/ext/cudart/include/common_functions.h
new file mode 100644
index 00000000..5f8ea3d2
--- /dev/null
+++ b/ext/cudart/include/common_functions.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("common_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "common_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_COMMON_FUNCTIONS_H_WRAPPER__
+#endif
+
+#include "crt/common_functions.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_COMMON_FUNCTIONS_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_COMMON_FUNCTIONS_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/cooperative_groups.h b/ext/cudart/include/cooperative_groups.h
new file mode 100644
index 00000000..c8823fb7
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups.h
@@ -0,0 +1,1828 @@
+/*
+ * Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _COOPERATIVE_GROUPS_H_
+#define _COOPERATIVE_GROUPS_H_
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#include "cooperative_groups/details/info.h"
+#include "cooperative_groups/details/driver_abi.h"
+#include "cooperative_groups/details/helpers.h"
+
+#if defined(_CG_HAS_STL_ATOMICS)
+#include <cuda/atomic>
+#define _CG_THREAD_SCOPE(scope) _CG_STATIC_CONST_DECL cuda::thread_scope thread_scope = scope;
+#else
+#define _CG_THREAD_SCOPE(scope)
+#endif
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+    _CG_CONST_DECL unsigned int coalesced_group_id = 1;
+    _CG_CONST_DECL unsigned int multi_grid_group_id = 2;
+    _CG_CONST_DECL unsigned int grid_group_id = 3;
+    _CG_CONST_DECL unsigned int thread_block_id = 4;
+    _CG_CONST_DECL unsigned int multi_tile_group_id = 5;
+    _CG_CONST_DECL unsigned int cluster_group_id = 6;
+}
+
+/**
+ * class thread_group;
+ *
+ * Generic thread group type, into which all groups are convertible.
+ * It acts as a container for all storage necessary for the derived groups,
+ * and will dispatch the API calls to the correct derived group. This means
+ * that all derived groups must implement the same interface as thread_group.
+ */
+class thread_group
+{
+protected:
+    struct group_data {
+        unsigned int _unused : 1;
+        unsigned int type : 7, : 0;
+    };
+
+    struct gg_data  {
+        details::grid_workspace *gridWs;
+    };
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    struct mg_data  {
+        unsigned long long _unused : 1;
+        unsigned long long type    : 7;
+        unsigned long long handle  : 56;
+        const details::multi_grid::multi_grid_functions *functions;
+    };
+#endif
+
+    struct tg_data {
+        unsigned int is_tiled : 1;
+        unsigned int type : 7;
+        unsigned int size : 24;
+        // packed to 4b
+        unsigned int metaGroupSize : 16;
+        unsigned int metaGroupRank : 16;
+        // packed to 8b
+        unsigned int mask;
+        // packed to 12b
+        unsigned int _res;
+    };
+
+    friend _CG_QUALIFIER thread_group tiled_partition(const thread_group& parent, unsigned int tilesz);
+    friend class thread_block;
+
+    union __align__(8) {
+        group_data  group;
+        tg_data     coalesced;
+        gg_data     grid;
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+        mg_data     multi_grid;
+#endif
+    } _data;
+
+    _CG_QUALIFIER thread_group operator=(const thread_group& src);
+
+    _CG_QUALIFIER thread_group(unsigned int type) {
+        _data.group.type = type;
+        _data.group._unused = false;
+    }
+
+#ifdef _CG_CPP11_FEATURES
+    static_assert(sizeof(tg_data) <= 16, "Failed size check");
+    static_assert(sizeof(gg_data) <= 16, "Failed size check");
+#  ifdef _CG_ABI_EXPERIMENTAL
+    static_assert(sizeof(mg_data) <= 16, "Failed size check");
+#  endif
+#endif
+
+public:
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_device)
+
+    _CG_QUALIFIER unsigned long long size() const;
+    _CG_QUALIFIER unsigned long long num_threads() const;
+    _CG_QUALIFIER unsigned long long thread_rank() const;
+    _CG_QUALIFIER void sync() const;
+    _CG_QUALIFIER unsigned int get_type() const {
+        return _data.group.type;
+    }
+
+};
+
+template <unsigned int TyId>
+struct thread_group_base : public thread_group {
+    _CG_QUALIFIER thread_group_base() : thread_group(TyId) {}
+    _CG_STATIC_CONST_DECL unsigned int id = TyId;
+};
+
+#if defined(_CG_HAS_MULTI_GRID_GROUP)
+
+/**
+ * class multi_grid_group;
+ *
+ * Threads within this this group are guaranteed to be co-resident on the
+ * same system, on multiple devices within the same launched kernels.
+ * To use this group, the kernel must have been launched with
+ * cuLaunchCooperativeKernelMultiDevice (or the CUDA Runtime equivalent),
+ * and the device must support it (queryable device attribute).
+ *
+ * Constructed via this_multi_grid();
+ */
+
+
+# if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+class multi_grid_group;
+
+// Multi grid group requires these functions to be templated to prevent ptxas from trying to use CG syscalls
+template <typename = void>
+__device__ _CG_DEPRECATED multi_grid_group this_multi_grid();
+
+class multi_grid_group : public thread_group_base<details::multi_grid_group_id>
+{
+private:
+    template <typename = void>
+    _CG_QUALIFIER multi_grid_group() {
+        _data.multi_grid.functions = details::multi_grid::load_grid_intrinsics();
+        _data.multi_grid.handle = _data.multi_grid.functions->get_intrinsic_handle();
+    }
+
+    friend multi_grid_group this_multi_grid<void>();
+
+public:
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_system)
+
+    _CG_QUALIFIER bool is_valid() const {
+        return (_data.multi_grid.handle != 0);
+    }
+
+    _CG_QUALIFIER void sync() const {
+        if (!is_valid()) {
+            _CG_ABORT();
+        }
+        _data.multi_grid.functions->sync(_data.multi_grid.handle);
+    }
+
+    _CG_QUALIFIER unsigned long long num_threads() const {
+        _CG_ASSERT(is_valid());
+        return _data.multi_grid.functions->size(_data.multi_grid.handle);
+    }
+
+    _CG_QUALIFIER unsigned long long size() const {
+        return num_threads();
+    }
+
+    _CG_QUALIFIER unsigned long long thread_rank() const {
+        _CG_ASSERT(is_valid());
+        return _data.multi_grid.functions->thread_rank(_data.multi_grid.handle);
+    }
+
+    _CG_QUALIFIER unsigned int grid_rank() const {
+        _CG_ASSERT(is_valid());
+        return (_data.multi_grid.functions->grid_rank(_data.multi_grid.handle));
+    }
+
+    _CG_QUALIFIER unsigned int num_grids() const {
+        _CG_ASSERT(is_valid());
+        return (_data.multi_grid.functions->num_grids(_data.multi_grid.handle));
+    }
+};
+# else
+class multi_grid_group
+{
+private:
+    unsigned long long _handle;
+    unsigned int _size;
+    unsigned int _rank;
+
+    friend _CG_QUALIFIER multi_grid_group this_multi_grid();
+
+    _CG_QUALIFIER multi_grid_group() {
+        _handle = details::multi_grid::get_intrinsic_handle();
+        _size = details::multi_grid::size(_handle);
+        _rank = details::multi_grid::thread_rank(_handle);
+    }
+
+public:
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_system)
+
+    _CG_QUALIFIER _CG_DEPRECATED bool is_valid() const {
+        return (_handle != 0);
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED void sync() const {
+        if (!is_valid()) {
+            _CG_ABORT();
+        }
+        details::multi_grid::sync(_handle);
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED unsigned long long num_threads() const {
+        _CG_ASSERT(is_valid());
+        return _size;
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED unsigned long long size() const {
+        return num_threads();
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED unsigned long long thread_rank() const {
+        _CG_ASSERT(is_valid());
+        return _rank;
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED unsigned int grid_rank() const {
+        _CG_ASSERT(is_valid());
+        return (details::multi_grid::grid_rank(_handle));
+    }
+
+    _CG_QUALIFIER _CG_DEPRECATED unsigned int num_grids() const {
+        _CG_ASSERT(is_valid());
+        return (details::multi_grid::num_grids(_handle));
+    }
+};
+# endif
+
+/**
+ * multi_grid_group this_multi_grid()
+ *
+ * Constructs a multi_grid_group
+ */
+# if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+template <typename>
+__device__
+#else
+_CG_QUALIFIER
+# endif
+_CG_DEPRECATED
+multi_grid_group this_multi_grid()
+{
+    return multi_grid_group();
+}
+#endif
+
+/**
+ * class grid_group;
+ *
+ * Threads within this this group are guaranteed to be co-resident on the
+ * same device within the same launched kernel. To use this group, the kernel
+ * must have been launched with cuLaunchCooperativeKernel (or the CUDA Runtime equivalent),
+ * and the device must support it (queryable device attribute).
+ *
+ * Constructed via this_grid();
+ */
+class grid_group : public thread_group_base<details::grid_group_id>
+{
+    _CG_STATIC_CONST_DECL unsigned int _group_id = details::grid_group_id;
+    friend _CG_QUALIFIER grid_group this_grid();
+
+private:
+    _CG_QUALIFIER grid_group(details::grid_workspace *gridWs) {
+        _data.grid.gridWs = gridWs;
+    }
+
+ public:
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_device)
+
+    _CG_QUALIFIER bool is_valid() const {
+        return (_data.grid.gridWs != NULL);
+    }
+
+    _CG_QUALIFIER void sync() const {
+        if (!is_valid()) {
+            _CG_ABORT();
+        }
+        details::grid::sync(&_data.grid.gridWs->barrier);
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long size() {
+        return details::grid::size();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long thread_rank() {
+        return details::grid::thread_rank();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 group_dim() {
+        return details::grid::grid_dim();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long num_threads() {
+        return details::grid::num_threads();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 dim_blocks() {
+        return details::grid::dim_blocks();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long num_blocks() {
+        return details::grid::num_blocks();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 block_index() {
+        return details::grid::block_index();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long block_rank() {
+        return details::grid::block_rank();
+    }
+
+# if defined(_CG_HAS_CLUSTER_GROUP)
+    _CG_STATIC_QUALIFIER dim3 dim_clusters() {
+        return details::grid::dim_clusters();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long num_clusters() {
+        return details::grid::num_clusters();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 cluster_index() {
+        return details::grid::cluster_index();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned long long cluster_rank() {
+        return details::grid::cluster_rank();
+    }
+# endif
+};
+
+_CG_QUALIFIER grid_group this_grid() {
+    // Load a workspace from the driver
+    grid_group gg(details::get_grid_workspace());
+#ifdef _CG_DEBUG
+    // *all* threads must be available to synchronize
+    gg.sync();
+#endif // _CG_DEBUG
+    return gg;
+}
+
+#if defined(_CG_HAS_CLUSTER_GROUP)
+/**
+ * class cluster_group
+ *
+ * Every GPU kernel is executed by a grid of thread blocks. A grid can be evenly
+ * divided along all dimensions to form groups of blocks, each group of which is
+ * a block cluster. Clustered grids are subject to various restrictions and
+ * limitations. Primarily, a cluster consists of at most 8 blocks by default
+ * (although the user is allowed to opt-in to non-standard sizes,) and clustered
+ * grids are subject to additional occupancy limitations due to per-cluster
+ * hardware resource consumption. In exchange, a block cluster is guaranteed to
+ * be a cooperative group, with access to all cooperative group capabilities, as
+ * well as cluster specific capabilities and accelerations. A cluster_group
+ * represents a block cluster.
+ *
+ * Constructed via this_cluster_group();
+ */
+class cluster_group : public thread_group_base<details::cluster_group_id>
+{
+    // Friends
+    friend _CG_QUALIFIER cluster_group this_cluster();
+
+    // Disable constructor
+    _CG_QUALIFIER cluster_group()
+    {
+    }
+
+ public:
+    //_CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_cluster)
+
+    // Functionality exposed by the group
+    _CG_STATIC_QUALIFIER void sync()
+    {
+        return details::cluster::sync();
+    }
+
+    _CG_STATIC_QUALIFIER void barrier_arrive()
+    {
+        return details::cluster::barrier_arrive();
+    }
+
+    _CG_STATIC_QUALIFIER void barrier_wait()
+    {
+        return details::cluster::barrier_wait();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int query_shared_rank(const void *addr)
+    {
+        return details::cluster::query_shared_rank(addr);
+    }
+
+    template <typename T>
+    _CG_STATIC_QUALIFIER T* map_shared_rank(T *addr, int rank)
+    {
+        return details::cluster::map_shared_rank(addr, rank);
+    }
+
+    _CG_STATIC_QUALIFIER dim3 block_index()
+    {
+        return details::cluster::block_index();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int block_rank()
+    {
+        return details::cluster::block_rank();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int thread_rank()
+    {
+        return details::cluster::thread_rank();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 dim_blocks()
+    {
+        return details::cluster::dim_blocks();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int num_blocks()
+    {
+        return details::cluster::num_blocks();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 dim_threads()
+    {
+        return details::cluster::dim_threads();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int num_threads()
+    {
+        return details::cluster::num_threads();
+    }
+
+    // Legacy aliases
+    _CG_STATIC_QUALIFIER unsigned int size()
+    {
+        return num_threads();
+    }
+};
+
+/*
+ * cluster_group this_cluster()
+ *
+ * Constructs a cluster_group
+ */
+_CG_QUALIFIER cluster_group this_cluster()
+{
+    cluster_group cg;
+#ifdef _CG_DEBUG
+    cg.sync();
+#endif
+    return cg;
+}
+#endif
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+namespace details {
+
+    _CG_CONSTEXPR_QUALIFIER unsigned int scratch_sync_memory_size(unsigned int max_block_size) {
+        // One barrier per possible size of the group rounded up to multiple of 4.
+        return 8 * sizeof(details::barrier_t);
+    }
+
+    _CG_CONSTEXPR_QUALIFIER unsigned int scratch_collectives_memory_size(unsigned int communication_size, unsigned int max_block_size) {
+        // One slot of collectives memory per warp.
+        return max_block_size / 32 * communication_size;
+    }
+
+    _CG_CONSTEXPR_QUALIFIER unsigned int scratch_size_needed(unsigned int communication_size, unsigned int max_block_size) {
+        return scratch_sync_memory_size(max_block_size) + scratch_collectives_memory_size(communication_size, max_block_size);
+    }
+
+    _CG_CONSTEXPR_QUALIFIER size_t scratch_alignment(unsigned int communication_size) {
+        return ((communication_size & (communication_size - 1) == 0) && communication_size > 8) ?
+            communication_size : 8;
+    }
+
+    _CG_CONST_DECL unsigned int default_tile_communication_size = 8;
+    _CG_CONST_DECL unsigned int default_max_block_size = 1024;
+
+    struct multi_warp_scratch {
+        char memory[1];
+    };
+}
+
+class thread_block;
+namespace experimental {
+    template <unsigned int TileCommunicationSize = details::default_tile_communication_size,
+              unsigned int MaxBlockSize = details::default_max_block_size>
+    struct __align__(details::scratch_alignment(TileCommunicationSize)) block_tile_memory {
+    private:
+        char scratch[details::scratch_size_needed(TileCommunicationSize, MaxBlockSize)];
+
+    public:
+        _CG_QUALIFIER void* get_memory() {
+            return static_cast<void*>(scratch);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int get_size() {
+            return details::scratch_size_needed(TileCommunicationSize, MaxBlockSize);
+        }
+    };
+
+    template <unsigned int TileCommunicationSize, unsigned int MaxBlockSize>
+    _CG_QUALIFIER thread_block this_thread_block(experimental::block_tile_memory<TileCommunicationSize, MaxBlockSize>& scratch);
+}
+#endif
+
+/**
+ * class thread_block
+ *
+ * Every GPU kernel is executed by a grid of thread blocks, and threads within
+ * each block are guaranteed to reside on the same streaming multiprocessor.
+ * A thread_block represents a thread block whose dimensions are not known until runtime.
+ *
+ * Constructed via this_thread_block();
+ */
+class thread_block : public thread_group_base<details::thread_block_id>
+{
+    // Friends
+    friend _CG_QUALIFIER thread_block this_thread_block();
+    friend _CG_QUALIFIER thread_group tiled_partition(const thread_group& parent, unsigned int tilesz);
+    friend _CG_QUALIFIER thread_group tiled_partition(const thread_block& parent, unsigned int tilesz);
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    template <unsigned int TileCommunicationSize, unsigned int MaxBlockSize>
+    friend _CG_QUALIFIER thread_block experimental::this_thread_block(
+            experimental::block_tile_memory<TileCommunicationSize, MaxBlockSize>& scratch);
+
+    const unsigned short communication_size;
+    const unsigned short max_block_size;
+    details::multi_warp_scratch* const tile_memory;
+
+    template <unsigned int Size>
+    friend class __static_size_multi_warp_tile_base;
+
+    template <unsigned int TileCommunicationSize, unsigned int MaxBlockSize>
+    _CG_QUALIFIER thread_block(experimental::block_tile_memory<TileCommunicationSize, MaxBlockSize>& scratch) :
+        tile_memory(reinterpret_cast<details::multi_warp_scratch*>(&scratch)),
+        communication_size(TileCommunicationSize), max_block_size(MaxBlockSize) {
+        if (thread_rank() < details::scratch_sync_memory_size(MaxBlockSize) / sizeof(details::barrier_t)) {
+            details::barrier_t* barriers = reinterpret_cast<details::barrier_t*>(&tile_memory->memory);
+            barriers[thread_rank()] = 0;
+        }
+        sync();
+    }
+#endif
+
+    // Disable constructor
+    _CG_QUALIFIER thread_block()
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    : tile_memory(NULL), communication_size(0), max_block_size(0)
+#endif
+    { }
+
+    // Internal Use
+    _CG_QUALIFIER thread_group _get_tiled_threads(unsigned int tilesz) const {
+        const bool pow2_tilesz = ((tilesz & (tilesz - 1)) == 0);
+
+        // Invalid, immediately fail
+        if (tilesz == 0 || (tilesz > 32) || !pow2_tilesz) {
+            details::abort();
+            return (thread_block());
+        }
+
+        unsigned int mask;
+        unsigned int base_offset = thread_rank() & (~(tilesz - 1));
+        unsigned int masklength = min((unsigned int)size() - base_offset, tilesz);
+
+        mask = (unsigned int)(-1) >> (32 - masklength);
+        mask <<= (details::laneid() & ~(tilesz - 1));
+        thread_group tile = thread_group(details::coalesced_group_id);
+        tile._data.coalesced.mask = mask;
+        tile._data.coalesced.size = __popc(mask);
+        tile._data.coalesced.metaGroupSize = (details::cta::size() + tilesz - 1) / tilesz;
+        tile._data.coalesced.metaGroupRank = details::cta::thread_rank() / tilesz;
+        tile._data.coalesced.is_tiled = true;
+        return (tile);
+    }
+
+ public:
+    _CG_STATIC_CONST_DECL unsigned int _group_id = details::thread_block_id;
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_block)
+
+    _CG_STATIC_QUALIFIER void sync() {
+        details::cta::sync();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int size() {
+        return details::cta::size();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int thread_rank() {
+        return details::cta::thread_rank();
+    }
+
+    // Additional functionality exposed by the group
+    _CG_STATIC_QUALIFIER dim3 group_index() {
+        return details::cta::group_index();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 thread_index() {
+        return details::cta::thread_index();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 group_dim() {
+        return details::cta::block_dim();
+    }
+
+    _CG_STATIC_QUALIFIER dim3 dim_threads() {
+        return details::cta::dim_threads();
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int num_threads() {
+        return details::cta::num_threads();
+    }
+
+};
+
+/**
+ * thread_block this_thread_block()
+ *
+ * Constructs a thread_block group
+ */
+_CG_QUALIFIER thread_block this_thread_block()
+{
+    return (thread_block());
+}
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+namespace experimental {
+    template <unsigned int TileCommunicationSize, unsigned int MaxBlockSize>
+    _CG_QUALIFIER thread_block this_thread_block(experimental::block_tile_memory<TileCommunicationSize, MaxBlockSize>& scratch) {
+        return (thread_block(scratch));
+    }
+}
+#endif
+
+/**
+ * class coalesced_group
+ *
+ * A group representing the current set of converged threads in a warp.
+ * The size of the group is not guaranteed and it may return a group of
+ * only one thread (itself).
+ *
+ * This group exposes warp-synchronous builtins.
+ * Constructed via coalesced_threads();
+ */
+class coalesced_group : public thread_group_base<details::coalesced_group_id>
+{
+private:
+    friend _CG_QUALIFIER coalesced_group coalesced_threads();
+    friend _CG_QUALIFIER thread_group tiled_partition(const thread_group& parent, unsigned int tilesz);
+    friend _CG_QUALIFIER coalesced_group tiled_partition(const coalesced_group& parent, unsigned int tilesz);
+    friend class details::_coalesced_group_data_access;
+
+    _CG_QUALIFIER unsigned int _packLanes(unsigned laneMask) const {
+        unsigned int member_pack = 0;
+        unsigned int member_rank = 0;
+        for (int bit_idx = 0; bit_idx < 32; bit_idx++) {
+            unsigned int lane_bit = _data.coalesced.mask & (1 << bit_idx);
+            if (lane_bit) {
+                if (laneMask & lane_bit)
+                    member_pack |= 1 << member_rank;
+                member_rank++;
+            }
+        }
+        return (member_pack);
+    }
+
+    // Internal Use
+    _CG_QUALIFIER coalesced_group _get_tiled_threads(unsigned int tilesz) const {
+        const bool pow2_tilesz = ((tilesz & (tilesz - 1)) == 0);
+
+        // Invalid, immediately fail
+        if (tilesz == 0 || (tilesz > 32) || !pow2_tilesz) {
+            details::abort();
+            return (coalesced_group(0));
+        }
+        if (size() <= tilesz) {
+            return (*this);
+        }
+
+        if ((_data.coalesced.is_tiled == true) && pow2_tilesz) {
+            unsigned int base_offset = (thread_rank() & (~(tilesz - 1)));
+            unsigned int masklength = min((unsigned int)size() - base_offset, tilesz);
+            unsigned int mask = (unsigned int)(-1) >> (32 - masklength);
+
+            mask <<= (details::laneid() & ~(tilesz - 1));
+            coalesced_group coalesced_tile = coalesced_group(mask);
+            coalesced_tile._data.coalesced.metaGroupSize = size() / tilesz;
+            coalesced_tile._data.coalesced.metaGroupRank = thread_rank() / tilesz;
+            coalesced_tile._data.coalesced.is_tiled = true;
+            return (coalesced_tile);
+        }
+        else if ((_data.coalesced.is_tiled == false) && pow2_tilesz) {
+            unsigned int mask = 0;
+            unsigned int member_rank = 0;
+            int seen_lanes = (thread_rank() / tilesz) * tilesz;
+            for (unsigned int bit_idx = 0; bit_idx < 32; bit_idx++) {
+                unsigned int lane_bit = _data.coalesced.mask & (1 << bit_idx);
+                if (lane_bit) {
+                    if (seen_lanes <= 0 && member_rank < tilesz) {
+                        mask |= lane_bit;
+                        member_rank++;
+                    }
+                    seen_lanes--;
+                }
+            }
+            coalesced_group coalesced_tile = coalesced_group(mask);
+            // Override parent with the size of this group
+            coalesced_tile._data.coalesced.metaGroupSize = (size() + tilesz - 1) / tilesz;
+            coalesced_tile._data.coalesced.metaGroupRank = thread_rank() / tilesz;
+            return coalesced_tile;
+        }
+        else {
+            // None in _CG_VERSION 1000
+            details::abort();
+        }
+
+        return (coalesced_group(0));
+    }
+
+ protected:
+    _CG_QUALIFIER coalesced_group(unsigned int mask) {
+        _data.coalesced.mask = mask;
+        _data.coalesced.size = __popc(mask);
+        _data.coalesced.metaGroupRank = 0;
+        _data.coalesced.metaGroupSize = 1;
+        _data.coalesced.is_tiled = false;
+    }
+
+    _CG_QUALIFIER unsigned int get_mask() const {
+        return (_data.coalesced.mask);
+    }
+
+ public:
+    _CG_STATIC_CONST_DECL unsigned int _group_id = details::coalesced_group_id;
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_block)
+
+    _CG_QUALIFIER unsigned int num_threads() const {
+        return _data.coalesced.size;
+    }
+
+    _CG_QUALIFIER unsigned int size() const {
+        return num_threads();
+    }
+
+    _CG_QUALIFIER unsigned int thread_rank() const {
+        return (__popc(_data.coalesced.mask & details::lanemask32_lt()));
+    }
+
+    // Rank of this group in the upper level of the hierarchy
+    _CG_QUALIFIER unsigned int meta_group_rank() const {
+        return _data.coalesced.metaGroupRank;
+    }
+
+    // Total num partitions created out of all CTAs when the group was created
+    _CG_QUALIFIER unsigned int meta_group_size() const {
+        return _data.coalesced.metaGroupSize;
+    }
+
+    _CG_QUALIFIER void sync() const {
+        __syncwarp(_data.coalesced.mask);
+    }
+
+#ifdef _CG_CPP11_FEATURES
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl(TyElem&& elem, int srcRank) const {
+        unsigned int lane = (srcRank == 0) ? __ffs(_data.coalesced.mask) - 1 :
+            (size() == 32) ? srcRank : __fns(_data.coalesced.mask, 0, (srcRank + 1));
+
+        return details::tile::shuffle_dispatch<TyElem>::shfl(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), _data.coalesced.mask, lane, 32);
+    }
+
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl_down(TyElem&& elem, unsigned int delta) const {
+        if (size() == 32) {
+            return details::tile::shuffle_dispatch<TyElem>::shfl_down(
+                _CG_STL_NAMESPACE::forward<TyElem>(elem), 0xFFFFFFFF, delta, 32);
+        }
+
+        unsigned int lane = __fns(_data.coalesced.mask, details::laneid(), delta + 1);
+
+        if (lane >= 32)
+            lane = details::laneid();
+
+        return details::tile::shuffle_dispatch<TyElem>::shfl(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), _data.coalesced.mask, lane, 32);
+    }
+
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl_up(TyElem&& elem, int delta) const {
+        if (size() == 32) {
+            return details::tile::shuffle_dispatch<TyElem>::shfl_up(
+                _CG_STL_NAMESPACE::forward<TyElem>(elem), 0xFFFFFFFF, delta, 32);
+        }
+
+        unsigned lane = __fns(_data.coalesced.mask, details::laneid(), -(delta + 1));
+        if (lane >= 32)
+            lane = details::laneid();
+
+        return details::tile::shuffle_dispatch<TyElem>::shfl(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), _data.coalesced.mask, lane, 32);
+    }
+#else
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl(TyIntegral var, unsigned int src_rank) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        unsigned int lane = (src_rank == 0) ? __ffs(_data.coalesced.mask) - 1 :
+            (size() == 32) ? src_rank : __fns(_data.coalesced.mask, 0, (src_rank + 1));
+        return (__shfl_sync(_data.coalesced.mask, var, lane, 32));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl_up(TyIntegral var, int delta) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        if (size() == 32) {
+            return (__shfl_up_sync(0xFFFFFFFF, var, delta, 32));
+        }
+        unsigned lane = __fns(_data.coalesced.mask, details::laneid(), -(delta + 1));
+        if (lane >= 32) lane = details::laneid();
+        return (__shfl_sync(_data.coalesced.mask, var, lane, 32));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl_down(TyIntegral var, int delta) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        if (size() == 32) {
+            return (__shfl_down_sync(0xFFFFFFFF, var, delta, 32));
+        }
+        unsigned int lane = __fns(_data.coalesced.mask, details::laneid(), delta + 1);
+        if (lane >= 32) lane = details::laneid();
+        return (__shfl_sync(_data.coalesced.mask, var, lane, 32));
+    }
+#endif
+
+    _CG_QUALIFIER int any(int predicate) const {
+        return (__ballot_sync(_data.coalesced.mask, predicate) != 0);
+    }
+    _CG_QUALIFIER int all(int predicate) const {
+        return (__ballot_sync(_data.coalesced.mask, predicate) == _data.coalesced.mask);
+    }
+    _CG_QUALIFIER unsigned int ballot(int predicate) const {
+        if (size() == 32) {
+            return (__ballot_sync(0xFFFFFFFF, predicate));
+        }
+        unsigned int lane_ballot = __ballot_sync(_data.coalesced.mask, predicate);
+        return (_packLanes(lane_ballot));
+    }
+
+#ifdef _CG_HAS_MATCH_COLLECTIVE
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER unsigned int match_any(TyIntegral val) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        if (size() == 32) {
+            return (__match_any_sync(0xFFFFFFFF, val));
+        }
+        unsigned int lane_match = __match_any_sync(_data.coalesced.mask, val);
+        return (_packLanes(lane_match));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER unsigned int match_all(TyIntegral val, int &pred) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        if (size() == 32) {
+            return (__match_all_sync(0xFFFFFFFF, val, &pred));
+        }
+        unsigned int lane_match = __match_all_sync(_data.coalesced.mask, val, &pred);
+        return (_packLanes(lane_match));
+    }
+
+#endif /* !_CG_HAS_MATCH_COLLECTIVE */
+
+};
+
+_CG_QUALIFIER coalesced_group coalesced_threads()
+{
+    return (coalesced_group(__activemask()));
+}
+
+namespace details {
+    template <unsigned int Size> struct verify_thread_block_tile_size;
+    template <> struct verify_thread_block_tile_size<32> { typedef void OK; };
+    template <> struct verify_thread_block_tile_size<16> { typedef void OK; };
+    template <> struct verify_thread_block_tile_size<8>  { typedef void OK; };
+    template <> struct verify_thread_block_tile_size<4>  { typedef void OK; };
+    template <> struct verify_thread_block_tile_size<2>  { typedef void OK; };
+    template <> struct verify_thread_block_tile_size<1>  { typedef void OK; };
+
+#ifdef _CG_CPP11_FEATURES
+    template <unsigned int Size>
+    using _is_power_of_2 = _CG_STL_NAMESPACE::integral_constant<bool, (Size & (Size - 1)) == 0>;
+
+    template <unsigned int Size>
+    using _is_single_warp = _CG_STL_NAMESPACE::integral_constant<bool, Size <= 32>;
+    template <unsigned int Size>
+    using _is_multi_warp =
+    _CG_STL_NAMESPACE::integral_constant<bool, (Size > 32) && (Size <= 1024)>;
+
+    template <unsigned int Size>
+    using _is_valid_single_warp_tile =
+        _CG_STL_NAMESPACE::integral_constant<bool, _is_power_of_2<Size>::value && _is_single_warp<Size>::value>;
+    template <unsigned int Size>
+    using _is_valid_multi_warp_tile =
+        _CG_STL_NAMESPACE::integral_constant<bool, _is_power_of_2<Size>::value && _is_multi_warp<Size>::value>;
+#else
+    template <unsigned int Size>
+    struct _is_multi_warp {
+        static const bool value = false;
+    };
+#endif
+}
+
+template <unsigned int Size>
+class __static_size_tile_base
+{
+protected:
+    _CG_STATIC_CONST_DECL unsigned int numThreads = Size;
+
+public:
+    _CG_THREAD_SCOPE(cuda::thread_scope::thread_scope_block)
+
+    // Rank of thread within tile
+    _CG_STATIC_QUALIFIER unsigned int thread_rank() {
+        return (details::cta::thread_rank() & (numThreads - 1));
+    }
+
+    // Number of threads within tile
+    _CG_STATIC_CONSTEXPR_QUALIFIER unsigned int num_threads() {
+        return numThreads;
+    }
+
+    _CG_STATIC_CONSTEXPR_QUALIFIER unsigned int size() {
+        return num_threads();
+    }
+};
+
+template <unsigned int Size>
+class __static_size_thread_block_tile_base : public __static_size_tile_base<Size>
+{
+    friend class details::_coalesced_group_data_access;
+    typedef details::tile::tile_helpers<Size> th;
+
+#ifdef _CG_CPP11_FEATURES
+    static_assert(details::_is_valid_single_warp_tile<Size>::value, "Size must be one of 1/2/4/8/16/32");
+#else
+    typedef typename details::verify_thread_block_tile_size<Size>::OK valid;
+#endif
+    using __static_size_tile_base<Size>::numThreads;
+    _CG_STATIC_CONST_DECL unsigned int fullMask = 0xFFFFFFFF;
+
+ protected:
+    _CG_STATIC_QUALIFIER unsigned int build_mask() {
+        unsigned int mask = fullMask;
+        if (numThreads != 32) {
+            // [0,31] representing the current active thread in the warp
+            unsigned int laneId = details::laneid();
+            // shift mask according to the partition it belongs to
+            mask = th::tileMask << (laneId & ~(th::laneMask));
+        }
+        return (mask);
+    }
+
+public:
+    _CG_STATIC_CONST_DECL unsigned int _group_id = details::coalesced_group_id;
+
+    _CG_STATIC_QUALIFIER void sync() {
+        __syncwarp(build_mask());
+    }
+
+#ifdef _CG_CPP11_FEATURES
+    // PTX supported collectives
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl(TyElem&& elem, int srcRank) const {
+        return details::tile::shuffle_dispatch<TyElem>::shfl(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), build_mask(), srcRank, numThreads);
+    }
+
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl_down(TyElem&& elem, unsigned int delta) const {
+        return details::tile::shuffle_dispatch<TyElem>::shfl_down(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), build_mask(), delta, numThreads);
+    }
+
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl_up(TyElem&& elem, unsigned int delta) const {
+        return details::tile::shuffle_dispatch<TyElem>::shfl_up(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), build_mask(), delta, numThreads);
+    }
+
+    template <typename TyElem, typename TyRet = details::remove_qual<TyElem>>
+    _CG_QUALIFIER TyRet shfl_xor(TyElem&& elem, unsigned int laneMask) const {
+        return details::tile::shuffle_dispatch<TyElem>::shfl_xor(
+            _CG_STL_NAMESPACE::forward<TyElem>(elem), build_mask(), laneMask, numThreads);
+    }
+#else
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl(TyIntegral var, int srcRank) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        return (__shfl_sync(build_mask(), var, srcRank, numThreads));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl_down(TyIntegral var, unsigned int delta) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        return (__shfl_down_sync(build_mask(), var, delta, numThreads));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl_up(TyIntegral var, unsigned int delta) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        return (__shfl_up_sync(build_mask(), var, delta, numThreads));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER TyIntegral shfl_xor(TyIntegral var, unsigned int laneMask) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        return (__shfl_xor_sync(build_mask(), var, laneMask, numThreads));
+    }
+#endif //_CG_CPP11_FEATURES
+
+    _CG_QUALIFIER int any(int predicate) const {
+        unsigned int lane_ballot = __ballot_sync(build_mask(), predicate);
+        return (lane_ballot != 0);
+    }
+    _CG_QUALIFIER int all(int predicate) const {
+        unsigned int lane_ballot = __ballot_sync(build_mask(), predicate);
+        return (lane_ballot == build_mask());
+    }
+    _CG_QUALIFIER unsigned int ballot(int predicate) const {
+        unsigned int lane_ballot = __ballot_sync(build_mask(), predicate);
+        return (lane_ballot >> (details::laneid() & (~(th::laneMask))));
+    }
+
+#ifdef _CG_HAS_MATCH_COLLECTIVE
+    template <typename TyIntegral>
+    _CG_QUALIFIER unsigned int match_any(TyIntegral val) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        unsigned int lane_match = __match_any_sync(build_mask(), val);
+        return (lane_match >> (details::laneid() & (~(th::laneMask))));
+    }
+
+    template <typename TyIntegral>
+    _CG_QUALIFIER unsigned int match_all(TyIntegral val, int &pred) const {
+        details::assert_if_not_arithmetic<TyIntegral>();
+        unsigned int lane_match = __match_all_sync(build_mask(), val, &pred);
+        return (lane_match >> (details::laneid() & (~(th::laneMask))));
+    }
+#endif
+
+};
+
+template <unsigned int Size, typename ParentT>
+class __static_parent_thread_block_tile_base
+{
+public:
+    // Rank of this group in the upper level of the hierarchy
+    _CG_STATIC_QUALIFIER unsigned int meta_group_rank() {
+        return ParentT::thread_rank() / Size;
+    }
+
+    // Total num partitions created out of all CTAs when the group was created
+    _CG_STATIC_QUALIFIER unsigned int meta_group_size() {
+        return (ParentT::size() + Size - 1) / Size;
+    }
+};
+
+/**
+ * class thread_block_tile<unsigned int Size, ParentT = void>
+ *
+ * Statically-sized group type, representing one tile of a thread block.
+ * The only specializations currently supported are those with native
+ * hardware support (1/2/4/8/16/32)
+ *
+ * This group exposes warp-synchronous builtins.
+ * Can only be constructed via tiled_partition<Size>(ParentT&)
+ */
+
+template <unsigned int Size, typename ParentT = void>
+class __single_warp_thread_block_tile :
+    public __static_size_thread_block_tile_base<Size>,
+    public __static_parent_thread_block_tile_base<Size, ParentT>
+{
+    typedef __static_parent_thread_block_tile_base<Size, ParentT> staticParentBaseT;
+    friend class details::_coalesced_group_data_access;
+
+protected:
+    _CG_QUALIFIER __single_warp_thread_block_tile() { };
+    _CG_QUALIFIER __single_warp_thread_block_tile(unsigned int, unsigned int) { };
+
+    _CG_STATIC_QUALIFIER unsigned int get_mask() {
+        return __static_size_thread_block_tile_base<Size>::build_mask();
+    }
+};
+
+template <unsigned int Size>
+class __single_warp_thread_block_tile<Size, void> :
+    public __static_size_thread_block_tile_base<Size>,
+    public thread_group_base<details::coalesced_group_id>
+{
+    _CG_STATIC_CONST_DECL unsigned int numThreads = Size;
+
+    template <unsigned int, typename ParentT> friend class __single_warp_thread_block_tile;
+    friend class details::_coalesced_group_data_access;
+
+    typedef __static_size_thread_block_tile_base<numThreads> staticSizeBaseT;
+
+protected:
+    _CG_QUALIFIER __single_warp_thread_block_tile(unsigned int meta_group_rank, unsigned int meta_group_size) {
+        _data.coalesced.mask = staticSizeBaseT::build_mask();
+        _data.coalesced.size = numThreads;
+        _data.coalesced.metaGroupRank = meta_group_rank;
+        _data.coalesced.metaGroupSize = meta_group_size;
+        _data.coalesced.is_tiled = true;
+    }
+
+    _CG_QUALIFIER unsigned int get_mask() const {
+        return (_data.coalesced.mask);
+    }
+
+public:
+    using staticSizeBaseT::sync;
+    using staticSizeBaseT::size;
+    using staticSizeBaseT::num_threads;
+    using staticSizeBaseT::thread_rank;
+
+    _CG_QUALIFIER unsigned int meta_group_rank() const {
+        return _data.coalesced.metaGroupRank;
+    }
+
+    _CG_QUALIFIER unsigned int meta_group_size() const {
+        return _data.coalesced.metaGroupSize;
+    }
+};
+
+/**
+ * Outer level API calls
+ * void sync(GroupT) - see <group_type>.sync()
+ * void thread_rank(GroupT) - see <group_type>.thread_rank()
+ * void group_size(GroupT) - see <group_type>.size()
+ */
+template <class GroupT>
+_CG_QUALIFIER void sync(GroupT const &g)
+{
+    g.sync();
+}
+
+// TODO: Use a static dispatch to determine appropriate return type
+// C++03 is stuck with unsigned long long for now
+#ifdef _CG_CPP11_FEATURES
+template <class GroupT>
+_CG_QUALIFIER auto thread_rank(GroupT const& g) -> decltype(g.thread_rank()) {
+    return g.thread_rank();
+}
+
+
+template <class GroupT>
+_CG_QUALIFIER auto group_size(GroupT const &g) -> decltype(g.num_threads()) {
+    return g.num_threads();
+}
+#else
+template <class GroupT>
+_CG_QUALIFIER unsigned long long thread_rank(GroupT const& g) {
+    return static_cast<unsigned long long>(g.thread_rank());
+}
+
+
+template <class GroupT>
+_CG_QUALIFIER unsigned long long group_size(GroupT const &g) {
+    return static_cast<unsigned long long>(g.num_threads());
+}
+#endif
+
+
+/**
+ * tiled_partition
+ *
+ * The tiled_partition(parent, tilesz) method is a collective operation that
+ * partitions the parent group into a one-dimensional, row-major, tiling of subgroups.
+ *
+ * A total of ((size(parent)+tilesz-1)/tilesz) subgroups will
+ * be created where threads having identical k = (thread_rank(parent)/tilesz)
+ * will be members of the same subgroup.
+ *
+ * The implementation may cause the calling thread to wait until all the members
+ * of the parent group have invoked the operation before resuming execution.
+ *
+ * Functionality is limited to power-of-two sized subgorup instances of at most
+ * 32 threads. Only thread_block, thread_block_tile<>, and their subgroups can be
+ * tiled_partition() in _CG_VERSION 1000.
+ */
+_CG_QUALIFIER thread_group tiled_partition(const thread_group& parent, unsigned int tilesz)
+{
+    if (parent.get_type() == details::coalesced_group_id) {
+        const coalesced_group *_cg = static_cast<const coalesced_group*>(&parent);
+        return _cg->_get_tiled_threads(tilesz);
+    }
+    else {
+        const thread_block *_tb = static_cast<const thread_block*>(&parent);
+        return _tb->_get_tiled_threads(tilesz);
+    }
+}
+
+// Thread block type overload: returns a basic thread_group for now (may be specialized later)
+_CG_QUALIFIER thread_group tiled_partition(const thread_block& parent, unsigned int tilesz)
+{
+    return (parent._get_tiled_threads(tilesz));
+}
+
+// Coalesced group type overload: retains its ability to stay coalesced
+_CG_QUALIFIER coalesced_group tiled_partition(const coalesced_group& parent, unsigned int tilesz)
+{
+    return (parent._get_tiled_threads(tilesz));
+}
+
+namespace details {
+    template <unsigned int Size, typename ParentT>
+    class internal_thread_block_tile : public __single_warp_thread_block_tile<Size, ParentT> {};
+
+    template <unsigned int Size, typename ParentT>
+    _CG_QUALIFIER internal_thread_block_tile<Size, ParentT> tiled_partition_internal() {
+        return internal_thread_block_tile<Size, ParentT>();
+    }
+
+    template <typename TyVal, typename GroupT, typename WarpLambda, typename InterWarpLambda>
+    _CG_QUALIFIER TyVal multi_warp_collectives_helper(
+            const GroupT& group,
+            WarpLambda warp_lambda,
+            InterWarpLambda inter_warp_lambda) {
+                return group.template collectives_scheme<TyVal>(warp_lambda, inter_warp_lambda);
+            }
+        
+    template <typename T, typename GroupT>
+    _CG_QUALIFIER T* multi_warp_scratch_location_getter(const GroupT& group, unsigned int warp_id) {
+        return group.template get_scratch_location<T>(warp_id);
+    }
+
+    template <typename GroupT>
+    _CG_QUALIFIER details::barrier_t* multi_warp_sync_location_getter(const GroupT& group) {
+        return group.get_sync_location();
+    }
+
+}
+/**
+ * tiled_partition<tilesz>
+ *
+ * The tiled_partition<tilesz>(parent) method is a collective operation that
+ * partitions the parent group into a one-dimensional, row-major, tiling of subgroups.
+ *
+ * A total of ((size(parent)/tilesz) subgroups will be created,
+ * therefore the parent group size must be evenly divisible by the tilesz.
+ * The allow parent groups are thread_block or thread_block_tile<size>.
+ *
+ * The implementation may cause the calling thread to wait until all the members
+ * of the parent group have invoked the operation before resuming execution.
+ *
+ * Functionality is limited to native hardware sizes, 1/2/4/8/16/32.
+ * The size(parent) must be greater than the template Size parameter
+ * otherwise the results are undefined.
+ */
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+template <unsigned int Size>
+class __static_size_multi_warp_tile_base : public __static_size_tile_base<Size>
+{
+    static_assert(details::_is_valid_multi_warp_tile<Size>::value, "Size must be one of 64/128/256/512");
+
+    template <typename TyVal, typename GroupT, typename WarpLambda, typename InterWarpLambda>
+    friend TyVal details::multi_warp_collectives_helper(
+            const GroupT& group,
+            WarpLambda warp_lambda,
+            InterWarpLambda inter_warp_lambda);
+    template <typename T, typename GroupT>
+    friend T* details::multi_warp_scratch_location_getter(const GroupT& group, unsigned int warp_id);
+    template <typename GroupT>
+    friend details::barrier_t* details::multi_warp_sync_location_getter(const GroupT& group);
+    template <unsigned int OtherSize>
+    friend class __static_size_multi_warp_tile_base;
+    using WarpType = details::internal_thread_block_tile<32, __static_size_multi_warp_tile_base<Size>>;
+    using ThisType = __static_size_multi_warp_tile_base<Size>;
+    _CG_STATIC_CONST_DECL int numWarps = Size / 32;
+    const unsigned short communication_size;
+    const unsigned short max_block_size;
+
+protected:
+    details::multi_warp_scratch* const tile_memory;
+
+    template <typename GroupT>
+    _CG_QUALIFIER __static_size_multi_warp_tile_base(const GroupT& g) :
+            tile_memory(g.tile_memory), communication_size(g.communication_size), max_block_size(g.max_block_size) {}
+
+
+private:
+    _CG_QUALIFIER details::barrier_t* get_sync_location() const {
+        // Different group sizes use different barriers, all groups of a given size share one barrier.
+        unsigned int sync_id = details::log2(Size / 64);
+        return &(reinterpret_cast<details::barrier_t*>(tile_memory->memory)[sync_id]);
+    }
+
+    template <typename T>
+    _CG_QUALIFIER T* get_scratch_location(unsigned int warp_id) const {
+        unsigned int sync_mem_size = details::scratch_sync_memory_size(max_block_size);
+        unsigned int scratch_id = (details::cta::thread_rank() - thread_rank()) / 32 + warp_id;
+        return reinterpret_cast<T*>(&tile_memory->memory[sync_mem_size + scratch_id * communication_size]);
+    }
+
+    template <typename T>
+    _CG_QUALIFIER T* get_scratch_location() const {
+        unsigned int sync_mem_size = details::scratch_sync_memory_size(max_block_size);
+        unsigned int scratch_id = details::cta::thread_rank() / 32;
+        return reinterpret_cast<T*>(&tile_memory->memory[sync_mem_size + scratch_id * communication_size]);
+    }
+
+    template <typename TyVal>
+    _CG_QUALIFIER TyVal shfl_impl(TyVal val, unsigned int src) const {
+        unsigned int src_warp = src / 32;
+        auto warp = details::tiled_partition_internal<32, ThisType>();
+        details::barrier_t* sync_location = get_sync_location();
+
+        // Get warp slot of the source threads warp.
+        TyVal* warp_scratch_location = get_scratch_location<TyVal>(src_warp);
+
+        if (warp.meta_group_rank() == src_warp) {
+            // Put shuffled value into my warp slot and let my warp arrive at the barrier.
+            if (thread_rank() == src) {
+                *warp_scratch_location = val;
+            }
+            details::sync_warps_arrive(sync_location, details::cta::thread_rank(), numWarps);
+            TyVal result = *warp_scratch_location;
+            details::sync_warps_wait(sync_location, details::cta::thread_rank());
+            return result;
+        }
+        else {
+            // Wait for the source warp to arrive on the barrier.
+            details::sync_warps_wait_for_warps<details::wait_for_specific_warp>(
+                    (details::cta::thread_rank() / 32 - warp.meta_group_rank() + src_warp),
+                    sync_location, details::cta::thread_rank(),
+                    numWarps);
+            TyVal result = *warp_scratch_location;
+            details::sync_warps(sync_location, details::cta::thread_rank(), numWarps);
+            return result;
+        }
+    }
+
+    template <typename TyVal>
+    _CG_QUALIFIER TyVal shfl_iterative_impl(TyVal val, unsigned int src) const {
+        auto warp = details::tiled_partition_internal<32, ThisType>();
+
+        details::copy_channel<numWarps> broadcast_channel{
+            get_scratch_location<char>(0),
+            get_sync_location(),
+            (size_t) communication_size * numWarps};
+
+        if (warp.meta_group_rank() == src / 32) {
+            val = warp.shfl(val, src);
+            broadcast_channel.template send_value<
+                TyVal, 32, decltype(broadcast_channel)::send_many_to_many>(
+                    val, warp.thread_rank(), details::cta::thread_rank() / 32);
+        }
+        else {
+            broadcast_channel.template receive_value<TyVal>(val, warp.thread_rank() == 0);
+        }
+        sync();
+        return val;
+    }
+
+    template <typename TyVal, typename WarpLambda, typename InterWarpLambda>
+    _CG_QUALIFIER TyVal collectives_scheme_impl(const WarpLambda& warp_lambda, const InterWarpLambda& inter_warp_lambda) const {
+        auto warp = details::tiled_partition_internal<32, ThisType>();
+        details::barrier_t* sync_location = get_sync_location();
+        TyVal* warp_scratch_location = get_scratch_location<TyVal>();
+
+        warp_lambda(warp, warp_scratch_location);
+
+        if (details::sync_warps_last_releases(sync_location, details::cta::thread_rank(), numWarps)) {
+            auto subwarp = details::tiled_partition_internal<numWarps, decltype(warp)>();
+            if (subwarp.meta_group_rank() == 0) {
+                TyVal* thread_scratch_location = get_scratch_location<TyVal>(subwarp.thread_rank());
+                inter_warp_lambda(subwarp, thread_scratch_location);
+            }
+            warp.sync();
+            details::sync_warps_release(sync_location, warp.thread_rank() == 0, details::cta::thread_rank(), numWarps);
+        }
+        TyVal result = *warp_scratch_location;
+        warp.sync();  // Added warpsync, if all collectives do sync before writing to reduce_location (they does right now),
+                      // we could delete it.
+        return result;
+    }
+
+    template <typename TyVal, typename WarpLambda, typename InterWarpLambda>
+    _CG_QUALIFIER TyVal collectives_scheme_iterative_impl(
+            const WarpLambda& warp_lambda,
+            const InterWarpLambda& inter_warp_lambda) const {
+        auto warp = details::tiled_partition_internal<32, ThisType>();
+        details::barrier_t* sync_location = get_sync_location();
+        details::copy_channel<numWarps> final_result_channel{
+            get_scratch_location<char>(0),
+            sync_location,
+            (size_t) communication_size * numWarps};
+
+        TyVal warp_result;
+        warp_lambda(warp, &warp_result);
+
+        if (warp.meta_group_rank() == 0) {
+            auto subwarp = details::tiled_partition_internal<numWarps, decltype(warp)>();
+            details::copy_channel<numWarps> partial_results_channel{
+                get_scratch_location<char>(subwarp.thread_rank()),
+                sync_location,
+                (size_t) communication_size};
+
+            // Thread 0 in subwarp set as inactive to not overwrite warp 0 warp_result.
+            partial_results_channel.template receive_value<TyVal>(
+                    warp_result,
+                    warp.thread_rank() == 0,
+                    subwarp.thread_rank() != 0 && subwarp.meta_group_rank() == 0);
+            if (subwarp.meta_group_rank() == 0) {
+                inter_warp_lambda(subwarp, &warp_result);
+            }
+            warp_result = warp.shfl(warp_result, 0);
+            final_result_channel.template send_value<TyVal, 32, decltype(final_result_channel)::send_many_to_many>(
+                    warp_result,
+                    warp.thread_rank(),
+                    details::cta::thread_rank() / 32);
+        }
+        else {
+            details::copy_channel<numWarps> partial_results_channel{get_scratch_location<char>(), sync_location, (size_t) communication_size};
+            partial_results_channel.template send_value<TyVal, 32, decltype(partial_results_channel)::send_many_to_one>(
+                    warp_result,
+                    warp.thread_rank(),
+                    (details::cta::thread_rank() - thread_rank()) / 32);
+            final_result_channel.template receive_value<TyVal>(warp_result, warp.thread_rank() == 0);
+        }
+        sync();
+        return warp_result;
+    }
+
+    template <typename TyVal, typename WarpLambda, typename InterWarpLambda>
+    _CG_QUALIFIER TyVal collectives_scheme(const WarpLambda& warp_lambda, const InterWarpLambda& inter_warp_lambda) const {
+        if (sizeof(TyVal) > communication_size) {
+            return collectives_scheme_iterative_impl<TyVal, WarpLambda, InterWarpLambda>(warp_lambda, inter_warp_lambda);
+        }
+        else {
+            return collectives_scheme_impl<TyVal, WarpLambda, InterWarpLambda>(warp_lambda, inter_warp_lambda);
+        }
+    }
+
+public:
+    _CG_STATIC_CONST_DECL unsigned int _group_id = details::multi_tile_group_id;
+
+    using __static_size_tile_base<Size>::thread_rank;
+
+    template <typename TyVal>
+    _CG_QUALIFIER TyVal shfl(TyVal val, unsigned int src) const {
+        if (sizeof(TyVal) > communication_size) {
+            return shfl_iterative_impl(val, src);
+        }
+        else {
+            return shfl_impl(val, src);
+        }
+    }
+
+    _CG_QUALIFIER void sync() const {
+        details::sync_warps(get_sync_location(), details::cta::thread_rank(), numWarps);
+    }
+
+    _CG_QUALIFIER int any(int predicate) const {
+        auto warp_lambda = [=] (WarpType& warp, int* warp_scratch_location) {
+                *warp_scratch_location = __any_sync(0xFFFFFFFF, predicate);
+        };
+        auto inter_warp_lambda =
+            [] (details::internal_thread_block_tile<numWarps, WarpType>& subwarp, int* thread_scratch_location) {
+                *thread_scratch_location = __any_sync(0xFFFFFFFFU >> (32 - numWarps), *thread_scratch_location);
+        };
+        return collectives_scheme<int>(warp_lambda, inter_warp_lambda);
+    }
+
+    _CG_QUALIFIER int all(int predicate) const {
+        auto warp_lambda = [=] (WarpType& warp, int* warp_scratch_location) {
+                *warp_scratch_location = __all_sync(0xFFFFFFFF, predicate);
+        };
+        auto inter_warp_lambda =
+            [] (details::internal_thread_block_tile<numWarps, WarpType>& subwarp, int* thread_scratch_location) {
+                *thread_scratch_location = __all_sync(0xFFFFFFFFU >> (32 - numWarps), *thread_scratch_location);
+        };
+        return collectives_scheme<int>(warp_lambda, inter_warp_lambda);
+    }
+};
+
+
+template <unsigned int Size, typename ParentT = void>
+class __multi_warp_thread_block_tile :
+    public __static_size_multi_warp_tile_base<Size>,
+    public __static_parent_thread_block_tile_base<Size, ParentT>
+{
+    typedef __static_parent_thread_block_tile_base<Size, ParentT> staticParentBaseT;
+    typedef __static_size_multi_warp_tile_base<Size> staticTileBaseT;
+protected:
+    _CG_QUALIFIER __multi_warp_thread_block_tile(const ParentT& g) :
+        __static_size_multi_warp_tile_base<Size>(g) {}
+};
+
+template <unsigned int Size>
+class __multi_warp_thread_block_tile<Size, void> : public __static_size_multi_warp_tile_base<Size>
+{
+    const unsigned int metaGroupRank;
+    const unsigned int metaGroupSize;
+
+protected:
+    template <unsigned int OtherSize, typename ParentT>
+    _CG_QUALIFIER __multi_warp_thread_block_tile(const __multi_warp_thread_block_tile<OtherSize, ParentT>& g) :
+        __static_size_multi_warp_tile_base<Size>(g), metaGroupRank(g.meta_group_rank()), metaGroupSize(g.meta_group_size()) {}
+
+public:
+    _CG_QUALIFIER unsigned int meta_group_rank() const {
+        return metaGroupRank;
+    }
+
+    _CG_QUALIFIER unsigned int meta_group_size() const {
+        return metaGroupSize;
+    }
+};
+#endif
+
+template <unsigned int Size, typename ParentT = void>
+class thread_block_tile;
+
+namespace details {
+    template <unsigned int Size, typename ParentT, bool IsMultiWarp>
+    class thread_block_tile_impl;
+
+    template <unsigned int Size, typename ParentT>
+    class thread_block_tile_impl<Size, ParentT, false>: public __single_warp_thread_block_tile<Size, ParentT>
+    {
+    protected:
+        template <unsigned int OtherSize, typename OtherParentT, bool OtherIsMultiWarp>
+        _CG_QUALIFIER thread_block_tile_impl(const thread_block_tile_impl<OtherSize, OtherParentT, OtherIsMultiWarp>& g) :
+            __single_warp_thread_block_tile<Size, ParentT>(g.meta_group_rank(), g.meta_group_size()) {}
+
+        _CG_QUALIFIER thread_block_tile_impl(const thread_block& g) :
+            __single_warp_thread_block_tile<Size, ParentT>() {}
+    };
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    template <unsigned int Size, typename ParentT>
+    class thread_block_tile_impl<Size, ParentT, true> : public __multi_warp_thread_block_tile<Size, ParentT>
+    {
+        protected:
+        template <typename GroupT>
+        _CG_QUALIFIER thread_block_tile_impl(const GroupT& g) :
+            __multi_warp_thread_block_tile<Size, ParentT>(g) {}
+    };
+#else
+    template <unsigned int Size, typename ParentT>
+    class thread_block_tile_impl<Size, ParentT, true> 
+    {
+        protected:
+        template <typename GroupT>
+        _CG_QUALIFIER thread_block_tile_impl(const GroupT& g) {}
+    };
+#endif
+}
+
+template <unsigned int Size, typename ParentT>
+class thread_block_tile : public details::thread_block_tile_impl<Size, ParentT, details::_is_multi_warp<Size>::value>
+{
+    friend _CG_QUALIFIER thread_block_tile<1, void> this_thread();
+
+protected:
+    _CG_QUALIFIER thread_block_tile(const ParentT& g) :
+        details::thread_block_tile_impl<Size, ParentT, details::_is_multi_warp<Size>::value>(g) {}
+
+public:
+    _CG_QUALIFIER operator thread_block_tile<Size, void>() const {
+        return thread_block_tile<Size, void>(*this);
+    }
+};
+
+template <unsigned int Size>
+class thread_block_tile<Size, void> : public details::thread_block_tile_impl<Size, void, details::_is_multi_warp<Size>::value>
+{
+    template <unsigned int, typename ParentT>
+    friend class thread_block_tile;
+
+protected:
+    template <unsigned int OtherSize, typename OtherParentT>
+    _CG_QUALIFIER thread_block_tile(const thread_block_tile<OtherSize, OtherParentT>& g) :
+        details::thread_block_tile_impl<Size, void, details::_is_multi_warp<Size>::value>(g) {}
+
+public:
+    template <typename ParentT>
+    _CG_QUALIFIER thread_block_tile(const thread_block_tile<Size, ParentT>& g) :
+        details::thread_block_tile_impl<Size, void, details::_is_multi_warp<Size>::value>(g) {}
+};
+
+namespace details {
+    template <unsigned int Size, typename ParentT>
+    struct tiled_partition_impl;
+
+    template <unsigned int Size>
+    struct tiled_partition_impl<Size, thread_block> : public thread_block_tile<Size, thread_block> {
+        _CG_QUALIFIER tiled_partition_impl(const thread_block& g) :
+            thread_block_tile<Size, thread_block>(g) {}
+    };
+
+    // ParentT = static thread_block_tile<ParentSize, GrandParent> specialization
+    template <unsigned int Size, unsigned int ParentSize, typename GrandParent>
+    struct tiled_partition_impl<Size, thread_block_tile<ParentSize, GrandParent> > :
+        public thread_block_tile<Size, thread_block_tile<ParentSize, GrandParent> > {
+#ifdef _CG_CPP11_FEATURES
+        static_assert(Size < ParentSize, "Tile size bigger or equal to the parent group size");
+#endif
+        _CG_QUALIFIER tiled_partition_impl(const thread_block_tile<ParentSize, GrandParent>& g) :
+            thread_block_tile<Size, thread_block_tile<ParentSize, GrandParent> >(g) {}
+    };
+
+}
+
+namespace experimental {
+    template <unsigned int Size, typename ParentT>
+    _CG_QUALIFIER thread_block_tile<Size, ParentT> tiled_partition(const ParentT& g)
+    {
+#if defined(_CG_CPP11_FEATURES) && !defined(_CG_ABI_EXPERIMENTAL)
+        static_assert(details::_is_single_warp<Size>::value, "_CG_ABI_EXPERIMENTAL needs to be defined"
+                " before cooperative_groups header is included to enable experimental features");
+#endif
+        return details::tiled_partition_impl<Size, ParentT>(g);
+    }
+
+}
+
+template <unsigned int Size, typename ParentT>
+_CG_QUALIFIER thread_block_tile<Size, ParentT> tiled_partition(const ParentT& g)
+{
+#ifdef _CG_CPP11_FEATURES
+    static_assert(details::_is_single_warp<Size>::value, "Tiled partition with Size > 32 is supported only by"
+            " cooperative_groups::experimental::tiled_partition available with experimental features enabled");
+#endif
+    return details::tiled_partition_impl<Size, ParentT>(g);
+}
+
+/**
+ * thread_group this_thread()
+ *
+ * Constructs a generic thread_group containing only the calling thread
+ */
+_CG_QUALIFIER thread_block_tile<1, void> this_thread()
+{
+    // Make thread_block_tile<1, thread_block> parent of the returned group, so it will have its
+    // meta group rank and size set to 0 and 1 respectively.
+    return thread_block_tile<1, thread_block_tile<1, thread_block> >(this_thread_block());
+}
+
+/**
+ * <group_type>.sync()
+ *
+ * Executes a barrier across the group
+ *
+ * Implements both a compiler fence and an architectural fence to prevent,
+ * memory reordering around the barrier.
+ */
+_CG_QUALIFIER void thread_group::sync() const
+{
+    switch (_data.group.type) {
+    case details::coalesced_group_id:
+        cooperative_groups::sync(*static_cast<const coalesced_group*>(this));
+        break;
+    case details::thread_block_id:
+        cooperative_groups::sync(*static_cast<const thread_block*>(this));
+        break;
+    case details::grid_group_id:
+        cooperative_groups::sync(*static_cast<const grid_group*>(this));
+        break;
+#if defined(_CG_HAS_MULTI_GRID_GROUP) && defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    case details::multi_grid_group_id:
+        cooperative_groups::sync(*static_cast<const multi_grid_group*>(this));
+        break;
+#endif
+#if defined(_CG_HAS_CLUSTER_GROUP)
+    case details::cluster_group_id:
+        cooperative_groups::sync(*static_cast<const cluster_group*>(this));
+        break;
+#endif
+    default:
+        break;
+    }
+}
+
+/**
+ * <group_type>.size()
+ *
+ * Returns the total number of threads in the group.
+ */
+_CG_QUALIFIER unsigned long long thread_group::size() const
+{
+    unsigned long long size = 0;
+    switch (_data.group.type) {
+    case details::coalesced_group_id:
+        size = cooperative_groups::group_size(*static_cast<const coalesced_group*>(this));
+        break;
+    case details::thread_block_id:
+        size = cooperative_groups::group_size(*static_cast<const thread_block*>(this));
+        break;
+    case details::grid_group_id:
+        size = cooperative_groups::group_size(*static_cast<const grid_group*>(this));
+        break;
+#if defined(_CG_HAS_MULTI_GRID_GROUP) && defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    case details::multi_grid_group_id:
+        size = cooperative_groups::group_size(*static_cast<const multi_grid_group*>(this));
+        break;
+#endif
+#if defined(_CG_HAS_CLUSTER_GROUP)
+    case details::cluster_group_id:
+        size = cooperative_groups::group_size(*static_cast<const cluster_group*>(this));
+        break;
+#endif
+    default:
+        break;
+    }
+    return size;
+}
+
+/**
+ * <group_type>.thread_rank()
+ *
+ * Returns the linearized rank of the calling thread along the interval [0, size()).
+ */
+_CG_QUALIFIER unsigned long long thread_group::thread_rank() const
+{
+    unsigned long long rank = 0;
+    switch (_data.group.type) {
+    case details::coalesced_group_id:
+        rank = cooperative_groups::thread_rank(*static_cast<const coalesced_group*>(this));
+        break;
+    case details::thread_block_id:
+        rank = cooperative_groups::thread_rank(*static_cast<const thread_block*>(this));
+        break;
+    case details::grid_group_id:
+        rank = cooperative_groups::thread_rank(*static_cast<const grid_group*>(this));
+        break;
+#if defined(_CG_HAS_MULTI_GRID_GROUP) && defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    case details::multi_grid_group_id:
+        rank = cooperative_groups::thread_rank(*static_cast<const multi_grid_group*>(this));
+        break;
+#endif
+#if defined(_CG_HAS_CLUSTER_GROUP)
+    case details::cluster_group_id:
+        rank = cooperative_groups::thread_rank(*static_cast<const cluster_group*>(this));
+        break;
+#endif
+    default:
+        break;
+    }
+    return rank;
+}
+
+_CG_END_NAMESPACE
+
+#include <cooperative_groups/details/partitioning.h>
+
+# endif /* ! (__cplusplus, __CUDACC__) */
+
+#endif /* !_COOPERATIVE_GROUPS_H_ */
diff --git a/ext/cudart/include/cooperative_groups/details/async.h b/ext/cudart/include/cooperative_groups/details/async.h
new file mode 100644
index 00000000..1b7dcb24
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/async.h
@@ -0,0 +1,452 @@
+/* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * The source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * The Licensed Deliverables contained herein are PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CG_ASYNC_H
+#define _CG_ASYNC_H
+
+#include "helpers.h"
+#include "info.h"
+
+#include <cuda_pipeline.h>
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+// Groups supported by memcpy_async
+template <class TyGroup>
+struct _async_copy_group_supported : public _CG_STL_NAMESPACE::false_type {};
+
+template <unsigned int Sz, typename TyPar>
+struct _async_copy_group_supported<cooperative_groups::thread_block_tile<Sz, TyPar>>
+    : public _CG_STL_NAMESPACE::true_type {};
+template <>
+struct _async_copy_group_supported<cooperative_groups::coalesced_group> : public _CG_STL_NAMESPACE::true_type {};
+template <>
+struct _async_copy_group_supported<cooperative_groups::thread_block> : public _CG_STL_NAMESPACE::true_type {};
+
+template <class TyGroup>
+using async_copy_group_supported = _async_copy_group_supported<details::remove_qual<TyGroup>>;
+
+// Groups that require optimization
+template <class TyGroup>
+struct _async_copy_optimize_tile : public _CG_STL_NAMESPACE::false_type {};
+
+template <typename TyPar>
+struct _async_copy_optimize_tile<cooperative_groups::thread_block_tile<1, TyPar>>
+    : public _CG_STL_NAMESPACE::false_type {};
+
+template <unsigned int Sz, typename TyPar>
+struct _async_copy_optimize_tile<cooperative_groups::thread_block_tile<Sz, TyPar>>
+    : public _CG_STL_NAMESPACE::true_type {};
+
+template <class TyGroup>
+using async_copy_optimize_tile = _async_copy_optimize_tile<details::remove_qual<TyGroup>>;
+
+// SFINAE helpers for tile optimizations
+template <class TyGroup>
+using enable_tile_optimization =
+    typename _CG_STL_NAMESPACE::enable_if<async_copy_optimize_tile<TyGroup>::value, void *>::type;
+
+template <class TyGroup>
+using disable_tile_optimization =
+    typename _CG_STL_NAMESPACE::enable_if<!async_copy_optimize_tile<TyGroup>::value, void *>::type;
+
+// Segment for punning to aligned types
+template <unsigned int N>
+struct _Segment {
+    int _seg[N];
+};
+
+// Trivial layout guaranteed-aligned copy-async compatible segments
+template <unsigned int N>
+struct Segment;
+template <>
+struct __align__(4) Segment<1> : public _Segment<1>{};
+template <>
+struct __align__(8) Segment<2> : public _Segment<2>{};
+template <>
+struct __align__(16) Segment<4> : public _Segment<4>{};
+
+// Interleaved element by element copies from source to dest
+template <typename TyGroup, typename TyElem>
+_CG_STATIC_QUALIFIER void inline_copy(TyGroup &group, TyElem *__restrict__ dst, const TyElem *__restrict__ src,
+                                      size_t count) {
+    const unsigned int rank = group.thread_rank();
+    const unsigned int stride = group.size();
+
+    for (size_t idx = rank; idx < count; idx += stride) {
+        dst[idx] = src[idx];
+    }
+}
+
+template <typename TyGroup, typename TyElem, enable_tile_optimization<TyGroup> = nullptr>
+_CG_STATIC_QUALIFIER void accelerated_async_copy(TyGroup &group, TyElem *__restrict__ dst,
+                                                 const TyElem *__restrict__ src, size_t count) {
+    static_assert(async_copy_group_supported<TyGroup>::value,
+                  "Async copy is only supported for groups that represent private shared memory");
+
+    if (count == 0) {
+        return;
+    }
+
+    const bool dstIsNotShared = !__isShared(dst);
+    const bool srcIsNotGlobal = !__isGlobal(src);
+
+    if (dstIsNotShared || srcIsNotGlobal) {
+        inline_copy(group, dst, src, count);
+        return;
+    }
+
+    const unsigned int stride = group.size();
+    const unsigned int rank = group.thread_rank();
+    // Efficient copies require warps to operate on the same amount of work at each step.
+    // remainders are handled in a separate stage to prevent branching
+    const unsigned int subWarpMask = (stride - 1);
+    const unsigned int subwarpCopies = (subWarpMask & (unsigned int)count);
+    const unsigned int maxSubwarpRank = min(rank, subwarpCopies - 1);
+
+    const size_t warpCopies = (count & (~subWarpMask));
+
+    for (size_t idx = 0; idx < warpCopies; idx += stride) {
+        size_t _srcIdx = rank + idx;
+        size_t _dstIdx = rank + idx;
+        __pipeline_memcpy_async(dst + _dstIdx, src + _srcIdx, sizeof(TyElem));
+    }
+
+    if (subwarpCopies) {
+        size_t _srcIdx = warpCopies + maxSubwarpRank;
+        size_t _dstIdx = warpCopies + maxSubwarpRank;
+        __pipeline_memcpy_async(dst + _dstIdx, src + _srcIdx, sizeof(TyElem));
+    }
+}
+
+template <typename TyGroup, typename TyElem, disable_tile_optimization<TyGroup> = nullptr>
+_CG_STATIC_QUALIFIER void accelerated_async_copy(TyGroup &group, TyElem *__restrict__ dst,
+                                                 const TyElem *__restrict__ src, size_t count) {
+    static_assert(async_copy_group_supported<TyGroup>::value,
+                  "Async copy is only supported for groups that represent private shared memory");
+
+    const bool dstIsNotShared = !__isShared(dst);
+    const bool srcIsNotGlobal = !__isGlobal(src);
+
+    if (dstIsNotShared || srcIsNotGlobal) {
+        inline_copy(group, dst, src, count);
+        return;
+    }
+
+    unsigned int stride = group.size();
+    unsigned int rank = group.thread_rank();
+
+    for (size_t idx = rank; idx < count; idx += stride) {
+        size_t _srcIdx = idx;
+        size_t _dstIdx = idx;
+        __pipeline_memcpy_async(dst + _dstIdx, src + _srcIdx, sizeof(TyElem));
+    }
+}
+
+// Determine best possible alignment given an input and initial conditions
+// Attempts to generate as little code as possible, most likely should only be used with 1 and 2 byte alignments
+template <unsigned int MinAlignment, unsigned int MaxAlignment>
+_CG_STATIC_QUALIFIER uint32_t find_best_alignment(void *__restrict__ dst, const void *__restrict__ src) {
+    // Narrowing conversion intentional
+    uint32_t base1 = (uint32_t) reinterpret_cast<uintptr_t>(src);
+    uint32_t base2 = (uint32_t) reinterpret_cast<uintptr_t>(dst);
+
+    uint32_t diff = ((base1) ^ (base2)) & (MaxAlignment - 1);
+
+    // range [MaxAlignment, alignof(elem)], step: x >> 1
+    // over range of possible alignments, choose best available out of range
+    uint32_t out = MaxAlignment;
+#pragma unroll
+    for (uint32_t alignment = (MaxAlignment >> 1); alignment >= MinAlignment; alignment >>= 1) {
+        if (alignment & diff)
+            out = alignment;
+    }
+
+    return out;
+}
+
+// Determine best possible alignment given an input and initial conditions
+// Attempts to generate as little code as possible, most likely should only be used with 1 and 2 byte alignments
+template <typename TyType, typename TyGroup>
+_CG_STATIC_QUALIFIER void copy_like(const TyGroup &group, void *__restrict__ _dst, const void *__restrict__ _src,
+                                    size_t count) {
+    const char *src = reinterpret_cast<const char *>(_src);
+    char *dst = reinterpret_cast<char *>(_dst);
+
+    constexpr uint32_t targetAlignment = (uint32_t)alignof(TyType);
+
+    uint32_t base = (uint32_t) reinterpret_cast<uintptr_t>(src);
+    uint32_t alignOffset = ((~base) + 1) & (targetAlignment - 1);
+
+    inline_copy(group, dst, src, alignOffset);
+    count -= alignOffset;
+    src += alignOffset;
+    dst += alignOffset;
+
+    // Copy using the best available alignment, async_copy expects n-datums, not bytes
+    size_t asyncCount = count / sizeof(TyType);
+    accelerated_async_copy(group, reinterpret_cast<TyType *>(dst), reinterpret_cast<const TyType *>(src), asyncCount);
+    asyncCount *= sizeof(TyType);
+
+    count -= asyncCount;
+    src += asyncCount;
+    dst += asyncCount;
+    inline_copy(group, dst, src, count);
+}
+
+// We must determine alignment and manually align src/dst ourselves
+template <size_t AlignHint>
+struct _memcpy_async_align_dispatch {
+    template <typename TyGroup>
+    _CG_STATIC_QUALIFIER void copy(TyGroup &group, void *__restrict__ dst, const void *__restrict__ src, size_t count) {
+        uint32_t alignment = find_best_alignment<AlignHint, 16>(dst, src);
+
+        // Avoid copying the extra bytes if desired copy count is smaller
+        alignment = count < alignment ? AlignHint : alignment;
+
+        switch (alignment) {
+        default:
+        case 1:
+            inline_copy(group, reinterpret_cast<char *>(dst), reinterpret_cast<const char *>(src), count);
+            break;
+        case 2:
+            inline_copy(group, reinterpret_cast<short *>(dst), reinterpret_cast<const short *>(src), count >> 1);
+            break;
+        case 4:
+            copy_like<Segment<1>>(group, dst, src, count);
+            break;
+        case 8:
+            copy_like<Segment<2>>(group, dst, src, count);
+            break;
+        case 16:
+            copy_like<Segment<4>>(group, dst, src, count);
+            break;
+        }
+    }
+};
+
+// Specialization for 4 byte alignments
+template <>
+struct _memcpy_async_align_dispatch<4> {
+    template <typename TyGroup>
+    _CG_STATIC_QUALIFIER void copy(TyGroup &group, void *__restrict__ _dst, const void *__restrict__ _src,
+                                   size_t count) {
+        const Segment<1> *src = reinterpret_cast<const Segment<1> *>(_src);
+        Segment<1> *dst = reinterpret_cast<Segment<1> *>(_dst);
+
+        // Dispatch straight to aligned LDGSTS calls
+        accelerated_async_copy(group, dst, src, count / sizeof(*dst));
+    }
+};
+
+// Specialization for 8 byte alignments
+template <>
+struct _memcpy_async_align_dispatch<8> {
+    template <typename TyGroup>
+    _CG_STATIC_QUALIFIER void copy(TyGroup &group, void *__restrict__ _dst, const void *__restrict__ _src,
+                                   size_t count) {
+        const Segment<2> *src = reinterpret_cast<const Segment<2> *>(_src);
+        Segment<2> *dst = reinterpret_cast<Segment<2> *>(_dst);
+
+        // Dispatch straight to aligned LDGSTS calls
+        accelerated_async_copy(group, dst, src, count / sizeof(*dst));
+    }
+};
+
+// Alignments over 16 are truncated to 16 and bypass alignment
+// This is the highest performing memcpy available
+template <>
+struct _memcpy_async_align_dispatch<16> {
+    template <typename TyGroup>
+    _CG_STATIC_QUALIFIER void copy(TyGroup &group, void *__restrict__ _dst, const void *__restrict__ _src,
+                                   size_t count) {
+        const Segment<4> *src = reinterpret_cast<const Segment<4> *>(_src);
+        Segment<4> *dst = reinterpret_cast<Segment<4> *>(_dst);
+
+        // Dispatch straight to aligned LDGSTS calls
+        accelerated_async_copy(group, dst, src, count / sizeof(*dst));
+    }
+};
+
+// byte-wide API
+template <size_t Alignment, class TyGroup>
+_CG_STATIC_QUALIFIER void _memcpy_async_dispatch_to_aligned_copy(const TyGroup &group, void *__restrict__ _dst,
+                                                                 const void *__restrict__ _src, size_t count) {
+    static_assert(!(Alignment & (Alignment - 1)), "Known static alignment dispatch must be a power of 2");
+    details::_memcpy_async_align_dispatch<Alignment>::copy(group, _dst, _src, count);
+}
+
+// Internal dispatch APIs
+// These deduce the alignments and sizes necessary to invoke the underlying copy engine
+template <typename Ty>
+using is_void = _CG_STL_NAMESPACE::is_same<Ty, void>;
+
+template <typename Ty>
+using enable_if_not_void = typename _CG_STL_NAMESPACE::enable_if<!is_void<Ty>::value, void *>::type;
+
+template <typename Ty>
+using enable_if_void = typename _CG_STL_NAMESPACE::enable_if<is_void<Ty>::value, void *>::type;
+
+template <typename Ty>
+using enable_if_integral =
+    typename _CG_STL_NAMESPACE::enable_if<_CG_STL_NAMESPACE::is_integral<Ty>::value, void *>::type;
+
+// byte-wide API using aligned_sized_t
+template <class TyGroup, template <size_t> typename Alignment, size_t Hint>
+_CG_STATIC_QUALIFIER void _memcpy_async_bytes(const TyGroup &group, void *__restrict__ _dst,
+                                              const void *__restrict__ _src, const Alignment<Hint> &count) {
+    constexpr size_t _align = (Hint > 16) ? 16 : Hint;
+
+    details::_memcpy_async_dispatch_to_aligned_copy<_align>(group, _dst, _src, (size_t)count);
+}
+
+// byte-wide API using type for aligment
+template <class TyGroup, typename TyElem, typename TySize, size_t Hint = alignof(TyElem),
+          enable_if_not_void<TyElem> = nullptr, enable_if_integral<TySize> = nullptr>
+_CG_STATIC_QUALIFIER void _memcpy_async_bytes(const TyGroup &group, TyElem *__restrict__ _dst,
+                                              const TyElem *__restrict__ _src, const TySize& count) {
+    constexpr size_t _align = (Hint > 16) ? 16 : Hint;
+
+    details::_memcpy_async_dispatch_to_aligned_copy<_align>(group, _dst, _src, count);
+}
+
+// byte-wide API with full alignment deduction required
+template <class TyGroup, typename TyElem, typename TySize, enable_if_void<TyElem> = nullptr,
+          enable_if_integral<TySize> = nullptr>
+_CG_STATIC_QUALIFIER void _memcpy_async_bytes(const TyGroup &group, TyElem *__restrict__ _dst,
+                                              const TyElem *__restrict__ _src, const TySize& count) {
+    details::_memcpy_async_dispatch_to_aligned_copy<1>(group, _dst, _src, count);
+}
+
+// 1d-datum API
+template <class TyGroup, typename TyElem, size_t Hint = alignof(TyElem)>
+_CG_STATIC_QUALIFIER void _memcpy_async_datum(const TyGroup &group, TyElem *__restrict__ dst, const size_t dstCount,
+                                              const TyElem *__restrict__ src, const size_t srcCount) {
+    constexpr unsigned int _align = Hint;
+    const size_t totalCount = min(dstCount, srcCount) * sizeof(TyElem);
+
+    details::_memcpy_async_dispatch_to_aligned_copy<_align>(group, dst, src, totalCount);
+}
+
+// 1d-datum API using aligned_size_t
+template <class TyGroup, typename TyElem, template <size_t> typename Alignment, size_t Hint>
+_CG_STATIC_QUALIFIER void _memcpy_async_datum(const TyGroup &group, TyElem *__restrict__ dst, const Alignment<Hint> &dstCount,
+                                              const TyElem *__restrict__ src, const Alignment<Hint> &srcCount) {
+    constexpr unsigned int _align = Hint;
+    const size_t totalCount = min((size_t)dstCount, (size_t)srcCount) * sizeof(TyElem);
+
+    details::_memcpy_async_dispatch_to_aligned_copy<_align>(group, dst, src, totalCount);
+}
+
+} // namespace details
+
+/*
+ * Group submit batch of async-copy to cover contiguous 1D array
+ * and commit that batch to eventually wait for completion.
+ */
+template <class TyGroup, typename TyElem, typename TySizeT>
+_CG_STATIC_QUALIFIER void memcpy_async(const TyGroup &group, TyElem *__restrict__ _dst, const TyElem *__restrict__ _src,
+                                       const TySizeT &count) {
+    details::_memcpy_async_bytes(group, _dst, _src, count);
+    __pipeline_commit();
+}
+
+/*
+ * Group submit batch of async-copy to cover contiguous 1D array
+ * and commit that batch to eventually wait for completion.
+ * Object counts are in datum sized chunks, not bytes.
+ */
+template <class TyGroup, class TyElem, typename DstLayout, typename SrcLayout>
+_CG_STATIC_QUALIFIER void memcpy_async(const TyGroup &group, TyElem *__restrict__ dst, const DstLayout &dstLayout,
+                                       const TyElem *__restrict__ src, const SrcLayout &srcLayout) {
+    details::_memcpy_async_datum(group, dst, dstLayout, src, srcLayout);
+    __pipeline_commit();
+}
+
+/* Group wait for prior Nth stage of memcpy_async to complete. */
+template <unsigned int Stage, class TyGroup>
+_CG_STATIC_QUALIFIER void wait_prior(const TyGroup &group) {
+    __pipeline_wait_prior(Stage);
+    group.sync();
+}
+
+/* Group wait all previously submitted memcpy_async to complete. */
+template <class TyGroup>
+_CG_STATIC_QUALIFIER void wait(const TyGroup &group) {
+    __pipeline_wait_prior(0);
+    group.sync();
+}
+
+/***************** CG APIs including pipeline are deprecated *****************/
+
+/* Group submit batch of async-copy to cover of contiguous 1D array
+   to a pipeline and commit the batch*/
+template <class TyGroup, class TyElem>
+_CG_DEPRECATED _CG_STATIC_QUALIFIER void memcpy_async(TyGroup &group, TyElem *dst, size_t dstCount, const TyElem *src, size_t srcCount,
+                                       nvcuda::experimental::pipeline &pipe) {
+    details::_memcpy_async_datum(group, dst, dstCount, src, srcCount);
+    pipe.commit();
+}
+
+/* Group wait for prior Nth stage of memcpy_async to complete. */
+template <unsigned int Stage, class TyGroup>
+_CG_DEPRECATED _CG_STATIC_QUALIFIER void wait_prior(TyGroup &group, nvcuda::experimental::pipeline &pipe) {
+    pipe.wait_prior<Stage>();
+    group.sync();
+}
+
+/* Group wait for stage-S of memcpy_async to complete. */
+template <class TyGroup>
+_CG_DEPRECATED _CG_STATIC_QUALIFIER void wait(TyGroup &group, nvcuda::experimental::pipeline &pipe, size_t stage) {
+    pipe.wait(stage);
+    group.sync();
+}
+_CG_END_NAMESPACE
+
+#endif // _CG_ASYNC_H
diff --git a/ext/cudart/include/cooperative_groups/details/coalesced_reduce.h b/ext/cudart/include/cooperative_groups/details/coalesced_reduce.h
new file mode 100644
index 00000000..c3722fb5
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/coalesced_reduce.h
@@ -0,0 +1,108 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_COALESCED_REDUCE_H_
+#define _CG_COALESCED_REDUCE_H_
+
+#include "info.h"
+#include "helpers.h"
+#include "cooperative_groups.h"
+#include "partitioning.h"
+#include "coalesced_scan.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+
+template <typename TyVal, typename TyOp>
+_CG_QUALIFIER auto coalesced_reduce_to_one(const coalesced_group& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+    if (group.size() == 32) {
+        auto out = val;
+        for (int offset = group.size() >> 1; offset > 0; offset >>= 1) {
+            out = op(out, group.shfl_up(out, offset));
+        }
+        return out;
+    }
+    else {
+        auto scan_result =
+            inclusive_scan_non_contiguous(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+        return scan_result;
+    }
+}
+
+template <typename TyVal, typename TyOp>
+_CG_QUALIFIER auto coalesced_reduce(const coalesced_group& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+    auto out = coalesced_reduce_to_one(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+    if (group.size() == 32) {
+        return group.shfl(out, 31);
+    }
+    else {
+        unsigned int group_mask = _coalesced_group_data_access::get_mask(group);
+        unsigned int last_thread_id = 31 - __clz(group_mask);
+        return details::tile::shuffle_dispatch<TyVal>::shfl(
+            _CG_STL_NAMESPACE::forward<TyVal>(out), group_mask, last_thread_id, 32);
+    }
+}
+
+template <typename TyVal, typename TyOp, unsigned int TySize, typename ParentT>
+_CG_QUALIFIER auto coalesced_reduce(const __single_warp_thread_block_tile<TySize, ParentT>& group, 
+                                    TyVal&& val,
+                                    TyOp&& op) -> decltype(op(val, val)) {
+    auto out = val;
+    for (int mask = TySize >> 1; mask > 0; mask >>= 1) {
+        out = op(out, group.shfl_xor(out, mask));
+    }
+
+    return out;
+}
+
+} // details
+
+_CG_END_NAMESPACE
+
+#endif // _CG_COALESCED_REDUCE_H_
diff --git a/ext/cudart/include/cooperative_groups/details/coalesced_scan.h b/ext/cudart/include/cooperative_groups/details/coalesced_scan.h
new file mode 100644
index 00000000..383f4bde
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/coalesced_scan.h
@@ -0,0 +1,174 @@
+/* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_COALESCED_SCAN_H_
+#define _CG_COALESCED_SCAN_H_
+
+#include "info.h"
+#include "helpers.h"
+#include "cooperative_groups.h"
+#include "partitioning.h"
+#include "functional.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+
+template <typename TyGroup, typename TyVal, typename TyOp>
+_CG_QUALIFIER auto inclusive_scan_contiguous(const TyGroup& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+    auto out = val;
+    for (int mask = 1; mask < group.size(); mask <<= 1) {
+        auto tmp = group.shfl_up(out, mask);
+        if (mask <= group.thread_rank()) {
+            out = op(out, tmp);
+        }
+    }
+
+    return out;
+}
+
+template <typename TyGroup, typename TyVal, typename TyOp>
+_CG_QUALIFIER auto inclusive_scan_non_contiguous(const TyGroup& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+    const unsigned int groupSize = group.size();
+    auto out = val;
+
+    const unsigned int mask = details::_coalesced_group_data_access::get_mask(group);
+    unsigned int lanemask = details::lanemask32_lt() & mask;
+    unsigned int srcLane = details::laneid();
+
+    const unsigned int base = __ffs(mask)-1; /* lane with rank == 0 */
+    const unsigned int rank = __popc(lanemask);
+
+    for (unsigned int i = 1, j = 1; i < groupSize; i <<= 1) {
+        if (i <= rank) {
+            srcLane -= j;
+            j = i; /* maximum possible lane */
+
+            unsigned int begLane = base + rank - i; /* minimum possible lane */
+
+            /*  Next source lane is in the range [ begLane .. srcLane ]
+                *  If begLane < srcLane then do a binary search.
+                */
+            while (begLane < srcLane) {
+                const unsigned int halfLane = (begLane + srcLane) >> 1;
+                const unsigned int halfMask = lanemask >> halfLane;
+                const unsigned int d = __popc(halfMask);
+                if (d < i) {
+                    srcLane = halfLane - 1; /* halfLane too large */
+                }
+                else if ((i < d) || !(halfMask & 0x01)) {
+                    begLane = halfLane + 1; /* halfLane too small */
+                }
+                else {
+                    begLane = srcLane = halfLane; /* happen to hit */
+                }
+            }
+        }
+
+        auto tmp = details::tile::shuffle_dispatch<TyVal>::shfl(out, mask, srcLane, 32);
+        if (i <= rank) {
+            out = op(out, tmp);
+        }
+    }
+    return out;
+}
+
+template <unsigned int TySize, typename ParentT, typename TyVal, typename TyOp>
+_CG_QUALIFIER auto coalesced_inclusive_scan(const __single_warp_thread_block_tile<TySize, ParentT>& group,
+                                            TyVal&& val,
+                                            TyOp&& op) -> decltype(op(val, val)) {
+    return inclusive_scan_contiguous(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+}
+
+template <typename TyVal, typename TyOp>
+_CG_QUALIFIER auto coalesced_inclusive_scan(const coalesced_group& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+    if (group.size() == 32) {
+        return inclusive_scan_contiguous(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+    }
+    else {
+        return inclusive_scan_non_contiguous(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+    }
+}
+
+template <bool IntegralOptimized>
+struct scan_choose_convertion;
+
+template<>
+struct scan_choose_convertion<true> {
+    template <typename TyGroup, typename TyRes, typename TyVal>
+    _CG_STATIC_QUALIFIER details::remove_qual<TyVal> convert_inclusive_to_exclusive(const TyGroup& group, TyRes& result, TyVal&& val) {
+        return result - val;
+    }
+};
+
+template<>
+struct scan_choose_convertion<false> {
+    template <typename TyGroup, typename TyRes, typename TyVal>
+    _CG_STATIC_QUALIFIER details::remove_qual<TyVal> convert_inclusive_to_exclusive(const TyGroup& group, TyRes& result, TyVal&& val) {
+        auto ret = group.shfl_up(result, 1);
+        if (group.thread_rank() == 0) {
+            return {};
+        }
+        else {
+            return ret;
+        }
+    }
+};
+
+template <typename TyGroup, typename TyRes, typename TyVal, typename TyFn>
+_CG_QUALIFIER auto convert_inclusive_to_exclusive(const TyGroup& group, TyRes& result, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+    using conversion = scan_choose_convertion<_CG_STL_NAMESPACE::is_same<remove_qual<TyFn>, cooperative_groups::plus<remove_qual<TyVal>>>::value
+                                 && _CG_STL_NAMESPACE::is_integral<remove_qual<TyVal>>::value>;
+    return conversion::convert_inclusive_to_exclusive(group, result, _CG_STL_NAMESPACE::forward<TyVal>(val));
+}
+
+} // details
+
+_CG_END_NAMESPACE
+
+#endif // _CG_COALESCED_SCAN_H_
\ No newline at end of file
diff --git a/ext/cudart/include/cooperative_groups/details/driver_abi.h b/ext/cudart/include/cooperative_groups/details/driver_abi.h
new file mode 100644
index 00000000..9c866fcf
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/driver_abi.h
@@ -0,0 +1,99 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_DRIVER_API_H
+#define _CG_DRIVER_API_H
+
+#include "info.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+    template <unsigned int RegId>
+    _CG_QUALIFIER unsigned int load_env_reg() {
+        // Abort by default
+        _CG_ABORT();
+        return 0;
+    }
+
+    template <unsigned int HiReg, unsigned int LoReg>
+    _CG_QUALIFIER unsigned long long load_env_reg64() {
+        unsigned long long registerLo = load_env_reg<LoReg>();
+        unsigned long long registerHi = load_env_reg<HiReg>();
+
+        return (registerHi << 32) | registerLo;
+    }
+
+// inline PTX for accessing registers requires an immediate for the special reg
+# define LOAD_ENVREG(NUMBER) \
+    template <> _CG_QUALIFIER unsigned int load_env_reg<NUMBER>() { \
+        unsigned int r; \
+        asm ("mov.u32 %0, %%envreg" #NUMBER ";" : "=r"(r)); \
+        return r; \
+    }
+
+    // Instantiate loaders for registers used
+    LOAD_ENVREG(0);
+    LOAD_ENVREG(1);
+    LOAD_ENVREG(2);
+# undef LOAD_ENVREG
+
+    struct grid_workspace {
+        unsigned int wsSize;
+        unsigned int barrier;
+    };
+
+    _CG_QUALIFIER grid_workspace* get_grid_workspace() {
+        unsigned long long gridWsAbiAddress = load_env_reg64<1, 2>();
+        // Interpret the address from envreg 1 and 2 as the driver's grid workspace
+        return (reinterpret_cast<grid_workspace*>(gridWsAbiAddress));
+    }
+}
+_CG_END_NAMESPACE
+
+#endif // _CG_DRIVER_API_H
diff --git a/ext/cudart/include/cooperative_groups/details/functional.h b/ext/cudart/include/cooperative_groups/details/functional.h
new file mode 100644
index 00000000..ca17d08a
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/functional.h
@@ -0,0 +1,207 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_FUNCTIONAL_H
+#define _CG_FUNCTIONAL_H
+
+#include "info.h"
+#include "helpers.h"
+
+#ifdef _CG_CPP11_FEATURES
+#ifdef _CG_USE_CUDA_STL
+# include <cuda/std/functional>
+#endif
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+#ifdef _CG_USE_CUDA_STL
+    using cuda::std::plus;
+    using cuda::std::bit_and;
+    using cuda::std::bit_xor;
+    using cuda::std::bit_or;
+#else
+    template <typename Ty> struct plus {__device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {return arg1 + arg2;}};
+    template <typename Ty> struct bit_and {__device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {return arg1 & arg2;}};
+    template <typename Ty> struct bit_xor {__device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {return arg1 ^ arg2;}};
+    template <typename Ty> struct bit_or {__device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {return arg1 | arg2;}};
+#endif // _CG_USE_PLATFORM_STL
+} // details
+
+template <typename Ty>
+struct plus : public details::plus<Ty> {};
+
+template <typename Ty>
+struct less {
+    __device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {
+        return (arg2 < arg1) ? arg2 : arg1;
+    }
+};
+
+template <typename Ty>
+struct greater {
+    __device__ __forceinline__ Ty operator()(Ty arg1, Ty arg2) const {
+        return (arg1 < arg2) ? arg2 : arg1;
+    }
+};
+
+template <typename Ty>
+struct bit_and : public details::bit_and<Ty> {};
+
+template <typename Ty>
+struct bit_xor : public details::bit_xor<Ty> {};
+
+template <typename Ty>
+struct bit_or : public details::bit_or<Ty> {};
+
+#if defined(_CG_HAS_STL_ATOMICS) && defined(_CG_ABI_EXPERIMENTAL)
+namespace details {
+    template <class Ty>
+    using _atomic_is_type_supported = _CG_STL_NAMESPACE::integral_constant<bool,
+            _CG_STL_NAMESPACE::is_integral<Ty>::value && (sizeof(Ty) == 4 || sizeof(Ty) == 8)>;
+
+    template <typename TyOp> struct _atomic_op_supported                                : public _CG_STL_NAMESPACE::false_type {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::plus<Ty>>    : public _atomic_is_type_supported<Ty> {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::less<Ty>>    : public _atomic_is_type_supported<Ty> {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::greater<Ty>> : public _atomic_is_type_supported<Ty> {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::bit_and<Ty>> : public _atomic_is_type_supported<Ty> {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::bit_or<Ty>>  : public _atomic_is_type_supported<Ty> {};
+    template <typename Ty> struct _atomic_op_supported<cooperative_groups::bit_xor<Ty>> : public _atomic_is_type_supported<Ty> {};
+
+    template<typename TyAtomic, typename TyVal, typename TyOp>
+    _CG_QUALIFIER remove_qual<TyVal> atomic_cas_fallback(TyAtomic&& atomic, TyVal&& val, TyOp&& op) {
+        remove_qual<TyVal> old = atomic;
+        while(!atomic.compare_exchange_weak(old, op(old, val)));
+        return old;
+    }
+
+    template<typename TyOp>
+    struct op_picker;
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::plus<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_add(val);
+        }
+    };
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::less<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_min(val);
+        }
+    };
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::greater<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_max(val);
+        }
+    };
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::bit_and<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_and(val);
+        }
+    };
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::bit_xor<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_xor(val);
+        }
+    };
+
+    template<typename TyVal>
+    struct op_picker<cooperative_groups::bit_or<TyVal>> {
+        template<typename TyAtomic>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val) {
+            return atomic.fetch_or(val);
+        }
+    };
+    
+    template<bool atomic_supported>
+    struct atomic_update_dispatch {};
+
+    template<>
+    struct atomic_update_dispatch<false> {
+        template<typename TyAtomic, typename TyVal, typename TyOp>
+        _CG_STATIC_QUALIFIER remove_qual<TyVal> atomic_update(TyAtomic& atomic, TyVal&& val, TyOp&& op) {
+            return atomic_cas_fallback(atomic, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+        }
+    };
+
+    template<>
+    struct atomic_update_dispatch<true> {
+        template<typename TyAtomic, typename TyVal, typename TyOp>
+        _CG_STATIC_QUALIFIER TyVal atomic_update(TyAtomic& atomic, TyVal val, TyOp&& op) {
+            using dispatch = op_picker<details::remove_qual<TyOp>>;
+
+            return dispatch::atomic_update(atomic, val);
+        }
+    };
+
+    template<typename TyAtomic, typename TyVal, typename TyOp>
+    _CG_QUALIFIER remove_qual<TyVal> atomic_update(TyAtomic& atomic, TyVal&& val, TyOp&& op) {
+        using dispatch = atomic_update_dispatch<_atomic_op_supported<details::remove_qual<TyOp>>::value>;
+
+        return dispatch::atomic_update(atomic, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+    }
+}
+#endif
+
+_CG_END_NAMESPACE
+
+#endif
+#endif //_CG_FUNCTIONAL_H
diff --git a/ext/cudart/include/cooperative_groups/details/helpers.h b/ext/cudart/include/cooperative_groups/details/helpers.h
new file mode 100644
index 00000000..3e4f98b4
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/helpers.h
@@ -0,0 +1,707 @@
+ /* Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _COOPERATIVE_GROUPS_HELPERS_H_
+# define _COOPERATIVE_GROUPS_HELPERS_H_
+
+#include "info.h"
+#include "sync.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+#ifdef _CG_CPP11_FEATURES
+    template <typename Ty> struct _is_float_or_half          : public _CG_STL_NAMESPACE::is_floating_point<Ty> {};
+# ifdef _CG_HAS_FP16_COLLECTIVE
+    template <>            struct _is_float_or_half<__half>  : public _CG_STL_NAMESPACE::true_type {};
+    template <>            struct _is_float_or_half<__half2> : public _CG_STL_NAMESPACE::true_type {};
+# endif
+    template <typename Ty>
+    using  is_float_or_half = _is_float_or_half<typename _CG_STL_NAMESPACE::remove_cv<Ty>::type>;
+
+    // Non-STL utility templates 
+    template <typename Ty>
+    using remove_qual = typename _CG_STL_NAMESPACE::remove_cv<typename _CG_STL_NAMESPACE::remove_reference<Ty>::type>::type;
+
+    template <typename TyLhs, typename TyRhs>
+    using is_op_type_same = _CG_STL_NAMESPACE::is_same<remove_qual<TyLhs>, remove_qual<TyRhs>
+    >;
+#endif
+
+    template <typename TyTrunc>
+    _CG_STATIC_QUALIFIER TyTrunc vec3_to_linear(dim3 index, dim3 nIndex) {
+        return ((TyTrunc)index.z * nIndex.y * nIndex.x) +
+               ((TyTrunc)index.y * nIndex.x) +
+                (TyTrunc)index.x;
+    }
+
+    namespace cta {
+
+        _CG_STATIC_QUALIFIER void sync()
+        {
+            __barrier_sync(0);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int num_threads()
+        {
+            return static_cast<unsigned int>(blockDim.x * blockDim.y * blockDim.z);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int thread_rank()
+        {
+            return vec3_to_linear<unsigned int>(threadIdx, blockDim);
+        }
+
+        _CG_STATIC_QUALIFIER dim3 group_index()
+        {
+            return dim3(blockIdx.x, blockIdx.y, blockIdx.z);
+        }
+
+        _CG_STATIC_QUALIFIER dim3 thread_index()
+        {
+            return dim3(threadIdx.x, threadIdx.y, threadIdx.z);
+        }
+
+        _CG_STATIC_QUALIFIER dim3 dim_threads()
+        {
+            return dim3(blockDim.x, blockDim.y, blockDim.z);
+        }
+
+        // Legacy aliases
+        _CG_STATIC_QUALIFIER unsigned int size()
+        {
+            return num_threads();
+        }
+
+        _CG_STATIC_QUALIFIER dim3 block_dim()
+        {
+            return dim_threads();
+        }
+
+    };
+
+    class _coalesced_group_data_access {
+    public:
+        // Retrieve mask of coalesced groups
+        template <typename TyGroup>
+        _CG_STATIC_QUALIFIER unsigned int get_mask(const TyGroup &group) {
+            return group.get_mask();
+        }
+
+        // Retrieve mask of tiles
+        template <template <typename, typename> typename TyGroup, typename Sz, typename Parent>
+        _CG_STATIC_QUALIFIER unsigned int get_mask(const TyGroup<Sz, Parent> &group) {
+            return group.build_maks();
+        }
+
+        template <typename TyGroup>
+        _CG_STATIC_QUALIFIER TyGroup construct_from_mask(unsigned int mask) {
+            return TyGroup(mask);
+        }
+
+        template <typename TyGroup>
+        _CG_STATIC_QUALIFIER void modify_meta_group(TyGroup &group, unsigned int mgRank, unsigned int mgSize) {
+            group._data.coalesced.metaGroupRank = mgRank;
+            group._data.coalesced.metaGroupSize = mgSize;
+        }
+    };
+
+    namespace tile {
+        template <unsigned int TileCount, unsigned int TileMask, unsigned int LaneMask, unsigned int ShiftCount>
+        struct _tile_helpers{
+            _CG_STATIC_CONST_DECL unsigned int tileCount = TileCount;
+            _CG_STATIC_CONST_DECL unsigned int tileMask = TileMask;
+            _CG_STATIC_CONST_DECL unsigned int laneMask = LaneMask;
+            _CG_STATIC_CONST_DECL unsigned int shiftCount = ShiftCount;
+        };
+
+        template <unsigned int> struct tile_helpers;
+        template <> struct tile_helpers<32> : public _tile_helpers<1,  0xFFFFFFFF, 0x1F, 5> {};
+        template <> struct tile_helpers<16> : public _tile_helpers<2,  0x0000FFFF, 0x0F, 4> {};
+        template <> struct tile_helpers<8>  : public _tile_helpers<4,  0x000000FF, 0x07, 3> {};
+        template <> struct tile_helpers<4>  : public _tile_helpers<8,  0x0000000F, 0x03, 2> {};
+        template <> struct tile_helpers<2>  : public _tile_helpers<16, 0x00000003, 0x01, 1> {};
+        template <> struct tile_helpers<1>  : public _tile_helpers<32, 0x00000001, 0x00, 0> {};
+
+#ifdef _CG_CPP11_FEATURES
+        namespace shfl {
+            /***********************************************************************************
+             * Recursively Sliced Shuffle
+             *  Purpose:
+             *      Slices an input type a number of times into integral types so that shuffles
+             *      are well defined
+             *  Expectations:
+             *      This object *should not* be used from a reinterpret_cast pointer unless
+             *      some alignment guarantees can be met. Use a memcpy to guarantee that loads
+             *      from the integral types stored within are aligned and correct.
+             **********************************************************************************/
+            template <unsigned int count, bool intSized = (count <= sizeof(int))>
+            struct recursive_sliced_shuffle_helper;
+
+            template <unsigned int count>
+            struct recursive_sliced_shuffle_helper<count, true> {
+                int val;
+
+                template <typename TyFn>
+                _CG_QUALIFIER void invoke_shuffle(const TyFn &shfl) {
+                    val = shfl(val);
+                }
+            };
+
+            template <unsigned int count>
+            struct recursive_sliced_shuffle_helper<count, false> {
+                int val;
+                recursive_sliced_shuffle_helper<count - sizeof(int)> next;
+
+                template <typename TyFn>
+                _CG_QUALIFIER void invoke_shuffle(const TyFn &shfl) {
+                    val = shfl(val);
+                    next.invoke_shuffle(shfl);
+                }
+            };
+        }
+
+        struct _memory_shuffle {
+            template <typename TyElem, typename TyShflFn>
+            _CG_STATIC_QUALIFIER TyElem _shfl_internal(TyElem elem, const TyShflFn& fn) {
+                static_assert(sizeof(TyElem) > 0, "in memory shuffle is not yet implemented");
+                return TyElem{};
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl(TyElem&& elem, unsigned int gMask, unsigned int srcRank, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return 0;
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_down(TyElem&& elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return 0;
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_up(TyElem&& elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return 0;
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_xor(TyElem&& elem, unsigned int gMask, unsigned int lMask, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return 0;
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+        };
+
+        /***********************************************************************************
+         * Intrinsic Device Function Shuffle
+         *  Purpose:
+         *      Uses a shuffle helper that has characteristics best suited for moving
+         *      elements between threads
+         *  Expectations:
+         *      Object given will be forced into an l-value type so that it can be used
+         *      with a helper structure that reinterprets the data into intrinsic compatible
+         *      types
+         *  Notes:
+         *      !! TyRet is required so that objects are returned by value and not as
+         *      dangling references depending on the value category of the passed object
+         **********************************************************************************/
+        struct _intrinsic_compat_shuffle {
+            template <unsigned int count>
+            using shfl_helper = shfl::recursive_sliced_shuffle_helper<count>;
+
+            template <typename TyElem, typename TyShflFn>
+            _CG_STATIC_QUALIFIER TyElem _shfl_internal(TyElem elem, const TyShflFn& fn) {
+                static_assert(__is_trivially_copyable(TyElem), "Type is not compatible with device shuffle");
+                shfl_helper<sizeof(TyElem)> helper;
+                memcpy(&helper, &elem, sizeof(TyElem));
+                helper.invoke_shuffle(fn);
+                memcpy(&elem, &helper, sizeof(TyElem));
+                return elem;
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl(TyElem&& elem, unsigned int gMask, unsigned int srcRank, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return __shfl_sync(gMask, val, srcRank, threads);
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_down(TyElem&& elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return __shfl_down_sync(gMask, val, delta, threads);
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_up(TyElem&& elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return __shfl_up_sync(gMask, val, delta, threads);
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+
+            template <typename TyElem, typename TyRet = remove_qual<TyElem>>
+            _CG_STATIC_QUALIFIER TyRet shfl_xor(TyElem&& elem, unsigned int gMask, unsigned int lMask, unsigned int threads) {
+                auto shfl = [=](int val) -> int {
+                    return __shfl_xor_sync(gMask, val, lMask, threads);
+                };
+
+                return _shfl_internal<TyRet>(_CG_STL_NAMESPACE::forward<TyElem>(elem), shfl);
+            }
+        };
+
+        struct _native_shuffle {
+            template <typename TyElem>
+            _CG_STATIC_QUALIFIER TyElem shfl(
+                    TyElem elem, unsigned int gMask, unsigned int srcRank, unsigned int threads) {
+                return static_cast<TyElem>(__shfl_sync(gMask, elem, srcRank, threads));
+            }
+
+            template <typename TyElem>
+            _CG_STATIC_QUALIFIER TyElem shfl_down(
+                    TyElem elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                return static_cast<TyElem>(__shfl_down_sync(gMask, elem, delta, threads));
+            }
+
+            template <typename TyElem>
+            _CG_STATIC_QUALIFIER TyElem shfl_up(
+                    TyElem elem, unsigned int gMask, unsigned int delta, unsigned int threads) {
+                return static_cast<TyElem>(__shfl_up_sync(gMask, elem, delta, threads));
+            }
+
+            template <typename TyElem>
+            _CG_STATIC_QUALIFIER TyElem shfl_xor(
+                    TyElem elem, unsigned int gMask, unsigned int lMask, unsigned int threads) {
+                return static_cast<TyElem>(__shfl_xor_sync(gMask, elem, lMask, threads));
+            }
+        };
+
+        // Almost all arithmetic types are supported by native shuffle
+        // Vector types are the exception
+        template <typename TyElem>
+        using use_native_shuffle = _CG_STL_NAMESPACE::integral_constant<
+            bool,
+            _CG_STL_NAMESPACE::is_integral<
+                remove_qual<TyElem>>::value ||
+            details::is_float_or_half<
+                remove_qual<TyElem>>::value
+        >;
+
+        constexpr unsigned long long _MemoryShuffleCutoff = 32;
+
+        template <typename TyElem,
+                  bool IsNative = use_native_shuffle<TyElem>::value,
+                  bool InMem = (sizeof(TyElem) > _MemoryShuffleCutoff)>
+        struct shuffle_dispatch;
+
+        template <typename TyElem>
+        struct shuffle_dispatch<TyElem, true, false> :  public _native_shuffle {};
+
+        template <typename TyElem>
+        struct shuffle_dispatch<TyElem, false, false> : public _intrinsic_compat_shuffle {};
+
+        template <typename TyElem>
+        struct shuffle_dispatch<TyElem, false, true> :  public _memory_shuffle {};
+
+#endif //_CG_CPP11_FEATURES
+    };
+
+    namespace multi_grid {
+        struct multi_grid_functions;
+    };
+
+    namespace grid {
+        _CG_STATIC_QUALIFIER void sync(unsigned int *bar) {
+            unsigned int expected = gridDim.x * gridDim.y * gridDim.z;
+
+            details::sync_grids(expected, bar);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long num_blocks()
+        {
+            // grid.y * grid.z -> [max(65535) * max(65535)] fits within 4b, promote after multiplication
+            // grid.x * (grid.y * grid.z) -> [max(2^31-1) * max(65535 * 65535)]  exceeds 4b, promote before multiplication
+            return (unsigned long long)gridDim.x * (gridDim.y * gridDim.z);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long num_threads()
+        {
+            return num_blocks() * cta::num_threads();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long block_rank()
+        {
+            return vec3_to_linear<unsigned long long>(blockIdx, gridDim);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long thread_rank()
+        {
+            return block_rank() * cta::num_threads() + cta::thread_rank();
+        }
+
+        _CG_STATIC_QUALIFIER dim3 dim_blocks()
+        {
+            return dim3(gridDim.x, gridDim.y, gridDim.z);
+        }
+
+        _CG_STATIC_QUALIFIER dim3 block_index()
+        {
+            return dim3(blockIdx.x, blockIdx.y, blockIdx.z);
+        }
+
+#if defined(_CG_HAS_CLUSTER_GROUP)
+        _CG_STATIC_QUALIFIER dim3 dim_clusters() {
+            return __clusterGridDimInClusters();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long num_clusters() {
+            const dim3 dimClusters = dim_clusters();
+            return dimClusters.x * dimClusters.y * dimClusters.z;
+        }
+
+        _CG_STATIC_QUALIFIER dim3 cluster_index() {
+            return __clusterIdx();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned long long cluster_rank() {
+            return vec3_to_linear<unsigned long long>(cluster_index(), dim_clusters());
+        }
+#endif
+
+        // Legacy aliases
+        _CG_STATIC_QUALIFIER unsigned long long size()
+        {
+            return num_threads();
+        }
+
+        _CG_STATIC_QUALIFIER dim3 grid_dim()
+        {
+            return dim_blocks();
+        }
+    };
+
+
+#if defined(_CG_HAS_MULTI_GRID_GROUP)
+
+    namespace multi_grid {
+        _CG_STATIC_QUALIFIER unsigned long long get_intrinsic_handle()
+        {
+            return (cudaCGGetIntrinsicHandle(cudaCGScopeMultiGrid));
+        }
+
+        _CG_STATIC_QUALIFIER void sync(const unsigned long long handle)
+        {
+            cudaError_t err = cudaCGSynchronize(handle, 0);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int size(const unsigned long long handle)
+        {
+            unsigned int numThreads = 0;
+            cudaCGGetSize(&numThreads, NULL, handle);
+            return numThreads;
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int thread_rank(const unsigned long long handle)
+        {
+            unsigned int threadRank = 0;
+            cudaCGGetRank(&threadRank, NULL, handle);
+            return threadRank;
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int grid_rank(const unsigned long long handle)
+        {
+            unsigned int gridRank = 0;
+            cudaCGGetRank(NULL, &gridRank, handle);
+            return gridRank;
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int num_grids(const unsigned long long handle)
+        {
+            unsigned int numGrids = 0;
+            cudaCGGetSize(NULL, &numGrids, handle);
+            return numGrids;
+        }
+
+# ifdef _CG_CPP11_FEATURES
+        struct multi_grid_functions {
+            decltype(multi_grid::get_intrinsic_handle) *get_intrinsic_handle;
+            decltype(multi_grid::sync) *sync;
+            decltype(multi_grid::size) *size;
+            decltype(multi_grid::thread_rank) *thread_rank;
+            decltype(multi_grid::grid_rank) *grid_rank;
+            decltype(multi_grid::num_grids) *num_grids;
+        };
+
+        template <typename = void>
+        _CG_STATIC_QUALIFIER const multi_grid_functions* load_grid_intrinsics() {
+            __constant__ static const multi_grid_functions mgf {
+                &multi_grid::get_intrinsic_handle,
+                &multi_grid::sync,
+                &multi_grid::size,
+                &multi_grid::thread_rank,
+                &multi_grid::grid_rank,
+                &multi_grid::num_grids
+            };
+
+            return &mgf;
+        }
+# endif
+    };
+#endif
+
+#if defined(_CG_HAS_CLUSTER_GROUP)
+    namespace cluster {
+
+        _CG_STATIC_QUALIFIER bool isReal()
+        {
+            return __clusterDimIsSpecified();
+        }
+
+        _CG_STATIC_QUALIFIER void barrier_arrive()
+        {
+            __cluster_barrier_arrive();
+        }
+
+        _CG_STATIC_QUALIFIER void barrier_wait()
+        {
+            __cluster_barrier_wait();
+        }
+
+        _CG_STATIC_QUALIFIER void sync()
+        {
+            barrier_arrive();
+            barrier_wait();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int query_shared_rank(const void *addr)
+        {
+            return __cluster_query_shared_rank(addr);
+        }
+
+        template <typename T>
+        _CG_STATIC_QUALIFIER T* map_shared_rank(T *addr, int rank)
+        {
+            return static_cast<T*>(__cluster_map_shared_rank(addr, rank));
+        }
+
+        _CG_STATIC_QUALIFIER dim3 block_index()
+        {
+            return __clusterRelativeBlockIdx();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int block_rank()
+        {
+            return __clusterRelativeBlockRank();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int thread_rank()
+        {
+            return block_rank() * cta::num_threads() + cta::thread_rank();
+        }
+
+        _CG_STATIC_QUALIFIER dim3 dim_blocks()
+        {
+            return __clusterDim();
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int num_blocks()
+        {
+            return __clusterSizeInBlocks();
+        }
+
+        _CG_STATIC_QUALIFIER dim3 dim_threads()
+        {
+            const dim3 dimBlocks = dim_blocks();
+            const unsigned int x = dimBlocks.x * blockDim.x;
+            const unsigned int y = dimBlocks.y * blockDim.y;
+            const unsigned int z = dimBlocks.z * blockDim.z;
+            return dim3(x, y, z);
+        }
+
+        _CG_STATIC_QUALIFIER unsigned int num_threads()
+        {
+            return num_blocks() * cta::num_threads();
+        }
+
+    };
+#endif
+
+    _CG_STATIC_QUALIFIER unsigned int laneid()
+    {
+        unsigned int laneid;
+        asm ("mov.u32 %0, %%laneid;" : "=r"(laneid));
+        return laneid;
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int lanemask32_eq()
+    {
+        unsigned int lanemask32_eq;
+        asm ("mov.u32 %0, %%lanemask_eq;" : "=r"(lanemask32_eq));
+        return (lanemask32_eq);
+    }
+
+    _CG_STATIC_QUALIFIER unsigned int lanemask32_lt()
+    {
+        unsigned int lanemask32_lt;
+        asm ("mov.u32 %0, %%lanemask_lt;" : "=r"(lanemask32_lt));
+        return (lanemask32_lt);
+    }
+
+    _CG_STATIC_QUALIFIER void abort()
+    {
+        _CG_ABORT();
+    }
+
+    template <typename Ty>
+    _CG_QUALIFIER void assert_if_not_arithmetic() {
+#ifdef _CG_CPP11_FEATURES
+        static_assert(
+            _CG_STL_NAMESPACE::is_integral<Ty>::value ||
+            details::is_float_or_half<Ty>::value,
+            "Error: Ty is neither integer or float"
+        );
+#endif
+    }
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    template <unsigned int numWarps>
+    struct copy_channel {
+        char* channel_ptr;
+        barrier_t* sync_location;
+        size_t channel_size;
+
+        // One warp sending to all other warps, it has to wait for all other warps.
+        struct send_many_to_many {
+            _CG_STATIC_CONST_DECL wait_for_warps_kind wait_kind = wait_for_all_other_warps;
+            _CG_STATIC_QUALIFIER void post_iter_release(unsigned int thread_idx, barrier_t* sync_location) {
+                __syncwarp(0xFFFFFFFF);
+                details::sync_warps_release(sync_location, thread_idx == 0, cta::thread_rank(), numWarps);
+            }
+        };
+
+        // One warp is receiving and all other warps are sending to that warp, they have to wait for that one warp.
+        struct send_many_to_one {
+            _CG_STATIC_CONST_DECL wait_for_warps_kind wait_kind = wait_for_specific_warp;
+            _CG_STATIC_QUALIFIER void post_iter_release(unsigned int thread_idx, barrier_t* sync_location) {
+                // Wait for all warps to finish and let the last warp release all threads.
+                if (details::sync_warps_last_releases(sync_location, cta::thread_rank(), numWarps)) {
+                    details::sync_warps_release(sync_location, thread_idx == 0, cta::thread_rank(), numWarps);
+                }
+            }
+        };
+
+        template <unsigned int ThreadCnt, size_t ValSize, typename SendDetails>
+        _CG_QUALIFIER void _send_value_internal(char* val_ptr, unsigned int thread_idx, unsigned int warp_id) {
+            size_t thread_offset = thread_idx * sizeof(int);
+
+            for (size_t i = 0; i < ValSize; i += channel_size) {
+                size_t bytes_left = ValSize - i;
+                size_t copy_chunk = min(bytes_left, channel_size);
+
+                details::sync_warps_wait_for_warps<SendDetails::wait_kind>(warp_id, sync_location, cta::thread_rank(), numWarps);
+                #pragma unroll 1
+                for (size_t j = thread_offset; j < copy_chunk ; j += sizeof(int) * ThreadCnt) {
+                    size_t my_bytes_left = copy_chunk - j;
+                    memcpy(channel_ptr + j, val_ptr + i + j, min(my_bytes_left, sizeof(int)));
+                }
+                SendDetails::post_iter_release(thread_idx, sync_location);
+            }
+        }
+
+
+        template <typename TyVal, unsigned int ThreadCnt, typename SendDetails>
+        _CG_QUALIFIER void send_value(TyVal& val, unsigned int thread_idx, unsigned int warp_id) {
+            _send_value_internal<ThreadCnt, sizeof(TyVal), SendDetails>(reinterpret_cast<char*>(&val), thread_idx, warp_id);
+        }
+
+        template <size_t ValSize>
+        _CG_QUALIFIER void _receive_value_internal(char* val_ptr, bool warp_master, bool active) {
+            for (size_t i = 0; i < ValSize; i += channel_size) {
+                size_t bytes_left = ValSize - i;
+                details::sync_warps_wait_for_release(sync_location, warp_master, cta::thread_rank(), numWarps);
+                if (active) {
+                    memcpy(val_ptr + i, channel_ptr, min(bytes_left, channel_size));
+                }
+            }
+        }
+
+        template <typename TyVal>
+        _CG_QUALIFIER void receive_value(TyVal& val, bool warp_master, bool active = true) {
+            _receive_value_internal<sizeof(TyVal)>(reinterpret_cast<char*>(&val), warp_master, active);
+        }
+    };
+
+    _CG_STATIC_QUALIFIER constexpr unsigned int log2(unsigned int x) {
+        return x == 1 ? 0 : 1 + log2(x / 2);
+    }
+#endif //_CG_CPP11_FEATURES
+
+}; // !Namespace internal
+
+_CG_END_NAMESPACE
+
+#endif /* !_COOPERATIVE_GROUPS_HELPERS_H_ */
diff --git a/ext/cudart/include/cooperative_groups/details/info.h b/ext/cudart/include/cooperative_groups/details/info.h
new file mode 100644
index 00000000..4afc475d
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/info.h
@@ -0,0 +1,323 @@
+ /* Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+
+
+#ifndef _CG_INFO_H_
+#define _CG_INFO_H_
+/*
+** Define: _CG_VERSION
+*/
+#define _CG_VERSION 1000
+
+/*
+** Define: _CG_ABI_VERSION
+*/
+#ifndef _CG_ABI_VERSION
+# define _CG_ABI_VERSION 1
+#endif
+
+/*
+** Define: _CG_ABI_EXPERIMENTAL
+** Desc: If enabled, sets all features enabled (ABI-breaking or experimental)
+*/
+#if defined(_CG_ABI_EXPERIMENTAL)
+#endif
+
+#define _CG_CONCAT_INNER(x, y) x ## y
+#define _CG_CONCAT_OUTER(x, y) _CG_CONCAT_INNER(x, y)
+#define _CG_NAMESPACE _CG_CONCAT_OUTER(__v, _CG_ABI_VERSION)
+
+#define _CG_BEGIN_NAMESPACE \
+    namespace cooperative_groups { namespace _CG_NAMESPACE {
+#define _CG_END_NAMESPACE \
+    }; using namespace _CG_NAMESPACE; };
+
+#if (defined(__cplusplus) && (__cplusplus >= 201103L)) || (defined(_MSC_VER) && (_MSC_VER >= 1900))
+# define _CG_CPP11_FEATURES
+#endif
+
+#if !defined(_CG_QUALIFIER)
+# define _CG_QUALIFIER __forceinline__ __device__
+#endif
+#if !defined(_CG_STATIC_QUALIFIER)
+# define _CG_STATIC_QUALIFIER static __forceinline__ __device__
+#endif
+#if !defined(_CG_CONSTEXPR_QUALIFIER)
+# if defined(_CG_CPP11_FEATURES)
+#  define _CG_CONSTEXPR_QUALIFIER constexpr __forceinline__ __device__
+# else
+#  define _CG_CONSTEXPR_QUALIFIER _CG_QUALIFIER
+# endif
+#endif
+#if !defined(_CG_STATIC_CONSTEXPR_QUALIFIER)
+# if defined(_CG_CPP11_FEATURES)
+#  define _CG_STATIC_CONSTEXPR_QUALIFIER static constexpr __forceinline__ __device__
+# else
+#  define _CG_STATIC_CONSTEXPR_QUALIFIER _CG_STATIC_QUALIFIER
+# endif
+#endif
+
+#if defined(_MSC_VER)
+# define _CG_DEPRECATED __declspec(deprecated)
+#else
+# define _CG_DEPRECATED __attribute__((deprecated))
+#endif
+
+#if (__CUDA_ARCH__ >= 600) || !defined(__CUDA_ARCH__)
+# define _CG_HAS_GRID_GROUP
+#endif
+#if (__CUDA_ARCH__ >= 600) || !defined(__CUDA_ARCH__)
+# define _CG_HAS_MULTI_GRID_GROUP
+#endif
+#if (__CUDA_ARCH__ >= 700) || !defined(__CUDA_ARCH__)
+# define _CG_HAS_MATCH_COLLECTIVE
+#endif
+#if ((__CUDA_ARCH__ >= 900) || !defined(__CUDA_ARCH__)) && (defined(__NVCC__) || defined(__CUDACC_RTC__) || defined(_CG_CLUSTER_INTRINSICS_AVAILABLE))
+# define _CG_HAS_CLUSTER_GROUP
+#endif
+// Has __half and __half2
+// Only usable if you include the cuda_fp16.h extension, and
+// _before_ including cooperative_groups.h
+#ifdef __CUDA_FP16_TYPES_EXIST__
+# define _CG_HAS_FP16_COLLECTIVE
+#endif
+
+#if (__CUDA_ARCH__ >= 800) || !defined(__CUDA_ARCH__) && (defined(__NVCC__) || defined(__CUDACC_RTC__))
+# define _CG_HAS_OP_REDUX
+#endif
+
+// Include libcu++ where supported.
+#if defined(_CG_CPP11_FEATURES) && !defined(__QNX__) && !defined(__ibmxl__) && \
+    (defined(__NVCC__) || defined(__CUDACC_RTC__)) && \
+    (defined(__x86_64__) || defined(__aarch64__) || defined(__ppc64__)|| defined(_M_X64) || defined(_M_ARM64)) && \
+    (defined(_MSC_VER) || defined(__GNUC__) || defined(__clang__))
+# define _CG_USE_CUDA_STL
+#else
+# define _CG_USE_OWN_TRAITS
+#endif
+
+#if defined(_CG_USE_CUDA_STL) && (!defined(__CUDA_ARCH__) || \
+    ((!defined(_MSC_VER) && __CUDA_ARCH__ >= 600) || (defined(_MSC_VER) && __CUDA_ARCH__ >= 700)))
+# define _CG_HAS_STL_ATOMICS
+#endif
+
+#ifdef _CG_CPP11_FEATURES
+// Use cuda::std:: for type_traits
+# if defined(_CG_USE_CUDA_STL)
+#  define _CG_STL_NAMESPACE cuda::std
+#  include <cuda/std/type_traits>
+// Use CG's implementation of type traits
+# else
+#  define _CG_STL_NAMESPACE cooperative_groups::details::templates
+# endif
+#endif
+
+#ifdef _CG_CPP11_FEATURES
+# define _CG_STATIC_CONST_DECL static constexpr
+# define _CG_CONST_DECL constexpr
+#else
+# define _CG_STATIC_CONST_DECL static const
+# define _CG_CONST_DECL const
+#endif
+
+#if (defined(_MSC_VER) && !defined(_WIN64)) || defined(__arm__)
+# define _CG_ASM_PTR_CONSTRAINT "r"
+#else
+#  define _CG_ASM_PTR_CONSTRAINT "l"
+#endif
+
+/*
+** Define: CG_DEBUG
+** What: Enables various runtime safety checks
+*/
+#if defined(__CUDACC_DEBUG__) && defined(CG_DEBUG) && !defined(NDEBUG)
+# define _CG_DEBUG
+#endif
+
+#if defined(_CG_DEBUG)
+# include <assert.h>
+# define _CG_ASSERT(x) assert((x));
+# define _CG_ABORT() assert(0);
+#else
+# define _CG_ASSERT(x)
+# define _CG_ABORT() __trap();
+#endif
+
+#if defined(_CG_CPP11_FEATURES) && !defined(_CG_USE_CUDA_STL)
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+namespace templates {
+
+/**
+ * Integral constants
+ **/
+template <typename Ty, Ty Val>
+struct integral_constant {
+    static constexpr Ty value = Val;
+    typedef Ty type;
+
+    _CG_QUALIFIER constexpr operator type() const noexcept { return value; }
+    _CG_QUALIFIER constexpr type operator()() const noexcept { return value; }
+};
+
+typedef integral_constant<bool, true>  true_type;
+typedef integral_constant<bool, false> false_type;
+
+/**
+ * CV Qualifiers
+ **/
+template <class Ty> struct is_lvalue_reference       : public details::templates::false_type {};
+template <class Ty> struct is_lvalue_reference<Ty&>  : public details::templates::true_type {};
+
+template <class Ty> struct remove_reference       {typedef Ty type;};
+template <class Ty> struct remove_reference<Ty&>  {typedef Ty type;};
+template <class Ty> struct remove_reference<Ty&&> {typedef Ty type;};
+
+template <class Ty>
+using remove_reference_t = typename details::templates::remove_reference<Ty>::type;
+
+template <class Ty> struct remove_const           {typedef Ty type;};
+template <class Ty> struct remove_const<const Ty> {typedef Ty type;};
+
+template <class Ty> struct remove_volatile              {typedef Ty type;};
+template <class Ty> struct remove_volatile<volatile Ty> {typedef Ty type;};
+
+template <class Ty> struct remove_cv {typedef typename details::templates::remove_volatile<typename details::templates::remove_const<Ty>::type>::type type;};
+
+template <class Ty>
+using remove_cv_t = typename details::templates::remove_cv<Ty>::type;
+
+template <class Ty>
+_CG_QUALIFIER Ty&& forward(remove_reference_t<Ty> &t) noexcept {
+    return static_cast<Ty&&>(t);
+}
+
+template <class Ty>
+_CG_QUALIFIER Ty&& forward(remove_reference_t<Ty> &&t) noexcept {
+    static_assert(!details::templates::is_lvalue_reference<Ty>::value, "Forwarding an rvalue as an lvalue is not allowed.");
+    return static_cast<Ty&&>(t);
+}
+
+/**
+ * is_integral
+ **/
+template <class Ty> struct _is_integral                     : public details::templates::false_type {};
+template <>         struct _is_integral<bool>               : public details::templates::true_type {};
+template <>         struct _is_integral<char>               : public details::templates::true_type {};
+template <>         struct _is_integral<unsigned char>      : public details::templates::true_type {};
+template <>         struct _is_integral<short>              : public details::templates::true_type {};
+template <>         struct _is_integral<unsigned short>     : public details::templates::true_type {};
+template <>         struct _is_integral<int>                : public details::templates::true_type {};
+template <>         struct _is_integral<unsigned int>       : public details::templates::true_type {};
+template <>         struct _is_integral<long>               : public details::templates::true_type {};
+template <>         struct _is_integral<long long>          : public details::templates::true_type {};
+template <>         struct _is_integral<unsigned long>      : public details::templates::true_type {};
+template <>         struct _is_integral<unsigned long long> : public details::templates::true_type {};
+//Vector type support?
+
+template <typename Ty>
+struct is_integral : public details::templates::_is_integral<typename details::templates::remove_cv<Ty>::type> {};
+
+/**
+ * is_floating_point
+ **/
+template <class Ty> struct _is_floating_point              : public details::templates::false_type {};
+template <>         struct _is_floating_point<float>       : public details::templates::true_type {};
+template <>         struct _is_floating_point<double>      : public details::templates::true_type {};
+template <>         struct _is_floating_point<long double> : public details::templates::true_type {};
+# ifdef __CUDA_FP16_TYPES_EXIST__
+template <>         struct _is_floating_point<__half>      : public details::templates::true_type {};
+template <>         struct _is_floating_point<__half2>     : public details::templates::true_type {};
+# endif
+//Vector type support?
+
+template <typename Ty>
+struct is_floating_point : public details::templates::_is_floating_point<typename details::templates::remove_cv<Ty>::type> {};
+
+template <class T>
+struct is_arithmetic : details::templates::integral_constant<
+    bool,
+    details::templates::is_integral<T>::value ||
+    details::templates::is_floating_point<T>::value> {};
+
+template <typename Ty, bool = details::templates::is_arithmetic<Ty>::value>
+struct _is_unsigned : details::templates::integral_constant<bool, Ty(0) < Ty(-1)> {};
+
+template <typename Ty>
+struct _is_unsigned<Ty,false> : details::templates::false_type {};
+
+template <typename Ty>
+struct is_unsigned : _is_unsigned<typename details::templates::remove_cv<Ty>::type> {};
+
+/**
+ * programmatic type traits
+ **/
+template<bool B, class Ty = void>
+struct enable_if {};
+
+template<class Ty>
+struct enable_if<true, Ty> { typedef Ty type; };
+
+template<bool Cond, typename Ty = void>
+using enable_if_t = typename details::templates::enable_if<Cond, Ty>::type;
+
+template<class Ty1, class Ty2>
+struct is_same : details::templates::false_type {};
+
+template<class Ty>
+struct is_same<Ty, Ty> : details::templates::true_type {};
+
+} // templates
+} // details
+_CG_END_NAMESPACE
+
+#endif // _CG_CPP11_FEATURES
+
+#endif // _CG_INFO_H_
diff --git a/ext/cudart/include/cooperative_groups/details/partitioning.h b/ext/cudart/include/cooperative_groups/details/partitioning.h
new file mode 100644
index 00000000..c3841865
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/partitioning.h
@@ -0,0 +1,133 @@
+/*
+ * Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CG_PARTITIONING_H
+#define _CG_PARTITIONING_H
+
+#include "info.h"
+#include "helpers.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+
+    template <typename TyGroup>
+    _CG_STATIC_QUALIFIER coalesced_group _binary_partition(const TyGroup &tile, bool pred) {
+        const unsigned int fullMask = ~0u;
+
+        unsigned int thisMask = _coalesced_group_data_access::get_mask(tile);
+        unsigned int predMask = pred ? 0 : fullMask;
+        unsigned int setMask = __ballot_sync(thisMask, pred);
+
+        if (setMask == thisMask || setMask == 0) {
+            coalesced_group subTile = _coalesced_group_data_access::construct_from_mask<coalesced_group>(thisMask);
+            _coalesced_group_data_access::modify_meta_group(subTile, 0, 1);
+            return subTile;
+        }
+        else {
+            unsigned int subMask = thisMask & (setMask ^ predMask);
+            coalesced_group subTile = _coalesced_group_data_access::construct_from_mask<coalesced_group>(subMask);
+            _coalesced_group_data_access::modify_meta_group(subTile, pred, 2);
+            return subTile;
+        }
+    }
+
+#ifdef _CG_HAS_MATCH_COLLECTIVE
+    template <typename TyGroup, typename TyPredicate>
+    _CG_STATIC_QUALIFIER coalesced_group _labeled_partition(const TyGroup &tile, TyPredicate pred) {
+        unsigned int thisMask = _coalesced_group_data_access::get_mask(tile);
+        unsigned int thisBias = __ffs(thisMask) - 1; // Subtract 1 to index properly from [1-32]
+        unsigned int subMask = __match_any_sync(thisMask, pred);
+
+        coalesced_group subTile = _coalesced_group_data_access::construct_from_mask<coalesced_group>(subMask);
+
+        int leaderLaneId = subTile.shfl(details::laneid(), 0);
+
+        bool isLeader = !subTile.thread_rank();
+        unsigned int leaderMask = __ballot_sync(thisMask, isLeader);
+        unsigned int tileRank = __fns(leaderMask, leaderLaneId, 0) - thisBias;
+
+        _coalesced_group_data_access::modify_meta_group(subTile, tileRank, __popc(leaderMask));
+
+        return subTile;
+    }
+#endif
+}; // namespace details
+
+_CG_STATIC_QUALIFIER coalesced_group binary_partition(const coalesced_group &tile, bool pred) {
+    return details::_binary_partition(tile, pred);
+}
+
+template <unsigned int Size, typename ParentT>
+_CG_STATIC_QUALIFIER coalesced_group binary_partition(const thread_block_tile<Size, ParentT> &tile, bool pred) {
+#ifdef _CG_CPP11_FEATURES
+    static_assert(Size <= 32, "Binary partition is available only for tiles of size smaller or equal to 32");
+#endif
+    return details::_binary_partition(tile, pred);
+}
+
+
+#if defined(_CG_HAS_MATCH_COLLECTIVE) && defined(_CG_CPP11_FEATURES)
+template <typename TyPredicate>
+_CG_STATIC_QUALIFIER coalesced_group labeled_partition(const coalesced_group &tile, TyPredicate pred) {
+    static_assert(_CG_STL_NAMESPACE::is_integral<TyPredicate>::value, "labeled_partition predicate must be an integral type");
+    return details::_labeled_partition(tile, pred);
+}
+
+template <typename TyPredicate, unsigned int Size, typename ParentT>
+_CG_STATIC_QUALIFIER coalesced_group labeled_partition(const thread_block_tile<Size, ParentT> &tile, TyPredicate pred) {
+    static_assert(_CG_STL_NAMESPACE::is_integral<TyPredicate>::value, "labeled_partition predicate must be an integral type");
+    static_assert(Size <= 32, "Labeled partition is available only for tiles of size smaller or equal to 32");
+    return details::_labeled_partition(tile, pred);
+}
+#endif
+
+_CG_END_NAMESPACE
+
+#endif // _CG_PARTITIONING_H
diff --git a/ext/cudart/include/cooperative_groups/details/reduce.h b/ext/cudart/include/cooperative_groups/details/reduce.h
new file mode 100644
index 00000000..24029613
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/reduce.h
@@ -0,0 +1,430 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_REDUCE_H_
+#define _CG_REDUCE_H_
+
+#include "info.h"
+#include "helpers.h"
+#include "coalesced_reduce.h"
+#include "functional.h"
+#include "cooperative_groups.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+
+    template <class Ty>
+    using _redux_is_add_supported = _CG_STL_NAMESPACE::integral_constant<
+            bool,
+            _CG_STL_NAMESPACE::is_integral<Ty>::value && (sizeof(Ty) <= 4)>;
+
+    template <class Ty>
+    using redux_is_add_supported = _redux_is_add_supported<Ty>;
+
+    // A specialization for 64 bit logical operations is possible
+    // but for now only accelerate 32 bit bitwise ops
+    template <class Ty>
+    using redux_is_logical_supported = redux_is_add_supported<Ty>;
+
+    // Base operator support case
+    template <class TyOp, class Ty> struct _redux_op_supported                 : public _CG_STL_NAMESPACE::false_type {};
+#ifdef _CG_HAS_OP_REDUX
+    template <class Ty> struct _redux_op_supported<cooperative_groups::plus<Ty>,    Ty> : public redux_is_add_supported<Ty> {};
+    template <class Ty> struct _redux_op_supported<cooperative_groups::less<Ty>,    Ty> : public redux_is_add_supported<Ty> {};
+    template <class Ty> struct _redux_op_supported<cooperative_groups::greater<Ty>, Ty> : public redux_is_add_supported<Ty> {};
+    template <class Ty> struct _redux_op_supported<cooperative_groups::bit_and<Ty>, Ty> : public redux_is_logical_supported<Ty> {};
+    template <class Ty> struct _redux_op_supported<cooperative_groups::bit_or<Ty>,  Ty> : public redux_is_logical_supported<Ty> {};
+    template <class Ty> struct _redux_op_supported<cooperative_groups::bit_xor<Ty>, Ty> : public redux_is_logical_supported<Ty> {};
+#endif
+
+    template <class Ty, template <class> class TyOp>
+    using redux_op_supported = _redux_op_supported<
+            typename details::remove_qual<TyOp<Ty>>,
+            Ty>;
+
+    // Groups smaller than 16 actually have worse performance characteristics when used with redux
+    // tiles of size 16 and 32 perform the same or better and have better code generation profiles
+    template <class TyGroup> struct _redux_group_optimized : public _CG_STL_NAMESPACE::false_type {};
+
+    template <unsigned int Sz, typename TyPar>
+    struct _redux_group_optimized<cooperative_groups::thread_block_tile<Sz, TyPar>> : public _CG_STL_NAMESPACE::integral_constant<
+                                                                                            bool,
+                                                                                            (Sz >= 16)> {};
+    template <unsigned int Sz, typename TyPar>
+    struct _redux_group_optimized<internal_thread_block_tile<Sz, TyPar>>            : public _CG_STL_NAMESPACE::integral_constant<
+                                                                                            bool,
+                                                                                            (Sz >= 16)> {};
+    template <>
+    struct _redux_group_optimized<cooperative_groups::coalesced_group>              : public _CG_STL_NAMESPACE::true_type  {};
+
+    template <typename TyGroup>
+    using redux_group_optimized = _redux_group_optimized<details::remove_qual<TyGroup>>;
+
+    template <template <class> class TyOp>
+    _CG_STATIC_QUALIFIER int pick_redux(int mask, int val);
+    template <template <class> class TyOp>
+    _CG_STATIC_QUALIFIER unsigned int pick_redux(int mask, unsigned int val);
+
+#ifdef _CG_HAS_OP_REDUX
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::plus>(int mask, int val) {
+        return __reduce_add_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::less>(int mask, int val) {
+        return __reduce_min_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::greater>(int mask, int val) {
+        return __reduce_max_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::bit_and>(int mask, int val) {
+        return __reduce_and_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::bit_xor>(int mask, int val) {
+        return __reduce_xor_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER int pick_redux<cooperative_groups::bit_or>(int mask, int val) {
+        return __reduce_or_sync(mask, val);
+    }
+
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::plus>(int mask, unsigned int val) {
+        return __reduce_add_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::less>(int mask, unsigned int val) {
+        return __reduce_min_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::greater>(int mask, unsigned int val) {
+        return __reduce_max_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::bit_and>(int mask, unsigned int val) {
+        return __reduce_and_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::bit_xor>(int mask, unsigned int val) {
+        return __reduce_xor_sync(mask, val);
+    }
+    template <> _CG_QUALIFIER unsigned int pick_redux<cooperative_groups::bit_or>(int mask, unsigned int val) {
+        return __reduce_or_sync(mask, val);
+    }
+#endif
+
+
+    template <typename TyVal, bool = _CG_STL_NAMESPACE::is_unsigned<TyVal>::value>
+    struct _accelerated_op;
+
+    // Signed type redux intrinsic dispatch
+    template <typename TyVal>
+    struct _accelerated_op<TyVal, false> {
+        template <template <class> class TyOp>
+        _CG_STATIC_QUALIFIER TyVal redux(int mask, TyVal val) {
+            return static_cast<TyVal>(pick_redux<TyOp>(mask, static_cast<int>(val)));
+        }
+    };
+
+    // Unsigned type redux intrinsic dispatch
+    template <typename TyVal>
+    struct _accelerated_op<TyVal, true> {
+        template <template <class> class TyOp>
+        _CG_STATIC_QUALIFIER TyVal redux(int mask, TyVal val) {
+            return static_cast<TyVal>(pick_redux<TyOp>(mask, static_cast<unsigned int>(val)));
+        }
+    };
+
+    template <typename TyVal>
+    using accelerated_op = _accelerated_op<TyVal>;
+
+
+    template <typename TyVal, typename TyFnInput, typename TyGroup>
+    class _redux_dispatch {
+        template <class Ty, template <class> class TyOp>
+        using _redux_is_usable = _CG_STL_NAMESPACE::integral_constant<bool,
+            redux_op_supported<Ty, TyOp>::value &&
+            redux_group_optimized<TyGroup>::value>;
+
+        template <class Ty, template <class> class TyOp>
+        using redux_is_usable = typename _CG_STL_NAMESPACE::enable_if<_redux_is_usable<Ty, TyOp>::value, void>::type*;
+
+        template <class Ty, template <class> class TyOp>
+        using redux_is_not_usable = typename _CG_STL_NAMESPACE::enable_if<!_redux_is_usable<Ty, TyOp>::value, void>::type*;
+
+    public:
+        // Dispatch to redux if the combination of op and args are supported
+        template<
+            template <class> class TyOp,
+            redux_is_usable<TyFnInput, TyOp> = nullptr>
+        _CG_STATIC_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp<TyFnInput>&& op) -> decltype(op(val, val)) {
+            // Retrieve the mask for the group and dispatch to redux
+            return accelerated_op<TyFnInput>::template redux<TyOp>(_coalesced_group_data_access::get_mask(group), _CG_STL_NAMESPACE::forward<TyVal>(val));
+        }
+
+        template<
+            template <class> class TyOp,
+            redux_is_usable<TyFnInput, TyOp> = nullptr>
+        _CG_STATIC_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp<TyFnInput>& op) -> decltype(op(val, val)) {
+            // Retrieve the mask for the group and dispatch to redux
+            return accelerated_op<TyFnInput>::template redux<TyOp>(_coalesced_group_data_access::get_mask(group), _CG_STL_NAMESPACE::forward<TyVal>(val));
+        }
+
+        // Fallback shuffle sync reduction
+        template <
+            template <class> class TyOp,
+            redux_is_not_usable<TyFnInput, TyOp> = nullptr>
+        _CG_STATIC_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp<TyFnInput>&& op) -> decltype(op(val, val)) {
+            //Dispatch to fallback shuffle sync accelerated reduction
+            return coalesced_reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp<TyFnInput>>(op));
+        }
+
+    };
+
+    // Group support for reduce.
+    template <class TyGroup> struct _reduce_group_supported : public _CG_STL_NAMESPACE::false_type {};
+
+    template <unsigned int Sz, typename TyPar>
+    struct _reduce_group_supported<cooperative_groups::thread_block_tile<Sz, TyPar>> : public _CG_STL_NAMESPACE::true_type {};
+    template <unsigned int Sz, typename TyPar>
+    struct _reduce_group_supported<internal_thread_block_tile<Sz, TyPar>>            : public _CG_STL_NAMESPACE::true_type {};
+    template <>
+    struct _reduce_group_supported<cooperative_groups::coalesced_group>              : public _CG_STL_NAMESPACE::true_type {};
+
+    template <typename TyGroup>
+    using reduce_group_supported = _reduce_group_supported<details::remove_qual<TyGroup>>;
+
+    template <typename TyVal, typename TyFnInput, template <class> class TyOp, typename TyGroup>
+    _CG_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp<TyFnInput>&& op) -> decltype(op(val, val)) {
+        static_assert(details::is_op_type_same<TyFnInput, TyVal>::value, "Operator and argument types differ");
+
+        using dispatch = details::_redux_dispatch<TyVal, TyFnInput, TyGroup>;
+        return dispatch::reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp<TyFnInput>>(op));
+    }
+
+    template <typename TyVal, typename TyFnInput, template <class> class TyOp, typename TyGroup>
+    _CG_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp<TyFnInput>& op) -> decltype(op(val, val)) {
+        static_assert(details::is_op_type_same<TyFnInput, TyVal>::value, "Operator and argument types differ");
+
+        using dispatch = details::_redux_dispatch<TyVal, TyFnInput, TyGroup>;
+        return dispatch::reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp<TyFnInput>>(op));
+    }
+
+
+    template <typename TyVal, typename TyOp, typename TyGroup>
+    _CG_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyOp&& op) -> decltype(op(val, val)) {
+        return details::coalesced_reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyOp>(op));
+    }
+
+    template <unsigned int GroupId>
+    struct tile_reduce_dispatch;
+
+    template <>
+    struct tile_reduce_dispatch<details::coalesced_group_id> {
+        template <typename TyGroup, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            return details::reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+        }
+    };
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    template <>
+    struct tile_reduce_dispatch<details::multi_tile_group_id> {
+        template <unsigned int Size, typename ParentT, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto reduce(const thread_block_tile<Size, ParentT>& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            using warpType = details::internal_thread_block_tile<32, __static_size_multi_warp_tile_base<Size>>;
+            using TyRet = details::remove_qual<TyVal>;
+            const unsigned int num_warps = Size / 32;
+
+            auto warp_lambda = [&] (const warpType& warp, TyRet* warp_scratch_location) {
+                    *warp_scratch_location =
+                        details::reduce(warp, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+            };
+            auto inter_warp_lambda =
+                [&] (const details::internal_thread_block_tile<num_warps, warpType>& subwarp, TyRet* thread_scratch_location) {
+                    *thread_scratch_location =
+                        details::reduce(subwarp, *thread_scratch_location, _CG_STL_NAMESPACE::forward<TyFn>(op));
+            };
+            return details::multi_warp_collectives_helper<TyRet>(group, warp_lambda, inter_warp_lambda);
+        }
+    };
+
+    enum class AsyncReduceType { store, update };
+
+    template <AsyncReduceType TyAsyncReduce>
+    struct async_reduce_result_handler;
+
+    template<>
+    struct async_reduce_result_handler<AsyncReduceType::store> {
+        template<typename TyDst, typename TyVal, typename TyOp>
+        _CG_STATIC_QUALIFIER void handleResult(TyDst *dst, TyVal& result, TyOp&& op) {
+            *dst = result;
+        }
+    };
+
+#if defined(_CG_HAS_STL_ATOMICS)
+    template<>
+    struct async_reduce_result_handler<AsyncReduceType::update> {
+        template<typename TyDst, typename TyVal, typename TyOp>
+        _CG_STATIC_QUALIFIER void handleResult(TyDst& dst, TyVal& result, TyOp&& op) {
+            atomic_update(dst, result, _CG_STL_NAMESPACE::forward<TyOp>(op));
+        }
+    };
+#endif
+
+    template <unsigned int GroupId, AsyncReduceType TyAsyncReduce>
+    struct tile_async_reduce_dispatch;
+
+    template <AsyncReduceType TyAsyncReduce>
+    struct tile_async_reduce_dispatch<details::coalesced_group_id, TyAsyncReduce> {
+        template <unsigned int TySize, typename ParentT, typename TyDst, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER void reduce(const __single_warp_thread_block_tile<TySize, ParentT>& group, TyDst& dst, TyVal&& val, TyFn&& op) {
+            // Do regular, in group reduction
+            auto result = details::reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+
+            // One thread stores/updates the destination
+            if (group.thread_rank() == 0) {
+                async_reduce_result_handler<TyAsyncReduce>::handleResult(dst, result, _CG_STL_NAMESPACE::forward<TyFn>(op));
+            }
+        }
+
+        template <typename TyDst, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER void reduce(const coalesced_group& group, TyDst& dst, TyVal&& val, TyFn&& op) {
+            // Do in group reduction to the last thread
+            auto result = details::coalesced_reduce_to_one(group, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+
+            // One thread stores/updates the destination
+            if (group.thread_rank() == group.size() - 1) {
+                async_reduce_result_handler<TyAsyncReduce>::handleResult(dst, result, _CG_STL_NAMESPACE::forward<TyFn>(op));
+            }
+        }
+    };
+
+    template <AsyncReduceType TyAsyncReduce>
+    struct tile_async_reduce_dispatch<details::multi_tile_group_id, TyAsyncReduce> {
+        template <unsigned int TySize, typename ParentT, typename TyDst, typename TyInputVal, typename TyFn>
+        _CG_STATIC_QUALIFIER void reduce(const thread_block_tile<TySize, ParentT>& group, TyDst& dst, TyInputVal&& val, TyFn&& op) {
+            using TyVal = remove_qual<TyInputVal>;
+            const unsigned int num_warps = TySize / 32;
+            details::barrier_t* sync_location = multi_warp_sync_location_getter(group);
+            auto warp_scratch_location = multi_warp_scratch_location_getter<TyVal>(group, group.thread_rank() / 32);
+
+            // Do in warp reduce
+            auto warp = details::tiled_partition_internal<32, thread_block_tile<TySize, ParentT>>();
+            *warp_scratch_location = details::reduce(warp, _CG_STL_NAMESPACE::forward<TyInputVal>(val), op);
+
+            // Tile of size num_warps from the last warp to arrive does final reduction step
+            if (details::sync_warps_last_releases(sync_location, details::cta::thread_rank(), num_warps)) {
+                auto subwarp = details::tiled_partition_internal<num_warps, decltype(warp)>();
+                if (subwarp.meta_group_rank() == 0) {
+                    auto thread_scratch_location = multi_warp_scratch_location_getter<TyVal>(group, subwarp.thread_rank());
+                    auto thread_val = *thread_scratch_location;
+                    // Release other warps, we read their contribution already.
+                    subwarp.sync();
+                    details::sync_warps_release(sync_location, subwarp.thread_rank() == 0, details::cta::thread_rank(), num_warps);
+                    TyVal result = details::reduce(subwarp, thread_val, op);
+                    // One thread stores the result or updates the atomic
+                    if (subwarp.thread_rank() == 0) {
+                        async_reduce_result_handler<TyAsyncReduce>::handleResult(dst, result, _CG_STL_NAMESPACE::forward<TyFn>(op));
+                    }
+                }
+                warp.sync();
+            }
+        }
+    };
+#endif
+
+    template <typename TyGroup, typename TyInputVal, typename TyRetVal>
+    _CG_QUALIFIER void check_reduce_params() {
+        static_assert(details::is_op_type_same<TyInputVal, TyRetVal>::value, "Operator input and output types differ");
+        static_assert(details::reduce_group_supported<TyGroup>::value, "This group does not exclusively represent a tile");
+    };
+
+    template <typename TyGroup, typename TyDstVal, typename TyInputVal, typename TyRetVal>
+    _CG_QUALIFIER void check_async_reduce_params() {
+        check_reduce_params<TyGroup, TyInputVal, TyRetVal>();
+        static_assert(details::is_op_type_same<TyDstVal, TyInputVal>::value, "Destination and input types differ");
+    }
+} // details
+
+template <typename TyGroup, typename TyVal, typename TyFn>
+_CG_QUALIFIER auto reduce(const TyGroup& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+    details::check_reduce_params<TyGroup, details::remove_qual<TyVal>, decltype(op(val, val))>();
+
+    using dispatch = details::tile_reduce_dispatch<TyGroup::_group_id>;
+    return dispatch::reduce(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+}
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+namespace experimental {
+
+    #if defined(_CG_HAS_STL_ATOMICS)
+    template<typename TyGroup, typename TyVal, cuda::thread_scope Sco, typename TyInputVal, typename TyFn>
+    void _CG_QUALIFIER reduce_update_async(const TyGroup& group, cuda::atomic<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) {
+        details::check_async_reduce_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::tile_async_reduce_dispatch<TyGroup::_group_id, details::AsyncReduceType::update>;
+        dispatch::reduce(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+    template<typename TyGroup, typename TyVal, cuda::thread_scope Sco, typename TyInputVal, typename TyFn>
+    void _CG_QUALIFIER reduce_update_async(const TyGroup& group, const cuda::atomic_ref<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) {
+        details::check_async_reduce_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::tile_async_reduce_dispatch<TyGroup::_group_id, details::AsyncReduceType::update>;
+        dispatch::reduce(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+    #endif
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, typename TyFn>
+    void _CG_QUALIFIER reduce_store_async(const TyGroup& group, TyVal* dst, TyInputVal&& val, TyFn&& op) {
+        details::check_async_reduce_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::tile_async_reduce_dispatch<TyGroup::_group_id, details::AsyncReduceType::store>;
+        dispatch::reduce(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+}
+#endif
+
+_CG_END_NAMESPACE
+
+#endif // _CG_REDUCE_H_
diff --git a/ext/cudart/include/cooperative_groups/details/scan.h b/ext/cudart/include/cooperative_groups/details/scan.h
new file mode 100644
index 00000000..badc50de
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/scan.h
@@ -0,0 +1,324 @@
+/* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_SCAN_H_
+#define _CG_SCAN_H_
+
+#include "info.h"
+#include "helpers.h"
+#include "functional.h"
+#include "coalesced_scan.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details {
+
+    // Group support for scan.
+    template <class TyGroup> struct _scan_group_supported : public _CG_STL_NAMESPACE::false_type {};
+
+    template <unsigned int Sz, typename TyPar>
+    struct _scan_group_supported<cooperative_groups::thread_block_tile<Sz, TyPar>> : public _CG_STL_NAMESPACE::true_type {};
+    template <unsigned int Sz, typename TyPar>
+    struct _scan_group_supported<internal_thread_block_tile<Sz, TyPar>>            : public _CG_STL_NAMESPACE::true_type {};
+    template <>
+    struct _scan_group_supported<cooperative_groups::coalesced_group>              : public _CG_STL_NAMESPACE::true_type {};
+
+    template <typename TyGroup>
+    using scan_group_supported = _scan_group_supported<details::remove_qual<TyGroup>>;
+
+    template <bool IsIntegralPlus>
+    struct integral_optimized_scan;
+
+    enum class ScanType { exclusive, inclusive };
+
+    template <unsigned int GroupId,  ScanType TyScan>
+    struct scan_dispatch;
+
+    template <ScanType TyScan>
+    struct scan_dispatch<details::coalesced_group_id, TyScan> {
+        template <typename TyGroup, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto scan(const TyGroup& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            auto scan_result = coalesced_inclusive_scan(group, val, op);
+            if (TyScan == ScanType::exclusive) {
+                scan_result = convert_inclusive_to_exclusive(group,
+                                                             scan_result,
+                                                             _CG_STL_NAMESPACE::forward<TyVal>(val),
+                                                             _CG_STL_NAMESPACE::forward<TyFn>(op));
+            }
+            return scan_result;
+        }
+    };
+
+#if defined(_CG_CPP11_FEATURES) && defined(_CG_ABI_EXPERIMENTAL)
+    template <ScanType TyScan>
+    struct scan_dispatch<details::multi_tile_group_id, TyScan> {
+        template <unsigned int Size, typename ParentT, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto scan(const thread_block_tile<Size, ParentT>& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            using warpType = details::internal_thread_block_tile<32, __static_size_multi_warp_tile_base<Size>>;
+            using TyRet = details::remove_qual<TyVal>;
+            const unsigned int num_warps = Size / 32;
+            // In warp scan result, calculated in warp_lambda
+            TyRet warp_scan;
+
+            // In warp scan, put sum in the warp_scratch_location
+            auto warp_lambda = [&] (const warpType& warp, TyRet* warp_scratch_location) {
+                warp_scan = 
+                    details::coalesced_inclusive_scan(warp, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+                if (warp.thread_rank() + 1 == warp.size()) {
+                    *warp_scratch_location = warp_scan;
+                }
+                if (TyScan == ScanType::exclusive) {
+                    warp_scan = warp.shfl_up(warp_scan, 1);
+                }
+            };
+
+            // Tile of size num_warps performing the final scan part (exclusive scan of warp sums), other threads will add it
+            // to its in-warp scan result
+            auto inter_warp_lambda =
+                [&] (const details::internal_thread_block_tile<num_warps, warpType>& subwarp, TyRet* thread_scratch_location) {
+                    auto thread_val = *thread_scratch_location;
+                    auto result = coalesced_inclusive_scan(subwarp, thread_val, op);
+                    *thread_scratch_location = convert_inclusive_to_exclusive(subwarp, result, thread_val, op);
+            };
+
+            TyRet previous_warps_sum = details::multi_warp_collectives_helper<TyRet>(group, warp_lambda, inter_warp_lambda);
+            if (TyScan == ScanType::exclusive && warpType::thread_rank() == 0) {
+                return previous_warps_sum;
+            }
+            if (warpType::meta_group_rank() == 0) {
+                return warp_scan;
+            }
+            else {
+                return op(warp_scan, previous_warps_sum);
+            }
+        }
+    };
+
+#if defined(_CG_HAS_STL_ATOMICS)
+    template <unsigned int GroupId,  ScanType TyScan>
+    struct scan_update_dispatch;
+
+    template <ScanType TyScan>
+    struct scan_update_dispatch<details::coalesced_group_id, TyScan> {
+        template <typename TyGroup, typename TyAtomic, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto scan(const TyGroup& group, TyAtomic& dst, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            details::remove_qual<TyVal> old;
+
+            // Do regular in group scan
+            auto scan_result = details::coalesced_inclusive_scan(group, val, op);
+
+            // Last thread updates the atomic and distributes its old value to other threads
+            if (group.thread_rank() == group.size() - 1) {                                                
+                old = atomic_update(dst, scan_result, _CG_STL_NAMESPACE::forward<TyFn>(op));
+            }
+            old = group.shfl(old, group.size() - 1);
+            if (TyScan == ScanType::exclusive) {
+                scan_result = convert_inclusive_to_exclusive(group, scan_result, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+            }
+            scan_result = op(old, scan_result);
+            return scan_result;
+        }
+    };
+
+    template <ScanType TyScan>
+    struct scan_update_dispatch<details::multi_tile_group_id, TyScan> {
+        template <unsigned int Size, typename ParentT, typename TyAtomic, typename TyVal, typename TyFn>
+        _CG_STATIC_QUALIFIER auto scan(const thread_block_tile<Size, ParentT>& group, TyAtomic& dst, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+            using warpType = details::internal_thread_block_tile<32, __static_size_multi_warp_tile_base<Size>>;
+            using TyRet = details::remove_qual<TyVal>;
+            const unsigned int num_warps = Size / 32;
+            // In warp scan result, calculated in warp_lambda
+            TyRet warp_scan;
+
+            // In warp scan, put sum in the warp_scratch_location
+            auto warp_lambda = [&] (const warpType& warp, TyRet* warp_scratch_location) {
+                warp_scan = 
+                    details::coalesced_inclusive_scan(warp, _CG_STL_NAMESPACE::forward<TyVal>(val), op);
+                if (warp.thread_rank() + 1 == warp.size()) {
+                    *warp_scratch_location = warp_scan;
+                }
+                if (TyScan == ScanType::exclusive) {
+                    warp_scan = warp.shfl_up(warp_scan, 1);
+                }
+            };
+
+            // Tile of size num_warps performing the final scan part (exclusive scan of warp sums), other threads will add it
+            // to its in-warp scan result
+            auto inter_warp_lambda =
+                [&] (const details::internal_thread_block_tile<num_warps, warpType>& subwarp, TyRet* thread_scratch_location) {
+                    auto thread_val = *thread_scratch_location;
+                    auto scan_result = details::coalesced_inclusive_scan(subwarp, thread_val, op);
+                    TyRet offset;
+                    // Single thread does the atomic update with sum of all contributions and reads the old value.
+                    if (subwarp.thread_rank() == subwarp.size() - 1) {
+                        offset = details::atomic_update(dst, scan_result, op);
+                    }
+                    offset = subwarp.shfl(offset, subwarp.size() - 1);
+                    scan_result = convert_inclusive_to_exclusive(subwarp, scan_result, thread_val, op);
+                    // Add offset read from the atomic to the scanned warp sum.
+                    // Skipping first thread, since it got defautly constructed value from the conversion,
+                    // it should just return the offset received from the thread that did the atomic update.
+                    if (subwarp.thread_rank() != 0) {
+                        offset = op(scan_result, offset);
+                    }
+                    *thread_scratch_location = offset;
+            };
+
+            TyRet previous_warps_sum = details::multi_warp_collectives_helper<TyRet>(group, warp_lambda, inter_warp_lambda);
+            if (TyScan == ScanType::exclusive && warpType::thread_rank() == 0) {
+                return previous_warps_sum;
+            }
+            return op(warp_scan, previous_warps_sum);
+        }
+    };
+#endif
+#endif
+
+    template <typename TyGroup, typename TyInputVal, typename TyRetVal>
+    _CG_QUALIFIER void check_scan_params() {
+        static_assert(details::is_op_type_same<TyInputVal, TyRetVal>::value, "Operator input and output types differ");
+        static_assert(details::scan_group_supported<TyGroup>::value, "This group does not exclusively represent a tile");
+    }
+
+#if defined(_CG_HAS_STL_ATOMICS)
+    template <typename TyGroup, typename TyDstVal, typename TyInputVal, typename TyRetVal>
+    _CG_QUALIFIER void check_scan_update_params() {
+        check_scan_params<TyGroup, TyInputVal, TyRetVal>();
+        static_assert(details::is_op_type_same<TyDstVal, TyInputVal>::value, "Destination and input types differ");
+    }
+#endif
+
+} // details
+
+template <typename TyGroup, typename TyVal, typename TyFn>
+_CG_QUALIFIER auto inclusive_scan(const TyGroup& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+    details::check_scan_params<TyGroup, TyVal, decltype(op(val, val))>();
+
+    using dispatch = details::scan_dispatch<TyGroup::_group_id, details::ScanType::inclusive>;
+    return dispatch::scan(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+}
+
+template <typename TyGroup, typename TyVal>
+_CG_QUALIFIER details::remove_qual<TyVal> inclusive_scan(const TyGroup& group, TyVal&& val) {
+    return inclusive_scan(group, _CG_STL_NAMESPACE::forward<TyVal>(val), cooperative_groups::plus<details::remove_qual<TyVal>>());
+}
+
+template <typename TyGroup, typename TyVal, typename TyFn>
+_CG_QUALIFIER auto exclusive_scan(const TyGroup& group, TyVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+    details::check_scan_params<TyGroup, TyVal, decltype(op(val, val))>();
+
+    using dispatch = details::scan_dispatch<TyGroup::_group_id, details::ScanType::exclusive>;
+    return dispatch::scan(group, _CG_STL_NAMESPACE::forward<TyVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+}
+
+template <typename TyGroup, typename TyVal>
+_CG_QUALIFIER details::remove_qual<TyVal> exclusive_scan(const TyGroup& group, TyVal&& val) {
+    return exclusive_scan(group, _CG_STL_NAMESPACE::forward<TyVal>(val), cooperative_groups::plus<details::remove_qual<TyVal>>());
+}
+
+#if defined(_CG_HAS_STL_ATOMICS) && defined(_CG_ABI_EXPERIMENTAL)
+
+namespace experimental {
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco, typename TyFn>
+    _CG_QUALIFIER auto inclusive_scan_update(const TyGroup& group, cuda::atomic<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+        details::check_scan_update_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::scan_update_dispatch<TyGroup::_group_id, details::ScanType::inclusive>;
+        return dispatch::scan(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco>
+    _CG_QUALIFIER TyVal inclusive_scan_update(const TyGroup& group, cuda::atomic<TyVal, Sco> & dst, TyInputVal&& val) {
+        return inclusive_scan_update(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), cooperative_groups::plus<TyVal>());
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco, typename TyFn>
+    _CG_QUALIFIER auto exclusive_scan_update(const TyGroup& group, cuda::atomic<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+        details::check_scan_update_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::scan_update_dispatch<TyGroup::_group_id, details::ScanType::exclusive>;
+        return dispatch::scan(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco>
+    _CG_QUALIFIER TyVal exclusive_scan_update(const TyGroup& group, cuda::atomic<TyVal, Sco>& dst, TyInputVal&& val) {
+        return exclusive_scan_update(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), cooperative_groups::plus<TyVal>());
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco, typename TyFn>
+    _CG_QUALIFIER auto inclusive_scan_update(const TyGroup& group, const cuda::atomic_ref<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+        details::check_scan_update_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::scan_update_dispatch<TyGroup::_group_id, details::ScanType::inclusive>;
+        return dispatch::scan(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco>
+    _CG_QUALIFIER TyVal inclusive_scan_update(const TyGroup& group, const cuda::atomic_ref<TyVal, Sco> & dst, TyInputVal&& val) {
+        return inclusive_scan_update(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), cooperative_groups::plus<TyVal>());
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco, typename TyFn>
+    _CG_QUALIFIER auto exclusive_scan_update(const TyGroup& group, const cuda::atomic_ref<TyVal, Sco>& dst, TyInputVal&& val, TyFn&& op) -> decltype(op(val, val)) {
+        details::check_scan_update_params<TyGroup, TyVal, details::remove_qual<TyInputVal>, decltype(op(val, val))>();
+
+        using dispatch = details::scan_update_dispatch<TyGroup::_group_id, details::ScanType::exclusive>;
+        return dispatch::scan(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), _CG_STL_NAMESPACE::forward<TyFn>(op));
+    }
+
+    template<typename TyGroup, typename TyVal, typename TyInputVal, cuda::thread_scope Sco>
+    _CG_QUALIFIER TyVal exclusive_scan_update(const TyGroup& group, const cuda::atomic_ref<TyVal, Sco>& dst, TyInputVal&& val) {
+        return exclusive_scan_update(group, dst, _CG_STL_NAMESPACE::forward<TyInputVal>(val), cooperative_groups::plus<TyVal>());
+    }
+}
+
+#endif
+
+_CG_END_NAMESPACE
+
+#endif // _CG_SCAN_H_
diff --git a/ext/cudart/include/cooperative_groups/details/sync.h b/ext/cudart/include/cooperative_groups/details/sync.h
new file mode 100644
index 00000000..af144a68
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/details/sync.h
@@ -0,0 +1,276 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _CG_GRID_H
+#define _CG_GRID_H
+
+#include "info.h"
+
+_CG_BEGIN_NAMESPACE
+
+namespace details
+{
+
+typedef unsigned int barrier_t;
+
+_CG_STATIC_QUALIFIER bool bar_has_flipped(unsigned int old_arrive, unsigned int current_arrive) {
+    return (((old_arrive ^ current_arrive) & 0x80000000) != 0);
+}
+
+_CG_STATIC_QUALIFIER void bar_flush(volatile unsigned int *addr) {
+#if __CUDA_ARCH__ < 700
+    __threadfence();
+#else
+    unsigned int val;
+    asm volatile("ld.acquire.gpu.u32 %0,[%1];" : "=r"(val) : _CG_ASM_PTR_CONSTRAINT((unsigned int*)addr) : "memory");
+    // Avoids compiler warnings from unused variable val
+    (void)(val = val);
+#endif
+}
+
+_CG_STATIC_QUALIFIER unsigned int atomic_add(volatile unsigned int *addr, unsigned int val) {
+    unsigned int old;
+#if __CUDA_ARCH__ < 700
+    old = atomicAdd((unsigned int*)addr, val);
+#else
+    asm volatile("atom.add.release.gpu.u32 %0,[%1],%2;" : "=r"(old) : _CG_ASM_PTR_CONSTRAINT((unsigned int*)addr), "r"(val) : "memory");
+#endif
+    return old;
+}
+
+_CG_STATIC_QUALIFIER void sync_grids(unsigned int expected, volatile barrier_t *arrived) {
+    bool cta_master = (threadIdx.x + threadIdx.y + threadIdx.z == 0);
+    bool gpu_master = (blockIdx.x + blockIdx.y + blockIdx.z == 0);
+
+    __syncthreads();
+
+    if (cta_master) {
+        unsigned int nb = 1;
+        if (gpu_master) {
+            nb = 0x80000000 - (expected - 1);
+        }
+
+        __threadfence();
+
+        unsigned int oldArrive;
+        oldArrive = atomic_add(arrived, nb);
+
+        while (!bar_has_flipped(oldArrive, *arrived));
+
+        //flush barrier upon leaving
+        bar_flush((unsigned int*)arrived);
+    }
+
+    __syncthreads();
+}
+
+/* - Multi warp groups synchronization routines - */
+
+// Get synchronization bit mask of my thread_block_tile of size num_warps. Thread ranks 0..31 have the first bit assigned to them,
+// thread ranks 32..63 second etc 
+// Bit masks are unique for each group, groups of the same size will have the same number of bits set, but on different positions 
+_CG_STATIC_QUALIFIER unsigned int get_group_mask(unsigned int thread_rank, unsigned int num_warps) {
+    return num_warps == 32 ? ~0 : ((1 << num_warps) - 1) << (num_warps * (thread_rank / (num_warps * 32)));
+}
+
+// Default blocking sync.
+_CG_STATIC_QUALIFIER void sync_warps(volatile barrier_t *arrived, unsigned int thread_rank, unsigned int num_warps) {
+    unsigned int warp_id = thread_rank / 32;
+    bool warp_master = (thread_rank % 32 == 0);
+    unsigned int warp_bit = 1 << warp_id;
+    unsigned int group_mask = get_group_mask(thread_rank, num_warps);
+
+    __syncwarp(0xFFFFFFFF);
+
+    if (warp_master) {
+        unsigned int old = atomicOr((unsigned int *)arrived, warp_bit);
+        if (((old | warp_bit) & group_mask) == group_mask) {
+            atomicAnd((unsigned int *)arrived, ~group_mask);
+        }
+        else {
+            while(*arrived & warp_bit);
+        }
+    }
+
+    __syncwarp(0xFFFFFFFF);
+}
+
+// Blocking sync, except the last arriving warp, that releases other warps, returns to do other stuff first.
+// Warp returning true from this function needs to call sync_warps_release.
+_CG_STATIC_QUALIFIER bool sync_warps_last_releases(volatile barrier_t *arrived, unsigned int thread_rank, unsigned int num_warps) {
+    unsigned int warp_id = thread_rank / 32;
+    bool warp_master = (thread_rank % 32 == 0);
+    unsigned int warp_bit = 1 << warp_id;
+    unsigned int group_mask = get_group_mask(thread_rank, num_warps);
+
+    __syncwarp(0xFFFFFFFF);
+
+    unsigned int old = 0;
+    if (warp_master) {
+        old = atomicOr((unsigned int *)arrived, warp_bit);
+    }
+    old = __shfl_sync(0xFFFFFFFF, old, 0);
+    if (((old | warp_bit) & group_mask) == group_mask) {
+        return true;
+    }
+    while(*arrived & warp_bit);
+
+    return false;
+}
+
+// Release my group from the barrier.
+_CG_STATIC_QUALIFIER void sync_warps_release(volatile barrier_t *arrived, bool is_master, unsigned int thread_rank, unsigned int num_warps) {
+    unsigned int group_mask = get_group_mask(thread_rank, num_warps);
+    if (is_master) {
+        atomicAnd((unsigned int *)arrived, ~group_mask);
+    }
+}
+
+// Arrive at my group barrier, but don't block or release the barrier, even if every one arrives.
+// sync_warps_release needs to be called by some warp after this one to reset the barrier.
+_CG_STATIC_QUALIFIER void sync_warps_arrive(volatile barrier_t *arrived, unsigned int thread_rank, unsigned int num_warps) {
+    unsigned int warp_id = thread_rank / 32;
+    bool warp_master = (thread_rank % 32 == 0);
+    unsigned int warp_bit = 1 << warp_id;
+    unsigned int group_mask = get_group_mask(thread_rank, num_warps);
+
+    __syncwarp(0xFFFFFFFF);
+
+    if (warp_master) {
+        unsigned int old = atomicOr((unsigned int *)arrived, warp_bit);
+    }
+    __syncwarp(0xFFFFFFFF);
+}
+
+// Arrive at my group barrier, but don't block. Last arriving warp immediately releases the barrier.
+_CG_STATIC_QUALIFIER void sync_warps_arrive_release(volatile barrier_t *arrived, unsigned int thread_rank, unsigned int num_warps) {
+    unsigned int warp_id = thread_rank / 32;
+    bool warp_master = (thread_rank % 32 == 0);
+    unsigned int warp_bit = 1 << warp_id;
+    unsigned int group_mask = get_group_mask(thread_rank, num_warps);
+
+    __syncwarp(0xFFFFFFFF);
+
+    if (warp_master) {
+        unsigned int old = atomicOr((unsigned int *)arrived, warp_bit);
+        if (((old | warp_bit) & group_mask) == group_mask) {
+            atomicAnd((unsigned int *)arrived, ~group_mask);
+        }
+    }
+    __syncwarp(0xFFFFFFFF);
+}
+
+// Wait for my warp to be released from the barrier. Warp must have arrived first.
+_CG_STATIC_QUALIFIER void sync_warps_wait(volatile barrier_t *arrived, unsigned int thread_rank) {
+    unsigned int warp_id = thread_rank / 32;
+    unsigned int warp_bit = 1 << warp_id;
+
+    while(*arrived & warp_bit);
+    __syncwarp(0xFFFFFFFF);
+}
+
+// Arrive at my group barrier and block. Barrier is not released, even if every warp arrives.
+// sync_warps_release needs to be called by some warp after this one.
+_CG_STATIC_QUALIFIER void sync_warps_wait_for_release(
+        volatile barrier_t *arrived,
+        bool is_master,
+        unsigned int thread_rank,
+        unsigned int num_warps) {
+
+    unsigned int warp_id = thread_rank / 32;
+    unsigned int warp_bit = 1 << warp_id;
+
+    __syncwarp(0xFFFFFFFF);
+
+    if (is_master) {
+        atomicOr((unsigned int *)arrived, warp_bit);
+        while(*arrived & warp_bit);
+    }
+
+    __syncwarp(0xFFFFFFFF);
+}
+
+enum wait_for_warps_kind {
+    wait_for_all_other_warps,
+    wait_for_specific_warp
+};
+
+// Wait for a combinantion of warps specified by Kind parameter to arrive at the group barrier.
+// This function does not arrive at the barrier.
+template <wait_for_warps_kind Kind>
+_CG_QUALIFIER void sync_warps_wait_for_warps(
+        unsigned int wait_warp_id, volatile barrier_t *arrived, unsigned int thread_rank, unsigned int num_warps);
+
+template <>
+_CG_QUALIFIER void sync_warps_wait_for_warps<wait_for_all_other_warps>(
+        unsigned int wait_warp_id,
+        volatile barrier_t *arrived,
+        unsigned int thread_rank,
+        unsigned int num_warps) {
+
+    unsigned int wait_mask = get_group_mask(thread_rank, num_warps);
+    wait_mask &= ~(1 << wait_warp_id);
+    while((*arrived & wait_mask) != wait_mask);
+}
+
+template <>
+_CG_QUALIFIER void sync_warps_wait_for_warps<wait_for_specific_warp>(
+        unsigned int wait_warp_id,
+        volatile barrier_t *arrived,
+        unsigned int thread_rank,
+        unsigned int num_warps) {
+
+    unsigned int wait_mask = 1 << wait_warp_id;
+    while((*arrived & wait_mask) != wait_mask);
+}
+
+} // details
+
+_CG_END_NAMESPACE
+
+#endif // _CG_GRID_H
diff --git a/ext/cudart/include/cooperative_groups/memcpy_async.h b/ext/cudart/include/cooperative_groups/memcpy_async.h
new file mode 100644
index 00000000..50b907d9
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/memcpy_async.h
@@ -0,0 +1,62 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _COOPERATIVE_GROUPS_MEMCPY_ASYNC
+#define _COOPERATIVE_GROUPS_MEMCPY_ASYNC
+
+#include "../cooperative_groups.h"
+#include "details/info.h"
+
+#ifdef _CG_CPP11_FEATURES
+# include "details/async.h"
+#else
+# error This file requires compiler support for the ISO C++ 2011 standard. This support must be enabled with the \
+         -std=c++11 compiler option.
+#endif
+
+#endif // _COOPERATIVE_GROUPS_MEMCPY_ASYNC
diff --git a/ext/cudart/include/cooperative_groups/reduce.h b/ext/cudart/include/cooperative_groups/reduce.h
new file mode 100644
index 00000000..3c87d780
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/reduce.h
@@ -0,0 +1,63 @@
+ /* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _COOPERATIVE_GROUPS_REDUCE_H
+#define _COOPERATIVE_GROUPS_REDUCE_H
+
+#include "../cooperative_groups.h"
+#include "details/info.h"
+
+#ifdef _CG_CPP11_FEATURES
+# include "details/reduce.h"
+#else
+# error This file requires compiler support for the ISO C++ 2011 standard. This support must be enabled with the \
+         -std=c++11 compiler option.
+#endif
+
+
+#endif //_COOPERATIVE_GROUPS_REDUCE_H
diff --git a/ext/cudart/include/cooperative_groups/scan.h b/ext/cudart/include/cooperative_groups/scan.h
new file mode 100644
index 00000000..9bc27078
--- /dev/null
+++ b/ext/cudart/include/cooperative_groups/scan.h
@@ -0,0 +1,63 @@
+/* Copyright 1993-2016 NVIDIA Corporation.  All rights reserved.
+  *
+  * NOTICE TO LICENSEE:
+  *
+  * The source code and/or documentation ("Licensed Deliverables") are
+  * subject to NVIDIA intellectual property rights under U.S. and
+  * international Copyright laws.
+  *
+  * The Licensed Deliverables contained herein are PROPRIETARY and
+  * CONFIDENTIAL to NVIDIA and are being provided under the terms and
+  * conditions of a form of NVIDIA software license agreement by and
+  * between NVIDIA and Licensee ("License Agreement") or electronically
+  * accepted by Licensee.  Notwithstanding any terms or conditions to
+  * the contrary in the License Agreement, reproduction or disclosure
+  * of the Licensed Deliverables to any third party without the express
+  * written consent of NVIDIA is prohibited.
+  *
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+  * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  THEY ARE
+  * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+  * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+  * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+  * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+  * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+  * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+  * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+  * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+  * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+  * OF THESE LICENSED DELIVERABLES.
+  *
+  * U.S. Government End Users.  These Licensed Deliverables are a
+  * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+  * 1995), consisting of "commercial computer software" and "commercial
+  * computer software documentation" as such terms are used in 48
+  * C.F.R. 12.212 (SEPT 1995) and are provided to the U.S. Government
+  * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+  * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+  * U.S. Government End Users acquire the Licensed Deliverables with
+  * only those rights set forth herein.
+  *
+  * Any use of the Licensed Deliverables in individual and commercial
+  * software must include, in the user documentation and internal
+  * comments to the code, the above Disclaimer and U.S. Government End
+  * Users Notice.
+  */
+
+#ifndef _COOPERATIVE_GROUPS_SCAN_H
+#define _COOPERATIVE_GROUPS_SCAN_H
+
+#include "../cooperative_groups.h"
+#include "details/info.h"
+
+#ifdef _CG_CPP11_FEATURES
+# include "details/scan.h"
+#else
+# error This file requires compiler support for the ISO C++ 2011 standard. This support must be enabled with the \
+         -std=c++11 compiler option.
+#endif
+
+
+#endif //_COOPERATIVE_GROUPS_SCAN_H
diff --git a/ext/cudart/include/cuComplex.h b/ext/cudart/include/cuComplex.h
new file mode 100644
index 00000000..7b167111
--- /dev/null
+++ b/ext/cudart/include/cuComplex.h
@@ -0,0 +1,348 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(CU_COMPLEX_H_)
+#define CU_COMPLEX_H_
+
+#if !defined(__CUDACC_RTC__)
+#if defined(__GNUC__)
+#if defined(__clang__) || (!defined(__PGIC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)))
+#pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+#endif
+#endif
+
+/* When trying to include C header file in C++ Code extern "C" is required
+ * But the Standard QNX headers already have ifdef extern in them when compiling C++ Code
+ * extern "C" cannot be nested
+ * Hence keep the header out of extern "C" block
+ */
+
+#if !defined(__CUDACC__)
+#include <math.h>       /* import fabsf, sqrt */
+#endif /* !defined(__CUDACC__) */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+#include "vector_types.h"
+
+typedef float2 cuFloatComplex;
+
+__host__ __device__ static __inline__ float cuCrealf (cuFloatComplex x) 
+{ 
+    return x.x; 
+}
+
+__host__ __device__ static __inline__ float cuCimagf (cuFloatComplex x) 
+{ 
+    return x.y; 
+}
+
+__host__ __device__ static __inline__ cuFloatComplex make_cuFloatComplex 
+                                                             (float r, float i)
+{
+    cuFloatComplex res;
+    res.x = r;
+    res.y = i;
+    return res;
+}
+
+__host__ __device__ static __inline__ cuFloatComplex cuConjf (cuFloatComplex x)
+{
+    return make_cuFloatComplex (cuCrealf(x), -cuCimagf(x));
+}
+__host__ __device__ static __inline__ cuFloatComplex cuCaddf (cuFloatComplex x,
+                                                              cuFloatComplex y)
+{
+    return make_cuFloatComplex (cuCrealf(x) + cuCrealf(y), 
+                                cuCimagf(x) + cuCimagf(y));
+}
+
+__host__ __device__ static __inline__ cuFloatComplex cuCsubf (cuFloatComplex x,
+                                                              cuFloatComplex y)
+{
+        return make_cuFloatComplex (cuCrealf(x) - cuCrealf(y), 
+                                    cuCimagf(x) - cuCimagf(y));
+}
+
+/* This implementation could suffer from intermediate overflow even though
+ * the final result would be in range. However, various implementations do
+ * not guard against this (presumably to avoid losing performance), so we 
+ * don't do it either to stay competitive.
+ */
+__host__ __device__ static __inline__ cuFloatComplex cuCmulf (cuFloatComplex x,
+                                                              cuFloatComplex y)
+{
+    cuFloatComplex prod;
+    prod = make_cuFloatComplex  ((cuCrealf(x) * cuCrealf(y)) - 
+                                 (cuCimagf(x) * cuCimagf(y)),
+                                 (cuCrealf(x) * cuCimagf(y)) + 
+                                 (cuCimagf(x) * cuCrealf(y)));
+    return prod;
+}
+
+/* This implementation guards against intermediate underflow and overflow
+ * by scaling. Such guarded implementations are usually the default for
+ * complex library implementations, with some also offering an unguarded,
+ * faster version.
+ */
+__host__ __device__ static __inline__ cuFloatComplex cuCdivf (cuFloatComplex x,
+                                                              cuFloatComplex y)
+{
+    cuFloatComplex quot;
+    float s = fabsf(cuCrealf(y)) + fabsf(cuCimagf(y));
+    float oos = 1.0f / s;
+    float ars = cuCrealf(x) * oos;
+    float ais = cuCimagf(x) * oos;
+    float brs = cuCrealf(y) * oos;
+    float bis = cuCimagf(y) * oos;
+    s = (brs * brs) + (bis * bis);
+    oos = 1.0f / s;
+    quot = make_cuFloatComplex (((ars * brs) + (ais * bis)) * oos,
+                                ((ais * brs) - (ars * bis)) * oos);
+    return quot;
+}
+
+/* 
+ * We would like to call hypotf(), but it's not available on all platforms.
+ * This discrete implementation guards against intermediate underflow and 
+ * overflow by scaling. Otherwise we would lose half the exponent range. 
+ * There are various ways of doing guarded computation. For now chose the 
+ * simplest and fastest solution, however this may suffer from inaccuracies 
+ * if sqrt and division are not IEEE compliant. 
+ */
+__host__ __device__ static __inline__ float cuCabsf (cuFloatComplex x)
+{
+    float a = cuCrealf(x);
+    float b = cuCimagf(x);
+    float v, w, t;
+    a = fabsf(a);
+    b = fabsf(b);
+    if (a > b) {
+        v = a;
+        w = b; 
+    } else {
+        v = b;
+        w = a;
+    }
+    t = w / v;
+    t = 1.0f + t * t;
+    t = v * sqrtf(t);
+    if ((v == 0.0f) || (v > 3.402823466e38f) || (w > 3.402823466e38f)) {
+        t = v + w;
+    }
+    return t;
+}
+
+/* Double precision */
+typedef double2 cuDoubleComplex;
+
+__host__ __device__ static __inline__ double cuCreal (cuDoubleComplex x) 
+{ 
+    return x.x; 
+}
+
+__host__ __device__ static __inline__ double cuCimag (cuDoubleComplex x) 
+{ 
+    return x.y; 
+}
+
+__host__ __device__ static __inline__ cuDoubleComplex make_cuDoubleComplex 
+                                                           (double r, double i)
+{
+    cuDoubleComplex res;
+    res.x = r;
+    res.y = i;
+    return res;
+}
+
+__host__ __device__ static __inline__ cuDoubleComplex cuConj(cuDoubleComplex x)
+{
+    return make_cuDoubleComplex (cuCreal(x), -cuCimag(x));
+}
+
+__host__ __device__ static __inline__ cuDoubleComplex cuCadd(cuDoubleComplex x,
+                                                             cuDoubleComplex y)
+{
+    return make_cuDoubleComplex (cuCreal(x) + cuCreal(y), 
+                                 cuCimag(x) + cuCimag(y));
+}
+
+__host__ __device__ static __inline__ cuDoubleComplex cuCsub(cuDoubleComplex x,
+                                                             cuDoubleComplex y)
+{
+    return make_cuDoubleComplex (cuCreal(x) - cuCreal(y), 
+                                 cuCimag(x) - cuCimag(y));
+}
+
+/* This implementation could suffer from intermediate overflow even though
+ * the final result would be in range. However, various implementations do
+ * not guard against this (presumably to avoid losing performance), so we 
+ * don't do it either to stay competitive.
+ */
+__host__ __device__ static __inline__ cuDoubleComplex cuCmul(cuDoubleComplex x,
+                                                             cuDoubleComplex y)
+{
+    cuDoubleComplex prod;
+    prod = make_cuDoubleComplex ((cuCreal(x) * cuCreal(y)) - 
+                                 (cuCimag(x) * cuCimag(y)),
+                                 (cuCreal(x) * cuCimag(y)) + 
+                                 (cuCimag(x) * cuCreal(y)));
+    return prod;
+}
+
+/* This implementation guards against intermediate underflow and overflow
+ * by scaling. Such guarded implementations are usually the default for
+ * complex library implementations, with some also offering an unguarded,
+ * faster version.
+ */
+__host__ __device__ static __inline__ cuDoubleComplex cuCdiv(cuDoubleComplex x,
+                                                             cuDoubleComplex y)
+{
+    cuDoubleComplex quot;
+    double s = (fabs(cuCreal(y))) + (fabs(cuCimag(y)));
+    double oos = 1.0 / s;
+    double ars = cuCreal(x) * oos;
+    double ais = cuCimag(x) * oos;
+    double brs = cuCreal(y) * oos;
+    double bis = cuCimag(y) * oos;
+    s = (brs * brs) + (bis * bis);
+    oos = 1.0 / s;
+    quot = make_cuDoubleComplex (((ars * brs) + (ais * bis)) * oos,
+                                 ((ais * brs) - (ars * bis)) * oos);
+    return quot;
+}
+
+/* This implementation guards against intermediate underflow and overflow
+ * by scaling. Otherwise we would lose half the exponent range. There are
+ * various ways of doing guarded computation. For now chose the simplest
+ * and fastest solution, however this may suffer from inaccuracies if sqrt
+ * and division are not IEEE compliant.
+ */
+__host__ __device__ static __inline__ double cuCabs (cuDoubleComplex x)
+{
+    double a = cuCreal(x);
+    double b = cuCimag(x);
+    double v, w, t;
+    a = fabs(a);
+    b = fabs(b);
+    if (a > b) {
+        v = a;
+        w = b; 
+    } else {
+        v = b;
+        w = a;
+    }
+    t = w / v;
+    t = 1.0 + t * t;
+    t = v * sqrt(t);
+    if ((v == 0.0) || 
+        (v > 1.79769313486231570e+308) || (w > 1.79769313486231570e+308)) {
+        t = v + w;
+    }
+    return t;
+}
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+/* aliases */
+typedef cuFloatComplex cuComplex;
+__host__ __device__ static __inline__ cuComplex make_cuComplex (float x, 
+                                                                float y) 
+{ 
+    return make_cuFloatComplex (x, y); 
+}
+
+/* float-to-double promotion */
+__host__ __device__ static __inline__ cuDoubleComplex cuComplexFloatToDouble
+                                                      (cuFloatComplex c)
+{
+    return make_cuDoubleComplex ((double)cuCrealf(c), (double)cuCimagf(c));
+}
+
+__host__ __device__ static __inline__ cuFloatComplex cuComplexDoubleToFloat
+(cuDoubleComplex c)
+{
+	return make_cuFloatComplex ((float)cuCreal(c), (float)cuCimag(c));
+}
+
+
+__host__ __device__ static __inline__  cuComplex cuCfmaf( cuComplex x, cuComplex y, cuComplex d)
+{
+    float real_res;
+    float imag_res;
+    
+    real_res = (cuCrealf(x) *  cuCrealf(y)) + cuCrealf(d);
+    imag_res = (cuCrealf(x) *  cuCimagf(y)) + cuCimagf(d);
+            
+    real_res = -(cuCimagf(x) * cuCimagf(y))  + real_res;  
+    imag_res =  (cuCimagf(x) *  cuCrealf(y)) + imag_res;          
+     
+    return make_cuComplex(real_res, imag_res);
+}
+
+__host__ __device__ static __inline__  cuDoubleComplex cuCfma( cuDoubleComplex x, cuDoubleComplex y, cuDoubleComplex d)
+{
+    double real_res;
+    double imag_res;
+    
+    real_res = (cuCreal(x) *  cuCreal(y)) + cuCreal(d);
+    imag_res = (cuCreal(x) *  cuCimag(y)) + cuCimag(d);
+            
+    real_res = -(cuCimag(x) * cuCimag(y))  + real_res;  
+    imag_res =  (cuCimag(x) *  cuCreal(y)) + imag_res;     
+     
+    return make_cuDoubleComplex(real_res, imag_res);
+}
+
+#endif /* !defined(CU_COMPLEX_H_) */
diff --git a/ext/cudart/include/cuda.h b/ext/cudart/include/cuda.h
new file mode 100644
index 00000000..3d82e525
--- /dev/null
+++ b/ext/cudart/include/cuda.h
@@ -0,0 +1,20295 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef __cuda_cuda_h__
+#define __cuda_cuda_h__
+
+
+
+#include <stdlib.h>
+#ifdef _MSC_VER
+typedef unsigned __int32 cuuint32_t;
+typedef unsigned __int64 cuuint64_t;
+#else
+#include <stdint.h>
+typedef uint32_t cuuint32_t;
+typedef uint64_t cuuint64_t;
+#endif
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+
+#if defined(CUDA_FORCE_API_VERSION)
+#error "CUDA_FORCE_API_VERSION is no longer supported."
+#endif
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(CUDA_API_PER_THREAD_DEFAULT_STREAM)
+    #define __CUDA_API_PER_THREAD_DEFAULT_STREAM
+    #define __CUDA_API_PTDS(api) api ## _ptds
+    #define __CUDA_API_PTSZ(api) api ## _ptsz
+#else
+    #define __CUDA_API_PTDS(api) api
+    #define __CUDA_API_PTSZ(api) api
+#endif
+
+#define cuDeviceTotalMem                    cuDeviceTotalMem_v2
+#define cuCtxCreate                         cuCtxCreate_v2
+#define cuCtxCreate_v3                      cuCtxCreate_v3
+#define cuModuleGetGlobal                   cuModuleGetGlobal_v2
+#define cuMemGetInfo                        cuMemGetInfo_v2
+#define cuMemAlloc                          cuMemAlloc_v2
+#define cuMemAllocPitch                     cuMemAllocPitch_v2
+#define cuMemFree                           cuMemFree_v2
+#define cuMemGetAddressRange                cuMemGetAddressRange_v2
+#define cuMemAllocHost                      cuMemAllocHost_v2
+#define cuMemHostGetDevicePointer           cuMemHostGetDevicePointer_v2
+#define cuMemcpyHtoD                        __CUDA_API_PTDS(cuMemcpyHtoD_v2)
+#define cuMemcpyDtoH                        __CUDA_API_PTDS(cuMemcpyDtoH_v2)
+#define cuMemcpyDtoD                        __CUDA_API_PTDS(cuMemcpyDtoD_v2)
+#define cuMemcpyDtoA                        __CUDA_API_PTDS(cuMemcpyDtoA_v2)
+#define cuMemcpyAtoD                        __CUDA_API_PTDS(cuMemcpyAtoD_v2)
+#define cuMemcpyHtoA                        __CUDA_API_PTDS(cuMemcpyHtoA_v2)
+#define cuMemcpyAtoH                        __CUDA_API_PTDS(cuMemcpyAtoH_v2)
+#define cuMemcpyAtoA                        __CUDA_API_PTDS(cuMemcpyAtoA_v2)
+#define cuMemcpyHtoAAsync                   __CUDA_API_PTSZ(cuMemcpyHtoAAsync_v2)
+#define cuMemcpyAtoHAsync                   __CUDA_API_PTSZ(cuMemcpyAtoHAsync_v2)
+#define cuMemcpy2D                          __CUDA_API_PTDS(cuMemcpy2D_v2)
+#define cuMemcpy2DUnaligned                 __CUDA_API_PTDS(cuMemcpy2DUnaligned_v2)
+#define cuMemcpy3D                          __CUDA_API_PTDS(cuMemcpy3D_v2)
+#define cuMemcpyHtoDAsync                   __CUDA_API_PTSZ(cuMemcpyHtoDAsync_v2)
+#define cuMemcpyDtoHAsync                   __CUDA_API_PTSZ(cuMemcpyDtoHAsync_v2)
+#define cuMemcpyDtoDAsync                   __CUDA_API_PTSZ(cuMemcpyDtoDAsync_v2)
+#define cuMemcpy2DAsync                     __CUDA_API_PTSZ(cuMemcpy2DAsync_v2)
+#define cuMemcpy3DAsync                     __CUDA_API_PTSZ(cuMemcpy3DAsync_v2)
+#define cuMemsetD8                          __CUDA_API_PTDS(cuMemsetD8_v2)
+#define cuMemsetD16                         __CUDA_API_PTDS(cuMemsetD16_v2)
+#define cuMemsetD32                         __CUDA_API_PTDS(cuMemsetD32_v2)
+#define cuMemsetD2D8                        __CUDA_API_PTDS(cuMemsetD2D8_v2)
+#define cuMemsetD2D16                       __CUDA_API_PTDS(cuMemsetD2D16_v2)
+#define cuMemsetD2D32                       __CUDA_API_PTDS(cuMemsetD2D32_v2)
+#define cuArrayCreate                       cuArrayCreate_v2
+#define cuArrayGetDescriptor                cuArrayGetDescriptor_v2
+#define cuArray3DCreate                     cuArray3DCreate_v2
+#define cuArray3DGetDescriptor              cuArray3DGetDescriptor_v2
+#define cuTexRefSetAddress                  cuTexRefSetAddress_v2
+#define cuTexRefGetAddress                  cuTexRefGetAddress_v2
+#define cuGraphicsResourceGetMappedPointer  cuGraphicsResourceGetMappedPointer_v2
+#define cuCtxDestroy                        cuCtxDestroy_v2
+#define cuCtxPopCurrent                     cuCtxPopCurrent_v2
+#define cuCtxPushCurrent                    cuCtxPushCurrent_v2
+#define cuStreamDestroy                     cuStreamDestroy_v2
+#define cuEventDestroy                      cuEventDestroy_v2
+#define cuTexRefSetAddress2D                cuTexRefSetAddress2D_v3
+#define cuLinkCreate                        cuLinkCreate_v2
+#define cuLinkAddData                       cuLinkAddData_v2
+#define cuLinkAddFile                       cuLinkAddFile_v2
+#define cuMemHostRegister                   cuMemHostRegister_v2
+#define cuGraphicsResourceSetMapFlags       cuGraphicsResourceSetMapFlags_v2
+#define cuStreamBeginCapture                __CUDA_API_PTSZ(cuStreamBeginCapture_v2)
+#define cuDevicePrimaryCtxRelease           cuDevicePrimaryCtxRelease_v2
+#define cuDevicePrimaryCtxReset             cuDevicePrimaryCtxReset_v2
+#define cuDevicePrimaryCtxSetFlags          cuDevicePrimaryCtxSetFlags_v2
+#define cuDeviceGetUuid_v2                  cuDeviceGetUuid_v2
+#define cuIpcOpenMemHandle                  cuIpcOpenMemHandle_v2
+#define cuGraphInstantiate                  cuGraphInstantiate_v2
+
+#if defined(__CUDA_API_PER_THREAD_DEFAULT_STREAM)
+    #define cuMemcpy                            __CUDA_API_PTDS(cuMemcpy)
+    #define cuMemcpyAsync                       __CUDA_API_PTSZ(cuMemcpyAsync)
+    #define cuMemcpyPeer                        __CUDA_API_PTDS(cuMemcpyPeer)
+    #define cuMemcpyPeerAsync                   __CUDA_API_PTSZ(cuMemcpyPeerAsync)
+    #define cuMemcpy3DPeer                      __CUDA_API_PTDS(cuMemcpy3DPeer)
+    #define cuMemcpy3DPeerAsync                 __CUDA_API_PTSZ(cuMemcpy3DPeerAsync)
+    #define cuMemPrefetchAsync                  __CUDA_API_PTSZ(cuMemPrefetchAsync)
+
+    #define cuMemsetD8Async                     __CUDA_API_PTSZ(cuMemsetD8Async)
+    #define cuMemsetD16Async                    __CUDA_API_PTSZ(cuMemsetD16Async)
+    #define cuMemsetD32Async                    __CUDA_API_PTSZ(cuMemsetD32Async)
+    #define cuMemsetD2D8Async                   __CUDA_API_PTSZ(cuMemsetD2D8Async)
+    #define cuMemsetD2D16Async                  __CUDA_API_PTSZ(cuMemsetD2D16Async)
+    #define cuMemsetD2D32Async                  __CUDA_API_PTSZ(cuMemsetD2D32Async)
+
+    #define cuStreamGetPriority                 __CUDA_API_PTSZ(cuStreamGetPriority)
+    #define cuStreamGetFlags                    __CUDA_API_PTSZ(cuStreamGetFlags)
+    #define cuStreamGetCtx                      __CUDA_API_PTSZ(cuStreamGetCtx)
+    #define cuStreamWaitEvent                   __CUDA_API_PTSZ(cuStreamWaitEvent)
+    #define cuStreamEndCapture                  __CUDA_API_PTSZ(cuStreamEndCapture)
+    #define cuStreamIsCapturing                 __CUDA_API_PTSZ(cuStreamIsCapturing)
+    #define cuStreamGetCaptureInfo              __CUDA_API_PTSZ(cuStreamGetCaptureInfo)
+    #define cuStreamGetCaptureInfo_v2           __CUDA_API_PTSZ(cuStreamGetCaptureInfo_v2)
+    #define cuStreamUpdateCaptureDependencies   __CUDA_API_PTSZ(cuStreamUpdateCaptureDependencies)
+    #define cuStreamAddCallback                 __CUDA_API_PTSZ(cuStreamAddCallback)
+    #define cuStreamAttachMemAsync              __CUDA_API_PTSZ(cuStreamAttachMemAsync)
+    #define cuStreamQuery                       __CUDA_API_PTSZ(cuStreamQuery)
+    #define cuStreamSynchronize                 __CUDA_API_PTSZ(cuStreamSynchronize)
+    #define cuEventRecord                       __CUDA_API_PTSZ(cuEventRecord)
+    #define cuEventRecordWithFlags              __CUDA_API_PTSZ(cuEventRecordWithFlags)
+    #define cuLaunchKernel                      __CUDA_API_PTSZ(cuLaunchKernel)
+    #define cuLaunchKernelEx                    __CUDA_API_PTSZ(cuLaunchKernelEx)
+    #define cuLaunchHostFunc                    __CUDA_API_PTSZ(cuLaunchHostFunc)
+    #define cuGraphicsMapResources              __CUDA_API_PTSZ(cuGraphicsMapResources)
+    #define cuGraphicsUnmapResources            __CUDA_API_PTSZ(cuGraphicsUnmapResources)
+
+    #define cuStreamWriteValue32                __CUDA_API_PTSZ(cuStreamWriteValue32)
+    #define cuStreamWaitValue32                 __CUDA_API_PTSZ(cuStreamWaitValue32)
+    #define cuStreamWriteValue64                __CUDA_API_PTSZ(cuStreamWriteValue64)
+    #define cuStreamWaitValue64                 __CUDA_API_PTSZ(cuStreamWaitValue64)
+    #define cuStreamBatchMemOp                  __CUDA_API_PTSZ(cuStreamBatchMemOp)
+    #define cuStreamWriteValue32_v2             __CUDA_API_PTSZ(cuStreamWriteValue32_v2)
+    #define cuStreamWaitValue32_v2              __CUDA_API_PTSZ(cuStreamWaitValue32_v2)
+    #define cuStreamWriteValue64_v2             __CUDA_API_PTSZ(cuStreamWriteValue64_v2)
+    #define cuStreamWaitValue64_v2              __CUDA_API_PTSZ(cuStreamWaitValue64_v2)
+    #define cuStreamBatchMemOp_v2               __CUDA_API_PTSZ(cuStreamBatchMemOp_v2)
+
+    #define cuLaunchCooperativeKernel           __CUDA_API_PTSZ(cuLaunchCooperativeKernel)
+
+    #define cuSignalExternalSemaphoresAsync     __CUDA_API_PTSZ(cuSignalExternalSemaphoresAsync)
+    #define cuWaitExternalSemaphoresAsync       __CUDA_API_PTSZ(cuWaitExternalSemaphoresAsync)
+
+    #define cuGraphUpload                       __CUDA_API_PTSZ(cuGraphUpload)
+    #define cuGraphLaunch                       __CUDA_API_PTSZ(cuGraphLaunch)
+    #define cuStreamCopyAttributes              __CUDA_API_PTSZ(cuStreamCopyAttributes)
+    #define cuStreamGetAttribute                __CUDA_API_PTSZ(cuStreamGetAttribute)
+    #define cuStreamSetAttribute                __CUDA_API_PTSZ(cuStreamSetAttribute)
+    #define cuMemMapArrayAsync                  __CUDA_API_PTSZ(cuMemMapArrayAsync)
+
+    #define cuMemFreeAsync                      __CUDA_API_PTSZ(cuMemFreeAsync)
+    #define cuMemAllocAsync                     __CUDA_API_PTSZ(cuMemAllocAsync)
+    #define cuMemAllocFromPoolAsync             __CUDA_API_PTSZ(cuMemAllocFromPoolAsync)
+#endif
+
+/**
+ * \file cuda.h
+ * \brief Header file for the CUDA Toolkit application programming interface.
+ *
+ * \file cudaGL.h
+ * \brief Header file for the OpenGL interoperability functions of the
+ * low-level CUDA driver application programming interface.
+ *
+ * \file cudaD3D9.h
+ * \brief Header file for the Direct3D 9 interoperability functions of the
+ * low-level CUDA driver application programming interface.
+ */
+
+/**
+ * \defgroup CUDA_TYPES Data types used by CUDA driver
+ * @{
+ */
+
+/**
+ * CUDA API version number
+ */
+#define CUDA_VERSION 11080
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * CUDA device pointer
+ * CUdeviceptr is defined as an unsigned integer type whose size matches the size of a pointer on the target platform.
+ */
+#if defined(_WIN64) || defined(__LP64__)
+typedef unsigned long long CUdeviceptr_v2;
+#else
+typedef unsigned int CUdeviceptr_v2;
+#endif
+typedef CUdeviceptr_v2 CUdeviceptr;                          /**< CUDA device pointer */
+
+typedef int CUdevice_v1;                                     /**< CUDA device */
+typedef CUdevice_v1 CUdevice;                                /**< CUDA device */
+typedef struct CUctx_st *CUcontext;                          /**< CUDA context */
+typedef struct CUmod_st *CUmodule;                           /**< CUDA module */
+typedef struct CUfunc_st *CUfunction;                        /**< CUDA function */
+typedef struct CUarray_st *CUarray;                          /**< CUDA array */
+typedef struct CUmipmappedArray_st *CUmipmappedArray;        /**< CUDA mipmapped array */
+typedef struct CUtexref_st *CUtexref;                        /**< CUDA texture reference */
+typedef struct CUsurfref_st *CUsurfref;                      /**< CUDA surface reference */
+typedef struct CUevent_st *CUevent;                          /**< CUDA event */
+typedef struct CUstream_st *CUstream;                        /**< CUDA stream */
+typedef struct CUgraphicsResource_st *CUgraphicsResource;    /**< CUDA graphics interop resource */
+typedef unsigned long long CUtexObject_v1;                   /**< An opaque value that represents a CUDA texture object */
+typedef CUtexObject_v1 CUtexObject;                          /**< An opaque value that represents a CUDA texture object */
+typedef unsigned long long CUsurfObject_v1;                  /**< An opaque value that represents a CUDA surface object */
+typedef CUsurfObject_v1 CUsurfObject;                        /**< An opaque value that represents a CUDA surface object */ 
+typedef struct CUextMemory_st *CUexternalMemory;             /**< CUDA external memory */
+typedef struct CUextSemaphore_st *CUexternalSemaphore;       /**< CUDA external semaphore */
+typedef struct CUgraph_st *CUgraph;                          /**< CUDA graph */
+typedef struct CUgraphNode_st *CUgraphNode;                  /**< CUDA graph node */
+typedef struct CUgraphExec_st *CUgraphExec;                  /**< CUDA executable graph */
+typedef struct CUmemPoolHandle_st *CUmemoryPool;             /**< CUDA memory pool */
+typedef struct CUuserObject_st *CUuserObject;                /**< CUDA user object for graphs */
+
+#ifndef CU_UUID_HAS_BEEN_DEFINED
+#define CU_UUID_HAS_BEEN_DEFINED
+typedef struct CUuuid_st {                                /**< CUDA definition of UUID */
+    char bytes[16];
+} CUuuid;
+#endif
+
+/**
+ * CUDA IPC handle size
+ */
+#define CU_IPC_HANDLE_SIZE 64
+
+/**
+ * CUDA IPC event handle
+ */
+typedef struct CUipcEventHandle_st {
+    char reserved[CU_IPC_HANDLE_SIZE];
+} CUipcEventHandle_v1;
+typedef CUipcEventHandle_v1 CUipcEventHandle;
+
+/**
+ * CUDA IPC mem handle
+ */
+typedef struct CUipcMemHandle_st {
+    char reserved[CU_IPC_HANDLE_SIZE];
+} CUipcMemHandle_v1;
+typedef CUipcMemHandle_v1 CUipcMemHandle;
+
+/**
+ * CUDA Ipc Mem Flags
+ */
+typedef enum CUipcMem_flags_enum {
+    CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS = 0x1 /**< Automatically enable peer access between remote devices as needed */
+} CUipcMem_flags;
+
+
+/**
+ * CUDA Mem Attach Flags
+ */
+typedef enum CUmemAttach_flags_enum {
+    CU_MEM_ATTACH_GLOBAL = 0x1, /**< Memory can be accessed by any stream on any device */
+    CU_MEM_ATTACH_HOST   = 0x2, /**< Memory cannot be accessed by any stream on any device */
+    CU_MEM_ATTACH_SINGLE = 0x4  /**< Memory can only be accessed by a single stream on the associated device */
+} CUmemAttach_flags;
+
+/**
+ * Context creation flags
+ */
+typedef enum CUctx_flags_enum {
+    CU_CTX_SCHED_AUTO          = 0x00, /**< Automatic scheduling */
+    CU_CTX_SCHED_SPIN          = 0x01, /**< Set spin as default scheduling */
+    CU_CTX_SCHED_YIELD         = 0x02, /**< Set yield as default scheduling */
+    CU_CTX_SCHED_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling */
+    CU_CTX_BLOCKING_SYNC       = 0x04, /**< Set blocking synchronization as default scheduling
+                                         *  \deprecated This flag was deprecated as of CUDA 4.0
+                                         *  and was replaced with ::CU_CTX_SCHED_BLOCKING_SYNC. */
+    CU_CTX_SCHED_MASK          = 0x07,
+    CU_CTX_MAP_HOST            = 0x08, /**< \deprecated This flag was deprecated as of CUDA 11.0 
+                                         *  and it no longer has any effect. All contexts 
+                                         *  as of CUDA 3.2 behave as though the flag is enabled. */
+    CU_CTX_LMEM_RESIZE_TO_MAX  = 0x10, /**< Keep local memory allocation after launch */
+    CU_CTX_FLAGS_MASK          = 0x1f
+} CUctx_flags;
+
+/**
+ * Event sched flags
+ */
+typedef enum CUevent_sched_flags_enum {
+    CU_EVENT_SCHED_AUTO = 0x00, /**< Automatic scheduling */
+    CU_EVENT_SCHED_SPIN = 0x01, /**< Set spin as default scheduling */
+    CU_EVENT_SCHED_YIELD = 0x02, /**< Set yield as default scheduling */
+    CU_EVENT_SCHED_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling */
+} CUevent_sched_flags;
+
+/**
+ * NVCL event scheduling flags
+ */
+typedef enum cl_event_flags_enum {
+    NVCL_EVENT_SCHED_AUTO = 0x00, /**< Automatic scheduling */
+    NVCL_EVENT_SCHED_SPIN = 0x01, /**< Set spin as default scheduling */
+    NVCL_EVENT_SCHED_YIELD = 0x02, /**< Set yield as default scheduling */
+    NVCL_EVENT_SCHED_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling */
+} cl_event_flags;
+
+/**
+ * NVCL context scheduling flags
+ */
+typedef enum cl_context_flags_enum {
+    NVCL_CTX_SCHED_AUTO = 0x00, /**< Automatic scheduling */
+    NVCL_CTX_SCHED_SPIN = 0x01, /**< Set spin as default scheduling */
+    NVCL_CTX_SCHED_YIELD = 0x02, /**< Set yield as default scheduling */
+    NVCL_CTX_SCHED_BLOCKING_SYNC = 0x04, /**< Set blocking synchronization as default scheduling */
+} cl_context_flags;
+
+
+/**
+ * Stream creation flags
+ */
+typedef enum CUstream_flags_enum {
+    CU_STREAM_DEFAULT             = 0x0, /**< Default stream flag */
+    CU_STREAM_NON_BLOCKING        = 0x1  /**< Stream does not synchronize with stream 0 (the NULL stream) */
+} CUstream_flags;
+
+/**
+ * Legacy stream handle
+ *
+ * Stream handle that can be passed as a CUstream to use an implicit stream
+ * with legacy synchronization behavior.
+ *
+ * See details of the \link_sync_behavior
+ */
+#define CU_STREAM_LEGACY     ((CUstream)0x1)
+
+/**
+ * Per-thread stream handle
+ *
+ * Stream handle that can be passed as a CUstream to use an implicit stream
+ * with per-thread synchronization behavior.
+ *
+ * See details of the \link_sync_behavior
+ */
+#define CU_STREAM_PER_THREAD ((CUstream)0x2)
+
+/**
+ * Event creation flags
+ */
+typedef enum CUevent_flags_enum {
+    CU_EVENT_DEFAULT        = 0x0, /**< Default event flag */
+    CU_EVENT_BLOCKING_SYNC  = 0x1, /**< Event uses blocking synchronization */
+    CU_EVENT_DISABLE_TIMING = 0x2, /**< Event will not record timing data */
+    CU_EVENT_INTERPROCESS   = 0x4  /**< Event is suitable for interprocess use. CU_EVENT_DISABLE_TIMING must be set */
+} CUevent_flags;
+
+/**
+ * Event record flags
+ */
+typedef enum CUevent_record_flags_enum {
+    CU_EVENT_RECORD_DEFAULT  = 0x0, /**< Default event record flag */
+    CU_EVENT_RECORD_EXTERNAL = 0x1  /**< When using stream capture, create an event record node
+                                      *  instead of the default behavior.  This flag is invalid
+                                      *  when used outside of capture. */
+} CUevent_record_flags;
+
+/**
+ * Event wait flags
+ */
+typedef enum CUevent_wait_flags_enum {
+    CU_EVENT_WAIT_DEFAULT  = 0x0, /**< Default event wait flag */
+    CU_EVENT_WAIT_EXTERNAL = 0x1  /**< When using stream capture, create an event wait node
+                                    *  instead of the default behavior.  This flag is invalid
+                                    *  when used outside of capture.*/
+} CUevent_wait_flags;
+
+/**
+ * Flags for ::cuStreamWaitValue32 and ::cuStreamWaitValue64
+ */
+typedef enum CUstreamWaitValue_flags_enum {
+    CU_STREAM_WAIT_VALUE_GEQ   = 0x0,   /**< Wait until (int32_t)(*addr - value) >= 0 (or int64_t for 64 bit
+                                             values). Note this is a cyclic comparison which ignores wraparound.
+                                             (Default behavior.) */
+    CU_STREAM_WAIT_VALUE_EQ    = 0x1,   /**< Wait until *addr == value. */
+    CU_STREAM_WAIT_VALUE_AND   = 0x2,   /**< Wait until (*addr & value) != 0. */
+    CU_STREAM_WAIT_VALUE_NOR   = 0x3,   /**< Wait until ~(*addr | value) != 0. Support for this operation can be
+                                             queried with ::cuDeviceGetAttribute() and
+                                             ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR.*/
+    CU_STREAM_WAIT_VALUE_FLUSH = 1<<30  /**< Follow the wait operation with a flush of outstanding remote writes. This
+                                             means that, if a remote write operation is guaranteed to have reached the
+                                             device before the wait can be satisfied, that write is guaranteed to be
+                                             visible to downstream device work. The device is permitted to reorder
+                                             remote writes internally. For example, this flag would be required if
+                                             two remote writes arrive in a defined order, the wait is satisfied by the
+                                             second write, and downstream work needs to observe the first write.
+                                             Support for this operation is restricted to selected platforms and can be
+                                             queried with ::CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES.*/
+} CUstreamWaitValue_flags;
+
+/**
+ * Flags for ::cuStreamWriteValue32
+ */
+typedef enum CUstreamWriteValue_flags_enum {
+    CU_STREAM_WRITE_VALUE_DEFAULT           = 0x0, /**< Default behavior */
+    CU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER = 0x1  /**< Permits the write to be reordered with writes which were issued
+                                                        before it, as a performance optimization. Normally,
+                                                        ::cuStreamWriteValue32 will provide a memory fence before the
+                                                        write, which has similar semantics to
+                                                        __threadfence_system() but is scoped to the stream
+                                                        rather than a CUDA thread.
+                                                        This flag is not supported in the v2 API. */
+} CUstreamWriteValue_flags;
+
+/**
+ * Operations for ::cuStreamBatchMemOp
+ */
+typedef enum CUstreamBatchMemOpType_enum {
+    CU_STREAM_MEM_OP_WAIT_VALUE_32  = 1,     /**< Represents a ::cuStreamWaitValue32 operation */
+    CU_STREAM_MEM_OP_WRITE_VALUE_32 = 2,     /**< Represents a ::cuStreamWriteValue32 operation */
+    CU_STREAM_MEM_OP_WAIT_VALUE_64  = 4,     /**< Represents a ::cuStreamWaitValue64 operation */
+    CU_STREAM_MEM_OP_WRITE_VALUE_64 = 5,     /**< Represents a ::cuStreamWriteValue64 operation */
+    CU_STREAM_MEM_OP_BARRIER = 6,            /**< Insert a memory barrier of the specified type */ 
+    CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES = 3 /**< This has the same effect as ::CU_STREAM_WAIT_VALUE_FLUSH, but as a
+                                                  standalone operation. */
+} CUstreamBatchMemOpType;
+
+/**
+ * Flags for ::cuStreamMemoryBarrier
+ */
+typedef enum CUstreamMemoryBarrier_flags_enum {
+    CU_STREAM_MEMORY_BARRIER_TYPE_SYS = 0x0, /**< System-wide memory barrier. */
+    CU_STREAM_MEMORY_BARRIER_TYPE_GPU = 0x1 /**< Limit memory barrier scope to the GPU. */
+} CUstreamMemoryBarrier_flags;
+
+/**
+ * Per-operation parameters for ::cuStreamBatchMemOp
+ */
+typedef union CUstreamBatchMemOpParams_union {
+    CUstreamBatchMemOpType operation;
+    struct CUstreamMemOpWaitValueParams_st {
+        CUstreamBatchMemOpType operation;
+        CUdeviceptr address;
+        union {
+            cuuint32_t value;
+            cuuint64_t value64;
+        };
+        unsigned int flags;
+        CUdeviceptr alias; /**< For driver internal use. Initial value is unimportant. */
+    } waitValue;
+    struct CUstreamMemOpWriteValueParams_st {
+        CUstreamBatchMemOpType operation;
+        CUdeviceptr address;
+        union {
+            cuuint32_t value;
+            cuuint64_t value64;
+        };
+        unsigned int flags;
+        CUdeviceptr alias; /**< For driver internal use. Initial value is unimportant. */
+    } writeValue;
+    struct CUstreamMemOpFlushRemoteWritesParams_st {
+        CUstreamBatchMemOpType operation;
+        unsigned int flags;
+    } flushRemoteWrites;
+    struct CUstreamMemOpMemoryBarrierParams_st { /**< Only supported in the _v2 API */
+        CUstreamBatchMemOpType operation;
+        unsigned int flags;
+    } memoryBarrier;
+    cuuint64_t pad[6];
+} CUstreamBatchMemOpParams_v1;
+typedef CUstreamBatchMemOpParams_v1 CUstreamBatchMemOpParams;
+
+typedef struct CUDA_BATCH_MEM_OP_NODE_PARAMS_st {
+    CUcontext ctx;
+    unsigned int count;
+    CUstreamBatchMemOpParams *paramArray;
+    unsigned int flags;
+} CUDA_BATCH_MEM_OP_NODE_PARAMS;
+
+/**
+ * Occupancy calculator flag
+ */
+typedef enum CUoccupancy_flags_enum {
+    CU_OCCUPANCY_DEFAULT                  = 0x0, /**< Default behavior */
+    CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE = 0x1  /**< Assume global caching is enabled and cannot be automatically turned off */
+} CUoccupancy_flags;
+
+/**
+ * Flags for ::cuStreamUpdateCaptureDependencies
+ */
+typedef enum CUstreamUpdateCaptureDependencies_flags_enum {
+    CU_STREAM_ADD_CAPTURE_DEPENDENCIES = 0x0, /**< Add new nodes to the dependency set */
+    CU_STREAM_SET_CAPTURE_DEPENDENCIES = 0x1  /**< Replace the dependency set with the new nodes */
+} CUstreamUpdateCaptureDependencies_flags;
+
+/**
+ * Array formats
+ */
+typedef enum CUarray_format_enum {
+    CU_AD_FORMAT_UNSIGNED_INT8  = 0x01, /**< Unsigned 8-bit integers */
+    CU_AD_FORMAT_UNSIGNED_INT16 = 0x02, /**< Unsigned 16-bit integers */
+    CU_AD_FORMAT_UNSIGNED_INT32 = 0x03, /**< Unsigned 32-bit integers */
+    CU_AD_FORMAT_SIGNED_INT8    = 0x08, /**< Signed 8-bit integers */
+    CU_AD_FORMAT_SIGNED_INT16   = 0x09, /**< Signed 16-bit integers */
+    CU_AD_FORMAT_SIGNED_INT32   = 0x0a, /**< Signed 32-bit integers */
+    CU_AD_FORMAT_HALF           = 0x10, /**< 16-bit floating point */
+    CU_AD_FORMAT_FLOAT          = 0x20, /**< 32-bit floating point */
+    CU_AD_FORMAT_NV12           = 0xb0, /**< 8-bit YUV planar format, with 4:2:0 sampling */
+    CU_AD_FORMAT_UNORM_INT8X1   = 0xc0, /**< 1 channel unsigned 8-bit normalized integer */
+    CU_AD_FORMAT_UNORM_INT8X2   = 0xc1, /**< 2 channel unsigned 8-bit normalized integer */
+    CU_AD_FORMAT_UNORM_INT8X4   = 0xc2, /**< 4 channel unsigned 8-bit normalized integer */
+    CU_AD_FORMAT_UNORM_INT16X1  = 0xc3, /**< 1 channel unsigned 16-bit normalized integer */
+    CU_AD_FORMAT_UNORM_INT16X2  = 0xc4, /**< 2 channel unsigned 16-bit normalized integer */
+    CU_AD_FORMAT_UNORM_INT16X4  = 0xc5, /**< 4 channel unsigned 16-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT8X1   = 0xc6, /**< 1 channel signed 8-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT8X2   = 0xc7, /**< 2 channel signed 8-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT8X4   = 0xc8, /**< 4 channel signed 8-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT16X1  = 0xc9, /**< 1 channel signed 16-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT16X2  = 0xca, /**< 2 channel signed 16-bit normalized integer */
+    CU_AD_FORMAT_SNORM_INT16X4  = 0xcb, /**< 4 channel signed 16-bit normalized integer */
+    CU_AD_FORMAT_BC1_UNORM      = 0x91, /**< 4 channel unsigned normalized block-compressed (BC1 compression) format */
+    CU_AD_FORMAT_BC1_UNORM_SRGB = 0x92, /**< 4 channel unsigned normalized block-compressed (BC1 compression) format with sRGB encoding*/
+    CU_AD_FORMAT_BC2_UNORM      = 0x93, /**< 4 channel unsigned normalized block-compressed (BC2 compression) format */
+    CU_AD_FORMAT_BC2_UNORM_SRGB = 0x94, /**< 4 channel unsigned normalized block-compressed (BC2 compression) format with sRGB encoding*/
+    CU_AD_FORMAT_BC3_UNORM      = 0x95, /**< 4 channel unsigned normalized block-compressed (BC3 compression) format */
+    CU_AD_FORMAT_BC3_UNORM_SRGB = 0x96, /**< 4 channel unsigned normalized block-compressed (BC3 compression) format with sRGB encoding*/
+    CU_AD_FORMAT_BC4_UNORM      = 0x97, /**< 1 channel unsigned normalized block-compressed (BC4 compression) format */
+    CU_AD_FORMAT_BC4_SNORM      = 0x98, /**< 1 channel signed normalized block-compressed (BC4 compression) format */
+    CU_AD_FORMAT_BC5_UNORM      = 0x99, /**< 2 channel unsigned normalized block-compressed (BC5 compression) format */
+    CU_AD_FORMAT_BC5_SNORM      = 0x9a, /**< 2 channel signed normalized block-compressed (BC5 compression) format */
+    CU_AD_FORMAT_BC6H_UF16      = 0x9b, /**< 3 channel unsigned half-float block-compressed (BC6H compression) format */
+    CU_AD_FORMAT_BC6H_SF16      = 0x9c, /**< 3 channel signed half-float block-compressed (BC6H compression) format */
+    CU_AD_FORMAT_BC7_UNORM      = 0x9d, /**< 4 channel unsigned normalized block-compressed (BC7 compression) format */
+    CU_AD_FORMAT_BC7_UNORM_SRGB = 0x9e  /**< 4 channel unsigned normalized block-compressed (BC7 compression) format with sRGB encoding */
+} CUarray_format;
+
+/**
+ * Texture reference addressing modes
+ */
+typedef enum CUaddress_mode_enum {
+    CU_TR_ADDRESS_MODE_WRAP   = 0, /**< Wrapping address mode */
+    CU_TR_ADDRESS_MODE_CLAMP  = 1, /**< Clamp to edge address mode */
+    CU_TR_ADDRESS_MODE_MIRROR = 2, /**< Mirror address mode */
+    CU_TR_ADDRESS_MODE_BORDER = 3  /**< Border address mode */
+} CUaddress_mode;
+
+/**
+ * Texture reference filtering modes
+ */
+typedef enum CUfilter_mode_enum {
+    CU_TR_FILTER_MODE_POINT  = 0, /**< Point filter mode */
+    CU_TR_FILTER_MODE_LINEAR = 1  /**< Linear filter mode */
+} CUfilter_mode;
+
+/**
+ * Device properties
+ */
+typedef enum CUdevice_attribute_enum {
+    CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 1,                          /**< Maximum number of threads per block */
+    CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X = 2,                                /**< Maximum block dimension X */
+    CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y = 3,                                /**< Maximum block dimension Y */
+    CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z = 4,                                /**< Maximum block dimension Z */
+    CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X = 5,                                 /**< Maximum grid dimension X */
+    CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y = 6,                                 /**< Maximum grid dimension Y */
+    CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z = 7,                                 /**< Maximum grid dimension Z */
+    CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK = 8,                    /**< Maximum shared memory available per block in bytes */
+    CU_DEVICE_ATTRIBUTE_SHARED_MEMORY_PER_BLOCK = 8,                        /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK */
+    CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY = 9,                          /**< Memory available on device for __constant__ variables in a CUDA C kernel in bytes */
+    CU_DEVICE_ATTRIBUTE_WARP_SIZE = 10,                                     /**< Warp size in threads */
+    CU_DEVICE_ATTRIBUTE_MAX_PITCH = 11,                                     /**< Maximum pitch in bytes allowed by memory copies */
+    CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK = 12,                       /**< Maximum number of 32-bit registers available per block */
+    CU_DEVICE_ATTRIBUTE_REGISTERS_PER_BLOCK = 12,                           /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK */
+    CU_DEVICE_ATTRIBUTE_CLOCK_RATE = 13,                                    /**< Typical clock frequency in kilohertz */
+    CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT = 14,                             /**< Alignment requirement for textures */
+    CU_DEVICE_ATTRIBUTE_GPU_OVERLAP = 15,                                   /**< Device can possibly copy memory and execute a kernel concurrently. Deprecated. Use instead CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT. */
+    CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT = 16,                          /**< Number of multiprocessors on device */
+    CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT = 17,                           /**< Specifies whether there is a run time limit on kernels */
+    CU_DEVICE_ATTRIBUTE_INTEGRATED = 18,                                    /**< Device is integrated with host memory */
+    CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY = 19,                           /**< Device can map host memory into CUDA address space */
+    CU_DEVICE_ATTRIBUTE_COMPUTE_MODE = 20,                                  /**< Compute mode (See ::CUcomputemode for details) */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH = 21,                       /**< Maximum 1D texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH = 22,                       /**< Maximum 2D texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT = 23,                      /**< Maximum 2D texture height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH = 24,                       /**< Maximum 3D texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT = 25,                      /**< Maximum 3D texture height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH = 26,                       /**< Maximum 3D texture depth */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH = 27,               /**< Maximum 2D layered texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT = 28,              /**< Maximum 2D layered texture height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS = 29,              /**< Maximum layers in a 2D layered texture */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_WIDTH = 27,                 /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_HEIGHT = 28,                /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_ARRAY_NUMSLICES = 29,             /**< Deprecated, use CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS */
+    CU_DEVICE_ATTRIBUTE_SURFACE_ALIGNMENT = 30,                             /**< Alignment requirement for surfaces */
+    CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS = 31,                            /**< Device can possibly execute multiple kernels concurrently */
+    CU_DEVICE_ATTRIBUTE_ECC_ENABLED = 32,                                   /**< Device has ECC support enabled */
+    CU_DEVICE_ATTRIBUTE_PCI_BUS_ID = 33,                                    /**< PCI bus ID of the device */
+    CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID = 34,                                 /**< PCI device ID of the device */
+    CU_DEVICE_ATTRIBUTE_TCC_DRIVER = 35,                                    /**< Device is using TCC driver model */
+    CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE = 36,                             /**< Peak memory clock frequency in kilohertz */
+    CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH = 37,                       /**< Global memory bus width in bits */
+    CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE = 38,                                 /**< Size of L2 cache in bytes */
+    CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR = 39,                /**< Maximum resident threads per multiprocessor */
+    CU_DEVICE_ATTRIBUTE_ASYNC_ENGINE_COUNT = 40,                            /**< Number of asynchronous engines */
+    CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING = 41,                            /**< Device shares a unified address space with the host */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH = 42,               /**< Maximum 1D layered texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS = 43,              /**< Maximum layers in a 1D layered texture */
+    CU_DEVICE_ATTRIBUTE_CAN_TEX2D_GATHER = 44,                              /**< Deprecated, do not use. */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH = 45,                /**< Maximum 2D texture width if CUDA_ARRAY3D_TEXTURE_GATHER is set */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT = 46,               /**< Maximum 2D texture height if CUDA_ARRAY3D_TEXTURE_GATHER is set */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE = 47,             /**< Alternate maximum 3D texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE = 48,            /**< Alternate maximum 3D texture height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE = 49,             /**< Alternate maximum 3D texture depth */
+    CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID = 50,                                 /**< PCI domain ID of the device */
+    CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT = 51,                       /**< Pitch alignment requirement for textures */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH = 52,                  /**< Maximum cubemap texture width/height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH = 53,          /**< Maximum cubemap layered texture width/height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS = 54,         /**< Maximum layers in a cubemap layered texture */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH = 55,                       /**< Maximum 1D surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH = 56,                       /**< Maximum 2D surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT = 57,                      /**< Maximum 2D surface height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH = 58,                       /**< Maximum 3D surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT = 59,                      /**< Maximum 3D surface height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH = 60,                       /**< Maximum 3D surface depth */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH = 61,               /**< Maximum 1D layered surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS = 62,              /**< Maximum layers in a 1D layered surface */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH = 63,               /**< Maximum 2D layered surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT = 64,              /**< Maximum 2D layered surface height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS = 65,              /**< Maximum layers in a 2D layered surface */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH = 66,                  /**< Maximum cubemap surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH = 67,          /**< Maximum cubemap layered surface width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS = 68,         /**< Maximum layers in a cubemap layered surface */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH = 69,                /**< Deprecated, do not use. Use cudaDeviceGetTexture1DLinearMaxWidth() or cuDeviceGetTexture1DLinearMaxWidth() instead. */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH = 70,                /**< Maximum 2D linear texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT = 71,               /**< Maximum 2D linear texture height */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH = 72,                /**< Maximum 2D linear texture pitch in bytes */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH = 73,             /**< Maximum mipmapped 2D texture width */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT = 74,            /**< Maximum mipmapped 2D texture height */
+    CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR = 75,                      /**< Major compute capability version number */
+    CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR = 76,                      /**< Minor compute capability version number */
+    CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH = 77,             /**< Maximum mipmapped 1D texture width */
+    CU_DEVICE_ATTRIBUTE_STREAM_PRIORITIES_SUPPORTED = 78,                   /**< Device supports stream priorities */
+    CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED = 79,                     /**< Device supports caching globals in L1 */
+    CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED = 80,                      /**< Device supports caching locals in L1 */
+    CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR = 81,          /**< Maximum shared memory available per multiprocessor in bytes */
+    CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR = 82,              /**< Maximum number of 32-bit registers available per multiprocessor */
+    CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY = 83,                                /**< Device can allocate managed memory on this system */
+    CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD = 84,                               /**< Device is on a multi-GPU board */
+    CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID = 85,                      /**< Unique id for a group of devices on the same multi-GPU board */
+    CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED = 86,                  /**< Link between the device and the host supports native atomic operations (this is a placeholder attribute, and is not supported on any current hardware)*/
+    CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO = 87,         /**< Ratio of single precision performance (in floating-point operations per second) to double precision performance */
+    CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS = 88,                        /**< Device supports coherently accessing pageable memory without calling cudaHostRegister on it */
+    CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS = 89,                     /**< Device can coherently access managed memory concurrently with the CPU */
+    CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED = 90,                  /**< Device supports compute preemption. */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM = 91,       /**< Device can access host registered memory at the same virtual address as the CPU */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS = 92,                        /**< ::cuStreamBatchMemOp and related APIs are supported. */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS = 93,                 /**< 64-bit operations are supported in ::cuStreamBatchMemOp and related APIs. */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR = 94,                 /**< ::CU_STREAM_WAIT_VALUE_NOR is supported. */
+    CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH = 95,                            /**< Device supports launching cooperative kernels via ::cuLaunchCooperativeKernel */
+    CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH = 96,               /**< Deprecated, ::cuLaunchCooperativeKernelMultiDevice is deprecated. */
+    CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN = 97,             /**< Maximum optin shared memory per block */
+    CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES = 98,                       /**< The ::CU_STREAM_WAIT_VALUE_FLUSH flag and the ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. See \ref CUDA_MEMOP for additional details. */
+    CU_DEVICE_ATTRIBUTE_HOST_REGISTER_SUPPORTED = 99,                       /**< Device supports host memory registration via ::cudaHostRegister. */
+    CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES = 100, /**< Device accesses pageable memory via the host's page tables. */
+    CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST = 101,          /**< The host can directly access managed memory on the device without migration. */
+    CU_DEVICE_ATTRIBUTE_VIRTUAL_ADDRESS_MANAGEMENT_SUPPORTED = 102,         /**< Deprecated, Use CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED*/
+    CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED = 102,         /**< Device supports virtual memory management APIs like ::cuMemAddressReserve, ::cuMemCreate, ::cuMemMap and related APIs */
+    CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED = 103,  /**< Device supports exporting memory to a posix file descriptor with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */
+    CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED = 104,           /**< Device supports exporting memory to a Win32 NT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */
+    CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED = 105,       /**< Device supports exporting memory to a Win32 KMT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate */
+    CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR = 106,                /**< Maximum number of blocks per multiprocessor */
+    CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED = 107,                /**< Device supports compression of memory */
+    CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE = 108,                 /**< Maximum L2 persisting lines capacity setting in bytes. */
+    CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE = 109,                /**< Maximum value of CUaccessPolicyWindow::num_bytes. */
+    CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED = 110,      /**< Device supports specifying the GPUDirect RDMA flag with ::cuMemCreate */
+    CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK = 111,             /**< Shared memory reserved by CUDA driver per block in bytes */
+    CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED = 112,                  /**< Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays */
+    CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED = 113,            /**< Device supports using the ::cuMemHostRegister flag ::CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU */
+    CU_DEVICE_ATTRIBUTE_TIMELINE_SEMAPHORE_INTEROP_SUPPORTED = 114,         /**< External timeline semaphore interop is supported on the device */
+    CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED = 115,                       /**< Device supports using the ::cuMemAllocAsync and ::cuMemPool family of APIs */
+    CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED = 116,                    /**< Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information) */
+    CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS = 117,         /**< The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the ::CUflushGPUDirectRDMAWritesOptions enum */
+    CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING = 118,              /**< GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See ::CUGPUDirectRDMAWritesOrdering for the numerical values returned here. */
+    CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES = 119,               /**< Handle types supported with mempool based IPC */
+    CU_DEVICE_ATTRIBUTE_CLUSTER_LAUNCH = 120,                               /**< Indicates device supports cluster launch */
+    CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED = 121,        /**< Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V2 = 122,             /**< 64-bit operations are supported in ::cuStreamBatchMemOp_v2 and related v2 MemOp APIs. */
+    CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V2 = 123,             /**< ::CU_STREAM_WAIT_VALUE_NOR is supported by v2 MemOp APIs. */
+    CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED = 124,                            /**< Device supports buffer sharing with dma_buf mechanism. */ 
+    CU_DEVICE_ATTRIBUTE_MAX
+} CUdevice_attribute;
+
+/**
+ * Legacy device properties
+ */
+typedef struct CUdevprop_st {
+    int maxThreadsPerBlock;     /**< Maximum number of threads per block */
+    int maxThreadsDim[3];       /**< Maximum size of each dimension of a block */
+    int maxGridSize[3];         /**< Maximum size of each dimension of a grid */
+    int sharedMemPerBlock;      /**< Shared memory available per block in bytes */
+    int totalConstantMemory;    /**< Constant memory available on device in bytes */
+    int SIMDWidth;              /**< Warp size in threads */
+    int memPitch;               /**< Maximum pitch in bytes allowed by memory copies */
+    int regsPerBlock;           /**< 32-bit registers available per block */
+    int clockRate;              /**< Clock frequency in kilohertz */
+    int textureAlign;           /**< Alignment requirement for textures */
+} CUdevprop_v1;
+typedef CUdevprop_v1 CUdevprop;
+
+/**
+ * Pointer information
+ */
+typedef enum CUpointer_attribute_enum {
+    CU_POINTER_ATTRIBUTE_CONTEXT = 1,                     /**< The ::CUcontext on which a pointer was allocated or registered */
+    CU_POINTER_ATTRIBUTE_MEMORY_TYPE = 2,                 /**< The ::CUmemorytype describing the physical location of a pointer */
+    CU_POINTER_ATTRIBUTE_DEVICE_POINTER = 3,              /**< The address at which a pointer's memory may be accessed on the device */
+    CU_POINTER_ATTRIBUTE_HOST_POINTER = 4,                /**< The address at which a pointer's memory may be accessed on the host */
+    CU_POINTER_ATTRIBUTE_P2P_TOKENS = 5,                  /**< A pair of tokens for use with the nv-p2p.h Linux kernel interface */
+    CU_POINTER_ATTRIBUTE_SYNC_MEMOPS = 6,                 /**< Synchronize every synchronous memory operation initiated on this region */
+    CU_POINTER_ATTRIBUTE_BUFFER_ID = 7,                   /**< A process-wide unique ID for an allocated memory region*/
+    CU_POINTER_ATTRIBUTE_IS_MANAGED = 8,                  /**< Indicates if the pointer points to managed memory */
+    CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL = 9,              /**< A device ordinal of a device on which a pointer was allocated or registered */
+    CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE = 10, /**< 1 if this pointer maps to an allocation that is suitable for ::cudaIpcGetMemHandle, 0 otherwise **/
+    CU_POINTER_ATTRIBUTE_RANGE_START_ADDR = 11,           /**< Starting address for this requested pointer */
+    CU_POINTER_ATTRIBUTE_RANGE_SIZE = 12,                 /**< Size of the address range for this requested pointer */
+    CU_POINTER_ATTRIBUTE_MAPPED = 13,                     /**< 1 if this pointer is in a valid address range that is mapped to a backing allocation, 0 otherwise **/
+    CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES = 14,       /**< Bitmask of allowed ::CUmemAllocationHandleType for this allocation **/
+    CU_POINTER_ATTRIBUTE_IS_GPU_DIRECT_RDMA_CAPABLE = 15, /**< 1 if the memory this pointer is referencing can be used with the GPUDirect RDMA API **/
+    CU_POINTER_ATTRIBUTE_ACCESS_FLAGS = 16,               /**< Returns the access flags the device associated with the current context has on the corresponding memory referenced by the pointer given */
+    CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE = 17              /**< Returns the mempool handle for the allocation if it was allocated from a mempool. Otherwise returns NULL. **/
+    ,
+    CU_POINTER_ATTRIBUTE_MAPPING_SIZE = 18,               /**< Size of the actual underlying mapping that the pointer belongs to **/
+    CU_POINTER_ATTRIBUTE_MAPPING_BASE_ADDR = 19,          /**< The start address of the mapping that the pointer belongs to **/
+    CU_POINTER_ATTRIBUTE_MEMORY_BLOCK_ID = 20             /**< A process-wide unique id corresponding to the physical allocation the pointer belongs to **/
+} CUpointer_attribute;
+
+/**
+ * Function properties
+ */
+typedef enum CUfunction_attribute_enum {
+    /**
+     * The maximum number of threads per block, beyond which a launch of the
+     * function would fail. This number depends on both the function and the
+     * device on which the function is currently loaded.
+     */
+    CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK = 0,
+
+    /**
+     * The size in bytes of statically-allocated shared memory required by
+     * this function. This does not include dynamically-allocated shared
+     * memory requested by the user at runtime.
+     */
+    CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES = 1,
+
+    /**
+     * The size in bytes of user-allocated constant memory required by this
+     * function.
+     */
+    CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES = 2,
+
+    /**
+     * The size in bytes of local memory used by each thread of this function.
+     */
+    CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES = 3,
+
+    /**
+     * The number of registers used by each thread of this function.
+     */
+    CU_FUNC_ATTRIBUTE_NUM_REGS = 4,
+
+    /**
+     * The PTX virtual architecture version for which the function was
+     * compiled. This value is the major PTX version * 10 + the minor PTX
+     * version, so a PTX version 1.3 function would return the value 13.
+     * Note that this may return the undefined value of 0 for cubins
+     * compiled prior to CUDA 3.0.
+     */
+    CU_FUNC_ATTRIBUTE_PTX_VERSION = 5,
+
+    /**
+     * The binary architecture version for which the function was compiled.
+     * This value is the major binary version * 10 + the minor binary version,
+     * so a binary version 1.3 function would return the value 13. Note that
+     * this will return a value of 10 for legacy cubins that do not have a
+     * properly-encoded binary architecture version.
+     */
+    CU_FUNC_ATTRIBUTE_BINARY_VERSION = 6,
+
+    /**
+     * The attribute to indicate whether the function has been compiled with
+     * user specified option "-Xptxas --dlcm=ca" set .
+     */
+    CU_FUNC_ATTRIBUTE_CACHE_MODE_CA = 7,
+
+    /**
+     * The maximum size in bytes of dynamically-allocated shared memory that can be used by
+     * this function. If the user-specified dynamic shared memory size is larger than this
+     * value, the launch will fail.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES = 8,
+
+    /**
+     * On devices where the L1 cache and shared memory use the same hardware resources, 
+     * this sets the shared memory carveout preference, in percent of the total shared memory.
+     * Refer to ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR.
+     * This is only a hint, and the driver can choose a different ratio if required to execute the function.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT = 9,
+
+    /**
+     * If this attribute is set, the kernel must launch with a valid cluster
+     * size specified.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET = 10,
+
+    /**
+     * The required cluster width in blocks. The values must either all be 0 or
+     * all be positive. The validity of the cluster dimensions is otherwise
+     * checked at launch time.
+     *
+     * If the value is set during compile time, it cannot be set at runtime.
+     * Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH = 11,
+
+    /**
+     * The required cluster height in blocks. The values must either all be 0 or
+     * all be positive. The validity of the cluster dimensions is otherwise
+     * checked at launch time.
+     *
+     * If the value is set during compile time, it cannot be set at runtime.
+     * Setting it at runtime should return CUDA_ERROR_NOT_PERMITTED.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT = 12,
+
+    /**
+     * The required cluster depth in blocks. The values must either all be 0 or
+     * all be positive. The validity of the cluster dimensions is otherwise
+     * checked at launch time.
+     *
+     * If the value is set during compile time, it cannot be set at runtime.
+     * Setting it at runtime should return CUDA_ERROR_NOT_PERMITTED.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH = 13,
+
+    /**
+     * Whether the function can be launched with non-portable cluster size. 1 is
+     * allowed, 0 is disallowed. A non-portable cluster size may only function
+     * on the specific SKUs the program is tested on. The launch might fail if
+     * the program is run on a different hardware platform.
+     *
+     * CUDA API provides cudaOccupancyMaxActiveClusters to assist with checking
+     * whether the desired size can be launched on the current device.
+     *
+     * Portable Cluster Size
+     *
+     * A portable cluster size is guaranteed to be functional on all compute
+     * capabilities higher than the target compute capability. The portable
+     * cluster size for sm_90 is 8 blocks per cluster. This value may increase
+     * for future compute capabilities.
+     *
+     * The specific hardware unit may support higher cluster sizes that’s not
+     * guaranteed to be portable.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED = 14,
+
+    /**
+     * The block scheduling policy of a function. The value type is
+     * CUclusterSchedulingPolicy / cudaClusterSchedulingPolicy.
+     * See ::cuFuncSetAttribute
+     */
+    CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 15,
+
+    CU_FUNC_ATTRIBUTE_MAX
+} CUfunction_attribute;
+
+/**
+ * Function cache configurations
+ */
+typedef enum CUfunc_cache_enum {
+    CU_FUNC_CACHE_PREFER_NONE    = 0x00, /**< no preference for shared memory or L1 (default) */
+    CU_FUNC_CACHE_PREFER_SHARED  = 0x01, /**< prefer larger shared memory and smaller L1 cache */
+    CU_FUNC_CACHE_PREFER_L1      = 0x02, /**< prefer larger L1 cache and smaller shared memory */
+    CU_FUNC_CACHE_PREFER_EQUAL   = 0x03  /**< prefer equal sized L1 cache and shared memory */
+} CUfunc_cache;
+
+/**
+ * Shared memory configurations
+ */
+typedef enum CUsharedconfig_enum {
+    CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE    = 0x00, /**< set default shared memory bank size */
+    CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE  = 0x01, /**< set shared memory bank width to four bytes */
+    CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE = 0x02  /**< set shared memory bank width to eight bytes */
+} CUsharedconfig;
+
+/**
+ * Shared memory carveout configurations. These may be passed to ::cuFuncSetAttribute
+ */
+typedef enum CUshared_carveout_enum {
+    CU_SHAREDMEM_CARVEOUT_DEFAULT       = -1,  /**< No preference for shared memory or L1 (default) */
+    CU_SHAREDMEM_CARVEOUT_MAX_SHARED    = 100, /**< Prefer maximum available shared memory, minimum L1 cache */
+    CU_SHAREDMEM_CARVEOUT_MAX_L1        = 0    /**< Prefer maximum available L1 cache, minimum shared memory */
+} CUshared_carveout;
+
+/**
+ * Memory types
+ */
+typedef enum CUmemorytype_enum {
+    CU_MEMORYTYPE_HOST    = 0x01,    /**< Host memory */
+    CU_MEMORYTYPE_DEVICE  = 0x02,    /**< Device memory */
+    CU_MEMORYTYPE_ARRAY   = 0x03,    /**< Array memory */
+    CU_MEMORYTYPE_UNIFIED = 0x04     /**< Unified device or host memory */
+} CUmemorytype;
+
+/**
+ * Compute Modes
+ */
+typedef enum CUcomputemode_enum {
+    CU_COMPUTEMODE_DEFAULT           = 0, /**< Default compute mode (Multiple contexts allowed per device) */
+    CU_COMPUTEMODE_PROHIBITED        = 2, /**< Compute-prohibited mode (No contexts can be created on this device at this time) */
+    CU_COMPUTEMODE_EXCLUSIVE_PROCESS = 3  /**< Compute-exclusive-process mode (Only one context used by a single process can be present on this device at a time) */
+} CUcomputemode;
+
+/**
+ * Memory advise values
+ */
+typedef enum CUmem_advise_enum {
+    CU_MEM_ADVISE_SET_READ_MOSTLY          = 1, /**< Data will mostly be read and only occassionally be written to */
+    CU_MEM_ADVISE_UNSET_READ_MOSTLY        = 2, /**< Undo the effect of ::CU_MEM_ADVISE_SET_READ_MOSTLY */
+    CU_MEM_ADVISE_SET_PREFERRED_LOCATION   = 3, /**< Set the preferred location for the data as the specified device */
+    CU_MEM_ADVISE_UNSET_PREFERRED_LOCATION = 4, /**< Clear the preferred location for the data */
+    CU_MEM_ADVISE_SET_ACCESSED_BY          = 5, /**< Data will be accessed by the specified device, so prevent page faults as much as possible */
+    CU_MEM_ADVISE_UNSET_ACCESSED_BY        = 6  /**< Let the Unified Memory subsystem decide on the page faulting policy for the specified device */
+} CUmem_advise;
+
+typedef enum CUmem_range_attribute_enum {
+    CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY            = 1, /**< Whether the range will mostly be read and only occassionally be written to */
+    CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION     = 2, /**< The preferred location of the range */
+    CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY            = 3, /**< Memory range has ::CU_MEM_ADVISE_SET_ACCESSED_BY set for specified device */
+    CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION = 4  /**< The last location to which the range was prefetched */
+} CUmem_range_attribute;
+
+/**
+ * Online compiler and linker options
+ */
+typedef enum CUjit_option_enum
+{
+    /**
+     * Max number of registers that a thread may use.\n
+     * Option type: unsigned int\n
+     * Applies to: compiler only
+     */
+    CU_JIT_MAX_REGISTERS = 0,
+
+    /**
+     * IN: Specifies minimum number of threads per block to target compilation
+     * for\n
+     * OUT: Returns the number of threads the compiler actually targeted.
+     * This restricts the resource utilization fo the compiler (e.g. max
+     * registers) such that a block with the given number of threads should be
+     * able to launch based on register limitations. Note, this option does not
+     * currently take into account any other resource limitations, such as
+     * shared memory utilization.\n
+     * Cannot be combined with ::CU_JIT_TARGET.\n
+     * Option type: unsigned int\n
+     * Applies to: compiler only
+     */
+    CU_JIT_THREADS_PER_BLOCK,
+
+    /**
+     * Overwrites the option value with the total wall clock time, in
+     * milliseconds, spent in the compiler and linker\n
+     * Option type: float\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_WALL_TIME,
+
+    /**
+     * Pointer to a buffer in which to print any log messages
+     * that are informational in nature (the buffer size is specified via
+     * option ::CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES)\n
+     * Option type: char *\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_INFO_LOG_BUFFER,
+
+    /**
+     * IN: Log buffer size in bytes.  Log messages will be capped at this size
+     * (including null terminator)\n
+     * OUT: Amount of log buffer filled with messages\n
+     * Option type: unsigned int\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES,
+
+    /**
+     * Pointer to a buffer in which to print any log messages that
+     * reflect errors (the buffer size is specified via option
+     * ::CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES)\n
+     * Option type: char *\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_ERROR_LOG_BUFFER,
+
+    /**
+     * IN: Log buffer size in bytes.  Log messages will be capped at this size
+     * (including null terminator)\n
+     * OUT: Amount of log buffer filled with messages\n
+     * Option type: unsigned int\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES,
+
+    /**
+     * Level of optimizations to apply to generated code (0 - 4), with 4
+     * being the default and highest level of optimizations.\n
+     * Option type: unsigned int\n
+     * Applies to: compiler only
+     */
+    CU_JIT_OPTIMIZATION_LEVEL,
+
+    /**
+     * No option value required. Determines the target based on the current
+     * attached context (default)\n
+     * Option type: No option value needed\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_TARGET_FROM_CUCONTEXT,
+
+    /**
+     * Target is chosen based on supplied ::CUjit_target.  Cannot be
+     * combined with ::CU_JIT_THREADS_PER_BLOCK.\n
+     * Option type: unsigned int for enumerated type ::CUjit_target\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_TARGET,
+
+    /**
+     * Specifies choice of fallback strategy if matching cubin is not found.
+     * Choice is based on supplied ::CUjit_fallback.  This option cannot be
+     * used with cuLink* APIs as the linker requires exact matches.\n
+     * Option type: unsigned int for enumerated type ::CUjit_fallback\n
+     * Applies to: compiler only
+     */
+    CU_JIT_FALLBACK_STRATEGY,
+
+    /**
+     * Specifies whether to create debug information in output (-g)
+     * (0: false, default)\n
+     * Option type: int\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_GENERATE_DEBUG_INFO,
+
+    /**
+     * Generate verbose log messages (0: false, default)\n
+     * Option type: int\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_LOG_VERBOSE,
+
+    /**
+     * Generate line number information (-lineinfo) (0: false, default)\n
+     * Option type: int\n
+     * Applies to: compiler only
+     */
+    CU_JIT_GENERATE_LINE_INFO,
+
+    /**
+     * Specifies whether to enable caching explicitly (-dlcm) \n
+     * Choice is based on supplied ::CUjit_cacheMode_enum.\n
+     * Option type: unsigned int for enumerated type ::CUjit_cacheMode_enum\n
+     * Applies to: compiler only
+     */
+    CU_JIT_CACHE_MODE,
+
+    /**
+     * \deprecated
+     * This jit option is deprecated and should not be used.
+     */
+    CU_JIT_NEW_SM3X_OPT,
+
+    /**
+     * This jit option is used for internal purpose only.
+     */
+    CU_JIT_FAST_COMPILE,
+
+    /**
+     * Array of device symbol names that will be relocated to the corresponing
+     * host addresses stored in ::CU_JIT_GLOBAL_SYMBOL_ADDRESSES.\n
+     * Must contain ::CU_JIT_GLOBAL_SYMBOL_COUNT entries.\n
+     * When loding a device module, driver will relocate all encountered
+     * unresolved symbols to the host addresses.\n
+     * It is only allowed to register symbols that correspond to unresolved
+     * global variables.\n
+     * It is illegal to register the same device symbol at multiple addresses.\n
+     * Option type: const char **\n
+     * Applies to: dynamic linker only
+     */
+    CU_JIT_GLOBAL_SYMBOL_NAMES,
+
+    /**
+     * Array of host addresses that will be used to relocate corresponding
+     * device symbols stored in ::CU_JIT_GLOBAL_SYMBOL_NAMES.\n
+     * Must contain ::CU_JIT_GLOBAL_SYMBOL_COUNT entries.\n
+     * Option type: void **\n
+     * Applies to: dynamic linker only
+     */
+    CU_JIT_GLOBAL_SYMBOL_ADDRESSES,
+
+    /**
+     * Number of entries in ::CU_JIT_GLOBAL_SYMBOL_NAMES and
+     * ::CU_JIT_GLOBAL_SYMBOL_ADDRESSES arrays.\n
+     * Option type: unsigned int\n
+     * Applies to: dynamic linker only
+     */
+    CU_JIT_GLOBAL_SYMBOL_COUNT,
+
+    /**
+     * Enable link-time optimization (-dlto) for device code (Disabled by default).\n
+     * This option is not supported on 32-bit platforms.\n
+     * Option type: int\n
+     * Applies to: compiler and linker
+     */
+    CU_JIT_LTO,
+
+    /**
+     * Control single-precision denormals (-ftz) support (0: false, default).
+     * 1 : flushes denormal values to zero
+     * 0 : preserves denormal values
+     * Option type: int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_FTZ,
+
+    /**
+     * Control single-precision floating-point division and reciprocals
+     * (-prec-div) support (1: true, default).
+     * 1 : Enables the IEEE round-to-nearest mode
+     * 0 : Enables the fast approximation mode
+     * Option type: int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_PREC_DIV,
+
+    /**
+     * Control single-precision floating-point square root
+     * (-prec-sqrt) support (1: true, default).
+     * 1 : Enables the IEEE round-to-nearest mode
+     * 0 : Enables the fast approximation mode
+     * Option type: int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_PREC_SQRT,
+
+    /**
+     * Enable/Disable the contraction of floating-point multiplies
+     * and adds/subtracts into floating-point multiply-add (-fma)
+     * operations (1: Enable, default; 0: Disable).
+     * Option type: int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_FMA,
+
+    /**
+     * Array of kernel names that should be preserved at link time while others
+     * can be removed.\n
+     * Must contain ::CU_JIT_REFERENCED_KERNEL_COUNT entries.\n
+     * Note that kernel names can be mangled by the compiler in which case the
+     * mangled name needs to be specified.\n
+     * Wildcard "*" can be used to represent zero or more characters instead of
+     * specifying the full or mangled name.\n
+     * It is important to note that the wildcard "*" is also added implicitly.
+     * For example, specifying "foo" will match "foobaz", "barfoo", "barfoobaz" and
+     * thus preserve all kernels with those names. This can be avoided by providing
+     * a more specific name like "barfoobaz".\n
+     * Option type: const char **\n
+     * Applies to: dynamic linker only
+     */
+    CU_JIT_REFERENCED_KERNEL_NAMES,
+
+    /**
+     * Number of entries in ::CU_JIT_REFERENCED_KERNEL_NAMES array.\n
+     * Option type: unsigned int\n
+     * Applies to: dynamic linker only
+     */
+    CU_JIT_REFERENCED_KERNEL_COUNT,
+
+    /**
+     * Array of variable names (__device__ and/or __constant__) that should be
+     * preserved at link time while others can be removed.\n
+     * Must contain ::CU_JIT_REFERENCED_VARIABLE_COUNT entries.\n
+     * Note that variable names can be mangled by the compiler in which case the
+     * mangled name needs to be specified.\n
+     * Wildcard "*" can be used to represent zero or more characters instead of
+     * specifying the full or mangled name.\n
+     * It is important to note that the wildcard "*" is also added implicitly.
+     * For example, specifying "foo" will match "foobaz", "barfoo", "barfoobaz" and
+     * thus preserve all variables with those names. This can be avoided by providing
+     * a more specific name like "barfoobaz".\n
+     * Option type: const char **\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_REFERENCED_VARIABLE_NAMES,
+
+    /**
+     * Number of entries in ::CU_JIT_REFERENCED_VARIABLE_NAMES array.\n
+     * Option type: unsigned int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_REFERENCED_VARIABLE_COUNT,
+
+    /**
+     * This option serves as a hint to enable the JIT compiler/linker
+     * to remove constant (__constant__) and device (__device__) variables
+     * unreferenced in device code (Disabled by default).\n
+     * Note that host references to constant and device variables using APIs like
+     * ::cuModuleGetGlobal() with this option specified may result in undefined behavior unless
+     * the variables are explicitly specified using ::CU_JIT_REFERENCED_VARIABLE_NAMES.\n
+     * Option type: int\n
+     * Applies to: link-time optimization specified with CU_JIT_LTO
+     */
+    CU_JIT_OPTIMIZE_UNUSED_DEVICE_VARIABLES,
+
+    CU_JIT_NUM_OPTIONS
+
+} CUjit_option;
+
+/**
+ * Online compilation targets
+ */
+typedef enum CUjit_target_enum
+{
+    CU_TARGET_COMPUTE_20 = 20,       /**< Compute device class 2.0 */
+    CU_TARGET_COMPUTE_21 = 21,       /**< Compute device class 2.1 */
+    CU_TARGET_COMPUTE_30 = 30,       /**< Compute device class 3.0 */
+    CU_TARGET_COMPUTE_32 = 32,       /**< Compute device class 3.2 */
+    CU_TARGET_COMPUTE_35 = 35,       /**< Compute device class 3.5 */
+    CU_TARGET_COMPUTE_37 = 37,       /**< Compute device class 3.7 */
+    CU_TARGET_COMPUTE_50 = 50,       /**< Compute device class 5.0 */
+    CU_TARGET_COMPUTE_52 = 52,       /**< Compute device class 5.2 */
+    CU_TARGET_COMPUTE_53 = 53,       /**< Compute device class 5.3 */
+    CU_TARGET_COMPUTE_60 = 60,       /**< Compute device class 6.0.*/
+    CU_TARGET_COMPUTE_61 = 61,       /**< Compute device class 6.1.*/
+    CU_TARGET_COMPUTE_62 = 62,       /**< Compute device class 6.2.*/
+    CU_TARGET_COMPUTE_70 = 70,       /**< Compute device class 7.0.*/
+    CU_TARGET_COMPUTE_72 = 72,       /**< Compute device class 7.2.*/
+    CU_TARGET_COMPUTE_75 = 75,       /**< Compute device class 7.5.*/
+    CU_TARGET_COMPUTE_80 = 80,       /**< Compute device class 8.0.*/
+    CU_TARGET_COMPUTE_86 = 86,       /**< Compute device class 8.6.*/
+    CU_TARGET_COMPUTE_87 = 87,       /**< Compute device class 8.7.*/
+    CU_TARGET_COMPUTE_89 = 89,       /**< Compute device class 8.9.*/
+    CU_TARGET_COMPUTE_90 = 90        /**< Compute device class 9.0.*/
+} CUjit_target;
+
+/**
+ * Cubin matching fallback strategies
+ */
+typedef enum CUjit_fallback_enum
+{
+    CU_PREFER_PTX = 0,  /**< Prefer to compile ptx if exact binary match not found */
+
+    CU_PREFER_BINARY    /**< Prefer to fall back to compatible binary code if exact match not found */
+
+} CUjit_fallback;
+
+/**
+ * Caching modes for dlcm
+ */
+typedef enum CUjit_cacheMode_enum
+{
+    CU_JIT_CACHE_OPTION_NONE = 0, /**< Compile with no -dlcm flag specified */
+    CU_JIT_CACHE_OPTION_CG,       /**< Compile with L1 cache disabled */
+    CU_JIT_CACHE_OPTION_CA        /**< Compile with L1 cache enabled */
+} CUjit_cacheMode;
+
+/**
+ * Device code formats
+ */
+typedef enum CUjitInputType_enum
+{
+    /**
+     * Compiled device-class-specific device code\n
+     * Applicable options: none
+     */
+    CU_JIT_INPUT_CUBIN = 0,
+
+    /**
+     * PTX source code\n
+     * Applicable options: PTX compiler options
+     */
+    CU_JIT_INPUT_PTX,
+
+    /**
+     * Bundle of multiple cubins and/or PTX of some device code\n
+     * Applicable options: PTX compiler options, ::CU_JIT_FALLBACK_STRATEGY
+     */
+    CU_JIT_INPUT_FATBINARY,
+
+    /**
+     * Host object with embedded device code\n
+     * Applicable options: PTX compiler options, ::CU_JIT_FALLBACK_STRATEGY
+     */
+    CU_JIT_INPUT_OBJECT,
+
+    /**
+     * Archive of host objects with embedded device code\n
+     * Applicable options: PTX compiler options, ::CU_JIT_FALLBACK_STRATEGY
+     */
+    CU_JIT_INPUT_LIBRARY,
+
+    /**
+     * High-level intermediate code for link-time optimization\n
+     * Applicable options: NVVM compiler options, PTX compiler options
+     */
+    CU_JIT_INPUT_NVVM,
+
+    CU_JIT_NUM_INPUT_TYPES
+} CUjitInputType;
+
+typedef struct CUlinkState_st *CUlinkState;
+
+/**
+ * Flags to register a graphics resource
+ */
+typedef enum CUgraphicsRegisterFlags_enum {
+    CU_GRAPHICS_REGISTER_FLAGS_NONE           = 0x00,
+    CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY      = 0x01,
+    CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD  = 0x02,
+    CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST   = 0x04,
+    CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER = 0x08
+} CUgraphicsRegisterFlags;
+
+/**
+ * Flags for mapping and unmapping interop resources
+ */
+typedef enum CUgraphicsMapResourceFlags_enum {
+    CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE          = 0x00,
+    CU_GRAPHICS_MAP_RESOURCE_FLAGS_READ_ONLY     = 0x01,
+    CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02
+} CUgraphicsMapResourceFlags;
+
+/**
+ * Array indices for cube faces
+ */
+typedef enum CUarray_cubemap_face_enum {
+    CU_CUBEMAP_FACE_POSITIVE_X  = 0x00, /**< Positive X face of cubemap */
+    CU_CUBEMAP_FACE_NEGATIVE_X  = 0x01, /**< Negative X face of cubemap */
+    CU_CUBEMAP_FACE_POSITIVE_Y  = 0x02, /**< Positive Y face of cubemap */
+    CU_CUBEMAP_FACE_NEGATIVE_Y  = 0x03, /**< Negative Y face of cubemap */
+    CU_CUBEMAP_FACE_POSITIVE_Z  = 0x04, /**< Positive Z face of cubemap */
+    CU_CUBEMAP_FACE_NEGATIVE_Z  = 0x05  /**< Negative Z face of cubemap */
+} CUarray_cubemap_face;
+
+/**
+ * Limits
+ */
+typedef enum CUlimit_enum {
+    CU_LIMIT_STACK_SIZE                       = 0x00, /**< GPU thread stack size */
+    CU_LIMIT_PRINTF_FIFO_SIZE                 = 0x01, /**< GPU printf FIFO size */
+    CU_LIMIT_MALLOC_HEAP_SIZE                 = 0x02, /**< GPU malloc heap size */
+    CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH           = 0x03, /**< GPU device runtime launch synchronize depth */
+    CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT = 0x04, /**< GPU device runtime pending launch count */
+    CU_LIMIT_MAX_L2_FETCH_GRANULARITY         = 0x05, /**< A value between 0 and 128 that indicates the maximum fetch granularity of L2 (in Bytes). This is a hint */
+    CU_LIMIT_PERSISTING_L2_CACHE_SIZE         = 0x06, /**< A size in bytes for L2 persisting lines cache size */
+    CU_LIMIT_MAX
+} CUlimit;
+
+/**
+ * Resource types
+ */
+typedef enum CUresourcetype_enum {
+    CU_RESOURCE_TYPE_ARRAY           = 0x00, /**< Array resoure */
+    CU_RESOURCE_TYPE_MIPMAPPED_ARRAY = 0x01, /**< Mipmapped array resource */
+    CU_RESOURCE_TYPE_LINEAR          = 0x02, /**< Linear resource */
+    CU_RESOURCE_TYPE_PITCH2D         = 0x03  /**< Pitch 2D resource */
+} CUresourcetype;
+
+#ifdef _WIN32
+#define CUDA_CB __stdcall
+#else
+#define CUDA_CB
+#endif
+
+/**
+ * CUDA host function
+ * \param userData Argument value passed to the function
+ */
+typedef void (CUDA_CB *CUhostFn)(void *userData);
+
+/**
+ * Specifies performance hint with ::CUaccessPolicyWindow for hitProp and missProp members.
+ */
+typedef enum CUaccessProperty_enum {
+    CU_ACCESS_PROPERTY_NORMAL           = 0,    /**< Normal cache persistence. */
+    CU_ACCESS_PROPERTY_STREAMING        = 1,    /**< Streaming access is less likely to persit from cache. */
+    CU_ACCESS_PROPERTY_PERSISTING       = 2     /**< Persisting access is more likely to persist in cache.*/
+} CUaccessProperty;
+
+/**
+ * Specifies an access policy for a window, a contiguous extent of memory
+ * beginning at base_ptr and ending at base_ptr + num_bytes.
+ * num_bytes is limited by CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE.
+ * Partition into many segments and assign segments such that:
+ * sum of "hit segments" / window == approx. ratio.
+ * sum of "miss segments" / window == approx 1-ratio.
+ * Segments and ratio specifications are fitted to the capabilities of
+ * the architecture.
+ * Accesses in a hit segment apply the hitProp access policy.
+ * Accesses in a miss segment apply the missProp access policy.
+ */
+typedef struct CUaccessPolicyWindow_st {
+    void *base_ptr;                     /**< Starting address of the access policy window. CUDA driver may align it. */
+    size_t num_bytes;                   /**< Size in bytes of the window policy. CUDA driver may restrict the maximum size and alignment. */
+    float hitRatio;                     /**< hitRatio specifies percentage of lines assigned hitProp, rest are assigned missProp. */
+    CUaccessProperty hitProp;           /**< ::CUaccessProperty set for hit. */
+    CUaccessProperty missProp;          /**< ::CUaccessProperty set for miss. Must be either NORMAL or STREAMING */
+} CUaccessPolicyWindow_v1;
+typedef CUaccessPolicyWindow_v1 CUaccessPolicyWindow;
+
+/**
+ * GPU kernel node parameters
+ */
+typedef struct CUDA_KERNEL_NODE_PARAMS_st {
+    CUfunction func;             /**< Kernel to launch */
+    unsigned int gridDimX;       /**< Width of grid in blocks */
+    unsigned int gridDimY;       /**< Height of grid in blocks */
+    unsigned int gridDimZ;       /**< Depth of grid in blocks */
+    unsigned int blockDimX;      /**< X dimension of each thread block */
+    unsigned int blockDimY;      /**< Y dimension of each thread block */
+    unsigned int blockDimZ;      /**< Z dimension of each thread block */
+    unsigned int sharedMemBytes; /**< Dynamic shared-memory size per thread block in bytes */
+    void **kernelParams;         /**< Array of pointers to kernel parameters */
+    void **extra;                /**< Extra options */
+} CUDA_KERNEL_NODE_PARAMS_v1;
+typedef CUDA_KERNEL_NODE_PARAMS_v1 CUDA_KERNEL_NODE_PARAMS;
+
+/**
+ * Memset node parameters
+ */
+typedef struct CUDA_MEMSET_NODE_PARAMS_st {
+    CUdeviceptr dst;                        /**< Destination device pointer */
+    size_t pitch;                           /**< Pitch of destination device pointer. Unused if height is 1 */
+    unsigned int value;                     /**< Value to be set */
+    unsigned int elementSize;               /**< Size of each element in bytes. Must be 1, 2, or 4. */
+    size_t width;                           /**< Width of the row in elements */
+    size_t height;                          /**< Number of rows */
+} CUDA_MEMSET_NODE_PARAMS_v1;
+typedef CUDA_MEMSET_NODE_PARAMS_v1 CUDA_MEMSET_NODE_PARAMS;
+
+/**
+ * Host node parameters
+ */
+typedef struct CUDA_HOST_NODE_PARAMS_st {
+    CUhostFn fn;    /**< The function to call when the node executes */
+    void* userData; /**< Argument to pass to the function */
+} CUDA_HOST_NODE_PARAMS_v1;
+typedef CUDA_HOST_NODE_PARAMS_v1 CUDA_HOST_NODE_PARAMS;
+
+/**
+ * Graph node types
+ */
+typedef enum CUgraphNodeType_enum {
+    CU_GRAPH_NODE_TYPE_KERNEL           = 0, /**< GPU kernel node */
+    CU_GRAPH_NODE_TYPE_MEMCPY           = 1, /**< Memcpy node */
+    CU_GRAPH_NODE_TYPE_MEMSET           = 2, /**< Memset node */
+    CU_GRAPH_NODE_TYPE_HOST             = 3, /**< Host (executable) node */
+    CU_GRAPH_NODE_TYPE_GRAPH            = 4, /**< Node which executes an embedded graph */
+    CU_GRAPH_NODE_TYPE_EMPTY            = 5, /**< Empty (no-op) node */
+    CU_GRAPH_NODE_TYPE_WAIT_EVENT       = 6, /**< External event wait node */
+    CU_GRAPH_NODE_TYPE_EVENT_RECORD     = 7, /**< External event record node */
+    CU_GRAPH_NODE_TYPE_EXT_SEMAS_SIGNAL = 8, /**< External semaphore signal node */
+    CU_GRAPH_NODE_TYPE_EXT_SEMAS_WAIT   = 9, /**< External semaphore wait node */
+    CU_GRAPH_NODE_TYPE_MEM_ALLOC        = 10,/**< Memory Allocation Node */
+    CU_GRAPH_NODE_TYPE_MEM_FREE         = 11 /**< Memory Free Node */
+    ,
+    CU_GRAPH_NODE_TYPE_BATCH_MEM_OP     = 12 /**< Batch MemOp Node */
+} CUgraphNodeType;
+
+typedef enum CUsynchronizationPolicy_enum {
+    CU_SYNC_POLICY_AUTO = 1,
+    CU_SYNC_POLICY_SPIN = 2,
+    CU_SYNC_POLICY_YIELD = 3,
+    CU_SYNC_POLICY_BLOCKING_SYNC = 4
+} CUsynchronizationPolicy;
+
+/**
+ * Cluster scheduling policies. These may be passed to ::cuFuncSetAttribute
+ */
+typedef enum CUclusterSchedulingPolicy_enum {
+    CU_CLUSTER_SCHEDULING_POLICY_DEFAULT        = 0, /**< the default policy */
+    CU_CLUSTER_SCHEDULING_POLICY_SPREAD         = 1, /**< spread the blocks within a cluster to the SMs */
+    CU_CLUSTER_SCHEDULING_POLICY_LOAD_BALANCING = 2  /**< allow the hardware to load-balance the blocks in a cluster to the SMs */
+} CUclusterSchedulingPolicy;
+
+typedef enum CUlaunchAttributeID_enum {
+    CU_LAUNCH_ATTRIBUTE_IGNORE = 0 /**< Ignored entry, for convenient composition */
+  , CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW   = 1 /**< Valid for streams, graph nodes, launches. */
+  , CU_LAUNCH_ATTRIBUTE_COOPERATIVE            = 2 /**< Valid for graph nodes, launches. */
+  , CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY = 3 /**< Valid for streams. */
+  , CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION                    = 4 /**< Valid for graph nodes, launches. */
+  , CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 5 /**< Valid for graph nodes, launches. */
+  , CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION    = 6 /**< Valid for launches. Setting
+                                                                      programmaticStreamSerializationAllowed to non-0
+                                                                      signals that the kernel will use programmatic
+                                                                      means to resolve its stream dependency, so that
+                                                                      the CUDA runtime should opportunistically allow
+                                                                      the grid's execution to overlap with the previous
+                                                                      kernel in the stream, if that kernel requests the
+                                                                      overlap. */
+  , CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT                   = 7 /**< Valid for launches. Event recorded through this
+                                                                      launch attribute is guaranteed to only trigger
+                                                                      after all block in the associated kernel trigger
+                                                                      the event. A block can trigger the event through
+                                                                      PTX griddepcontrol.launch_dependents. A trigger
+                                                                      can also be inserted at the beginning of each
+                                                                      block's execution if triggerAtBlockStart is set to
+                                                                      non-0. Note that dependents (including the CPU
+                                                                      thread calling cuEventSynchronize()) are not
+                                                                      guaranteed to observe the release precisely when
+                                                                      it is released. For example, cuEventSynchronize()
+                                                                      may only observe the event trigger long after the
+                                                                      associated kernel has completed. This recording
+                                                                      type is primarily meant for establishing
+                                                                      programmatic dependency between device tasks. The
+                                                                      event supplied must not be an interprocess or
+                                                                      interop event. The event must disable timing
+                                                                      (i.e. created with ::CU_EVENT_DISABLE_TIMING flag
+                                                                      set). */
+  , CU_LAUNCH_ATTRIBUTE_PRIORITY               = 8 /**< Valid for graph nodes. */
+} CUlaunchAttributeID;
+
+typedef union CUlaunchAttributeValue_union {
+    char pad[64]; /**< Pad to 64 bytes */
+    CUaccessPolicyWindow accessPolicyWindow;
+    int cooperative;
+    CUsynchronizationPolicy syncPolicy;
+    struct {
+        unsigned int x;
+        unsigned int y;
+        unsigned int z;
+    } clusterDim;
+    CUclusterSchedulingPolicy clusterSchedulingPolicyPreference;
+    int programmaticStreamSerializationAllowed;
+    struct {
+        CUevent event;
+        int flags;                      /* Does not accept ::CU_EVENT_RECORD_EXTERNAL */
+        int triggerAtBlockStart;
+    } programmaticEvent;
+    int priority;
+} CUlaunchAttributeValue;
+
+typedef struct CUlaunchAttribute_st {
+    CUlaunchAttributeID id;
+    char pad[8 - sizeof(CUlaunchAttributeID)];
+    CUlaunchAttributeValue value;
+} CUlaunchAttribute;
+
+typedef struct CUlaunchConfig_st {
+    unsigned int gridDimX;       /**< Width of grid in blocks */
+    unsigned int gridDimY;       /**< Height of grid in blocks */
+    unsigned int gridDimZ;       /**< Depth of grid in blocks */
+    unsigned int blockDimX;      /**< X dimension of each thread block */
+    unsigned int blockDimY;      /**< Y dimension of each thread block */
+    unsigned int blockDimZ;      /**< Z dimension of each thread block */
+    unsigned int sharedMemBytes; /**< Dynamic shared-memory size per thread block in bytes */
+    CUstream hStream;            /**< Stream identifier */
+    CUlaunchAttribute *attrs;    /**< nullable if numAttrs == 0 */
+    unsigned int numAttrs;       /**< number of attributes populated in attrs */
+} CUlaunchConfig;
+
+/**
+ * Graph kernel node Attributes
+ */
+typedef CUlaunchAttributeID CUkernelNodeAttrID;
+#define CU_KERNEL_NODE_ATTRIBUTE_ACCESS_POLICY_WINDOW CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW
+#define CU_KERNEL_NODE_ATTRIBUTE_COOPERATIVE          CU_LAUNCH_ATTRIBUTE_COOPERATIVE
+#define CU_KERNEL_NODE_ATTRIBUTE_CLUSTER_DIMENSION                    CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION
+#define CU_KERNEL_NODE_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE
+#define CU_KERNEL_NODE_ATTRIBUTE_PRIORITY             CU_LAUNCH_ATTRIBUTE_PRIORITY
+
+/**
+ * Graph kernel node attributes union, used with ::cuKernelNodeSetAttribute/::cuKernelNodeGetAttribute
+ */
+typedef CUlaunchAttributeValue CUkernelNodeAttrValue_v1;
+typedef CUkernelNodeAttrValue_v1 CUkernelNodeAttrValue;
+
+/**
+ * Possible stream capture statuses returned by ::cuStreamIsCapturing
+ */
+typedef enum CUstreamCaptureStatus_enum {
+    CU_STREAM_CAPTURE_STATUS_NONE        = 0, /**< Stream is not capturing */
+    CU_STREAM_CAPTURE_STATUS_ACTIVE      = 1, /**< Stream is actively capturing */
+    CU_STREAM_CAPTURE_STATUS_INVALIDATED = 2  /**< Stream is part of a capture sequence that
+                                                   has been invalidated, but not terminated */
+} CUstreamCaptureStatus;
+
+/**
+ * Possible modes for stream capture thread interactions. For more details see
+ * ::cuStreamBeginCapture and ::cuThreadExchangeStreamCaptureMode
+ */
+typedef enum CUstreamCaptureMode_enum {
+    CU_STREAM_CAPTURE_MODE_GLOBAL       = 0,
+    CU_STREAM_CAPTURE_MODE_THREAD_LOCAL = 1,
+    CU_STREAM_CAPTURE_MODE_RELAXED      = 2
+} CUstreamCaptureMode;
+
+/**
+ * Stream Attributes 
+ */
+typedef CUlaunchAttributeID CUstreamAttrID;
+#define CU_STREAM_ATTRIBUTE_ACCESS_POLICY_WINDOW   CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW
+#define CU_STREAM_ATTRIBUTE_SYNCHRONIZATION_POLICY CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY
+
+/**
+ * Stream attributes union, used with ::cuStreamSetAttribute/::cuStreamGetAttribute
+ */
+typedef CUlaunchAttributeValue CUstreamAttrValue_v1;
+typedef CUstreamAttrValue_v1 CUstreamAttrValue;
+
+/**
+ * Flags to specify search options. For more details see ::cuGetProcAddress
+ */
+typedef enum CUdriverProcAddress_flags_enum {
+    CU_GET_PROC_ADDRESS_DEFAULT = 0,                        /**< Default search mode for driver symbols. */
+    CU_GET_PROC_ADDRESS_LEGACY_STREAM = 1 << 0,             /**< Search for legacy versions of driver symbols. */
+    CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM = 1 << 1  /**< Search for per-thread versions of driver symbols. */ 
+} CUdriverProcAddress_flags;
+
+/**
+ * Execution Affinity Types 
+ */
+typedef enum CUexecAffinityType_enum {
+    CU_EXEC_AFFINITY_TYPE_SM_COUNT = 0,  /**< Create a context with limited SMs. */
+    CU_EXEC_AFFINITY_TYPE_MAX
+} CUexecAffinityType;
+
+/**
+ * Value for ::CU_EXEC_AFFINITY_TYPE_SM_COUNT
+ */
+typedef struct CUexecAffinitySmCount_st {
+    unsigned int val;    /**< The number of SMs the context is limited to use. */
+} CUexecAffinitySmCount_v1;
+typedef CUexecAffinitySmCount_v1 CUexecAffinitySmCount;
+
+/**
+ * Execution Affinity Parameters 
+ */
+typedef struct CUexecAffinityParam_st {
+    CUexecAffinityType type;
+    union {
+        CUexecAffinitySmCount smCount;    /** Value for ::CU_EXEC_AFFINITY_TYPE_SM_COUNT */
+    } param;
+} CUexecAffinityParam_v1;
+typedef CUexecAffinityParam_v1 CUexecAffinityParam;
+
+/**
+ * Error codes
+ */
+typedef enum cudaError_enum {
+    /**
+     * The API call returned with no errors. In the case of query calls, this
+     * also means that the operation being queried is complete (see
+     * ::cuEventQuery() and ::cuStreamQuery()).
+     */
+    CUDA_SUCCESS                              = 0,
+
+    /**
+     * This indicates that one or more of the parameters passed to the API call
+     * is not within an acceptable range of values.
+     */
+    CUDA_ERROR_INVALID_VALUE                  = 1,
+
+    /**
+     * The API call failed because it was unable to allocate enough memory to
+     * perform the requested operation.
+     */
+    CUDA_ERROR_OUT_OF_MEMORY                  = 2,
+
+    /**
+     * This indicates that the CUDA driver has not been initialized with
+     * ::cuInit() or that initialization has failed.
+     */
+    CUDA_ERROR_NOT_INITIALIZED                = 3,
+
+    /**
+     * This indicates that the CUDA driver is in the process of shutting down.
+     */
+    CUDA_ERROR_DEINITIALIZED                  = 4,
+
+    /**
+     * This indicates profiler is not initialized for this run. This can
+     * happen when the application is running with external profiling tools
+     * like visual profiler.
+     */
+    CUDA_ERROR_PROFILER_DISABLED              = 5,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to attempt to enable/disable the profiling via ::cuProfilerStart or
+     * ::cuProfilerStop without initialization.
+     */
+    CUDA_ERROR_PROFILER_NOT_INITIALIZED       = 6,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to call cuProfilerStart() when profiling is already enabled.
+     */
+    CUDA_ERROR_PROFILER_ALREADY_STARTED       = 7,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to call cuProfilerStop() when profiling is already disabled.
+     */
+    CUDA_ERROR_PROFILER_ALREADY_STOPPED       = 8,
+
+    /**
+     * This indicates that the CUDA driver that the application has loaded is a
+     * stub library. Applications that run with the stub rather than a real
+     * driver loaded will result in CUDA API returning this error.
+     */
+    CUDA_ERROR_STUB_LIBRARY                   = 34,
+
+    /**  
+     * This indicates that requested CUDA device is unavailable at the current
+     * time. Devices are often unavailable due to use of
+     * ::CU_COMPUTEMODE_EXCLUSIVE_PROCESS or ::CU_COMPUTEMODE_PROHIBITED.
+     */
+    CUDA_ERROR_DEVICE_UNAVAILABLE            = 46,
+
+    /**
+     * This indicates that no CUDA-capable devices were detected by the installed
+     * CUDA driver.
+     */
+    CUDA_ERROR_NO_DEVICE                      = 100,
+
+    /**
+     * This indicates that the device ordinal supplied by the user does not
+     * correspond to a valid CUDA device or that the action requested is
+     * invalid for the specified device.
+     */
+    CUDA_ERROR_INVALID_DEVICE                 = 101,
+
+    /**
+     * This error indicates that the Grid license is not applied.
+     */
+    CUDA_ERROR_DEVICE_NOT_LICENSED            = 102,
+
+    /**
+     * This indicates that the device kernel image is invalid. This can also
+     * indicate an invalid CUDA module.
+     */
+    CUDA_ERROR_INVALID_IMAGE                  = 200,
+
+    /**
+     * This most frequently indicates that there is no context bound to the
+     * current thread. This can also be returned if the context passed to an
+     * API call is not a valid handle (such as a context that has had
+     * ::cuCtxDestroy() invoked on it). This can also be returned if a user
+     * mixes different API versions (i.e. 3010 context with 3020 API calls).
+     * See ::cuCtxGetApiVersion() for more details.
+     */
+    CUDA_ERROR_INVALID_CONTEXT                = 201,
+
+    /**
+     * This indicated that the context being supplied as a parameter to the
+     * API call was already the active context.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.2. It is no longer an
+     * error to attempt to push the active context via ::cuCtxPushCurrent().
+     */
+    CUDA_ERROR_CONTEXT_ALREADY_CURRENT        = 202,
+
+    /**
+     * This indicates that a map or register operation has failed.
+     */
+    CUDA_ERROR_MAP_FAILED                     = 205,
+
+    /**
+     * This indicates that an unmap or unregister operation has failed.
+     */
+    CUDA_ERROR_UNMAP_FAILED                   = 206,
+
+    /**
+     * This indicates that the specified array is currently mapped and thus
+     * cannot be destroyed.
+     */
+    CUDA_ERROR_ARRAY_IS_MAPPED                = 207,
+
+    /**
+     * This indicates that the resource is already mapped.
+     */
+    CUDA_ERROR_ALREADY_MAPPED                 = 208,
+
+    /**
+     * This indicates that there is no kernel image available that is suitable
+     * for the device. This can occur when a user specifies code generation
+     * options for a particular CUDA source file that do not include the
+     * corresponding device configuration.
+     */
+    CUDA_ERROR_NO_BINARY_FOR_GPU              = 209,
+
+    /**
+     * This indicates that a resource has already been acquired.
+     */
+    CUDA_ERROR_ALREADY_ACQUIRED               = 210,
+
+    /**
+     * This indicates that a resource is not mapped.
+     */
+    CUDA_ERROR_NOT_MAPPED                     = 211,
+
+    /**
+     * This indicates that a mapped resource is not available for access as an
+     * array.
+     */
+    CUDA_ERROR_NOT_MAPPED_AS_ARRAY            = 212,
+
+    /**
+     * This indicates that a mapped resource is not available for access as a
+     * pointer.
+     */
+    CUDA_ERROR_NOT_MAPPED_AS_POINTER          = 213,
+
+    /**
+     * This indicates that an uncorrectable ECC error was detected during
+     * execution.
+     */
+    CUDA_ERROR_ECC_UNCORRECTABLE              = 214,
+
+    /**
+     * This indicates that the ::CUlimit passed to the API call is not
+     * supported by the active device.
+     */
+    CUDA_ERROR_UNSUPPORTED_LIMIT              = 215,
+
+    /**
+     * This indicates that the ::CUcontext passed to the API call can
+     * only be bound to a single CPU thread at a time but is already
+     * bound to a CPU thread.
+     */
+    CUDA_ERROR_CONTEXT_ALREADY_IN_USE         = 216,
+
+    /**
+     * This indicates that peer access is not supported across the given
+     * devices.
+     */
+    CUDA_ERROR_PEER_ACCESS_UNSUPPORTED        = 217,
+
+    /**
+     * This indicates that a PTX JIT compilation failed.
+     */
+    CUDA_ERROR_INVALID_PTX                    = 218,
+
+    /**
+     * This indicates an error with OpenGL or DirectX context.
+     */
+    CUDA_ERROR_INVALID_GRAPHICS_CONTEXT       = 219,
+
+    /**
+    * This indicates that an uncorrectable NVLink error was detected during the
+    * execution.
+    */
+    CUDA_ERROR_NVLINK_UNCORRECTABLE           = 220,
+
+    /**
+    * This indicates that the PTX JIT compiler library was not found.
+    */
+    CUDA_ERROR_JIT_COMPILER_NOT_FOUND         = 221,
+
+    /**
+     * This indicates that the provided PTX was compiled with an unsupported toolchain.
+     */
+
+    CUDA_ERROR_UNSUPPORTED_PTX_VERSION        = 222,
+
+    /**
+     * This indicates that the PTX JIT compilation was disabled.
+     */
+    CUDA_ERROR_JIT_COMPILATION_DISABLED       = 223,
+
+    /**
+     * This indicates that the ::CUexecAffinityType passed to the API call is not
+     * supported by the active device.
+     */ 
+    CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY      = 224,
+
+    /**
+     * This indicates that the device kernel source is invalid. This includes
+     * compilation/linker errors encountered in device code or user error.
+     */
+    CUDA_ERROR_INVALID_SOURCE                 = 300,
+
+    /**
+     * This indicates that the file specified was not found.
+     */
+    CUDA_ERROR_FILE_NOT_FOUND                 = 301,
+
+    /**
+     * This indicates that a link to a shared object failed to resolve.
+     */
+    CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND = 302,
+
+    /**
+     * This indicates that initialization of a shared object failed.
+     */
+    CUDA_ERROR_SHARED_OBJECT_INIT_FAILED      = 303,
+
+    /**
+     * This indicates that an OS call failed.
+     */
+    CUDA_ERROR_OPERATING_SYSTEM               = 304,
+
+    /**
+     * This indicates that a resource handle passed to the API call was not
+     * valid. Resource handles are opaque types like ::CUstream and ::CUevent.
+     */
+    CUDA_ERROR_INVALID_HANDLE                 = 400,
+
+    /**
+     * This indicates that a resource required by the API call is not in a
+     * valid state to perform the requested operation.
+     */
+    CUDA_ERROR_ILLEGAL_STATE                  = 401,
+
+    /**
+     * This indicates that a named symbol was not found. Examples of symbols
+     * are global/constant variable names, driver function names, texture names,
+     * and surface names.
+     */
+    CUDA_ERROR_NOT_FOUND                      = 500,
+
+    /**
+     * This indicates that asynchronous operations issued previously have not
+     * completed yet. This result is not actually an error, but must be indicated
+     * differently than ::CUDA_SUCCESS (which indicates completion). Calls that
+     * may return this value include ::cuEventQuery() and ::cuStreamQuery().
+     */
+    CUDA_ERROR_NOT_READY                      = 600,
+
+    /**
+     * While executing a kernel, the device encountered a
+     * load or store instruction on an invalid memory address.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_ILLEGAL_ADDRESS                = 700,
+
+    /**
+     * This indicates that a launch did not occur because it did not have
+     * appropriate resources. This error usually indicates that the user has
+     * attempted to pass too many arguments to the device kernel, or the
+     * kernel launch specifies too many threads for the kernel's register
+     * count. Passing arguments of the wrong size (i.e. a 64-bit pointer
+     * when a 32-bit int is expected) is equivalent to passing too many
+     * arguments and can also result in this error.
+     */
+    CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES        = 701,
+
+    /**
+     * This indicates that the device kernel took too long to execute. This can
+     * only occur if timeouts are enabled - see the device attribute
+     * ::CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT for more information.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_LAUNCH_TIMEOUT                 = 702,
+
+    /**
+     * This error indicates a kernel launch that uses an incompatible texturing
+     * mode.
+     */
+    CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING  = 703,
+
+    /**
+     * This error indicates that a call to ::cuCtxEnablePeerAccess() is
+     * trying to re-enable peer access to a context which has already
+     * had peer access to it enabled.
+     */
+    CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED    = 704,
+
+    /**
+     * This error indicates that ::cuCtxDisablePeerAccess() is
+     * trying to disable peer access which has not been enabled yet
+     * via ::cuCtxEnablePeerAccess().
+     */
+    CUDA_ERROR_PEER_ACCESS_NOT_ENABLED        = 705,
+
+    /**
+     * This error indicates that the primary context for the specified device
+     * has already been initialized.
+     */
+    CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE         = 708,
+
+    /**
+     * This error indicates that the context current to the calling thread
+     * has been destroyed using ::cuCtxDestroy, or is a primary context which
+     * has not yet been initialized.
+     */
+    CUDA_ERROR_CONTEXT_IS_DESTROYED           = 709,
+
+    /**
+     * A device-side assert triggered during kernel execution. The context
+     * cannot be used anymore, and must be destroyed. All existing device
+     * memory allocations from this context are invalid and must be
+     * reconstructed if the program is to continue using CUDA.
+     */
+    CUDA_ERROR_ASSERT                         = 710,
+
+    /**
+     * This error indicates that the hardware resources required to enable
+     * peer access have been exhausted for one or more of the devices
+     * passed to ::cuCtxEnablePeerAccess().
+     */
+    CUDA_ERROR_TOO_MANY_PEERS                 = 711,
+
+    /**
+     * This error indicates that the memory range passed to ::cuMemHostRegister()
+     * has already been registered.
+     */
+    CUDA_ERROR_HOST_MEMORY_ALREADY_REGISTERED = 712,
+
+    /**
+     * This error indicates that the pointer passed to ::cuMemHostUnregister()
+     * does not correspond to any currently registered memory region.
+     */
+    CUDA_ERROR_HOST_MEMORY_NOT_REGISTERED     = 713,
+
+    /**
+     * While executing a kernel, the device encountered a stack error.
+     * This can be due to stack corruption or exceeding the stack size limit.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_HARDWARE_STACK_ERROR           = 714,
+
+    /**
+     * While executing a kernel, the device encountered an illegal instruction.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_ILLEGAL_INSTRUCTION            = 715,
+
+    /**
+     * While executing a kernel, the device encountered a load or store instruction
+     * on a memory address which is not aligned.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_MISALIGNED_ADDRESS             = 716,
+
+    /**
+     * While executing a kernel, the device encountered an instruction
+     * which can only operate on memory locations in certain address spaces
+     * (global, shared, or local), but was supplied a memory address not
+     * belonging to an allowed address space.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_INVALID_ADDRESS_SPACE          = 717,
+
+    /**
+     * While executing a kernel, the device program counter wrapped its address space.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_INVALID_PC                     = 718,
+
+    /**
+     * An exception occurred on the device while executing a kernel. Common
+     * causes include dereferencing an invalid device pointer and accessing
+     * out of bounds shared memory. Less common cases can be system specific - more
+     * information about these cases can be found in the system specific user guide.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    CUDA_ERROR_LAUNCH_FAILED                  = 719,
+
+    /**
+     * This error indicates that the number of blocks launched per grid for a kernel that was
+     * launched via either ::cuLaunchCooperativeKernel or ::cuLaunchCooperativeKernelMultiDevice
+     * exceeds the maximum number of blocks as allowed by ::cuOccupancyMaxActiveBlocksPerMultiprocessor
+     * or ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags times the number of multiprocessors
+     * as specified by the device attribute ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT.
+     */
+    CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE   = 720,
+
+    /**
+     * This error indicates that the attempted operation is not permitted.
+     */
+    CUDA_ERROR_NOT_PERMITTED                  = 800,
+
+    /**
+     * This error indicates that the attempted operation is not supported
+     * on the current system or device.
+     */
+    CUDA_ERROR_NOT_SUPPORTED                  = 801,
+
+    /**
+     * This error indicates that the system is not yet ready to start any CUDA
+     * work.  To continue using CUDA, verify the system configuration is in a
+     * valid state and all required driver daemons are actively running.
+     * More information about this error can be found in the system specific
+     * user guide.
+     */
+    CUDA_ERROR_SYSTEM_NOT_READY               = 802,
+
+    /**
+     * This error indicates that there is a mismatch between the versions of
+     * the display driver and the CUDA driver. Refer to the compatibility documentation
+     * for supported versions.
+     */
+    CUDA_ERROR_SYSTEM_DRIVER_MISMATCH         = 803,
+
+    /**
+     * This error indicates that the system was upgraded to run with forward compatibility
+     * but the visible hardware detected by CUDA does not support this configuration.
+     * Refer to the compatibility documentation for the supported hardware matrix or ensure
+     * that only supported hardware is visible during initialization via the CUDA_VISIBLE_DEVICES
+     * environment variable.
+     */
+    CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE = 804,
+
+    /**
+     * This error indicates that the MPS client failed to connect to the MPS control daemon or the MPS server.
+     */
+    CUDA_ERROR_MPS_CONNECTION_FAILED          = 805,
+
+    /**
+     * This error indicates that the remote procedural call between the MPS server and the MPS client failed.
+     */
+    CUDA_ERROR_MPS_RPC_FAILURE                = 806,
+
+    /**
+     * This error indicates that the MPS server is not ready to accept new MPS client requests.
+     * This error can be returned when the MPS server is in the process of recovering from a fatal failure.
+     */
+    CUDA_ERROR_MPS_SERVER_NOT_READY           = 807,
+
+    /**
+     * This error indicates that the hardware resources required to create MPS client have been exhausted.
+     */
+    CUDA_ERROR_MPS_MAX_CLIENTS_REACHED        = 808,
+
+    /**
+     * This error indicates the the hardware resources required to support device connections have been exhausted.
+     */
+    CUDA_ERROR_MPS_MAX_CONNECTIONS_REACHED    = 809,
+
+    /**
+     * This error indicates that the MPS client has been terminated by the server. To continue using CUDA, the process must be terminated and relaunched.
+     */
+    CUDA_ERROR_MPS_CLIENT_TERMINATED          = 810,
+
+    /**
+     * This error indicates that the operation is not permitted when
+     * the stream is capturing.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_UNSUPPORTED     = 900,
+
+    /**
+     * This error indicates that the current capture sequence on the stream
+     * has been invalidated due to a previous error.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_INVALIDATED     = 901,
+
+    /**
+     * This error indicates that the operation would have resulted in a merge
+     * of two independent capture sequences.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_MERGE           = 902,
+
+    /**
+     * This error indicates that the capture was not initiated in this stream.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_UNMATCHED       = 903,
+
+    /**
+     * This error indicates that the capture sequence contains a fork that was
+     * not joined to the primary stream.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_UNJOINED        = 904,
+
+    /**
+     * This error indicates that a dependency would have been created which
+     * crosses the capture sequence boundary. Only implicit in-stream ordering
+     * dependencies are allowed to cross the boundary.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_ISOLATION       = 905,
+
+    /**
+     * This error indicates a disallowed implicit dependency on a current capture
+     * sequence from cudaStreamLegacy.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_IMPLICIT        = 906,
+
+    /**
+     * This error indicates that the operation is not permitted on an event which
+     * was last recorded in a capturing stream.
+     */
+    CUDA_ERROR_CAPTURED_EVENT                 = 907,
+
+    /**
+     * A stream capture sequence not initiated with the ::CU_STREAM_CAPTURE_MODE_RELAXED
+     * argument to ::cuStreamBeginCapture was passed to ::cuStreamEndCapture in a
+     * different thread.
+     */
+    CUDA_ERROR_STREAM_CAPTURE_WRONG_THREAD    = 908,
+
+    /**
+     * This error indicates that the timeout specified for the wait operation has lapsed.
+     */
+    CUDA_ERROR_TIMEOUT                        = 909,
+
+    /**
+     * This error indicates that the graph update was not performed because it included 
+     * changes which violated constraints specific to instantiated graph update.
+     */
+    CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE      = 910,
+
+    /**
+     * This indicates that an async error has occurred in a device outside of CUDA.
+     * If CUDA was waiting for an external device's signal before consuming shared data,
+     * the external device signaled an error indicating that the data is not valid for
+     * consumption. This leaves the process in an inconsistent state and any further CUDA
+     * work will return the same error. To continue using CUDA, the process must be
+     * terminated and relaunched.
+     */
+    CUDA_ERROR_EXTERNAL_DEVICE               = 911,
+
+    /**
+     * Indicates a kernel launch error due to cluster misconfiguration.
+     */
+    CUDA_ERROR_INVALID_CLUSTER_SIZE           = 912,
+
+    /**
+     * This indicates that an unknown internal error has occurred.
+     */
+    CUDA_ERROR_UNKNOWN                        = 999
+} CUresult;
+
+/**
+ * P2P Attributes
+ */
+typedef enum CUdevice_P2PAttribute_enum {
+    CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK                     = 0x01,  /**< A relative value indicating the performance of the link between two devices */
+    CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED                     = 0x02,  /**< P2P Access is enable */
+    CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED              = 0x03,  /**< Atomic operation over the link supported */
+    CU_DEVICE_P2P_ATTRIBUTE_ACCESS_ACCESS_SUPPORTED              = 0x04,  /**< \deprecated use CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED instead */
+    CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED          = 0x04   /**< Accessing CUDA arrays over the link supported */
+} CUdevice_P2PAttribute;
+
+/**
+ * CUDA stream callback
+ * \param hStream The stream the callback was added to, as passed to ::cuStreamAddCallback.  May be NULL.
+ * \param status ::CUDA_SUCCESS or any persistent error on the stream.
+ * \param userData User parameter provided at registration.
+ */
+typedef void (CUDA_CB *CUstreamCallback)(CUstream hStream, CUresult status, void *userData);
+
+/**
+ * Block size to per-block dynamic shared memory mapping for a certain
+ * kernel \param blockSize Block size of the kernel.
+ *
+ * \return The dynamic shared memory needed by a block.
+ */
+typedef size_t (CUDA_CB *CUoccupancyB2DSize)(int blockSize);
+
+/**
+ * If set, host memory is portable between CUDA contexts.
+ * Flag for ::cuMemHostAlloc()
+ */
+#define CU_MEMHOSTALLOC_PORTABLE        0x01
+
+/**
+ * If set, host memory is mapped into CUDA address space and
+ * ::cuMemHostGetDevicePointer() may be called on the host pointer.
+ * Flag for ::cuMemHostAlloc()
+ */
+#define CU_MEMHOSTALLOC_DEVICEMAP       0x02
+
+/**
+ * If set, host memory is allocated as write-combined - fast to write,
+ * faster to DMA, slow to read except via SSE4 streaming load instruction
+ * (MOVNTDQA).
+ * Flag for ::cuMemHostAlloc()
+ */
+#define CU_MEMHOSTALLOC_WRITECOMBINED   0x04
+
+/**
+ * If set, host memory is portable between CUDA contexts.
+ * Flag for ::cuMemHostRegister()
+ */
+#define CU_MEMHOSTREGISTER_PORTABLE     0x01
+
+/**
+ * If set, host memory is mapped into CUDA address space and
+ * ::cuMemHostGetDevicePointer() may be called on the host pointer.
+ * Flag for ::cuMemHostRegister()
+ */
+#define CU_MEMHOSTREGISTER_DEVICEMAP    0x02
+
+/**
+ * If set, the passed memory pointer is treated as pointing to some
+ * memory-mapped I/O space, e.g. belonging to a third-party PCIe device.
+ * On Windows the flag is a no-op.
+ * On Linux that memory is marked as non cache-coherent for the GPU and
+ * is expected to be physically contiguous. It may return
+ * ::CUDA_ERROR_NOT_PERMITTED if run as an unprivileged user,
+ * ::CUDA_ERROR_NOT_SUPPORTED on older Linux kernel versions.
+ * On all other platforms, it is not supported and ::CUDA_ERROR_NOT_SUPPORTED
+ * is returned.
+ * Flag for ::cuMemHostRegister()
+ */
+#define CU_MEMHOSTREGISTER_IOMEMORY     0x04
+
+/**
+* If set, the passed memory pointer is treated as pointing to memory that is
+* considered read-only by the device.  On platforms without
+* ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, this flag is
+* required in order to register memory mapped to the CPU as read-only.  Support
+* for the use of this flag can be queried from the device attribute
+* ::CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED.  Using this flag with
+* a current context associated with a device that does not have this attribute
+* set will cause ::cuMemHostRegister to error with ::CUDA_ERROR_NOT_SUPPORTED.
+*/
+#define CU_MEMHOSTREGISTER_READ_ONLY    0x08
+
+/**
+ * 2D memory copy parameters
+ */
+typedef struct CUDA_MEMCPY2D_st {
+    size_t srcXInBytes;         /**< Source X in bytes */
+    size_t srcY;                /**< Source Y */
+
+    CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
+    const void *srcHost;        /**< Source host pointer */
+    CUdeviceptr srcDevice;      /**< Source device pointer */
+    CUarray srcArray;           /**< Source array reference */
+    size_t srcPitch;            /**< Source pitch (ignored when src is array) */
+
+    size_t dstXInBytes;         /**< Destination X in bytes */
+    size_t dstY;                /**< Destination Y */
+
+    CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
+    void *dstHost;              /**< Destination host pointer */
+    CUdeviceptr dstDevice;      /**< Destination device pointer */
+    CUarray dstArray;           /**< Destination array reference */
+    size_t dstPitch;            /**< Destination pitch (ignored when dst is array) */
+
+    size_t WidthInBytes;        /**< Width of 2D memory copy in bytes */
+    size_t Height;              /**< Height of 2D memory copy */
+} CUDA_MEMCPY2D_v2;
+typedef CUDA_MEMCPY2D_v2 CUDA_MEMCPY2D;
+
+/**
+ * 3D memory copy parameters
+ */
+typedef struct CUDA_MEMCPY3D_st {
+    size_t srcXInBytes;         /**< Source X in bytes */
+    size_t srcY;                /**< Source Y */
+    size_t srcZ;                /**< Source Z */
+    size_t srcLOD;              /**< Source LOD */
+    CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
+    const void *srcHost;        /**< Source host pointer */
+    CUdeviceptr srcDevice;      /**< Source device pointer */
+    CUarray srcArray;           /**< Source array reference */
+    void *reserved0;            /**< Must be NULL */
+    size_t srcPitch;            /**< Source pitch (ignored when src is array) */
+    size_t srcHeight;           /**< Source height (ignored when src is array; may be 0 if Depth==1) */
+
+    size_t dstXInBytes;         /**< Destination X in bytes */
+    size_t dstY;                /**< Destination Y */
+    size_t dstZ;                /**< Destination Z */
+    size_t dstLOD;              /**< Destination LOD */
+    CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
+    void *dstHost;              /**< Destination host pointer */
+    CUdeviceptr dstDevice;      /**< Destination device pointer */
+    CUarray dstArray;           /**< Destination array reference */
+    void *reserved1;            /**< Must be NULL */
+    size_t dstPitch;            /**< Destination pitch (ignored when dst is array) */
+    size_t dstHeight;           /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
+
+    size_t WidthInBytes;        /**< Width of 3D memory copy in bytes */
+    size_t Height;              /**< Height of 3D memory copy */
+    size_t Depth;               /**< Depth of 3D memory copy */
+} CUDA_MEMCPY3D_v2;
+typedef CUDA_MEMCPY3D_v2 CUDA_MEMCPY3D;
+
+/**
+ * 3D memory cross-context copy parameters
+ */
+typedef struct CUDA_MEMCPY3D_PEER_st {
+    size_t srcXInBytes;         /**< Source X in bytes */
+    size_t srcY;                /**< Source Y */
+    size_t srcZ;                /**< Source Z */
+    size_t srcLOD;              /**< Source LOD */
+    CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
+    const void *srcHost;        /**< Source host pointer */
+    CUdeviceptr srcDevice;      /**< Source device pointer */
+    CUarray srcArray;           /**< Source array reference */
+    CUcontext srcContext;       /**< Source context (ignored with srcMemoryType is ::CU_MEMORYTYPE_ARRAY) */
+    size_t srcPitch;            /**< Source pitch (ignored when src is array) */
+    size_t srcHeight;           /**< Source height (ignored when src is array; may be 0 if Depth==1) */
+
+    size_t dstXInBytes;         /**< Destination X in bytes */
+    size_t dstY;                /**< Destination Y */
+    size_t dstZ;                /**< Destination Z */
+    size_t dstLOD;              /**< Destination LOD */
+    CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
+    void *dstHost;              /**< Destination host pointer */
+    CUdeviceptr dstDevice;      /**< Destination device pointer */
+    CUarray dstArray;           /**< Destination array reference */
+    CUcontext dstContext;       /**< Destination context (ignored with dstMemoryType is ::CU_MEMORYTYPE_ARRAY) */
+    size_t dstPitch;            /**< Destination pitch (ignored when dst is array) */
+    size_t dstHeight;           /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
+
+    size_t WidthInBytes;        /**< Width of 3D memory copy in bytes */
+    size_t Height;              /**< Height of 3D memory copy */
+    size_t Depth;               /**< Depth of 3D memory copy */
+} CUDA_MEMCPY3D_PEER_v1;
+typedef CUDA_MEMCPY3D_PEER_v1 CUDA_MEMCPY3D_PEER;
+
+/**
+ * Array descriptor
+ */
+typedef struct CUDA_ARRAY_DESCRIPTOR_st
+{
+    size_t Width;             /**< Width of array */
+    size_t Height;            /**< Height of array */
+
+    CUarray_format Format;    /**< Array format */
+    unsigned int NumChannels; /**< Channels per array element */
+} CUDA_ARRAY_DESCRIPTOR_v2;
+typedef CUDA_ARRAY_DESCRIPTOR_v2 CUDA_ARRAY_DESCRIPTOR;
+
+/**
+ * 3D array descriptor
+ */
+typedef struct CUDA_ARRAY3D_DESCRIPTOR_st
+{
+    size_t Width;             /**< Width of 3D array */
+    size_t Height;            /**< Height of 3D array */
+    size_t Depth;             /**< Depth of 3D array */
+
+    CUarray_format Format;    /**< Array format */
+    unsigned int NumChannels; /**< Channels per array element */
+    unsigned int Flags;       /**< Flags */
+} CUDA_ARRAY3D_DESCRIPTOR_v2;
+typedef CUDA_ARRAY3D_DESCRIPTOR_v2 CUDA_ARRAY3D_DESCRIPTOR;
+
+/**
+ * Indicates that the layered sparse CUDA array or CUDA mipmapped array has a single mip tail region for all layers
+ */
+#define CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL 0x1
+
+/**
+ * CUDA array sparse properties
+ */
+typedef struct CUDA_ARRAY_SPARSE_PROPERTIES_st {
+    struct {
+        unsigned int width;     /**< Width of sparse tile in elements */
+        unsigned int height;    /**< Height of sparse tile in elements */
+        unsigned int depth;     /**< Depth of sparse tile in elements */
+    } tileExtent;
+
+    /**
+     * First mip level at which the mip tail begins.
+     */
+    unsigned int miptailFirstLevel;
+    /**
+     * Total size of the mip tail.
+     */
+    unsigned long long miptailSize;
+    /**
+     * Flags will either be zero or ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL
+     */
+    unsigned int flags;
+    unsigned int reserved[4];
+} CUDA_ARRAY_SPARSE_PROPERTIES_v1;
+typedef CUDA_ARRAY_SPARSE_PROPERTIES_v1 CUDA_ARRAY_SPARSE_PROPERTIES;
+
+/**
+ * CUDA array memory requirements
+ */
+typedef struct CUDA_ARRAY_MEMORY_REQUIREMENTS_st {
+    size_t size;                /**< Total required memory size */
+    size_t alignment;           /**< alignment requirement */
+    unsigned int reserved[4];
+} CUDA_ARRAY_MEMORY_REQUIREMENTS_v1;
+typedef CUDA_ARRAY_MEMORY_REQUIREMENTS_v1 CUDA_ARRAY_MEMORY_REQUIREMENTS;
+
+/**
+ * CUDA Resource descriptor
+ */
+typedef struct CUDA_RESOURCE_DESC_st
+{
+    CUresourcetype resType;                   /**< Resource type */
+
+    union {
+        struct {
+            CUarray hArray;                   /**< CUDA array */
+        } array;
+        struct {
+            CUmipmappedArray hMipmappedArray; /**< CUDA mipmapped array */
+        } mipmap;
+        struct {
+            CUdeviceptr devPtr;               /**< Device pointer */
+            CUarray_format format;            /**< Array format */
+            unsigned int numChannels;         /**< Channels per array element */
+            size_t sizeInBytes;               /**< Size in bytes */
+        } linear;
+        struct {
+            CUdeviceptr devPtr;               /**< Device pointer */
+            CUarray_format format;            /**< Array format */
+            unsigned int numChannels;         /**< Channels per array element */
+            size_t width;                     /**< Width of the array in elements */
+            size_t height;                    /**< Height of the array in elements */
+            size_t pitchInBytes;              /**< Pitch between two rows in bytes */
+        } pitch2D;
+        struct {
+            int reserved[32];
+        } reserved;
+    } res;
+
+    unsigned int flags;                       /**< Flags (must be zero) */
+} CUDA_RESOURCE_DESC_v1;
+typedef CUDA_RESOURCE_DESC_v1 CUDA_RESOURCE_DESC;
+
+/**
+ * Texture descriptor
+ */
+typedef struct CUDA_TEXTURE_DESC_st {
+    CUaddress_mode addressMode[3];  /**< Address modes */
+    CUfilter_mode filterMode;       /**< Filter mode */
+    unsigned int flags;             /**< Flags */
+    unsigned int maxAnisotropy;     /**< Maximum anisotropy ratio */
+    CUfilter_mode mipmapFilterMode; /**< Mipmap filter mode */
+    float mipmapLevelBias;          /**< Mipmap level bias */
+    float minMipmapLevelClamp;      /**< Mipmap minimum level clamp */
+    float maxMipmapLevelClamp;      /**< Mipmap maximum level clamp */
+    float borderColor[4];           /**< Border Color */
+    int reserved[12];
+} CUDA_TEXTURE_DESC_v1;
+typedef CUDA_TEXTURE_DESC_v1 CUDA_TEXTURE_DESC;
+
+/**
+ * Resource view format
+ */
+typedef enum CUresourceViewFormat_enum
+{
+    CU_RES_VIEW_FORMAT_NONE          = 0x00, /**< No resource view format (use underlying resource format) */
+    CU_RES_VIEW_FORMAT_UINT_1X8      = 0x01, /**< 1 channel unsigned 8-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_2X8      = 0x02, /**< 2 channel unsigned 8-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_4X8      = 0x03, /**< 4 channel unsigned 8-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_1X8      = 0x04, /**< 1 channel signed 8-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_2X8      = 0x05, /**< 2 channel signed 8-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_4X8      = 0x06, /**< 4 channel signed 8-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_1X16     = 0x07, /**< 1 channel unsigned 16-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_2X16     = 0x08, /**< 2 channel unsigned 16-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_4X16     = 0x09, /**< 4 channel unsigned 16-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_1X16     = 0x0a, /**< 1 channel signed 16-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_2X16     = 0x0b, /**< 2 channel signed 16-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_4X16     = 0x0c, /**< 4 channel signed 16-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_1X32     = 0x0d, /**< 1 channel unsigned 32-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_2X32     = 0x0e, /**< 2 channel unsigned 32-bit integers */
+    CU_RES_VIEW_FORMAT_UINT_4X32     = 0x0f, /**< 4 channel unsigned 32-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_1X32     = 0x10, /**< 1 channel signed 32-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_2X32     = 0x11, /**< 2 channel signed 32-bit integers */
+    CU_RES_VIEW_FORMAT_SINT_4X32     = 0x12, /**< 4 channel signed 32-bit integers */
+    CU_RES_VIEW_FORMAT_FLOAT_1X16    = 0x13, /**< 1 channel 16-bit floating point */
+    CU_RES_VIEW_FORMAT_FLOAT_2X16    = 0x14, /**< 2 channel 16-bit floating point */
+    CU_RES_VIEW_FORMAT_FLOAT_4X16    = 0x15, /**< 4 channel 16-bit floating point */
+    CU_RES_VIEW_FORMAT_FLOAT_1X32    = 0x16, /**< 1 channel 32-bit floating point */
+    CU_RES_VIEW_FORMAT_FLOAT_2X32    = 0x17, /**< 2 channel 32-bit floating point */
+    CU_RES_VIEW_FORMAT_FLOAT_4X32    = 0x18, /**< 4 channel 32-bit floating point */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC1  = 0x19, /**< Block compressed 1 */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC2  = 0x1a, /**< Block compressed 2 */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC3  = 0x1b, /**< Block compressed 3 */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC4  = 0x1c, /**< Block compressed 4 unsigned */
+    CU_RES_VIEW_FORMAT_SIGNED_BC4    = 0x1d, /**< Block compressed 4 signed */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC5  = 0x1e, /**< Block compressed 5 unsigned */
+    CU_RES_VIEW_FORMAT_SIGNED_BC5    = 0x1f, /**< Block compressed 5 signed */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC6H = 0x20, /**< Block compressed 6 unsigned half-float */
+    CU_RES_VIEW_FORMAT_SIGNED_BC6H   = 0x21, /**< Block compressed 6 signed half-float */
+    CU_RES_VIEW_FORMAT_UNSIGNED_BC7  = 0x22  /**< Block compressed 7 */
+} CUresourceViewFormat;
+
+/**
+ * Resource view descriptor
+ */
+typedef struct CUDA_RESOURCE_VIEW_DESC_st
+{
+    CUresourceViewFormat format;   /**< Resource view format */
+    size_t width;                  /**< Width of the resource view */
+    size_t height;                 /**< Height of the resource view */
+    size_t depth;                  /**< Depth of the resource view */
+    unsigned int firstMipmapLevel; /**< First defined mipmap level */
+    unsigned int lastMipmapLevel;  /**< Last defined mipmap level */
+    unsigned int firstLayer;       /**< First layer index */
+    unsigned int lastLayer;        /**< Last layer index */
+    unsigned int reserved[16];
+} CUDA_RESOURCE_VIEW_DESC_v1;
+typedef CUDA_RESOURCE_VIEW_DESC_v1 CUDA_RESOURCE_VIEW_DESC;
+
+/**
+ * GPU Direct v3 tokens
+ */
+typedef struct CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_st {
+    unsigned long long p2pToken;
+    unsigned int vaSpaceToken;
+} CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_v1;
+typedef CUDA_POINTER_ATTRIBUTE_P2P_TOKENS_v1 CUDA_POINTER_ATTRIBUTE_P2P_TOKENS;
+
+/**
+* Access flags that specify the level of access the current context's device has
+* on the memory referenced.
+*/
+typedef enum CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS_enum {
+    CU_POINTER_ATTRIBUTE_ACCESS_FLAG_NONE      = 0x0,   /**< No access, meaning the device cannot access this memory at all, thus must be staged through accessible memory in order to complete certain operations */
+    CU_POINTER_ATTRIBUTE_ACCESS_FLAG_READ      = 0x1,   /**< Read-only access, meaning writes to this memory are considered invalid accesses and thus return error in that case. */
+    CU_POINTER_ATTRIBUTE_ACCESS_FLAG_READWRITE = 0x3    /**< Read-write access, the device has full read-write access to the memory */
+} CUDA_POINTER_ATTRIBUTE_ACCESS_FLAGS;
+
+/**
+ * Kernel launch parameters
+ */
+typedef struct CUDA_LAUNCH_PARAMS_st {
+    CUfunction function;         /**< Kernel to launch */
+    unsigned int gridDimX;       /**< Width of grid in blocks */
+    unsigned int gridDimY;       /**< Height of grid in blocks */
+    unsigned int gridDimZ;       /**< Depth of grid in blocks */
+    unsigned int blockDimX;      /**< X dimension of each thread block */
+    unsigned int blockDimY;      /**< Y dimension of each thread block */
+    unsigned int blockDimZ;      /**< Z dimension of each thread block */
+    unsigned int sharedMemBytes; /**< Dynamic shared-memory size per thread block in bytes */
+    CUstream hStream;            /**< Stream identifier */
+    void **kernelParams;         /**< Array of pointers to kernel parameters */
+} CUDA_LAUNCH_PARAMS_v1;
+typedef CUDA_LAUNCH_PARAMS_v1 CUDA_LAUNCH_PARAMS;
+
+/**
+ * External memory handle types
+ */
+typedef enum CUexternalMemoryHandleType_enum {
+    /**
+     * Handle is an opaque file descriptor
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD          = 1,
+    /**
+     * Handle is an opaque shared NT handle
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32       = 2,
+    /**
+     * Handle is an opaque, globally shared handle
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT   = 3,
+    /**
+     * Handle is a D3D12 heap object
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP         = 4,
+    /**
+     * Handle is a D3D12 committed resource
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE     = 5,
+    /**
+     * Handle is a shared NT handle to a D3D11 resource
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE     = 6,
+    /**
+     * Handle is a globally shared handle to a D3D11 resource
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT = 7,
+    /**
+     * Handle is an NvSciBuf object
+     */
+    CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF = 8
+} CUexternalMemoryHandleType;
+
+/**
+ * Indicates that the external memory object is a dedicated resource
+ */
+#define CUDA_EXTERNAL_MEMORY_DEDICATED   0x1
+
+/** When the \p flags parameter of ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS
+ * contains this flag, it indicates that signaling an external semaphore object
+ * should skip performing appropriate memory synchronization operations over all
+ * the external memory objects that are imported as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF,
+ * which otherwise are performed by default to ensure data coherency with other
+ * importers of the same NvSciBuf memory objects.
+ */
+#define CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC 0x01
+
+/** When the \p flags parameter of ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS
+ * contains this flag, it indicates that waiting on an external semaphore object
+ * should skip performing appropriate memory synchronization operations over all
+ * the external memory objects that are imported as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF,
+ * which otherwise are performed by default to ensure data coherency with other
+ * importers of the same NvSciBuf memory objects.
+ */
+#define CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC 0x02
+
+/**
+ * When \p flags of ::cuDeviceGetNvSciSyncAttributes is set to this,
+ * it indicates that application needs signaler specific NvSciSyncAttr
+ * to be filled by ::cuDeviceGetNvSciSyncAttributes.
+ */
+#define CUDA_NVSCISYNC_ATTR_SIGNAL 0x1
+
+/**
+ * When \p flags of ::cuDeviceGetNvSciSyncAttributes is set to this,
+ * it indicates that application needs waiter specific NvSciSyncAttr
+ * to be filled by ::cuDeviceGetNvSciSyncAttributes.
+ */
+#define CUDA_NVSCISYNC_ATTR_WAIT 0x2
+/**
+ * External memory handle descriptor
+ */
+typedef struct CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st {
+    /**
+     * Type of the handle
+     */
+    CUexternalMemoryHandleType type;
+    union {
+        /**
+         * File descriptor referencing the memory object. Valid
+         * when type is
+         * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD
+         */
+        int fd;
+        /**
+         * Win32 handle referencing the semaphore object. Valid when
+         * type is one of the following:
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE
+         * - ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
+         * Exactly one of 'handle' and 'name' must be non-NULL. If
+         * type is one of the following:
+         * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT
+         * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
+         * then 'name' must be NULL.
+         */
+        struct {
+            /**
+             * Valid NT handle. Must be NULL if 'name' is non-NULL
+             */
+            void *handle;
+            /**
+             * Name of a valid memory object.
+             * Must be NULL if 'handle' is non-NULL.
+             */
+            const void *name;
+        } win32;
+        /**
+         * A handle representing an NvSciBuf Object. Valid when type
+         * is ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF
+         */
+        const void *nvSciBufObject;
+    } handle;
+    /**
+     * Size of the memory allocation
+     */
+    unsigned long long size;
+    /**
+     * Flags must either be zero or ::CUDA_EXTERNAL_MEMORY_DEDICATED
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_MEMORY_HANDLE_DESC_v1;
+typedef CUDA_EXTERNAL_MEMORY_HANDLE_DESC_v1 CUDA_EXTERNAL_MEMORY_HANDLE_DESC;
+
+/**
+ * External memory buffer descriptor
+ */
+typedef struct CUDA_EXTERNAL_MEMORY_BUFFER_DESC_st {
+    /**
+     * Offset into the memory object where the buffer's base is
+     */
+    unsigned long long offset;
+    /**
+     * Size of the buffer
+     */
+    unsigned long long size;
+    /**
+     * Flags reserved for future use. Must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_MEMORY_BUFFER_DESC_v1;
+typedef CUDA_EXTERNAL_MEMORY_BUFFER_DESC_v1 CUDA_EXTERNAL_MEMORY_BUFFER_DESC;
+
+/**
+ * External memory mipmap descriptor
+ */
+typedef struct CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st {
+    /**
+     * Offset into the memory object where the base level of the
+     * mipmap chain is.
+     */
+    unsigned long long offset;
+    /**
+     * Format, dimension and type of base level of the mipmap chain
+     */
+    CUDA_ARRAY3D_DESCRIPTOR arrayDesc;
+    /**
+     * Total number of levels in the mipmap chain
+     */
+    unsigned int numLevels;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1;
+typedef CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1 CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC;
+
+/**
+ * External semaphore handle types
+ */
+typedef enum CUexternalSemaphoreHandleType_enum {
+    /**
+     * Handle is an opaque file descriptor
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD             = 1,
+    /**
+     * Handle is an opaque shared NT handle
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32          = 2,
+    /**
+     * Handle is an opaque, globally shared handle
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT      = 3,
+    /**
+     * Handle is a shared NT handle referencing a D3D12 fence object
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE           = 4,
+    /**
+     * Handle is a shared NT handle referencing a D3D11 fence object
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE           = 5,
+    /**
+     * Opaque handle to NvSciSync Object
+	 */
+	CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC             = 6,
+    /**
+     * Handle is a shared NT handle referencing a D3D11 keyed mutex object
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX     = 7,
+    /**
+     * Handle is a globally shared handle referencing a D3D11 keyed mutex object
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT = 8,
+    /**
+     * Handle is an opaque file descriptor referencing a timeline semaphore
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD = 9,
+    /**
+     * Handle is an opaque shared NT handle referencing a timeline semaphore
+     */
+    CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 = 10
+} CUexternalSemaphoreHandleType;
+
+/**
+ * External semaphore handle descriptor
+ */
+typedef struct CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st {
+    /**
+     * Type of the handle
+     */
+    CUexternalSemaphoreHandleType type;
+    union {
+        /**
+         * File descriptor referencing the semaphore object. Valid
+         * when type is one of the following:
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD
+         */
+        int fd;
+        /**
+         * Win32 handle referencing the semaphore object. Valid when
+         * type is one of the following:
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32
+         * Exactly one of 'handle' and 'name' must be non-NULL. If
+         * type is one of the following:
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+         * - ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT
+         * then 'name' must be NULL.
+         */
+        struct {
+            /**
+             * Valid NT handle. Must be NULL if 'name' is non-NULL
+             */
+            void *handle;
+            /**
+             * Name of a valid synchronization primitive.
+             * Must be NULL if 'handle' is non-NULL.
+             */
+            const void *name;
+        } win32;
+        /**
+         * Valid NvSciSyncObj. Must be non NULL
+         */
+        const void* nvSciSyncObj;
+    } handle;
+    /**
+     * Flags reserved for the future. Must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1;
+typedef CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1 CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC;
+
+/**
+ * External semaphore signal parameters
+ */
+typedef struct CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_st {
+    struct {
+        /**
+         * Parameters for fence objects
+         */
+        struct {
+            /**
+             * Value of fence to be signaled
+             */
+            unsigned long long value;
+        } fence;
+        union {
+            /**
+             * Pointer to NvSciSyncFence. Valid if ::CUexternalSemaphoreHandleType
+             * is of type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC.
+             */
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /**
+             * Value of key to release the mutex with
+             */
+            unsigned long long key;
+        } keyedMutex;
+        unsigned int reserved[12];
+    } params;
+    /**
+     * Only when ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS is used to
+     * signal a ::CUexternalSemaphore of type
+     * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC, the valid flag is
+     * ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC which indicates
+     * that while signaling the ::CUexternalSemaphore, no memory synchronization
+     * operations should be performed for any external memory object imported
+     * as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF.
+     * For all other types of ::CUexternalSemaphore, flags must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1;
+typedef CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1 CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS;
+
+/**
+ * External semaphore wait parameters
+ */
+typedef struct CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_st {
+    struct {
+        /**
+         * Parameters for fence objects
+         */
+        struct {
+            /**
+             * Value of fence to be waited on
+             */
+            unsigned long long value;
+        } fence;
+        /**
+         * Pointer to NvSciSyncFence. Valid if CUexternalSemaphoreHandleType
+         * is of type CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC.
+         */
+        union {
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /**
+             * Value of key to acquire the mutex with
+             */
+            unsigned long long key;
+            /**
+             * Timeout in milliseconds to wait to acquire the mutex
+             */
+            unsigned int timeoutMs;
+        } keyedMutex;
+        unsigned int reserved[10];
+    } params;
+    /**
+     * Only when ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS is used to wait on
+     * a ::CUexternalSemaphore of type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC,
+     * the valid flag is ::CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC
+     * which indicates that while waiting for the ::CUexternalSemaphore, no memory
+     * synchronization operations should be performed for any external memory
+     * object imported as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF.
+     * For all other types of ::CUexternalSemaphore, flags must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+} CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1;
+typedef CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1 CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS;
+
+/**
+ * Semaphore signal node parameters
+ */
+typedef struct CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_st {
+    CUexternalSemaphore* extSemArray;                         /**< Array of external semaphore handles. */
+    const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS* paramsArray; /**< Array of external semaphore signal parameters. */
+    unsigned int numExtSems;                                  /**< Number of handles and parameters supplied in extSemArray and paramsArray. */
+} CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1;
+typedef CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 CUDA_EXT_SEM_SIGNAL_NODE_PARAMS;
+
+/**
+ * Semaphore wait node parameters
+ */
+typedef struct CUDA_EXT_SEM_WAIT_NODE_PARAMS_st {
+    CUexternalSemaphore* extSemArray;                       /**< Array of external semaphore handles. */
+    const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS* paramsArray; /**< Array of external semaphore wait parameters. */
+    unsigned int numExtSems;                                /**< Number of handles and parameters supplied in extSemArray and paramsArray. */
+} CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1;
+typedef CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 CUDA_EXT_SEM_WAIT_NODE_PARAMS;
+
+typedef unsigned long long CUmemGenericAllocationHandle_v1;
+typedef CUmemGenericAllocationHandle_v1 CUmemGenericAllocationHandle;
+
+/**
+ * Flags for specifying particular handle types
+ */
+typedef enum CUmemAllocationHandleType_enum {
+    CU_MEM_HANDLE_TYPE_NONE                  = 0x0,  /**< Does not allow any export mechanism. > */
+    CU_MEM_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR = 0x1,  /**< Allows a file descriptor to be used for exporting. Permitted only on POSIX systems. (int) */
+    CU_MEM_HANDLE_TYPE_WIN32                 = 0x2,  /**< Allows a Win32 NT handle to be used for exporting. (HANDLE) */
+    CU_MEM_HANDLE_TYPE_WIN32_KMT             = 0x4,  /**< Allows a Win32 KMT handle to be used for exporting. (D3DKMT_HANDLE) */
+    CU_MEM_HANDLE_TYPE_MAX                   = 0x7FFFFFFF
+} CUmemAllocationHandleType;
+
+/**
+ * Specifies the memory protection flags for mapping.
+ */
+typedef enum CUmemAccess_flags_enum {
+    CU_MEM_ACCESS_FLAGS_PROT_NONE        = 0x0,  /**< Default, make the address range not accessible */
+    CU_MEM_ACCESS_FLAGS_PROT_READ        = 0x1,  /**< Make the address range read accessible */
+    CU_MEM_ACCESS_FLAGS_PROT_READWRITE   = 0x3,  /**< Make the address range read-write accessible */
+    CU_MEM_ACCESS_FLAGS_PROT_MAX         = 0x7FFFFFFF
+} CUmemAccess_flags;
+
+/**
+ * Specifies the type of location
+ */
+typedef enum CUmemLocationType_enum {
+    CU_MEM_LOCATION_TYPE_INVALID = 0x0,
+    CU_MEM_LOCATION_TYPE_DEVICE  = 0x1,  /**< Location is a device location, thus id is a device ordinal */
+    CU_MEM_LOCATION_TYPE_MAX     = 0x7FFFFFFF
+} CUmemLocationType;
+
+/**
+* Defines the allocation types available
+*/
+typedef enum CUmemAllocationType_enum {
+    CU_MEM_ALLOCATION_TYPE_INVALID = 0x0,
+
+    /** This allocation type is 'pinned', i.e. cannot migrate from its current
+      * location while the application is actively using it
+      */
+    CU_MEM_ALLOCATION_TYPE_PINNED  = 0x1,
+    CU_MEM_ALLOCATION_TYPE_MAX     = 0x7FFFFFFF
+} CUmemAllocationType;
+
+/**
+* Flag for requesting different optimal and required granularities for an allocation.
+*/
+typedef enum CUmemAllocationGranularity_flags_enum {
+    CU_MEM_ALLOC_GRANULARITY_MINIMUM     = 0x0,     /**< Minimum required granularity for allocation */
+    CU_MEM_ALLOC_GRANULARITY_RECOMMENDED = 0x1      /**< Recommended granularity for allocation for best performance */
+} CUmemAllocationGranularity_flags;
+
+/**
+* Specifies the handle type for address range
+*/
+typedef enum CUmemRangeHandleType_enum
+{
+    CU_MEM_RANGE_HANDLE_TYPE_DMA_BUF_FD = 0x1,
+    CU_MEM_RANGE_HANDLE_TYPE_MAX        = 0x7FFFFFFF
+} CUmemRangeHandleType;
+
+/**
+ * Sparse subresource types
+ */
+typedef enum CUarraySparseSubresourceType_enum {
+    CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL = 0,
+    CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL = 1
+} CUarraySparseSubresourceType;
+
+/**
+ * Memory operation types
+ */
+typedef enum CUmemOperationType_enum {
+    CU_MEM_OPERATION_TYPE_MAP = 1,
+    CU_MEM_OPERATION_TYPE_UNMAP = 2
+} CUmemOperationType;
+
+/**
+ * Memory handle types
+ */
+typedef enum CUmemHandleType_enum {
+    CU_MEM_HANDLE_TYPE_GENERIC = 0
+} CUmemHandleType;
+
+/**
+ * Specifies the CUDA array or CUDA mipmapped array memory mapping information
+ */
+typedef struct CUarrayMapInfo_st {    
+    CUresourcetype resourceType;                    /**< Resource type */
+
+    union {
+        CUmipmappedArray mipmap;
+        CUarray array;
+    } resource;
+
+    CUarraySparseSubresourceType subresourceType;   /**< Sparse subresource type */
+
+    union {
+        struct {
+            unsigned int level;                     /**< For CUDA mipmapped arrays must a valid mipmap level. For CUDA arrays must be zero */            
+            unsigned int layer;                     /**< For CUDA layered arrays must be a valid layer index. Otherwise, must be zero */
+            unsigned int offsetX;                   /**< Starting X offset in elements */
+            unsigned int offsetY;                   /**< Starting Y offset in elements */
+            unsigned int offsetZ;                   /**< Starting Z offset in elements */            
+            unsigned int extentWidth;               /**< Width in elements */
+            unsigned int extentHeight;              /**< Height in elements */
+            unsigned int extentDepth;               /**< Depth in elements */
+        } sparseLevel;
+        struct {
+            unsigned int layer;                     /**< For CUDA layered arrays must be a valid layer index. Otherwise, must be zero */
+            unsigned long long offset;              /**< Offset within mip tail */
+            unsigned long long size;                /**< Extent in bytes */
+        } miptail;
+    } subresource;
+    
+    CUmemOperationType memOperationType;            /**< Memory operation type */
+    CUmemHandleType memHandleType;                  /**< Memory handle type */
+
+    union {
+        CUmemGenericAllocationHandle memHandle;
+    } memHandle;
+    
+    unsigned long long offset;                      /**< Offset within the memory */
+    unsigned int deviceBitMask;                     /**< Device ordinal bit mask */
+    unsigned int flags;                             /**< flags for future use, must be zero now. */
+    unsigned int reserved[2];                       /**< Reserved for future use, must be zero now. */
+} CUarrayMapInfo_v1;
+typedef CUarrayMapInfo_v1 CUarrayMapInfo;
+
+/**
+ * Specifies a memory location.
+ */
+typedef struct CUmemLocation_st {
+    CUmemLocationType type; /**< Specifies the location type, which modifies the meaning of id. */
+    int id;                 /**< identifier for a given this location's ::CUmemLocationType. */
+} CUmemLocation_v1;
+typedef CUmemLocation_v1 CUmemLocation;
+
+/**
+ * Specifies compression attribute for an allocation.
+ */
+typedef enum CUmemAllocationCompType_enum {
+    CU_MEM_ALLOCATION_COMP_NONE = 0x0, /**< Allocating non-compressible memory */
+    CU_MEM_ALLOCATION_COMP_GENERIC = 0x1 /**< Allocating  compressible memory */
+} CUmemAllocationCompType;
+
+/**
+ * This flag if set indicates that the memory will be used as a tile pool.
+ */
+#define CU_MEM_CREATE_USAGE_TILE_POOL    0x1
+
+/**
+* Specifies the allocation properties for a allocation.
+*/
+typedef struct CUmemAllocationProp_st {
+    /** Allocation type */
+    CUmemAllocationType type;
+    /** requested ::CUmemAllocationHandleType */
+    CUmemAllocationHandleType requestedHandleTypes;
+    /** Location of allocation */
+    CUmemLocation location;
+    /**
+     * Windows-specific POBJECT_ATTRIBUTES required when
+     * ::CU_MEM_HANDLE_TYPE_WIN32 is specified.  This object atributes structure
+     * includes security attributes that define
+     * the scope of which exported allocations may be tranferred to other
+     * processes.  In all other cases, this field is required to be zero.
+     */
+    void *win32HandleMetaData;
+    struct {
+         /**
+         * Allocation hint for requesting compressible memory.
+         * On devices that support Compute Data Compression, compressible
+         * memory can be used to accelerate accesses to data with unstructured
+         * sparsity and other compressible data patterns. Applications are 
+         * expected to query allocation property of the handle obtained with 
+         * ::cuMemCreate using ::cuMemGetAllocationPropertiesFromHandle to 
+         * validate if the obtained allocation is compressible or not. Note that 
+         * compressed memory may not be mappable on all devices.
+         */
+         unsigned char compressionType;
+         unsigned char gpuDirectRDMACapable;
+         /** Bitmask indicating intended usage for this allocation */
+         unsigned short usage;
+         unsigned char reserved[4];
+    } allocFlags;
+} CUmemAllocationProp_v1;
+typedef CUmemAllocationProp_v1 CUmemAllocationProp;
+
+/**
+ * Memory access descriptor
+ */
+typedef struct CUmemAccessDesc_st {
+    CUmemLocation location;        /**< Location on which the request is to change it's accessibility */
+    CUmemAccess_flags flags;       /**< ::CUmemProt accessibility flags to set on the request */
+} CUmemAccessDesc_v1;
+typedef CUmemAccessDesc_v1 CUmemAccessDesc;
+
+typedef enum CUgraphExecUpdateResult_enum {
+    CU_GRAPH_EXEC_UPDATE_SUCCESS                     = 0x0, /**< The update succeeded */
+    CU_GRAPH_EXEC_UPDATE_ERROR                       = 0x1, /**< The update failed for an unexpected reason which is described in the return value of the function */
+    CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED      = 0x2, /**< The update failed because the topology changed */
+    CU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED     = 0x3, /**< The update failed because a node type changed */
+    CU_GRAPH_EXEC_UPDATE_ERROR_FUNCTION_CHANGED      = 0x4, /**< The update failed because the function of a kernel node changed (CUDA driver < 11.2) */
+    CU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED    = 0x5, /**< The update failed because the parameters changed in a way that is not supported */
+    CU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED         = 0x6, /**< The update failed because something about the node is not supported */
+    CU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE = 0x7, /**< The update failed because the function of a kernel node changed in an unsupported way */
+    CU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED    = 0x8  /**< The update failed because the node attributes changed in a way that is not supported */
+} CUgraphExecUpdateResult;
+
+/**
+ * CUDA memory pool attributes
+ */
+typedef enum CUmemPool_attribute_enum {
+    /**
+     * (value type = int)
+     * Allow cuMemAllocAsync to use memory asynchronously freed
+     * in another streams as long as a stream ordering dependency
+     * of the allocating stream on the free action exists.
+     * Cuda events and null stream interactions can create the required
+     * stream ordered dependencies. (default enabled)
+     */
+    CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES = 1,
+
+    /**
+     * (value type = int)
+     * Allow reuse of already completed frees when there is no dependency
+     * between the free and allocation. (default enabled)
+     */
+    CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC,
+
+    /**
+     * (value type = int)
+     * Allow cuMemAllocAsync to insert new stream dependencies
+     * in order to establish the stream ordering required to reuse
+     * a piece of memory released by cuFreeAsync (default enabled).
+     */
+    CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of reserved memory in bytes to hold onto before trying
+     * to release memory back to the OS. When more than the release
+     * threshold bytes of memory are held by the memory pool, the
+     * allocator will try to release memory back to the OS on the
+     * next call to stream, event or context synchronize. (default 0)
+     */
+    CU_MEMPOOL_ATTR_RELEASE_THRESHOLD,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of backing memory currently allocated for the mempool.
+     */
+    CU_MEMPOOL_ATTR_RESERVED_MEM_CURRENT,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of backing memory allocated for the mempool since the
+     * last time it was reset. High watermark can only be reset to zero.
+     */
+    CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory from the pool that is currently in use by the application.
+     */
+    CU_MEMPOOL_ATTR_USED_MEM_CURRENT,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of the amount of memory from the pool that was in use by the application since
+     * the last time it was reset. High watermark can only be reset to zero.
+     */
+    CU_MEMPOOL_ATTR_USED_MEM_HIGH
+} CUmemPool_attribute;
+
+/**
+ * Specifies the properties of allocations made from the pool.
+ */
+typedef struct CUmemPoolProps_st {
+    CUmemAllocationType allocType;         /**< Allocation type. Currently must be specified as CU_MEM_ALLOCATION_TYPE_PINNED */
+    CUmemAllocationHandleType handleTypes; /**< Handle types that will be supported by allocations from the pool. */
+    CUmemLocation location;                /**< Location where allocations should reside. */
+    /**
+     * Windows-specific LPSECURITYATTRIBUTES required when
+     * ::CU_MEM_HANDLE_TYPE_WIN32 is specified.  This security attribute defines
+     * the scope of which exported allocations may be tranferred to other
+     * processes.  In all other cases, this field is required to be zero.
+     */
+    void *win32SecurityAttributes;
+    unsigned char reserved[64]; /**< reserved for future use, must be 0 */
+} CUmemPoolProps_v1;
+typedef CUmemPoolProps_v1 CUmemPoolProps;
+
+/**
+ * Opaque data for exporting a pool allocation
+ */
+typedef struct CUmemPoolPtrExportData_st {
+    unsigned char reserved[64];
+} CUmemPoolPtrExportData_v1;
+typedef CUmemPoolPtrExportData_v1 CUmemPoolPtrExportData;
+
+/**
+ * Memory allocation node parameters
+ */
+typedef struct CUDA_MEM_ALLOC_NODE_PARAMS_st {
+    /**
+    * in: location where the allocation should reside (specified in ::location).
+    * ::handleTypes must be ::CU_MEM_HANDLE_TYPE_NONE. IPC is not supported.
+    */
+    CUmemPoolProps poolProps;
+    const CUmemAccessDesc *accessDescs; /**< in: array of memory access descriptors. Used to describe peer GPU access */
+    size_t accessDescCount; /**< in: number of memory access descriptors.  Must not exceed the number of GPUs. */
+    size_t bytesize; /**< in: size in bytes of the requested allocation */
+    CUdeviceptr dptr; /**< out: address of the allocation returned by CUDA */
+} CUDA_MEM_ALLOC_NODE_PARAMS;
+
+typedef enum CUgraphMem_attribute_enum {
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory, in bytes, currently associated with graphs
+     */
+    CU_GRAPH_MEM_ATTR_USED_MEM_CURRENT,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of memory, in bytes, associated with graphs since the
+     * last time it was reset.  High watermark can only be reset to zero.
+     */
+    CU_GRAPH_MEM_ATTR_USED_MEM_HIGH,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory, in bytes, currently allocated for use by
+     * the CUDA graphs asynchronous allocator.
+     */
+    CU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of memory, in bytes, currently allocated for use by
+     * the CUDA graphs asynchronous allocator.
+     */
+    CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH
+} CUgraphMem_attribute;
+
+/**
+ * If set, each kernel launched as part of ::cuLaunchCooperativeKernelMultiDevice only
+ * waits for prior work in the stream corresponding to that GPU to complete before the
+ * kernel begins execution.
+ */
+#define CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC   0x01
+
+/**
+ * If set, any subsequent work pushed in a stream that participated in a call to
+ * ::cuLaunchCooperativeKernelMultiDevice will only wait for the kernel launched on
+ * the GPU corresponding to that stream to complete before it begins execution.
+ */
+#define CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC  0x02
+
+/**
+ * If set, the CUDA array is a collection of layers, where each layer is either a 1D
+ * or a 2D array and the Depth member of CUDA_ARRAY3D_DESCRIPTOR specifies the number
+ * of layers, not the depth of a 3D array.
+ */
+#define CUDA_ARRAY3D_LAYERED        0x01
+
+/**
+ * Deprecated, use CUDA_ARRAY3D_LAYERED
+ */
+#define CUDA_ARRAY3D_2DARRAY        0x01
+
+/**
+ * This flag must be set in order to bind a surface reference
+ * to the CUDA array
+ */
+#define CUDA_ARRAY3D_SURFACE_LDST   0x02
+
+/**
+ * If set, the CUDA array is a collection of six 2D arrays, representing faces of a cube. The
+ * width of such a CUDA array must be equal to its height, and Depth must be six.
+ * If ::CUDA_ARRAY3D_LAYERED flag is also set, then the CUDA array is a collection of cubemaps
+ * and Depth must be a multiple of six.
+ */
+#define CUDA_ARRAY3D_CUBEMAP        0x04
+
+/**
+ * This flag must be set in order to perform texture gather operations
+ * on a CUDA array.
+ */
+#define CUDA_ARRAY3D_TEXTURE_GATHER 0x08
+
+/**
+ * This flag if set indicates that the CUDA
+ * array is a DEPTH_TEXTURE.
+ */
+#define CUDA_ARRAY3D_DEPTH_TEXTURE 0x10
+
+/**
+ * This flag indicates that the CUDA array may be bound as a color target
+ * in an external graphics API
+ */
+#define CUDA_ARRAY3D_COLOR_ATTACHMENT 0x20
+
+/**
+ * This flag if set indicates that the CUDA array or CUDA mipmapped array
+ * is a sparse CUDA array or CUDA mipmapped array respectively
+ */
+#define CUDA_ARRAY3D_SPARSE 0x40
+
+/**
+ * This flag if set indicates that the CUDA array or CUDA mipmapped array
+ * will allow deferred memory mapping
+ */
+#define CUDA_ARRAY3D_DEFERRED_MAPPING 0x80
+
+/**
+ * Override the texref format with a format inferred from the array.
+ * Flag for ::cuTexRefSetArray()
+ */
+#define CU_TRSA_OVERRIDE_FORMAT 0x01
+
+/**
+ * Read the texture as integers rather than promoting the values to floats
+ * in the range [0,1].
+ * Flag for ::cuTexRefSetFlags() and ::cuTexObjectCreate()
+ */
+#define CU_TRSF_READ_AS_INTEGER         0x01
+
+/**
+ * Use normalized texture coordinates in the range [0,1) instead of [0,dim).
+ * Flag for ::cuTexRefSetFlags() and ::cuTexObjectCreate()
+ */
+#define CU_TRSF_NORMALIZED_COORDINATES  0x02
+
+/**
+ * Perform sRGB->linear conversion during texture read.
+ * Flag for ::cuTexRefSetFlags() and ::cuTexObjectCreate()
+ */
+#define CU_TRSF_SRGB  0x10
+
+ /**
+  * Disable any trilinear filtering optimizations.
+  * Flag for ::cuTexRefSetFlags() and ::cuTexObjectCreate()
+  */
+#define CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION  0x20
+
+/**
+ * Enable seamless cube map filtering.
+ * Flag for ::cuTexObjectCreate()
+ */
+#define CU_TRSF_SEAMLESS_CUBEMAP  0x40
+
+/**
+ * C++ compile time constant for CU_LAUNCH_PARAM_END
+ */
+#define CU_LAUNCH_PARAM_END_AS_INT     0x00
+
+/**
+ * End of array terminator for the \p extra parameter to
+ * ::cuLaunchKernel
+ */
+#define CU_LAUNCH_PARAM_END            ((void*)CU_LAUNCH_PARAM_END_AS_INT)
+
+/**
+ * C++ compile time constant for CU_LAUNCH_PARAM_BUFFER_POINTER
+ */
+#define CU_LAUNCH_PARAM_BUFFER_POINTER_AS_INT 0x01
+
+/**
+ * Indicator that the next value in the \p extra parameter to
+ * ::cuLaunchKernel will be a pointer to a buffer containing all kernel
+ * parameters used for launching kernel \p f.  This buffer needs to
+ * honor all alignment/padding requirements of the individual parameters.
+ * If ::CU_LAUNCH_PARAM_BUFFER_SIZE is not also specified in the
+ * \p extra array, then ::CU_LAUNCH_PARAM_BUFFER_POINTER will have no
+ * effect.
+ */
+#define CU_LAUNCH_PARAM_BUFFER_POINTER        ((void*)CU_LAUNCH_PARAM_BUFFER_POINTER_AS_INT)
+
+/**
+ * C++ compile time constant for CU_LAUNCH_PARAM_BUFFER_SIZE
+ */
+#define CU_LAUNCH_PARAM_BUFFER_SIZE_AS_INT 0x02
+
+/**
+ * Indicator that the next value in the \p extra parameter to
+ * ::cuLaunchKernel will be a pointer to a size_t which contains the
+ * size of the buffer specified with ::CU_LAUNCH_PARAM_BUFFER_POINTER.
+ * It is required that ::CU_LAUNCH_PARAM_BUFFER_POINTER also be specified
+ * in the \p extra array if the value associated with
+ * ::CU_LAUNCH_PARAM_BUFFER_SIZE is not zero.
+ */
+#define CU_LAUNCH_PARAM_BUFFER_SIZE        ((void*)CU_LAUNCH_PARAM_BUFFER_SIZE_AS_INT)
+
+/**
+ * For texture references loaded into the module, use default texunit from
+ * texture reference.
+ */
+#define CU_PARAM_TR_DEFAULT -1
+
+/**
+ * Device that represents the CPU
+ */
+#define CU_DEVICE_CPU               ((CUdevice)-1)
+
+/**
+ * Device that represents an invalid device
+ */
+#define CU_DEVICE_INVALID           ((CUdevice)-2)
+
+/**
+ * Bitmasks for ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS
+ */
+typedef enum CUflushGPUDirectRDMAWritesOptions_enum {
+    CU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_HOST   = 1<<0, /**< ::cuFlushGPUDirectRDMAWrites() and its CUDA Runtime API counterpart are supported on the device. */
+    CU_FLUSH_GPU_DIRECT_RDMA_WRITES_OPTION_MEMOPS = 1<<1  /**< The ::CU_STREAM_WAIT_VALUE_FLUSH flag and the ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the device. */
+} CUflushGPUDirectRDMAWritesOptions;
+
+/**
+ * Platform native ordering for GPUDirect RDMA writes
+ */
+typedef enum CUGPUDirectRDMAWritesOrdering_enum {
+    CU_GPU_DIRECT_RDMA_WRITES_ORDERING_NONE        = 0,   /**< The device does not natively support ordering of remote writes. ::cuFlushGPUDirectRDMAWrites() can be leveraged if supported. */
+    CU_GPU_DIRECT_RDMA_WRITES_ORDERING_OWNER       = 100, /**< Natively, the device can consistently consume remote writes, although other CUDA devices may not. */
+    CU_GPU_DIRECT_RDMA_WRITES_ORDERING_ALL_DEVICES = 200  /**< Any CUDA device in the system can consistently consume remote writes to this device. */
+} CUGPUDirectRDMAWritesOrdering;
+
+/**
+ * The scopes for ::cuFlushGPUDirectRDMAWrites
+ */
+typedef enum CUflushGPUDirectRDMAWritesScope_enum {
+    CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_OWNER       = 100, /**< Blocks until remote writes are visible to the CUDA device context owning the data. */
+    CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TO_ALL_DEVICES = 200  /**< Blocks until remote writes are visible to all CUDA device contexts. */
+} CUflushGPUDirectRDMAWritesScope;
+ 
+/**
+ * The targets for ::cuFlushGPUDirectRDMAWrites
+ */
+typedef enum CUflushGPUDirectRDMAWritesTarget_enum {
+    CU_FLUSH_GPU_DIRECT_RDMA_WRITES_TARGET_CURRENT_CTX = 0 /**< Sets the target for ::cuFlushGPUDirectRDMAWrites() to the currently active CUDA device context. */
+} CUflushGPUDirectRDMAWritesTarget;
+
+/**
+ * The additional write options for ::cuGraphDebugDotPrint
+ */
+typedef enum CUgraphDebugDot_flags_enum {
+    CU_GRAPH_DEBUG_DOT_FLAGS_VERBOSE                        = 1<<0,  /** Output all debug data as if every debug flag is enabled */
+    CU_GRAPH_DEBUG_DOT_FLAGS_RUNTIME_TYPES                  = 1<<1,  /** Use CUDA Runtime structures for output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_PARAMS             = 1<<2,  /** Adds CUDA_KERNEL_NODE_PARAMS values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_MEMCPY_NODE_PARAMS             = 1<<3,  /** Adds CUDA_MEMCPY3D values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_MEMSET_NODE_PARAMS             = 1<<4,  /** Adds CUDA_MEMSET_NODE_PARAMS values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_HOST_NODE_PARAMS               = 1<<5,  /** Adds CUDA_HOST_NODE_PARAMS values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_EVENT_NODE_PARAMS              = 1<<6,  /** Adds CUevent handle from record and wait nodes to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_SIGNAL_NODE_PARAMS   = 1<<7,  /** Adds CUDA_EXT_SEM_SIGNAL_NODE_PARAMS values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_EXT_SEMAS_WAIT_NODE_PARAMS     = 1<<8,  /** Adds CUDA_EXT_SEM_WAIT_NODE_PARAMS values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_KERNEL_NODE_ATTRIBUTES         = 1<<9,  /** Adds CUkernelNodeAttrValue values to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_HANDLES                        = 1<<10, /** Adds node handles and every kernel function handle to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_MEM_ALLOC_NODE_PARAMS          = 1<<11, /** Adds memory alloc node parameters to output */
+    CU_GRAPH_DEBUG_DOT_FLAGS_MEM_FREE_NODE_PARAMS           = 1<<12  /** Adds memory free node parameters to output */
+    ,
+    CU_GRAPH_DEBUG_DOT_FLAGS_BATCH_MEM_OP_NODE_PARAMS       = 1<<13  /** Adds batch mem op node parameters to output */
+} CUgraphDebugDot_flags;
+
+/**
+ * Flags for user objects for graphs
+ */
+typedef enum CUuserObject_flags_enum {
+    CU_USER_OBJECT_NO_DESTRUCTOR_SYNC = 1  /**< Indicates the destructor execution is not synchronized by any CUDA handle. */
+} CUuserObject_flags;
+
+/**
+ * Flags for retaining user object references for graphs
+ */
+typedef enum CUuserObjectRetain_flags_enum {
+    CU_GRAPH_USER_OBJECT_MOVE = 1  /**< Transfer references from the caller rather than creating new references. */
+} CUuserObjectRetain_flags;
+
+/**
+ * Flags for instantiating a graph
+ */
+typedef enum CUgraphInstantiate_flags_enum {
+    CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH  = 1 /**< Automatically free memory allocated in a graph before relaunching. */
+  , CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY    = 8 /**< Run the graph using the per-node priority attributes rather than the
+                                                              priority of the stream it is launched into. */
+} CUgraphInstantiate_flags;
+
+/** @} */ /* END CUDA_TYPES */
+
+#if defined(__GNUC__)
+  #if defined(__CUDA_API_PUSH_VISIBILITY_DEFAULT)
+    #pragma GCC visibility push(default)
+  #endif
+#endif
+
+#ifdef _WIN32
+#define CUDAAPI __stdcall
+#else
+#define CUDAAPI
+#endif
+
+/**
+ * \defgroup CUDA_ERROR Error Handling
+ *
+ * ___MANBRIEF___ error handling functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the error handling functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Gets the string description of an error code
+ *
+ * Sets \p *pStr to the address of a NULL-terminated string description
+ * of the error code \p error.
+ * If the error code is not recognized, ::CUDA_ERROR_INVALID_VALUE
+ * will be returned and \p *pStr will be set to the NULL address.
+ *
+ * \param error - Error code to convert to string
+ * \param pStr - Address of the string pointer.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::CUresult,
+ * ::cudaGetErrorString
+ */
+CUresult CUDAAPI cuGetErrorString(CUresult error, const char **pStr);
+
+/**
+ * \brief Gets the string representation of an error code enum name
+ *
+ * Sets \p *pStr to the address of a NULL-terminated string representation
+ * of the name of the enum error code \p error.
+ * If the error code is not recognized, ::CUDA_ERROR_INVALID_VALUE
+ * will be returned and \p *pStr will be set to the NULL address.
+ *
+ * \param error - Error code to convert to string
+ * \param pStr - Address of the string pointer.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::CUresult,
+ * ::cudaGetErrorName
+ */
+CUresult CUDAAPI cuGetErrorName(CUresult error, const char **pStr);
+
+/** @} */ /* END CUDA_ERROR */
+
+/**
+ * \defgroup CUDA_INITIALIZE Initialization
+ *
+ * ___MANBRIEF___ initialization functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the initialization functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Initialize the CUDA driver API
+ *
+ * Initializes the driver API and must be called before any other function from
+ * the driver API. Currently, the \p Flags parameter must be 0. If ::cuInit()
+ * has not been called, any function from the driver API will return
+ * ::CUDA_ERROR_NOT_INITIALIZED.
+ *
+ * \param Flags - Initialization flag for CUDA.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_SYSTEM_DRIVER_MISMATCH,
+ * ::CUDA_ERROR_COMPAT_NOT_SUPPORTED_ON_DEVICE
+ * \notefnerr
+ */
+CUresult CUDAAPI cuInit(unsigned int Flags);
+
+/** @} */ /* END CUDA_INITIALIZE */
+
+/**
+ * \defgroup CUDA_VERSION Version Management
+ *
+ * ___MANBRIEF___ version management functions of the low-level CUDA driver
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the version management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the latest CUDA version supported by driver
+ *
+ * Returns in \p *driverVersion the version of CUDA supported by
+ * the driver.  The version is returned as
+ * (1000 &times; major + 10 &times; minor). For example, CUDA 9.2
+ * would be represented by 9020.
+ *
+ * This function automatically returns ::CUDA_ERROR_INVALID_VALUE if
+ * \p driverVersion is NULL.
+ *
+ * \param driverVersion - Returns the CUDA driver version
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaDriverGetVersion,
+ * ::cudaRuntimeGetVersion
+ */
+CUresult CUDAAPI cuDriverGetVersion(int *driverVersion);
+
+/** @} */ /* END CUDA_VERSION */
+
+/**
+ * \defgroup CUDA_DEVICE Device Management
+ *
+ * ___MANBRIEF___ device management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the device management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns a handle to a compute device
+ *
+ * Returns in \p *device a device handle given an ordinal in the range <b>[0,
+ * ::cuDeviceGetCount()-1]</b>.
+ *
+ * \param device  - Returned device handle
+ * \param ordinal - Device number to get handle for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGetLuid,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport
+ */
+CUresult CUDAAPI cuDeviceGet(CUdevice *device, int ordinal);
+
+/**
+ * \brief Returns the number of compute-capable devices
+ *
+ * Returns in \p *count the number of devices with compute capability greater
+ * than or equal to 2.0 that are available for execution. If there is no such
+ * device, ::cuDeviceGetCount() returns 0.
+ *
+ * \param count - Returned number of compute-capable devices
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGetLuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaGetDeviceCount
+ */
+CUresult CUDAAPI cuDeviceGetCount(int *count);
+
+/**
+ * \brief Returns an identifer string for the device
+ *
+ * Returns an ASCII string identifying the device \p dev in the NULL-terminated
+ * string pointed to by \p name. \p len specifies the maximum length of the
+ * string that may be returned.
+ *
+ * \param name - Returned identifier string for the device
+ * \param len  - Maximum length of string to store in \p name
+ * \param dev  - Device to get identifier string for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGetLuid,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaGetDeviceProperties
+ */
+CUresult CUDAAPI cuDeviceGetName(char *name, int len, CUdevice dev);
+
+/**
+ * \brief Return an UUID for the device
+ *
+ * Note there is a later version of this API, ::cuDeviceGetUuid_v2. It will
+ * supplant this version in 12.0, which is retained for minor version compatibility.
+ *
+ * Returns 16-octets identifing the device \p dev in the structure
+ * pointed by the \p uuid.
+ *
+ * \param uuid - Returned UUID
+ * \param dev  - Device to get identifier string for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetUuid_v2
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetLuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaGetDeviceProperties
+ */
+CUresult CUDAAPI cuDeviceGetUuid(CUuuid *uuid, CUdevice dev);
+
+/**
+ * \brief Return an UUID for the device (11.4+)
+ *
+ * Returns 16-octets identifing the device \p dev in the structure
+ * pointed by the \p uuid. If the device is in MIG mode, returns its
+ * MIG UUID which uniquely identifies the subscribed MIG compute instance.
+ *
+ * \param uuid - Returned UUID
+ * \param dev  - Device to get identifier string for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetLuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cudaGetDeviceProperties
+ */
+CUresult CUDAAPI cuDeviceGetUuid_v2(CUuuid *uuid, CUdevice dev);
+
+/**
+ * \brief Return an LUID and device node mask for the device
+ *
+ * Return identifying information (\p luid and \p deviceNodeMask) to allow
+ * matching device with graphics APIs.
+ *
+ * \param luid - Returned LUID
+ * \param deviceNodeMask - Returned device node mask
+ * \param dev  - Device to get identifier string for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaGetDeviceProperties
+ */
+CUresult CUDAAPI cuDeviceGetLuid(char *luid, unsigned int *deviceNodeMask, CUdevice dev);
+
+/**
+ * \brief Returns the total amount of memory on the device
+ *
+ * Returns in \p *bytes the total amount of memory available on the device
+ * \p dev in bytes.
+ *
+ * \param bytes - Returned memory available on device in bytes
+ * \param dev   - Device handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaMemGetInfo
+ */
+CUresult CUDAAPI cuDeviceTotalMem(size_t *bytes, CUdevice dev);
+
+/**
+ * \brief Returns the maximum number of elements allocatable in a 1D linear texture for a given texture element size.
+ *
+ * Returns in \p maxWidthInElements the maximum number of texture elements allocatable in a 1D linear texture
+ * for given \p format and \p numChannels.
+ *
+ * \param maxWidthInElements    - Returned maximum number of texture elements allocatable for given \p format and \p numChannels.
+ * \param format                - Texture format.
+ * \param numChannels           - Number of channels per texture element.
+ * \param dev                   - Device handle.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cudaMemGetInfo,
+ * ::cuDeviceTotalMem
+ */
+CUresult CUDAAPI cuDeviceGetTexture1DLinearMaxWidth(size_t *maxWidthInElements, CUarray_format format, unsigned numChannels, CUdevice dev);
+
+/**
+ * \brief Returns information about the device
+ *
+ * Returns in \p *pi the integer value of the attribute \p attrib on device
+ * \p dev. The supported attributes are:
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_BLOCK: Maximum number of threads per
+ *   block;
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_X: Maximum x-dimension of a block
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Y: Maximum y-dimension of a block
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCK_DIM_Z: Maximum z-dimension of a block
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_X: Maximum x-dimension of a grid
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Y: Maximum y-dimension of a grid
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_GRID_DIM_Z: Maximum z-dimension of a grid
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK: Maximum amount of
+ *   shared memory available to a thread block in bytes
+ * - ::CU_DEVICE_ATTRIBUTE_TOTAL_CONSTANT_MEMORY: Memory available on device for
+ *   __constant__ variables in a CUDA C kernel in bytes
+ * - ::CU_DEVICE_ATTRIBUTE_WARP_SIZE: Warp size in threads
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_PITCH: Maximum pitch in bytes allowed by the
+ *   memory copy functions that involve memory regions allocated through
+ *   ::cuMemAllocPitch()
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH: Maximum 1D
+ *  texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH: Maximum width
+ *  for a 1D texture bound to linear memory
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH: Maximum
+ *  mipmapped 1D texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_WIDTH: Maximum 2D
+ *  texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_HEIGHT: Maximum 2D
+ *  texture height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH: Maximum width
+ *  for a 2D texture bound to linear memory
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT: Maximum height
+ *  for a 2D texture bound to linear memory
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH: Maximum pitch
+ *  in bytes for a 2D texture bound to linear memory
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_WIDTH: Maximum
+ *  mipmapped 2D texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_MIPMAPPED_HEIGHT: Maximum
+ *  mipmapped 2D texture height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH: Maximum 3D
+ *  texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT: Maximum 3D
+ *  texture height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH: Maximum 3D
+ *  texture depth
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_WIDTH_ALTERNATE:
+ *  Alternate maximum 3D texture width, 0 if no alternate
+ *  maximum 3D texture size is supported
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_HEIGHT_ALTERNATE:
+ *  Alternate maximum 3D texture height, 0 if no alternate
+ *  maximum 3D texture size is supported
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE3D_DEPTH_ALTERNATE:
+ *  Alternate maximum 3D texture depth, 0 if no alternate
+ *  maximum 3D texture size is supported
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_WIDTH:
+ *  Maximum cubemap texture width or height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_WIDTH:
+ *  Maximum 1D layered texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LAYERED_LAYERS:
+ *   Maximum layers in a 1D layered texture
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_WIDTH:
+ *  Maximum 2D layered texture width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_HEIGHT:
+ *   Maximum 2D layered texture height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LAYERED_LAYERS:
+ *   Maximum layers in a 2D layered texture
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_WIDTH:
+ *   Maximum cubemap layered texture width or height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURECUBEMAP_LAYERED_LAYERS:
+ *   Maximum layers in a cubemap layered texture
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_WIDTH:
+ *   Maximum 1D surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_WIDTH:
+ *   Maximum 2D surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_HEIGHT:
+ *   Maximum 2D surface height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_WIDTH:
+ *   Maximum 3D surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_HEIGHT:
+ *   Maximum 3D surface height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE3D_DEPTH:
+ *   Maximum 3D surface depth
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_WIDTH:
+ *   Maximum 1D layered surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE1D_LAYERED_LAYERS:
+ *   Maximum layers in a 1D layered surface
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_WIDTH:
+ *   Maximum 2D layered surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_HEIGHT:
+ *   Maximum 2D layered surface height
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACE2D_LAYERED_LAYERS:
+ *   Maximum layers in a 2D layered surface
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_WIDTH:
+ *   Maximum cubemap surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_WIDTH:
+ *   Maximum cubemap layered surface width
+ * - ::CU_DEVICE_ATTRIBUTE_MAXIMUM_SURFACECUBEMAP_LAYERED_LAYERS:
+ *   Maximum layers in a cubemap layered surface
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_BLOCK: Maximum number of 32-bit
+ *   registers available to a thread block
+ * - ::CU_DEVICE_ATTRIBUTE_CLOCK_RATE: The typical clock frequency in kilohertz
+ * - ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT: Alignment requirement; texture
+ *   base addresses aligned to ::textureAlign bytes do not need an offset
+ *   applied to texture fetches
+ * - ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT: Pitch alignment requirement
+ *   for 2D texture references bound to pitched memory
+ * - ::CU_DEVICE_ATTRIBUTE_GPU_OVERLAP: 1 if the device can concurrently copy
+ *   memory between host and device while executing a kernel, or 0 if not
+ * - ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT: Number of multiprocessors on
+ *   the device
+ * - ::CU_DEVICE_ATTRIBUTE_KERNEL_EXEC_TIMEOUT: 1 if there is a run time limit
+ *   for kernels executed on the device, or 0 if not
+ * - ::CU_DEVICE_ATTRIBUTE_INTEGRATED: 1 if the device is integrated with the
+ *   memory subsystem, or 0 if not
+ * - ::CU_DEVICE_ATTRIBUTE_CAN_MAP_HOST_MEMORY: 1 if the device can map host
+ *   memory into the CUDA address space, or 0 if not
+ * - ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE: Compute mode that device is currently
+ *   in. Available modes are as follows:
+ *   - ::CU_COMPUTEMODE_DEFAULT: Default mode - Device is not restricted and
+ *     can have multiple CUDA contexts present at a single time.
+ *   - ::CU_COMPUTEMODE_PROHIBITED: Compute-prohibited mode - Device is
+ *     prohibited from creating new CUDA contexts.
+ *   - ::CU_COMPUTEMODE_EXCLUSIVE_PROCESS:  Compute-exclusive-process mode - Device
+ *     can have only one context used by a single process at a time.
+ * - ::CU_DEVICE_ATTRIBUTE_CONCURRENT_KERNELS: 1 if the device supports
+ *   executing multiple kernels within the same context simultaneously, or 0 if
+ *   not. It is not guaranteed that multiple kernels will be resident
+ *   on the device concurrently so this feature should not be relied upon for
+ *   correctness.
+ * - ::CU_DEVICE_ATTRIBUTE_ECC_ENABLED: 1 if error correction is enabled on the
+ *    device, 0 if error correction is disabled or not supported by the device
+ * - ::CU_DEVICE_ATTRIBUTE_PCI_BUS_ID: PCI bus identifier of the device
+ * - ::CU_DEVICE_ATTRIBUTE_PCI_DEVICE_ID: PCI device (also known as slot) identifier
+ *   of the device
+ * - ::CU_DEVICE_ATTRIBUTE_PCI_DOMAIN_ID: PCI domain identifier of the device
+ * - ::CU_DEVICE_ATTRIBUTE_TCC_DRIVER: 1 if the device is using a TCC driver. TCC
+ *    is only available on Tesla hardware running Windows Vista or later
+ * - ::CU_DEVICE_ATTRIBUTE_MEMORY_CLOCK_RATE: Peak memory clock frequency in kilohertz
+ * - ::CU_DEVICE_ATTRIBUTE_GLOBAL_MEMORY_BUS_WIDTH: Global memory bus width in bits
+ * - ::CU_DEVICE_ATTRIBUTE_L2_CACHE_SIZE: Size of L2 cache in bytes. 0 if the device doesn't have L2 cache
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_THREADS_PER_MULTIPROCESSOR: Maximum resident threads per multiprocessor
+ * - ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING: 1 if the device shares a unified address space with
+ *   the host, or 0 if not
+ * - ::CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR: Major compute capability version number
+ * - ::CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR: Minor compute capability version number
+ * - ::CU_DEVICE_ATTRIBUTE_GLOBAL_L1_CACHE_SUPPORTED: 1 if device supports caching globals
+ *    in L1 cache, 0 if caching globals in L1 cache is not supported by the device
+ * - ::CU_DEVICE_ATTRIBUTE_LOCAL_L1_CACHE_SUPPORTED: 1 if device supports caching locals
+ *    in L1 cache, 0 if caching locals in L1 cache is not supported by the device
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR: Maximum amount of
+ *   shared memory available to a multiprocessor in bytes; this amount is shared
+ *   by all thread blocks simultaneously resident on a multiprocessor
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_REGISTERS_PER_MULTIPROCESSOR: Maximum number of 32-bit
+ *   registers available to a multiprocessor; this number is shared by all thread
+ *   blocks simultaneously resident on a multiprocessor
+ * - ::CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY: 1 if device supports allocating managed memory
+ *   on this system, 0 if allocating managed memory is not supported by the device on this system.
+ * - ::CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD: 1 if device is on a multi-GPU board, 0 if not.
+ * - ::CU_DEVICE_ATTRIBUTE_MULTI_GPU_BOARD_GROUP_ID: Unique identifier for a group of devices
+ *   associated with the same board. Devices on the same multi-GPU board will share the same identifier.
+ * - ::CU_DEVICE_ATTRIBUTE_HOST_NATIVE_ATOMIC_SUPPORTED: 1 if Link between the device and the host
+ *   supports native atomic operations.
+ * - ::CU_DEVICE_ATTRIBUTE_SINGLE_TO_DOUBLE_PRECISION_PERF_RATIO: Ratio of single precision performance
+ *   (in floating-point operations per second) to double precision performance.
+ * - ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS: Device suppports coherently accessing
+ *   pageable memory without calling cudaHostRegister on it.
+ * - ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS: Device can coherently access managed memory
+ *   concurrently with the CPU.
+ * - ::CU_DEVICE_ATTRIBUTE_COMPUTE_PREEMPTION_SUPPORTED: Device supports Compute Preemption.
+ * - ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM: Device can access host registered
+ *   memory at the same virtual address as the CPU.
+ * -  ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN: The maximum per block shared memory size
+ *    suported on this device. This is the maximum value that can be opted into when using the cuFuncSetAttribute() call.
+ *    For more details see ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES
+ * - ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES: Device accesses pageable memory via the host's
+ *   page tables.
+ * - ::CU_DEVICE_ATTRIBUTE_DIRECT_MANAGED_MEM_ACCESS_FROM_HOST: The host can directly access managed memory on the device without migration.
+ * - ::CU_DEVICE_ATTRIBUTE_VIRTUAL_MEMORY_MANAGEMENT_SUPPORTED:  Device supports virtual memory management APIs like ::cuMemAddressReserve, ::cuMemCreate, ::cuMemMap and related APIs
+ * - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_POSIX_FILE_DESCRIPTOR_SUPPORTED: Device supports exporting memory to a posix file descriptor with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ * - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_HANDLE_SUPPORTED:  Device supports exporting memory to a Win32 NT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ * - ::CU_DEVICE_ATTRIBUTE_HANDLE_TYPE_WIN32_KMT_HANDLE_SUPPORTED: Device supports exporting memory to a Win32 KMT handle with ::cuMemExportToShareableHandle, if requested via ::cuMemCreate
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_BLOCKS_PER_MULTIPROCESSOR: Maximum number of thread blocks that can reside on a multiprocessor
+ * - ::CU_DEVICE_ATTRIBUTE_GENERIC_COMPRESSION_SUPPORTED: Device supports compressible memory allocation via ::cuMemCreate
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_PERSISTING_L2_CACHE_SIZE: Maximum L2 persisting lines capacity setting in bytes
+ * - ::CU_DEVICE_ATTRIBUTE_MAX_ACCESS_POLICY_WINDOW_SIZE: Maximum value of CUaccessPolicyWindow::num_bytes 
+ * - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WITH_CUDA_VMM_SUPPORTED: Device supports specifying the GPUDirect RDMA flag with ::cuMemCreate.
+ * - ::CU_DEVICE_ATTRIBUTE_RESERVED_SHARED_MEMORY_PER_BLOCK: Amount of shared memory per block reserved by CUDA driver in bytes
+ * - ::CU_DEVICE_ATTRIBUTE_SPARSE_CUDA_ARRAY_SUPPORTED: Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays. 
+ * - ::CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED: Device supports using the ::cuMemHostRegister flag ::CU_MEMHOSTERGISTER_READ_ONLY to register memory that must be mapped as read-only to the GPU
+ * - ::CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED: Device supports using the ::cuMemAllocAsync and ::cuMemPool family of APIs
+ * - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_SUPPORTED: Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information)
+ * - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_FLUSH_WRITES_OPTIONS: The returned attribute shall be interpreted as a bitmask, where the individual bits are described by the ::CUflushGPUDirectRDMAWritesOptions enum
+ * - ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING: GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See ::CUGPUDirectRDMAWritesOrdering for the numerical values returned here.
+ * - ::CU_DEVICE_ATTRIBUTE_MEMPOOL_SUPPORTED_HANDLE_TYPES: Bitmask of handle types supported with mempool based IPC
+ * - ::CU_DEVICE_ATTRIBUTE_DEFERRED_MAPPING_CUDA_ARRAY_SUPPORTED: Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.
+ *
+ * \param pi     - Returned device attribute value
+ * \param attrib - Device attribute to query
+ * \param dev    - Device handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem,
+ * ::cuDeviceGetExecAffinitySupport,
+ * ::cudaDeviceGetAttribute,
+ * ::cudaGetDeviceProperties
+ */
+CUresult CUDAAPI cuDeviceGetAttribute(int *pi, CUdevice_attribute attrib, CUdevice dev);
+
+/**
+ * \brief Return NvSciSync attributes that this device can support.
+ *
+ * Returns in \p nvSciSyncAttrList, the properties of NvSciSync that
+ * this CUDA device, \p dev can support. The returned \p nvSciSyncAttrList
+ * can be used to create an NvSciSync object that matches this device's capabilities.
+ * 
+ * If NvSciSyncAttrKey_RequiredPerm field in \p nvSciSyncAttrList is
+ * already set this API will return ::CUDA_ERROR_INVALID_VALUE.
+ * 
+ * The applications should set \p nvSciSyncAttrList to a valid 
+ * NvSciSyncAttrList failing which this API will return
+ * ::CUDA_ERROR_INVALID_HANDLE.
+ * 
+ * The \p flags controls how applications intends to use
+ * the NvSciSync created from the \p nvSciSyncAttrList. The valid flags are:
+ * - ::CUDA_NVSCISYNC_ATTR_SIGNAL, specifies that the applications intends to 
+ * signal an NvSciSync on this CUDA device.
+ * - ::CUDA_NVSCISYNC_ATTR_WAIT, specifies that the applications intends to 
+ * wait on an NvSciSync on this CUDA device.
+ *
+ * At least one of these flags must be set, failing which the API
+ * returns ::CUDA_ERROR_INVALID_VALUE. Both the flags are orthogonal
+ * to one another: a developer may set both these flags that allows to
+ * set both wait and signal specific attributes in the same \p nvSciSyncAttrList.
+ *
+ * \param nvSciSyncAttrList     - Return NvSciSync attributes supported.
+ * \param dev                   - Valid Cuda Device to get NvSciSync attributes for.
+ * \param flags                 - flags describing NvSciSync usage.
+ *
+ * \return
+ *
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa
+ * ::cuImportExternalSemaphore,
+ * ::cuDestroyExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuDeviceGetNvSciSyncAttributes(void *nvSciSyncAttrList, CUdevice dev, int flags);
+
+/**
+ * \brief Sets the current memory pool of a device
+ *
+ * The memory pool must be local to the specified device.
+ * ::cuMemAllocAsync allocates from the current mempool of the provided stream's device.
+ * By default, a device's current memory pool is its default memory pool.
+ *
+ * \note Use ::cuMemAllocFromPoolAsync to specify asynchronous allocations from a device different
+ * than the one the stream runs on. 
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate, ::cuMemPoolDestroy, ::cuMemAllocFromPoolAsync
+ */
+CUresult CUDAAPI cuDeviceSetMemPool(CUdevice dev, CUmemoryPool pool);
+
+/**
+ * \brief Gets the current mempool for a device
+ *
+ * Returns the last pool provided to ::cuDeviceSetMemPool for this device
+ * or the device's default memory pool if ::cuDeviceSetMemPool has never been called.
+ * By default the current mempool is the default mempool for a device.
+ * Otherwise the returned pool must have been set with ::cuDeviceSetMemPool.
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuDeviceGetDefaultMemPool, ::cuMemPoolCreate, ::cuDeviceSetMemPool
+ */
+CUresult CUDAAPI cuDeviceGetMemPool(CUmemoryPool *pool, CUdevice dev);
+
+/**
+ * \brief Returns the default mempool of a device
+ *
+ * The default mempool of a device contains device memory from that device.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemPoolTrimTo, ::cuMemPoolGetAttribute, ::cuMemPoolSetAttribute, cuMemPoolSetAccess, ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuDeviceGetDefaultMemPool(CUmemoryPool *pool_out, CUdevice dev);
+
+/**
+ * \brief Blocks until remote writes are visible to the specified scope
+ *
+ * Blocks until GPUDirect RDMA writes to the target context via mappings
+ * created through APIs like nvidia_p2p_get_pages (see
+ * https://docs.nvidia.com/cuda/gpudirect-rdma for more information), are
+ * visible to the specified scope.
+ *
+ * If the scope equals or lies within the scope indicated by
+ * ::CU_DEVICE_ATTRIBUTE_GPU_DIRECT_RDMA_WRITES_ORDERING, the call
+ * will be a no-op and can be safely omitted for performance. This can be
+ * determined by comparing the numerical values between the two enums, with
+ * smaller scopes having smaller values.
+ *
+ * Users may query support for this API via
+ * ::CU_DEVICE_ATTRIBUTE_FLUSH_FLUSH_GPU_DIRECT_RDMA_OPTIONS.
+ *
+ * \param target - The target of the operation, see ::CUflushGPUDirectRDMAWritesTarget
+ * \param scope  - The scope of the operation, see ::CUflushGPUDirectRDMAWritesScope
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ */
+CUresult CUDAAPI cuFlushGPUDirectRDMAWrites(CUflushGPUDirectRDMAWritesTarget target, CUflushGPUDirectRDMAWritesScope scope);
+
+/** @} */ /* END CUDA_DEVICE */
+
+/**
+ * \defgroup CUDA_DEVICE_DEPRECATED Device Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated device management functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the device management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns properties for a selected device
+ *
+ * \deprecated
+ *
+ * This function was deprecated as of CUDA 5.0 and replaced by ::cuDeviceGetAttribute().
+ *
+ * Returns in \p *prop the properties of device \p dev. The ::CUdevprop
+ * structure is defined as:
+ *
+ * \code
+     typedef struct CUdevprop_st {
+     int maxThreadsPerBlock;
+     int maxThreadsDim[3];
+     int maxGridSize[3];
+     int sharedMemPerBlock;
+     int totalConstantMemory;
+     int SIMDWidth;
+     int memPitch;
+     int regsPerBlock;
+     int clockRate;
+     int textureAlign
+  } CUdevprop;
+ * \endcode
+ * where:
+ *
+ * - ::maxThreadsPerBlock is the maximum number of threads per block;
+ * - ::maxThreadsDim[3] is the maximum sizes of each dimension of a block;
+ * - ::maxGridSize[3] is the maximum sizes of each dimension of a grid;
+ * - ::sharedMemPerBlock is the total amount of shared memory available per
+ *   block in bytes;
+ * - ::totalConstantMemory is the total amount of constant memory available on
+ *   the device in bytes;
+ * - ::SIMDWidth is the warp size;
+ * - ::memPitch is the maximum pitch allowed by the memory copy functions that
+ *   involve memory regions allocated through ::cuMemAllocPitch();
+ * - ::regsPerBlock is the total number of registers available per block;
+ * - ::clockRate is the clock frequency in kilohertz;
+ * - ::textureAlign is the alignment requirement; texture base addresses that
+ *   are aligned to ::textureAlign bytes do not need an offset applied to
+ *   texture fetches.
+ *
+ * \param prop - Returned properties of device
+ * \param dev  - Device to get properties for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuDeviceGetProperties(CUdevprop *prop, CUdevice dev);
+
+/**
+ * \brief Returns the compute capability of the device
+ *
+ * \deprecated
+ *
+ * This function was deprecated as of CUDA 5.0 and its functionality superceded
+ * by ::cuDeviceGetAttribute().
+ *
+ * Returns in \p *major and \p *minor the major and minor revision numbers that
+ * define the compute capability of the device \p dev.
+ *
+ * \param major - Major revision number
+ * \param minor - Minor revision number
+ * \param dev   - Device handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuDeviceComputeCapability(int *major, int *minor, CUdevice dev);
+
+/** @} */ /* END CUDA_DEVICE_DEPRECATED */
+
+/**
+ * \defgroup CUDA_PRIMARY_CTX Primary Context Management
+ *
+ * ___MANBRIEF___ primary context management functions of the low-level CUDA driver
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the primary context management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * The primary context is unique per device and shared with the CUDA runtime API.
+ * These functions allow integration with other libraries using CUDA.
+ *
+ * @{
+ */
+
+/**
+ * \brief Retain the primary context on the GPU
+ *
+ * Retains the primary context on the device.
+ * Once the user successfully retains the primary context, the primary context
+ * will be active and available to the user until the user releases it
+ * with ::cuDevicePrimaryCtxRelease() or resets it with ::cuDevicePrimaryCtxReset().
+ * Unlike ::cuCtxCreate() the newly retained context is not pushed onto the stack.
+ *
+ * Retaining the primary context for the first time will fail with ::CUDA_ERROR_UNKNOWN
+ * if the compute mode of the device is ::CU_COMPUTEMODE_PROHIBITED. The function
+ * ::cuDeviceGetAttribute() can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to
+ * determine the compute mode  of the device.
+ * The <i>nvidia-smi</i> tool can be used to set the compute mode for
+ * devices. Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ * -h option to it.
+ *
+ * Please note that the primary context always supports pinned allocations. Other
+ * flags can be specified by ::cuDevicePrimaryCtxSetFlags().
+ *
+ * \param pctx  - Returned context handle of the new context
+ * \param dev   - Device for which primary context is requested
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuDevicePrimaryCtxRelease,
+ * ::cuDevicePrimaryCtxSetFlags,
+ * ::cuCtxCreate,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuDevicePrimaryCtxRetain(CUcontext *pctx, CUdevice dev);
+
+/**
+ * \brief Release the primary context on the GPU
+ *
+ * Releases the primary context interop on the device.
+ * A retained context should always be released once the user is done using
+ * it. The context is automatically reset once the last reference to it is
+ * released. This behavior is different when the primary context was retained
+ * by the CUDA runtime from CUDA 4.0 and earlier. In this case, the primary
+ * context remains always active.
+ *
+ * Releasing a primary context that has not been previously retained will
+ * fail with ::CUDA_ERROR_INVALID_CONTEXT.
+ *
+ * Please note that unlike ::cuCtxDestroy() this method does not pop the context
+ * from stack in any circumstances.
+ *
+ * \param dev - Device which primary context is released
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuDevicePrimaryCtxRetain,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuDevicePrimaryCtxRelease(CUdevice dev);
+
+/**
+ * \brief Set flags for the primary context
+ *
+ * Sets the flags for the primary context on the device overwriting perviously
+ * set ones.
+ *
+ * The three LSBs of the \p flags parameter can be used to control how the OS
+ * thread, which owns the CUDA context at the time of an API call, interacts
+ * with the OS scheduler when waiting for results from the GPU. Only one of
+ * the scheduling flags can be set when creating a context.
+ *
+ * - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ * results from the GPU. This can decrease latency when waiting for the GPU,
+ * but may lower the performance of CPU threads if they are performing work in
+ * parallel with the CUDA thread.
+ *
+ * - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ * results from the GPU. This can increase latency when waiting for the GPU,
+ * but can increase the performance of CPU threads performing work in parallel
+ * with the GPU.
+ *
+ * - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work.
+ *
+ * - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work. <br>
+ * <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ * replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+ *
+ * - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ * uses a heuristic based on the number of active CUDA contexts in the
+ * process \e C and the number of logical processors in the system \e P. If
+ * \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ * the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ * waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ * Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ * the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ * for low-powered devices.
+ *
+ * - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ * after resizing local memory for a kernel. This can prevent thrashing by
+ * local memory allocations when launching many kernels with high local
+ * memory usage at the cost of potentially increased memory usage. <br>
+ * <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ * by this flag is now the default and cannot be disabled.
+ *
+ * \param dev   - Device for which the primary context flags are set
+ * \param flags - New flags for the device
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa ::cuDevicePrimaryCtxRetain,
+ * ::cuDevicePrimaryCtxGetState,
+ * ::cuCtxCreate,
+ * ::cuCtxGetFlags,
+ * ::cudaSetDeviceFlags
+ */
+CUresult CUDAAPI cuDevicePrimaryCtxSetFlags(CUdevice dev, unsigned int flags);
+
+/**
+ * \brief Get the state of the primary context
+ *
+ * Returns in \p *flags the flags for the primary context of \p dev, and in
+ * \p *active whether it is active.  See ::cuDevicePrimaryCtxSetFlags for flag
+ * values.
+ *
+ * \param dev    - Device to get primary context flags for
+ * \param flags  - Pointer to store flags
+ * \param active - Pointer to store context state; 0 = inactive, 1 = active
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDevicePrimaryCtxSetFlags,
+ * ::cuCtxGetFlags,
+ * ::cudaGetDeviceFlags
+ */
+CUresult CUDAAPI cuDevicePrimaryCtxGetState(CUdevice dev, unsigned int *flags, int *active);
+
+/**
+ * \brief Destroy all allocations and reset all state on the primary context
+ *
+ * Explicitly destroys and cleans up all resources associated with the current
+ * device in the current process.
+ *
+ * Note that it is responsibility of the calling function to ensure that no
+ * other module in the process is using the device any more. For that reason
+ * it is recommended to use ::cuDevicePrimaryCtxRelease() in most cases.
+ * However it is safe for other modules to call ::cuDevicePrimaryCtxRelease()
+ * even after resetting the device.
+ * Resetting the primary context does not release it, an application that has
+ * retained the primary context should explicitly release its usage.
+ *
+ * \param dev - Device for which primary context is destroyed
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_PRIMARY_CONTEXT_ACTIVE
+ * \notefnerr
+ *
+ * \sa ::cuDevicePrimaryCtxRetain,
+ * ::cuDevicePrimaryCtxRelease,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cudaDeviceReset
+ */
+CUresult CUDAAPI cuDevicePrimaryCtxReset(CUdevice dev);
+
+/** @} */ /* END CUDA_PRIMARY_CTX */
+
+/**
+ * \brief Returns information about the execution affinity support of the device.
+ *
+ * Returns in \p *pi whether execution affinity type \p type is supported by device \p dev.
+ * The supported types are:
+ * - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT: 1 if context with limited SMs is supported by the device,
+ *   or 0 if not;
+ *
+ * \param pi   - 1 if the execution affinity type \p type is supported by the device, or 0 if not
+ * \param type - Execution affinity type to query
+ * \param dev  - Device handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetCount,
+ * ::cuDeviceGetName,
+ * ::cuDeviceGetUuid,
+ * ::cuDeviceGet,
+ * ::cuDeviceTotalMem
+ */
+CUresult CUDAAPI cuDeviceGetExecAffinitySupport(int *pi, CUexecAffinityType type, CUdevice dev);
+
+/**
+ * \defgroup CUDA_CTX Context Management
+ *
+ * ___MANBRIEF___ context management functions of the low-level CUDA driver
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the context management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * Please note that some functions are described in
+ * \ref CUDA_PRIMARY_CTX "Primary Context Management" section.
+ *
+ * @{
+ */
+
+/**
+ * \brief Create a CUDA context
+ *
+ * \note In most cases it is recommended to use ::cuDevicePrimaryCtxRetain.
+ *
+ * Creates a new CUDA context and associates it with the calling thread. The
+ * \p flags parameter is described below. The context is created with a usage
+ * count of 1 and the caller of ::cuCtxCreate() must call ::cuCtxDestroy() or
+ * when done using the context. If a context is already current to the thread,
+ * it is supplanted by the newly created context and may be restored by a subsequent
+ * call to ::cuCtxPopCurrent().
+ *
+ * The three LSBs of the \p flags parameter can be used to control how the OS
+ * thread, which owns the CUDA context at the time of an API call, interacts
+ * with the OS scheduler when waiting for results from the GPU. Only one of
+ * the scheduling flags can be set when creating a context.
+ *
+ * - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ * results from the GPU. This can decrease latency when waiting for the GPU,
+ * but may lower the performance of CPU threads if they are performing work in
+ * parallel with the CUDA thread.
+ *
+ * - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ * results from the GPU. This can increase latency when waiting for the GPU,
+ * but can increase the performance of CPU threads performing work in parallel
+ * with the GPU.
+ *
+ * - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work.
+ *
+ * - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work. <br>
+ * <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ * replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+ *
+ * - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ * uses a heuristic based on the number of active CUDA contexts in the
+ * process \e C and the number of logical processors in the system \e P. If
+ * \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ * the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ * waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ * Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ * the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ * for low-powered devices.
+ *
+ * - ::CU_CTX_MAP_HOST: Instruct CUDA to support mapped pinned allocations.
+ * This flag must be set in order to allocate pinned host memory that is
+ * accessible to the GPU.
+ *
+ * - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ * after resizing local memory for a kernel. This can prevent thrashing by
+ * local memory allocations when launching many kernels with high local
+ * memory usage at the cost of potentially increased memory usage. <br>
+ * <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ * by this flag is now the default and cannot be disabled.
+ * Instead, the per-thread stack size can be controlled with ::cuCtxSetLimit().
+ *
+ * Context creation will fail with ::CUDA_ERROR_UNKNOWN if the compute mode of
+ * the device is ::CU_COMPUTEMODE_PROHIBITED. The function ::cuDeviceGetAttribute()
+ * can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to determine the
+ * compute mode of the device. The <i>nvidia-smi</i> tool can be used to set
+ * the compute mode for * devices.
+ * Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ * -h option to it.
+ *
+ * \param pctx  - Returned context handle of the new context
+ * \param flags - Context creation flags
+ * \param dev   - Device to create context on
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuCtxCreate(CUcontext *pctx, unsigned int flags, CUdevice dev);
+
+/**
+ * \brief Create a CUDA context with execution affinity
+ *
+ * Creates a new CUDA context with execution affinity and associates it with
+ * the calling thread. The \p paramsArray and \p flags parameter are described below.
+ * The context is created with a usage count of 1 and the caller of ::cuCtxCreate() must
+ * call ::cuCtxDestroy() or when done using the context. If a context is already
+ * current to the thread, it is supplanted by the newly created context and may
+ * be restored by a subsequent call to ::cuCtxPopCurrent().
+ *
+ * The type and the amount of execution resource the context can use is limited by \p paramsArray
+ * and \p numParams. The \p paramsArray is an array of \p CUexecAffinityParam and the \p numParams
+ * describes the size of the array. If two \p CUexecAffinityParam in the array have the same type,
+ * the latter execution affinity parameter overrides the former execution affinity parameter.
+ * The supported execution affinity types are:
+ * - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT limits the portion of SMs that the context can use. The portion
+ *   of SMs is specified as the number of SMs via \p CUexecAffinitySmCount. This limit will be internally
+ *   rounded up to the next hardware-supported amount. Hence, it is imperative to query the actual execution
+ *   affinity of the context via \p cuCtxGetExecAffinity after context creation. Currently, this attribute
+ *   is only supported under Volta+ MPS.
+ *
+ * The three LSBs of the \p flags parameter can be used to control how the OS
+ * thread, which owns the CUDA context at the time of an API call, interacts
+ * with the OS scheduler when waiting for results from the GPU. Only one of
+ * the scheduling flags can be set when creating a context.
+ *
+ * - ::CU_CTX_SCHED_SPIN: Instruct CUDA to actively spin when waiting for
+ * results from the GPU. This can decrease latency when waiting for the GPU,
+ * but may lower the performance of CPU threads if they are performing work in
+ * parallel with the CUDA thread.
+ *
+ * - ::CU_CTX_SCHED_YIELD: Instruct CUDA to yield its thread when waiting for
+ * results from the GPU. This can increase latency when waiting for the GPU,
+ * but can increase the performance of CPU threads performing work in parallel
+ * with the GPU.
+ *
+ * - ::CU_CTX_SCHED_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work.
+ *
+ * - ::CU_CTX_BLOCKING_SYNC: Instruct CUDA to block the CPU thread on a
+ * synchronization primitive when waiting for the GPU to finish work. <br>
+ * <b>Deprecated:</b> This flag was deprecated as of CUDA 4.0 and was
+ * replaced with ::CU_CTX_SCHED_BLOCKING_SYNC.
+ *
+ * - ::CU_CTX_SCHED_AUTO: The default value if the \p flags parameter is zero,
+ * uses a heuristic based on the number of active CUDA contexts in the
+ * process \e C and the number of logical processors in the system \e P. If
+ * \e C > \e P, then CUDA will yield to other OS threads when waiting for
+ * the GPU (::CU_CTX_SCHED_YIELD), otherwise CUDA will not yield while
+ * waiting for results and actively spin on the processor (::CU_CTX_SCHED_SPIN).
+ * Additionally, on Tegra devices, ::CU_CTX_SCHED_AUTO uses a heuristic based on
+ * the power profile of the platform and may choose ::CU_CTX_SCHED_BLOCKING_SYNC
+ * for low-powered devices.
+ *
+ * - ::CU_CTX_MAP_HOST: Instruct CUDA to support mapped pinned allocations.
+ * This flag must be set in order to allocate pinned host memory that is
+ * accessible to the GPU.
+ *
+ * - ::CU_CTX_LMEM_RESIZE_TO_MAX: Instruct CUDA to not reduce local memory
+ * after resizing local memory for a kernel. This can prevent thrashing by
+ * local memory allocations when launching many kernels with high local
+ * memory usage at the cost of potentially increased memory usage. <br>
+ * <b>Deprecated:</b> This flag is deprecated and the behavior enabled
+ * by this flag is now the default and cannot be disabled.
+ * Instead, the per-thread stack size can be controlled with ::cuCtxSetLimit().
+ *
+ * Context creation will fail with ::CUDA_ERROR_UNKNOWN if the compute mode of
+ * the device is ::CU_COMPUTEMODE_PROHIBITED. The function ::cuDeviceGetAttribute()
+ * can be used with ::CU_DEVICE_ATTRIBUTE_COMPUTE_MODE to determine the
+ * compute mode of the device. The <i>nvidia-smi</i> tool can be used to set
+ * the compute mode for * devices.
+ * Documentation for <i>nvidia-smi</i> can be obtained by passing a
+ * -h option to it.
+ *
+ * \param pctx        - Returned context handle of the new context
+ * \param paramsArray - Execution affinity parameters
+ * \param numParams   - Number of execution affinity parameters
+ * \param flags       - Context creation flags
+ * \param dev         - Device to create context on
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::CUexecAffinityParam
+ */
+CUresult CUDAAPI cuCtxCreate_v3(CUcontext *pctx, CUexecAffinityParam *paramsArray, int numParams, unsigned int flags, CUdevice dev);
+
+/**
+ * \brief Destroy a CUDA context
+ *
+ * Destroys the CUDA context specified by \p ctx.  The context \p ctx will be
+ * destroyed regardless of how many threads it is current to.
+ * It is the responsibility of the calling function to ensure that no API
+ * call issues using \p ctx while ::cuCtxDestroy() is executing.
+ *
+ * Destroys and cleans up all resources associated with the context.
+ * It is the caller's responsibility to ensure that the context or its resources
+ * are not accessed or passed in subsequent API calls and doing so will result in undefined behavior.
+ * These resources include CUDA types such as ::CUmodule, ::CUfunction, ::CUstream, ::CUevent,
+ * ::CUarray, ::CUmipmappedArray, ::CUtexObject, ::CUsurfObject, ::CUtexref, ::CUsurfref,
+ * ::CUgraphicsResource, ::CUlinkState, ::CUexternalMemory and ::CUexternalSemaphore.
+ *
+ * If \p ctx is current to the calling thread then \p ctx will also be
+ * popped from the current thread's context stack (as though ::cuCtxPopCurrent()
+ * were called).  If \p ctx is current to other threads, then \p ctx will
+ * remain current to those threads, and attempting to access \p ctx from
+ * those threads will result in the error ::CUDA_ERROR_CONTEXT_IS_DESTROYED.
+ *
+ * \param ctx - Context to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuCtxDestroy(CUcontext ctx);
+
+/**
+ * \brief Pushes a context on the current CPU thread
+ *
+ * Pushes the given context \p ctx onto the CPU thread's stack of current
+ * contexts. The specified context becomes the CPU thread's current context, so
+ * all CUDA functions that operate on the current context are affected.
+ *
+ * The previous current context may be made current again by calling
+ * ::cuCtxDestroy() or ::cuCtxPopCurrent().
+ *
+ * \param ctx - Context to push
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuCtxPushCurrent(CUcontext ctx);
+
+/**
+ * \brief Pops the current CUDA context from the current CPU thread.
+ *
+ * Pops the current CUDA context from the CPU thread and passes back the
+ * old context handle in \p *pctx. That context may then be made current
+ * to a different CPU thread by calling ::cuCtxPushCurrent().
+ *
+ * If a context was current to the CPU thread before ::cuCtxCreate() or
+ * ::cuCtxPushCurrent() was called, this function makes that context current to
+ * the CPU thread again.
+ *
+ * \param pctx - Returned popped context handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuCtxPopCurrent(CUcontext *pctx);
+
+/**
+ * \brief Binds the specified CUDA context to the calling CPU thread
+ *
+ * Binds the specified CUDA context to the calling CPU thread.
+ * If \p ctx is NULL then the CUDA context previously bound to the
+ * calling CPU thread is unbound and ::CUDA_SUCCESS is returned.
+ *
+ * If there exists a CUDA context stack on the calling CPU thread, this
+ * will replace the top of that stack with \p ctx.
+ * If \p ctx is NULL then this will be equivalent to popping the top
+ * of the calling CPU thread's CUDA context stack (or a no-op if the
+ * calling CPU thread's CUDA context stack is empty).
+ *
+ * \param ctx - Context to bind to the calling CPU thread
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuCtxGetCurrent,
+ * ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cudaSetDevice
+ */
+CUresult CUDAAPI cuCtxSetCurrent(CUcontext ctx);
+
+/**
+ * \brief Returns the CUDA context bound to the calling CPU thread.
+ *
+ * Returns in \p *pctx the CUDA context bound to the calling CPU thread.
+ * If no context is bound to the calling CPU thread then \p *pctx is
+ * set to NULL and ::CUDA_SUCCESS is returned.
+ *
+ * \param pctx - Returned context handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * \notefnerr
+ *
+ * \sa
+ * ::cuCtxSetCurrent,
+ * ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cudaGetDevice
+ */
+CUresult CUDAAPI cuCtxGetCurrent(CUcontext *pctx);
+
+/**
+ * \brief Returns the device ID for the current context
+ *
+ * Returns in \p *device the ordinal of the current context's device.
+ *
+ * \param device - Returned device ID for the current context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cudaGetDevice
+ */
+CUresult CUDAAPI cuCtxGetDevice(CUdevice *device);
+
+/**
+ * \brief Returns the flags for the current context
+ *
+ * Returns in \p *flags the flags of the current context. See ::cuCtxCreate
+ * for flag values.
+ *
+ * \param flags - Pointer to store flags of current context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetCurrent,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetLimit,
+ * ::cuCtxGetSharedMemConfig,
+ * ::cuCtxGetStreamPriorityRange,
+ * ::cudaGetDeviceFlags
+ */
+CUresult CUDAAPI cuCtxGetFlags(unsigned int *flags);
+
+/**
+ * \brief Block for a context's tasks to complete
+ *
+ * Blocks until the device has completed all preceding requested tasks.
+ * ::cuCtxSynchronize() returns an error if one of the preceding tasks failed.
+ * If the context was created with the ::CU_CTX_SCHED_BLOCKING_SYNC flag, the
+ * CPU thread will block until the GPU context has finished its work.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cudaDeviceSynchronize
+ */
+CUresult CUDAAPI cuCtxSynchronize(void);
+
+/**
+ * \brief Set resource limits
+ *
+ * Setting \p limit to \p value is a request by the application to update
+ * the current limit maintained by the context. The driver is free to
+ * modify the requested value to meet h/w requirements (this could be
+ * clamping to minimum or maximum values, rounding up to nearest element
+ * size, etc). The application can use ::cuCtxGetLimit() to find out exactly
+ * what the limit has been set to.
+ *
+ * Setting each ::CUlimit has its own specific restrictions, so each is
+ * discussed here.
+ *
+ * - ::CU_LIMIT_STACK_SIZE controls the stack size in bytes of each GPU thread.
+ *   The driver automatically increases the per-thread stack size
+ *   for each kernel launch as needed. This size isn't reset back to the
+ *   original value after each launch. Setting this value will take effect 
+ *   immediately, and if necessary, the device will block until all preceding 
+ *   requested tasks are complete.
+ *
+ * - ::CU_LIMIT_PRINTF_FIFO_SIZE controls the size in bytes of the FIFO used
+ *   by the ::printf() device system call. Setting ::CU_LIMIT_PRINTF_FIFO_SIZE
+ *   must be performed before launching any kernel that uses the ::printf()
+ *   device system call, otherwise ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * - ::CU_LIMIT_MALLOC_HEAP_SIZE controls the size in bytes of the heap used
+ *   by the ::malloc() and ::free() device system calls. Setting
+ *   ::CU_LIMIT_MALLOC_HEAP_SIZE must be performed before launching any kernel
+ *   that uses the ::malloc() or ::free() device system calls, otherwise
+ *   ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * - ::CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH controls the maximum nesting depth of
+ *   a grid at which a thread can safely call ::cudaDeviceSynchronize(). Setting
+ *   this limit must be performed before any launch of a kernel that uses the
+ *   device runtime and calls ::cudaDeviceSynchronize() above the default sync
+ *   depth, two levels of grids. Calls to ::cudaDeviceSynchronize() will fail
+ *   with error code ::cudaErrorSyncDepthExceeded if the limitation is
+ *   violated. This limit can be set smaller than the default or up the maximum
+ *   launch depth of 24. When setting this limit, keep in mind that additional
+ *   levels of sync depth require the driver to reserve large amounts of device
+ *   memory which can no longer be used for user allocations. If these
+ *   reservations of device memory fail, ::cuCtxSetLimit() will return
+ *   ::CUDA_ERROR_OUT_OF_MEMORY, and the limit can be reset to a lower value.
+ *   This limit is only applicable to devices of compute capability 3.5 and
+ *   higher. Attempting to set this limit on devices of compute capability less
+ *   than 3.5 will result in the error ::CUDA_ERROR_UNSUPPORTED_LIMIT being
+ *   returned.
+ *
+ * - ::CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT controls the maximum number of
+ *   outstanding device runtime launches that can be made from the current
+ *   context. A grid is outstanding from the point of launch up until the grid
+ *   is known to have been completed. Device runtime launches which violate
+ *   this limitation fail and return ::cudaErrorLaunchPendingCountExceeded when
+ *   ::cudaGetLastError() is called after launch. If more pending launches than
+ *   the default (2048 launches) are needed for a module using the device
+ *   runtime, this limit can be increased. Keep in mind that being able to
+ *   sustain additional pending launches will require the driver to reserve
+ *   larger amounts of device memory upfront which can no longer be used for
+ *   allocations. If these reservations fail, ::cuCtxSetLimit() will return
+ *   ::CUDA_ERROR_OUT_OF_MEMORY, and the limit can be reset to a lower value.
+ *   This limit is only applicable to devices of compute capability 3.5 and
+ *   higher. Attempting to set this limit on devices of compute capability less
+ *   than 3.5 will result in the error ::CUDA_ERROR_UNSUPPORTED_LIMIT being
+ *   returned.
+ *
+ * - ::CU_LIMIT_MAX_L2_FETCH_GRANULARITY controls the L2 cache fetch granularity.
+ *   Values can range from 0B to 128B. This is purely a performence hint and
+ *   it can be ignored or clamped depending on the platform.
+ *
+ * - ::CU_LIMIT_PERSISTING_L2_CACHE_SIZE controls size in bytes availabe for
+ *   persisting L2 cache. This is purely a performance hint and it can be
+ *   ignored or clamped depending on the platform.
+ *
+ * \param limit - Limit to set
+ * \param value - Size of limit
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNSUPPORTED_LIMIT,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSynchronize,
+ * ::cudaDeviceSetLimit
+ */
+CUresult CUDAAPI cuCtxSetLimit(CUlimit limit, size_t value);
+
+/**
+ * \brief Returns resource limits
+ *
+ * Returns in \p *pvalue the current size of \p limit.  The supported
+ * ::CUlimit values are:
+ * - ::CU_LIMIT_STACK_SIZE: stack size in bytes of each GPU thread.
+ * - ::CU_LIMIT_PRINTF_FIFO_SIZE: size in bytes of the FIFO used by the
+ *   ::printf() device system call.
+ * - ::CU_LIMIT_MALLOC_HEAP_SIZE: size in bytes of the heap used by the
+ *   ::malloc() and ::free() device system calls.
+ * - ::CU_LIMIT_DEV_RUNTIME_SYNC_DEPTH: maximum grid depth at which a thread
+ *   can issue the device runtime call ::cudaDeviceSynchronize() to wait on
+ *   child grid launches to complete.
+ * - ::CU_LIMIT_DEV_RUNTIME_PENDING_LAUNCH_COUNT: maximum number of outstanding
+ *   device runtime launches that can be made from this context.
+ * - ::CU_LIMIT_MAX_L2_FETCH_GRANULARITY: L2 cache fetch granularity.
+ * - ::CU_LIMIT_PERSISTING_L2_CACHE_SIZE: Persisting L2 cache size in bytes
+ *
+ * \param limit  - Limit to query
+ * \param pvalue - Returned size of limit
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNSUPPORTED_LIMIT
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cudaDeviceGetLimit
+ */
+CUresult CUDAAPI cuCtxGetLimit(size_t *pvalue, CUlimit limit);
+
+/**
+ * \brief Returns the preferred cache configuration for the current context.
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this function returns through \p pconfig the preferred cache configuration
+ * for the current context. This is only a preference. The driver will use
+ * the requested configuration if possible, but it is free to choose a different
+ * configuration if required to execute functions.
+ *
+ * This will return a \p pconfig of ::CU_FUNC_CACHE_PREFER_NONE on devices
+ * where the size of the L1 cache and shared memory are fixed.
+ *
+ * The supported cache configurations are:
+ * - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ * - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ * - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ * - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+ *
+ * \param pconfig - Returned cache configuration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cuFuncSetCacheConfig,
+ * ::cudaDeviceGetCacheConfig
+ */
+CUresult CUDAAPI cuCtxGetCacheConfig(CUfunc_cache *pconfig);
+
+/**
+ * \brief Sets the preferred cache configuration for the current context.
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p config the preferred cache configuration for
+ * the current context. This is only a preference. The driver will use
+ * the requested configuration if possible, but it is free to choose a different
+ * configuration if required to execute the function. Any function preference
+ * set via ::cuFuncSetCacheConfig() will be preferred over this context-wide
+ * setting. Setting the context-wide cache configuration to
+ * ::CU_FUNC_CACHE_PREFER_NONE will cause subsequent kernel launches to prefer
+ * to not change the cache configuration unless required to launch the kernel.
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ * The supported cache configurations are:
+ * - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ * - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ * - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ * - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+ *
+ * \param config - Requested cache configuration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cuFuncSetCacheConfig,
+ * ::cudaDeviceSetCacheConfig
+ */
+CUresult CUDAAPI cuCtxSetCacheConfig(CUfunc_cache config);
+
+/**
+ * \brief Returns the current shared memory configuration for the current context.
+ *
+ * This function will return in \p pConfig the current size of shared memory banks
+ * in the current context. On devices with configurable shared memory banks,
+ * ::cuCtxSetSharedMemConfig can be used to change this setting, so that all
+ * subsequent kernel launches will by default use the new bank size. When
+ * ::cuCtxGetSharedMemConfig is called on devices without configurable shared
+ * memory, it will return the fixed bank size of the hardware.
+ *
+ * The returned bank configurations can be either:
+ * - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE:  shared memory bank width is
+ *   four bytes.
+ * - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: shared memory bank width will
+ *   eight bytes.
+ *
+ * \param pConfig - returned shared memory configuration
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cuCtxGetSharedMemConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cudaDeviceGetSharedMemConfig
+ */
+CUresult CUDAAPI cuCtxGetSharedMemConfig(CUsharedconfig *pConfig);
+
+/**
+ * \brief Sets the shared memory configuration for the current context.
+ *
+ * On devices with configurable shared memory banks, this function will set
+ * the context's shared memory bank size which is used for subsequent kernel
+ * launches.
+ *
+ * Changed the shared memory configuration between launches may insert a device
+ * side synchronization point between those launches.
+ *
+ * Changing the shared memory bank size will not increase shared memory usage
+ * or affect occupancy of kernels, but may have major effects on performance.
+ * Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ * but will change what kinds of accesses to shared memory will result in bank
+ * conflicts.
+ *
+ * This function will do nothing on devices with fixed shared memory bank size.
+ *
+ * The supported bank configurations are:
+ * - ::CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: set bank width to the default initial
+ *   setting (currently, four bytes).
+ * - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: set shared memory bank width to
+ *   be natively four bytes.
+ * - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: set shared memory bank width to
+ *   be natively eight bytes.
+ *
+ * \param config - requested shared memory configuration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cuCtxGetSharedMemConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cudaDeviceSetSharedMemConfig
+ */
+CUresult CUDAAPI cuCtxSetSharedMemConfig(CUsharedconfig config);
+
+/**
+ * \brief Gets the context's API version.
+ *
+ * Returns a version number in \p version corresponding to the capabilities of
+ * the context (e.g. 3010 or 3020), which library developers can use to direct
+ * callers to a specific API version. If \p ctx is NULL, returns the API version
+ * used to create the currently bound context.
+ *
+ * Note that new API versions are only introduced when context capabilities are
+ * changed that break binary compatibility, so the API version and driver version
+ * may be different. For example, it is valid for the API version to be 3020 while
+ * the driver version is 4020.
+ *
+ * \param ctx     - Context to check
+ * \param version - Pointer to version
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+CUresult CUDAAPI cuCtxGetApiVersion(CUcontext ctx, unsigned int *version);
+
+/**
+ * \brief Returns numerical values that correspond to the least and
+ * greatest stream priorities.
+ *
+ * Returns in \p *leastPriority and \p *greatestPriority the numerical values that correspond
+ * to the least and greatest stream priorities respectively. Stream priorities
+ * follow a convention where lower numbers imply greater priorities. The range of
+ * meaningful stream priorities is given by [\p *greatestPriority, \p *leastPriority].
+ * If the user attempts to create a stream with a priority value that is
+ * outside the meaningful range as specified by this API, the priority is
+ * automatically clamped down or up to either \p *leastPriority or \p *greatestPriority
+ * respectively. See ::cuStreamCreateWithPriority for details on creating a
+ * priority stream.
+ * A NULL may be passed in for \p *leastPriority or \p *greatestPriority if the value
+ * is not desired.
+ *
+ * This function will return '0' in both \p *leastPriority and \p *greatestPriority if
+ * the current context's device does not support stream priorities
+ * (see ::cuDeviceGetAttribute).
+ *
+ * \param leastPriority    - Pointer to an int in which the numerical value for least
+ *                           stream priority is returned
+ * \param greatestPriority - Pointer to an int in which the numerical value for greatest
+ *                           stream priority is returned
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreateWithPriority,
+ * ::cuStreamGetPriority,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize,
+ * ::cudaDeviceGetStreamPriorityRange
+ */
+CUresult CUDAAPI cuCtxGetStreamPriorityRange(int *leastPriority, int *greatestPriority);
+
+/**
+ * \brief Resets all persisting lines in cache to normal status.
+ *
+ * ::cuCtxResetPersistingL2Cache Resets all persisting lines in cache to normal
+ * status. Takes effect on function return.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuCtxResetPersistingL2Cache(void);
+
+/**
+ * \brief Returns the execution affinity setting for the current context.
+ *
+ * Returns in \p *pExecAffinity the current value of \p type. The supported
+ * ::CUexecAffinityType values are:
+ * - ::CU_EXEC_AFFINITY_TYPE_SM_COUNT: number of SMs the context is limited to use.
+ *
+ * \param type          - Execution affinity type to query
+ * \param pExecAffinity - Returned execution affinity
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNSUPPORTED_EXEC_AFFINITY
+ * \notefnerr
+ *
+ * \sa
+ * ::CUexecAffinityParam
+ */
+CUresult CUDAAPI cuCtxGetExecAffinity(CUexecAffinityParam *pExecAffinity, CUexecAffinityType type);
+
+
+/** @} */ /* END CUDA_CTX */
+
+/**
+ * \defgroup CUDA_CTX_DEPRECATED Context Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated context management functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the deprecated context management functions of the low-level
+ * CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Increment a context's usage-count
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated and should not be used.
+ *
+ * Increments the usage count of the context and passes back a context handle
+ * in \p *pctx that must be passed to ::cuCtxDetach() when the application is
+ * done with the context. ::cuCtxAttach() fails if there is no context current
+ * to the thread.
+ *
+ * Currently, the \p flags parameter must be 0.
+ *
+ * \param pctx  - Returned context handle of the current context
+ * \param flags - Context attach flags (must be 0)
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxDetach,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuCtxAttach(CUcontext *pctx, unsigned int flags);
+
+/**
+ * \brief Decrement a context's usage-count
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated and should not be used.
+ *
+ * Decrements the usage count of the context \p ctx, and destroys the context
+ * if the usage count goes to 0. The context must be a handle that was passed
+ * back by ::cuCtxCreate() or ::cuCtxAttach(), and must be current to the
+ * calling thread.
+ *
+ * \param ctx - Context to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate,
+ * ::cuCtxDestroy,
+ * ::cuCtxGetApiVersion,
+ * ::cuCtxGetCacheConfig,
+ * ::cuCtxGetDevice,
+ * ::cuCtxGetFlags,
+ * ::cuCtxGetLimit,
+ * ::cuCtxPopCurrent,
+ * ::cuCtxPushCurrent,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxSetLimit,
+ * ::cuCtxSynchronize
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuCtxDetach(CUcontext ctx);
+
+/** @} */ /* END CUDA_CTX_DEPRECATED */
+
+
+/**
+ * \defgroup CUDA_MODULE Module Management
+ *
+ * ___MANBRIEF___ module management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the module management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Loads a compute module
+ *
+ * Takes a filename \p fname and loads the corresponding module \p module into
+ * the current context. The CUDA driver API does not attempt to lazily
+ * allocate the resources needed by a module; if the memory for functions and
+ * data (constant and global) needed by the module cannot be allocated,
+ * ::cuModuleLoad() fails. The file should be a \e cubin file as output by
+ * \b nvcc, or a \e PTX file either as output by \b nvcc or handwritten, or
+ * a \e fatbin file as output by \b nvcc from toolchain 4.0 or later.
+ *
+ * \param module - Returned module
+ * \param fname  - Filename of module to load
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_FILE_NOT_FOUND,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ * ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ * ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload
+ */
+CUresult CUDAAPI cuModuleLoad(CUmodule *module, const char *fname);
+
+/**
+ * \brief Load a module's data
+ *
+ * Takes a pointer \p image and loads the corresponding module \p module into
+ * the current context. The pointer may be obtained by mapping a \e cubin or
+ * \e PTX or \e fatbin file, passing a \e cubin or \e PTX or \e fatbin file
+ * as a NULL-terminated text string, or incorporating a \e cubin or \e fatbin
+ * object into the executable resources and using operating system calls such
+ * as Windows \c FindResource() to obtain the pointer.
+ *
+ * \param module - Returned module
+ * \param image  - Module data to load
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ * ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ * ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload
+ */
+CUresult CUDAAPI cuModuleLoadData(CUmodule *module, const void *image);
+
+/**
+ * \brief Load a module's data with options
+ *
+ * Takes a pointer \p image and loads the corresponding module \p module into
+ * the current context. The pointer may be obtained by mapping a \e cubin or
+ * \e PTX or \e fatbin file, passing a \e cubin or \e PTX or \e fatbin file
+ * as a NULL-terminated text string, or incorporating a \e cubin or \e fatbin
+ * object into the executable resources and using operating system calls such
+ * as Windows \c FindResource() to obtain the pointer. Options are passed as
+ * an array via \p options and any corresponding parameters are passed in
+ * \p optionValues. The number of total options is supplied via \p numOptions.
+ * Any outputs will be returned via \p optionValues.
+ *
+ * \param module       - Returned module
+ * \param image        - Module data to load
+ * \param numOptions   - Number of options
+ * \param options      - Options for JIT
+ * \param optionValues - Option values for JIT
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ * ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ * ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload
+ */
+CUresult CUDAAPI cuModuleLoadDataEx(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
+
+/**
+ * \brief Load a module's data
+ *
+ * Takes a pointer \p fatCubin and loads the corresponding module \p module
+ * into the current context. The pointer represents a <i>fat binary</i> object,
+ * which is a collection of different \e cubin and/or \e PTX files, all
+ * representing the same device code, but compiled and optimized for different
+ * architectures.
+ *
+ * Prior to CUDA 4.0, there was no documented API for constructing and using
+ * fat binary objects by programmers.  Starting with CUDA 4.0, fat binary
+ * objects can be constructed by providing the <i>-fatbin option</i> to \b nvcc.
+ * More information can be found in the \b nvcc document.
+ *
+ * \param module   - Returned module
+ * \param fatCubin - Fat binary to load
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU,
+ * ::CUDA_ERROR_SHARED_OBJECT_SYMBOL_NOT_FOUND,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED,
+ * ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleUnload
+ */
+CUresult CUDAAPI cuModuleLoadFatBinary(CUmodule *module, const void *fatCubin);
+
+/**
+ * \brief Unloads a module
+ *
+ * Unloads a module \p hmod from the current context.
+ *
+ * \param hmod - Module to unload
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_destroy_ub
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary
+ */
+CUresult CUDAAPI cuModuleUnload(CUmodule hmod);
+
+/**
+ * CUDA Lazy Loading status
+ */
+typedef enum CUmoduleLoadingMode_enum {
+    CU_MODULE_EAGER_LOADING = 0x1, /**< Lazy Kernel Loading is not enabled */
+    CU_MODULE_LAZY_LOADING  = 0x2, /**< Lazy Kernel Loading is enabled */
+} CUmoduleLoadingMode;
+
+/**
+ * \brief Query lazy loading mode
+ *
+ * Returns lazy loading mode
+ * Module loading mode is controlled by CUDA_MODULE_LOADING env variable
+ *
+ * \param mode      - Returns the lazy loading mode
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \notefnerr
+ *
+ * \sa
+ * ::cuModuleLoad,
+ */
+CUresult CUDAAPI cuModuleGetLoadingMode(CUmoduleLoadingMode *mode);
+
+/**
+ * \brief Returns a function handle
+ *
+ * Returns in \p *hfunc the handle of the function of name \p name located in
+ * module \p hmod. If no function of that name exists, ::cuModuleGetFunction()
+ * returns ::CUDA_ERROR_NOT_FOUND.
+ *
+ * \param hfunc - Returned function handle
+ * \param hmod  - Module to retrieve function from
+ * \param name  - Name of function to retrieve
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload
+ */
+CUresult CUDAAPI cuModuleGetFunction(CUfunction *hfunc, CUmodule hmod, const char *name);
+
+/**
+ * \brief Returns a global pointer from a module
+ *
+ * Returns in \p *dptr and \p *bytes the base pointer and size of the
+ * global of name \p name located in module \p hmod. If no variable of that name
+ * exists, ::cuModuleGetGlobal() returns ::CUDA_ERROR_NOT_FOUND. Both
+ * parameters \p dptr and \p bytes are optional. If one of them is
+ * NULL, it is ignored.
+ *
+ * \param dptr  - Returned global device pointer
+ * \param bytes - Returned global size in bytes
+ * \param hmod  - Module to retrieve global from
+ * \param name  - Name of global to retrieve
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuModuleGetFunction,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload,
+ * ::cudaGetSymbolAddress,
+ * ::cudaGetSymbolSize
+ */
+CUresult CUDAAPI cuModuleGetGlobal(CUdeviceptr *dptr, size_t *bytes, CUmodule hmod, const char *name);
+
+/**
+ * \brief Returns a handle to a texture reference
+ *
+ * Returns in \p *pTexRef the handle of the texture reference of name \p name
+ * in the module \p hmod. If no texture reference of that name exists,
+ * ::cuModuleGetTexRef() returns ::CUDA_ERROR_NOT_FOUND. This texture reference
+ * handle should not be destroyed, since it will be destroyed when the module
+ * is unloaded.
+ *
+ * \param pTexRef  - Returned texture reference
+ * \param hmod     - Module to retrieve texture reference from
+ * \param name     - Name of texture reference to retrieve
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa
+ * ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetSurfRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload,
+ * ::cudaGetTextureReference
+ */
+CUresult CUDAAPI cuModuleGetTexRef(CUtexref *pTexRef, CUmodule hmod, const char *name);
+
+/**
+ * \brief Returns a handle to a surface reference
+ *
+ * Returns in \p *pSurfRef the handle of the surface reference of name \p name
+ * in the module \p hmod. If no surface reference of that name exists,
+ * ::cuModuleGetSurfRef() returns ::CUDA_ERROR_NOT_FOUND.
+ *
+ * \param pSurfRef  - Returned surface reference
+ * \param hmod     - Module to retrieve surface reference from
+ * \param name     - Name of surface reference to retrieve
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa
+ * ::cuModuleGetFunction,
+ * ::cuModuleGetGlobal,
+ * ::cuModuleGetTexRef,
+ * ::cuModuleLoad,
+ * ::cuModuleLoadData,
+ * ::cuModuleLoadDataEx,
+ * ::cuModuleLoadFatBinary,
+ * ::cuModuleUnload,
+ * ::cudaGetSurfaceReference
+ */
+CUresult CUDAAPI cuModuleGetSurfRef(CUsurfref *pSurfRef, CUmodule hmod, const char *name);
+
+/**
+ * \brief Creates a pending JIT linker invocation.
+ *
+ * If the call is successful, the caller owns the returned CUlinkState, which
+ * should eventually be destroyed with ::cuLinkDestroy.  The
+ * device code machine size (32 or 64 bit) will match the calling application.
+ *
+ * Both linker and compiler options may be specified.  Compiler options will
+ * be applied to inputs to this linker action which must be compiled from PTX.
+ * The options ::CU_JIT_WALL_TIME,
+ * ::CU_JIT_INFO_LOG_BUFFER_SIZE_BYTES, and ::CU_JIT_ERROR_LOG_BUFFER_SIZE_BYTES
+ * will accumulate data until the CUlinkState is destroyed.
+ *
+ * \p optionValues must remain valid for the life of the CUlinkState if output
+ * options are used.  No other references to inputs are maintained after this
+ * call returns.
+ *
+ * \param numOptions   Size of options arrays
+ * \param options      Array of linker and compiler options
+ * \param optionValues Array of option values, each cast to void *
+ * \param stateOut     On success, this will contain a CUlinkState to specify
+ *                     and complete this action
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_JIT_COMPILER_NOT_FOUND
+ * \notefnerr
+ *
+ * \sa ::cuLinkAddData,
+ * ::cuLinkAddFile,
+ * ::cuLinkComplete,
+ * ::cuLinkDestroy
+ */
+CUresult CUDAAPI
+cuLinkCreate(unsigned int numOptions, CUjit_option *options, void **optionValues, CUlinkState *stateOut);
+
+/**
+ * \brief Add an input to a pending linker invocation
+ *
+ * Ownership of \p data is retained by the caller.  No reference is retained to any
+ * inputs after this call returns.
+ *
+ * This method accepts only compiler options, which are used if the data must
+ * be compiled from PTX, and does not accept any of
+ * ::CU_JIT_WALL_TIME, ::CU_JIT_INFO_LOG_BUFFER, ::CU_JIT_ERROR_LOG_BUFFER,
+ * ::CU_JIT_TARGET_FROM_CUCONTEXT, or ::CU_JIT_TARGET.
+ *
+ * \param state        A pending linker action.
+ * \param type         The type of the input data.
+ * \param data         The input data.  PTX must be NULL-terminated.
+ * \param size         The length of the input data.
+ * \param name         An optional name for this input in log messages.
+ * \param numOptions   Size of options.
+ * \param options      Options to be applied only for this input (overrides options from ::cuLinkCreate).
+ * \param optionValues Array of option values, each cast to void *.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU
+ *
+ * \sa ::cuLinkCreate,
+ * ::cuLinkAddFile,
+ * ::cuLinkComplete,
+ * ::cuLinkDestroy
+ */
+CUresult CUDAAPI
+cuLinkAddData(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name,
+    unsigned int numOptions, CUjit_option *options, void **optionValues);
+
+/**
+ * \brief Add a file input to a pending linker invocation
+ *
+ * No reference is retained to any inputs after this call returns.
+ *
+ * This method accepts only compiler options, which are used if the input
+ * must be compiled from PTX, and does not accept any of
+ * ::CU_JIT_WALL_TIME, ::CU_JIT_INFO_LOG_BUFFER, ::CU_JIT_ERROR_LOG_BUFFER,
+ * ::CU_JIT_TARGET_FROM_CUCONTEXT, or ::CU_JIT_TARGET.
+ *
+ * This method is equivalent to invoking ::cuLinkAddData on the contents
+ * of the file.
+ *
+ * \param state        A pending linker action
+ * \param type         The type of the input data
+ * \param path         Path to the input file
+ * \param numOptions   Size of options
+ * \param options      Options to be applied only for this input (overrides options from ::cuLinkCreate)
+ * \param optionValues Array of option values, each cast to void *
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_FILE_NOT_FOUND
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_PTX,
+ * ::CUDA_ERROR_UNSUPPORTED_PTX_VERSION,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NO_BINARY_FOR_GPU
+ *
+ * \sa ::cuLinkCreate,
+ * ::cuLinkAddData,
+ * ::cuLinkComplete,
+ * ::cuLinkDestroy
+ */
+CUresult CUDAAPI
+cuLinkAddFile(CUlinkState state, CUjitInputType type, const char *path,
+    unsigned int numOptions, CUjit_option *options, void **optionValues);
+
+/**
+ * \brief Complete a pending linker invocation
+ *
+ * Completes the pending linker action and returns the cubin image for the linked
+ * device code, which can be used with ::cuModuleLoadData.  The cubin is owned by
+ * \p state, so it should be loaded before \p state is destroyed via ::cuLinkDestroy.
+ * This call does not destroy \p state.
+ *
+ * \param state    A pending linker invocation
+ * \param cubinOut On success, this will point to the output image
+ * \param sizeOut  Optional parameter to receive the size of the generated image
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuLinkCreate,
+ * ::cuLinkAddData,
+ * ::cuLinkAddFile,
+ * ::cuLinkDestroy,
+ * ::cuModuleLoadData
+ */
+CUresult CUDAAPI
+cuLinkComplete(CUlinkState state, void **cubinOut, size_t *sizeOut);
+
+/**
+ * \brief Destroys state for a JIT linker invocation.
+ *
+ * \param state State object for the linker invocation
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ *
+ * \sa ::cuLinkCreate
+ */
+CUresult CUDAAPI
+cuLinkDestroy(CUlinkState state);
+
+/** @} */ /* END CUDA_MODULE */
+
+
+/**
+ * \defgroup CUDA_MEM Memory Management
+ *
+ * ___MANBRIEF___ memory management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the memory management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Gets free and total memory
+ *
+ * Returns in \p *total the total amount of memory available to the the current context.
+ * Returns in \p *free the amount of memory on the device that is free according to the OS.
+ * CUDA is not guaranteed to be able to allocate all of the memory that the OS reports as free.
+ * In a multi-tenet situation, free estimate returned is prone to race condition where
+ * a new allocation/free done by a different process or a different thread in the same
+ * process between the time when free memory was estimated and reported, will result in
+ * deviation in free value reported and actual free memory.
+ *
+ * The integrated GPU on Tegra shares memory with CPU and other component
+ * of the SoC. The free and total values returned by the API excludes
+ * the SWAP memory space maintained by the OS on some platforms.
+ * The OS may move some of the memory pages into swap area as the GPU or
+ * CPU allocate or access memory. See Tegra app note on how to calculate
+ * total and free memory on Tegra.
+ *
+ * \param free  - Returned free memory in bytes
+ * \param total - Returned total memory in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemGetInfo
+ */
+CUresult CUDAAPI cuMemGetInfo(size_t *free, size_t *total);
+
+/**
+ * \brief Allocates device memory
+ *
+ * Allocates \p bytesize bytes of linear memory on the device and returns in
+ * \p *dptr a pointer to the allocated memory. The allocated memory is suitably
+ * aligned for any kind of variable. The memory is not cleared. If \p bytesize
+ * is 0, ::cuMemAlloc() returns ::CUDA_ERROR_INVALID_VALUE.
+ *
+ * \param dptr     - Returned device pointer
+ * \param bytesize - Requested allocation size in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMalloc
+ */
+CUresult CUDAAPI cuMemAlloc(CUdeviceptr *dptr, size_t bytesize);
+
+/**
+ * \brief Allocates pitched device memory
+ *
+ * Allocates at least \p WidthInBytes * \p Height bytes of linear memory on
+ * the device and returns in \p *dptr a pointer to the allocated memory. The
+ * function may pad the allocation to ensure that corresponding pointers in
+ * any given row will continue to meet the alignment requirements for
+ * coalescing as the address is updated from row to row. \p ElementSizeBytes
+ * specifies the size of the largest reads and writes that will be performed
+ * on the memory range. \p ElementSizeBytes may be 4, 8 or 16 (since coalesced
+ * memory transactions are not possible on other data sizes). If
+ * \p ElementSizeBytes is smaller than the actual read/write size of a kernel,
+ * the kernel will run correctly, but possibly at reduced speed. The pitch
+ * returned in \p *pPitch by ::cuMemAllocPitch() is the width in bytes of the
+ * allocation. The intended usage of pitch is as a separate parameter of the
+ * allocation, used to compute addresses within the 2D array. Given the row
+ * and column of an array element of type \b T, the address is computed as:
+ * \code
+   T* pElement = (T*)((char*)BaseAddress + Row * Pitch) + Column;
+ * \endcode
+ *
+ * The pitch returned by ::cuMemAllocPitch() is guaranteed to work with
+ * ::cuMemcpy2D() under all circumstances. For allocations of 2D arrays, it is
+ * recommended that programmers consider performing pitch allocations using
+ * ::cuMemAllocPitch(). Due to alignment restrictions in the hardware, this is
+ * especially true if the application will be performing 2D memory copies
+ * between different regions of device memory (whether linear memory or CUDA
+ * arrays).
+ *
+ * The byte alignment of the pitch returned by ::cuMemAllocPitch() is guaranteed
+ * to match or exceed the alignment requirement for texture binding with
+ * ::cuTexRefSetAddress2D().
+ *
+ * \param dptr             - Returned device pointer
+ * \param pPitch           - Returned pitch of allocation in bytes
+ * \param WidthInBytes     - Requested allocation width in bytes
+ * \param Height           - Requested allocation height in rows
+ * \param ElementSizeBytes - Size of largest reads/writes for range
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMallocPitch
+ */
+CUresult CUDAAPI cuMemAllocPitch(CUdeviceptr *dptr, size_t *pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes);
+
+/**
+ * \brief Frees device memory
+ *
+ * Frees the memory space pointed to by \p dptr, which must have been returned
+ * by a previous call to one of the following memory allocation APIs - ::cuMemAlloc(), 
+ * ::cuMemAllocPitch(), ::cuMemAllocManaged(), ::cuMemAllocAsync(), ::cuMemAllocFromPoolAsync()
+ *
+ * Note - This API will not perform any implict synchronization when the pointer was allocated with
+ * ::cuMemAllocAsync or ::cuMemAllocFromPoolAsync. Callers must ensure that all accesses to the
+ * pointer have completed before invoking ::cuMemFree. For best performance and memory reuse, users
+ * should use ::cuMemFreeAsync to free memory allocated via the stream ordered memory allocator.
+ * 
+ * \param dptr - Pointer to memory to free
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemAllocManaged, ::cuMemAllocAsync, ::cuMemAllocFromPoolAsync, 
+ * ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned, ::cuMemcpy3D, ::cuMemcpy3DAsync,
+ * ::cuMemcpyAtoA, ::cuMemcpyAtoD, ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ * ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync, ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA,
+ * ::cuMemcpyHtoAAsync, ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc, ::cuMemFreeAsync,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaFree
+ */
+CUresult CUDAAPI cuMemFree(CUdeviceptr dptr);
+
+/**
+ * \brief Get information on memory allocations
+ *
+ * Returns the base address in \p *pbase and size in \p *psize of the
+ * allocation by ::cuMemAlloc() or ::cuMemAllocPitch() that contains the input
+ * pointer \p dptr. Both parameters \p pbase and \p psize are optional. If one
+ * of them is NULL, it is ignored.
+ *
+ * \param pbase - Returned base address
+ * \param psize - Returned size of device memory allocation
+ * \param dptr  - Device pointer to query
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32
+ */
+CUresult CUDAAPI cuMemGetAddressRange(CUdeviceptr *pbase, size_t *psize, CUdeviceptr dptr);
+
+/**
+ * \brief Allocates page-locked host memory
+ *
+ * Allocates \p bytesize bytes of host memory that is page-locked and
+ * accessible to the device. The driver tracks the virtual memory ranges
+ * allocated with this function and automatically accelerates calls to
+ * functions such as ::cuMemcpy(). Since the memory can be accessed directly by
+ * the device, it can be read or written with much higher bandwidth than
+ * pageable memory obtained with functions such as ::malloc(). Allocating
+ * excessive amounts of memory with ::cuMemAllocHost() may degrade system
+ * performance, since it reduces the amount of memory available to the system
+ * for paging. As a result, this function is best used sparingly to allocate
+ * staging areas for data exchange between host and device.
+ *
+ * Note all host memory allocated using ::cuMemHostAlloc() will automatically
+ * be immediately accessible to all contexts on all devices which support unified
+ * addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING).
+ * The device pointer that may be used to access this host memory from those
+ * contexts is always equal to the returned host pointer \p *pp.
+ * See \ref CUDA_UNIFIED for additional details.
+ *
+ * \param pp       - Returned host pointer to page-locked memory
+ * \param bytesize - Requested allocation size in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMallocHost
+ */
+CUresult CUDAAPI cuMemAllocHost(void **pp, size_t bytesize);
+
+/**
+ * \brief Frees page-locked host memory
+ *
+ * Frees the memory space pointed to by \p p, which must have been returned by
+ * a previous call to ::cuMemAllocHost().
+ *
+ * \param p - Pointer to memory to free
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaFreeHost
+ */
+CUresult CUDAAPI cuMemFreeHost(void *p);
+
+/**
+ * \brief Allocates page-locked host memory
+ *
+ * Allocates \p bytesize bytes of host memory that is page-locked and accessible
+ * to the device. The driver tracks the virtual memory ranges allocated with
+ * this function and automatically accelerates calls to functions such as
+ * ::cuMemcpyHtoD(). Since the memory can be accessed directly by the device,
+ * it can be read or written with much higher bandwidth than pageable memory
+ * obtained with functions such as ::malloc(). Allocating excessive amounts of
+ * pinned memory may degrade system performance, since it reduces the amount
+ * of memory available to the system for paging. As a result, this function is
+ * best used sparingly to allocate staging areas for data exchange between
+ * host and device.
+ *
+ * The \p Flags parameter enables different options to be specified that
+ * affect the allocation, as follows.
+ *
+ * - ::CU_MEMHOSTALLOC_PORTABLE: The memory returned by this call will be
+ *   considered as pinned memory by all CUDA contexts, not just the one that
+ *   performed the allocation.
+ *
+ * - ::CU_MEMHOSTALLOC_DEVICEMAP: Maps the allocation into the CUDA address
+ *   space. The device pointer to the memory may be obtained by calling
+ *   ::cuMemHostGetDevicePointer().
+ *
+ * - ::CU_MEMHOSTALLOC_WRITECOMBINED: Allocates the memory as write-combined
+ *   (WC). WC memory can be transferred across the PCI Express bus more
+ *   quickly on some system configurations, but cannot be read efficiently by
+ *   most CPUs. WC memory is a good option for buffers that will be written by
+ *   the CPU and read by the GPU via mapped pinned memory or host->device
+ *   transfers.
+ *
+ * All of these flags are orthogonal to one another: a developer may allocate
+ * memory that is portable, mapped and/or write-combined with no restrictions.
+ *
+ * The ::CU_MEMHOSTALLOC_DEVICEMAP flag may be specified on CUDA contexts for
+ * devices that do not support mapped pinned memory. The failure is deferred
+ * to ::cuMemHostGetDevicePointer() because the memory may be mapped into
+ * other CUDA contexts via the ::CU_MEMHOSTALLOC_PORTABLE flag.
+ *
+ * The memory allocated by this function must be freed with ::cuMemFreeHost().
+ *
+ * Note all host memory allocated using ::cuMemHostAlloc() will automatically
+ * be immediately accessible to all contexts on all devices which support unified
+ * addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING).
+ * Unless the flag ::CU_MEMHOSTALLOC_WRITECOMBINED is specified, the device pointer
+ * that may be used to access this host memory from those contexts is always equal
+ * to the returned host pointer \p *pp.  If the flag ::CU_MEMHOSTALLOC_WRITECOMBINED
+ * is specified, then the function ::cuMemHostGetDevicePointer() must be used
+ * to query the device pointer, even if the context supports unified addressing.
+ * See \ref CUDA_UNIFIED for additional details.
+ *
+ * \param pp       - Returned host pointer to page-locked memory
+ * \param bytesize - Requested allocation size in bytes
+ * \param Flags    - Flags for allocation request
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaHostAlloc
+ */
+CUresult CUDAAPI cuMemHostAlloc(void **pp, size_t bytesize, unsigned int Flags);
+
+/**
+ * \brief Passes back device pointer of mapped pinned memory
+ *
+ * Passes back the device pointer \p pdptr corresponding to the mapped, pinned
+ * host buffer \p p allocated by ::cuMemHostAlloc.
+ *
+ * ::cuMemHostGetDevicePointer() will fail if the ::CU_MEMHOSTALLOC_DEVICEMAP
+ * flag was not specified at the time the memory was allocated, or if the
+ * function is called on a GPU that does not support mapped pinned memory.
+ *
+ * For devices that have a non-zero value for the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM, the memory
+ * can also be accessed from the device using the host pointer \p p.
+ * The device pointer returned by ::cuMemHostGetDevicePointer() may or may not
+ * match the original host pointer \p p and depends on the devices visible to the
+ * application. If all devices visible to the application have a non-zero value for the
+ * device attribute, the device pointer returned by ::cuMemHostGetDevicePointer()
+ * will match the original pointer \p p. If any device visible to the application
+ * has a zero value for the device attribute, the device pointer returned by
+ * ::cuMemHostGetDevicePointer() will not match the original host pointer \p p,
+ * but it will be suitable for use on all devices provided Unified Virtual Addressing
+ * is enabled. In such systems, it is valid to access the memory using either pointer
+ * on devices that have a non-zero value for the device attribute. Note however that
+ * such devices should access the memory using only one of the two pointers and not both.
+ *
+ * \p Flags provides for future releases. For now, it must be set to 0.
+ *
+ * \param pdptr - Returned device pointer
+ * \param p     - Host pointer
+ * \param Flags - Options (must be 0)
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaHostGetDevicePointer
+ */
+CUresult CUDAAPI cuMemHostGetDevicePointer(CUdeviceptr *pdptr, void *p, unsigned int Flags);
+
+/**
+ * \brief Passes back flags that were used for a pinned allocation
+ *
+ * Passes back the flags \p pFlags that were specified when allocating
+ * the pinned host buffer \p p allocated by ::cuMemHostAlloc.
+ *
+ * ::cuMemHostGetFlags() will fail if the pointer does not reside in
+ * an allocation performed by ::cuMemAllocHost() or ::cuMemHostAlloc().
+ *
+ * \param pFlags - Returned flags word
+ * \param p     - Host pointer
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemAllocHost,
+ * ::cuMemHostAlloc,
+ * ::cudaHostGetFlags
+ */
+CUresult CUDAAPI cuMemHostGetFlags(unsigned int *pFlags, void *p);
+
+/**
+ * \brief Allocates memory that will be automatically managed by the Unified Memory system
+ *
+ * Allocates \p bytesize bytes of managed memory on the device and returns in
+ * \p *dptr a pointer to the allocated memory. If the device doesn't support
+ * allocating managed memory, ::CUDA_ERROR_NOT_SUPPORTED is returned. Support
+ * for managed memory can be queried using the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_MANAGED_MEMORY. The allocated memory is suitably
+ * aligned for any kind of variable. The memory is not cleared. If \p bytesize
+ * is 0, ::cuMemAllocManaged returns ::CUDA_ERROR_INVALID_VALUE. The pointer
+ * is valid on the CPU and on all GPUs in the system that support managed memory.
+ * All accesses to this pointer must obey the Unified Memory programming model.
+ *
+ * \p flags specifies the default stream association for this allocation.
+ * \p flags must be one of ::CU_MEM_ATTACH_GLOBAL or ::CU_MEM_ATTACH_HOST. If
+ * ::CU_MEM_ATTACH_GLOBAL is specified, then this memory is accessible from
+ * any stream on any device. If ::CU_MEM_ATTACH_HOST is specified, then the
+ * allocation should not be accessed from devices that have a zero value for the
+ * device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS; an explicit call to
+ * ::cuStreamAttachMemAsync will be required to enable access on such devices.
+ *
+ * If the association is later changed via ::cuStreamAttachMemAsync to
+ * a single stream, the default association as specifed during ::cuMemAllocManaged
+ * is restored when that stream is destroyed. For __managed__ variables, the
+ * default association is always ::CU_MEM_ATTACH_GLOBAL. Note that destroying a
+ * stream is an asynchronous operation, and as a result, the change to default
+ * association won't happen until all work in the stream has completed.
+ *
+ * Memory allocated with ::cuMemAllocManaged should be released with ::cuMemFree.
+ *
+ * Device memory oversubscription is possible for GPUs that have a non-zero value for the
+ * device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. Managed memory on
+ * such GPUs may be evicted from device memory to host memory at any time by the Unified
+ * Memory driver in order to make room for other allocations.
+ *
+ * In a multi-GPU system where all GPUs have a non-zero value for the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS, managed memory may not be populated when this
+ * API returns and instead may be populated on access. In such systems, managed memory can
+ * migrate to any processor's memory at any time. The Unified Memory driver will employ heuristics to
+ * maintain data locality and prevent excessive page faults to the extent possible. The application
+ * can also guide the driver about memory usage patterns via ::cuMemAdvise. The application
+ * can also explicitly migrate memory to a desired processor's memory via
+ * ::cuMemPrefetchAsync.
+ *
+ * In a multi-GPU system where all of the GPUs have a zero value for the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS and all the GPUs have peer-to-peer support
+ * with each other, the physical storage for managed memory is created on the GPU which is active
+ * at the time ::cuMemAllocManaged is called. All other GPUs will reference the data at reduced
+ * bandwidth via peer mappings over the PCIe bus. The Unified Memory driver does not migrate
+ * memory among such GPUs.
+ *
+ * In a multi-GPU system where not all GPUs have peer-to-peer support with each other and
+ * where the value of the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS
+ * is zero for at least one of those GPUs, the location chosen for physical storage of managed
+ * memory is system-dependent.
+ * - On Linux, the location chosen will be device memory as long as the current set of active
+ * contexts are on devices that either have peer-to-peer support with each other or have a
+ * non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ * If there is an active context on a GPU that does not have a non-zero value for that device
+ * attribute and it does not have peer-to-peer support with the other devices that have active
+ * contexts on them, then the location for physical storage will be 'zero-copy' or host memory.
+ * Note that this means that managed memory that is located in device memory is migrated to
+ * host memory if a new context is created on a GPU that doesn't have a non-zero value for
+ * the device attribute and does not support peer-to-peer with at least one of the other devices
+ * that has an active context. This in turn implies that context creation may fail if there is
+ * insufficient host memory to migrate all managed allocations.
+ * - On Windows, the physical storage is always created in 'zero-copy' or host memory.
+ * All GPUs will reference the data at reduced bandwidth over the PCIe bus. In these
+ * circumstances, use of the environment variable CUDA_VISIBLE_DEVICES is recommended to
+ * restrict CUDA to only use those GPUs that have peer-to-peer support.
+ * Alternatively, users can also set CUDA_MANAGED_FORCE_DEVICE_ALLOC to a
+ * non-zero value to force the driver to always use device memory for physical storage.
+ * When this environment variable is set to a non-zero value, all contexts created in
+ * that process on devices that support managed memory have to be peer-to-peer compatible
+ * with each other. Context creation will fail if a context is created on a device that
+ * supports managed memory and is not peer-to-peer compatible with any of the other
+ * managed memory supporting devices on which contexts were previously created, even if
+ * those contexts have been destroyed. These environment variables are described
+ * in the CUDA programming guide under the "CUDA environment variables" section.
+ * - On ARM, managed memory is not available on discrete gpu with Drive PX-2.
+ *
+ * \param dptr     - Returned device pointer
+ * \param bytesize - Requested allocation size in bytes
+ * \param flags    - Must be one of ::CU_MEM_ATTACH_GLOBAL or ::CU_MEM_ATTACH_HOST
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cuDeviceGetAttribute, ::cuStreamAttachMemAsync,
+ * ::cudaMallocManaged
+ */
+CUresult CUDAAPI cuMemAllocManaged(CUdeviceptr *dptr, size_t bytesize, unsigned int flags);
+
+/**
+ * \brief Returns a handle to a compute device
+ *
+ * Returns in \p *device a device handle given a PCI bus ID string.
+ *
+ * \param dev      - Returned device handle
+ *
+ * \param pciBusId - String in one of the following forms:
+ * [domain]:[bus]:[device].[function]
+ * [domain]:[bus]:[device]
+ * [bus]:[device].[function]
+ * where \p domain, \p bus, \p device, and \p function are all hexadecimal values
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGet,
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetPCIBusId,
+ * ::cudaDeviceGetByPCIBusId
+ */
+CUresult CUDAAPI cuDeviceGetByPCIBusId(CUdevice *dev, const char *pciBusId);
+
+/**
+ * \brief Returns a PCI Bus Id string for the device
+ *
+ * Returns an ASCII string identifying the device \p dev in the NULL-terminated
+ * string pointed to by \p pciBusId. \p len specifies the maximum length of the
+ * string that may be returned.
+ *
+ * \param pciBusId - Returned identifier string for the device in the following format
+ * [domain]:[bus]:[device].[function]
+ * where \p domain, \p bus, \p device, and \p function are all hexadecimal values.
+ * pciBusId should be large enough to store 13 characters including the NULL-terminator.
+ *
+ * \param len      - Maximum length of string to store in \p name
+ *
+ * \param dev      - Device to get identifier string for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceGet,
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetByPCIBusId,
+ * ::cudaDeviceGetPCIBusId
+ */
+CUresult CUDAAPI cuDeviceGetPCIBusId(char *pciBusId, int len, CUdevice dev);
+
+/**
+ * \brief Gets an interprocess handle for a previously allocated event
+ *
+ * Takes as input a previously allocated event. This event must have been
+ * created with the ::CU_EVENT_INTERPROCESS and ::CU_EVENT_DISABLE_TIMING
+ * flags set. This opaque handle may be copied into other processes and
+ * opened with ::cuIpcOpenEventHandle to allow efficient hardware
+ * synchronization between GPU work in different processes.
+ *
+ * After the event has been opened in the importing process,
+ * ::cuEventRecord, ::cuEventSynchronize, ::cuStreamWaitEvent and
+ * ::cuEventQuery may be used in either process. Performing operations
+ * on the imported event after the exported event has been freed
+ * with ::cuEventDestroy will result in undefined behavior.
+ *
+ * IPC functionality is restricted to devices with support for unified
+ * addressing on Linux and Windows operating systems.
+ * IPC functionality on Windows is restricted to GPUs in TCC mode
+ *
+ * \param pHandle - Pointer to a user allocated CUipcEventHandle
+ *                    in which to return the opaque event handle
+ * \param event   - Event allocated with ::CU_EVENT_INTERPROCESS and
+ *                    ::CU_EVENT_DISABLE_TIMING flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_MAP_FAILED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuEventCreate,
+ * ::cuEventDestroy,
+ * ::cuEventSynchronize,
+ * ::cuEventQuery,
+ * ::cuStreamWaitEvent,
+ * ::cuIpcOpenEventHandle,
+ * ::cuIpcGetMemHandle,
+ * ::cuIpcOpenMemHandle,
+ * ::cuIpcCloseMemHandle,
+ * ::cudaIpcGetEventHandle
+ */
+CUresult CUDAAPI cuIpcGetEventHandle(CUipcEventHandle *pHandle, CUevent event);
+
+/**
+ * \brief Opens an interprocess event handle for use in the current process
+ *
+ * Opens an interprocess event handle exported from another process with
+ * ::cuIpcGetEventHandle. This function returns a ::CUevent that behaves like
+ * a locally created event with the ::CU_EVENT_DISABLE_TIMING flag specified.
+ * This event must be freed with ::cuEventDestroy.
+ *
+ * Performing operations on the imported event after the exported event has
+ * been freed with ::cuEventDestroy will result in undefined behavior.
+ *
+ * IPC functionality is restricted to devices with support for unified
+ * addressing on Linux and Windows operating systems.
+ * IPC functionality on Windows is restricted to GPUs in TCC mode
+ *
+ * \param phEvent - Returns the imported event
+ * \param handle  - Interprocess handle to open
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_MAP_FAILED,
+ * ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuEventCreate,
+ * ::cuEventDestroy,
+ * ::cuEventSynchronize,
+ * ::cuEventQuery,
+ * ::cuStreamWaitEvent,
+ * ::cuIpcGetEventHandle,
+ * ::cuIpcGetMemHandle,
+ * ::cuIpcOpenMemHandle,
+ * ::cuIpcCloseMemHandle,
+ * ::cudaIpcOpenEventHandle
+ */
+CUresult CUDAAPI cuIpcOpenEventHandle(CUevent *phEvent, CUipcEventHandle handle);
+
+/**
+ * \brief Gets an interprocess memory handle for an existing device memory
+ * allocation
+ *
+ * Takes a pointer to the base of an existing device memory allocation created
+ * with ::cuMemAlloc and exports it for use in another process. This is a
+ * lightweight operation and may be called multiple times on an allocation
+ * without adverse effects.
+ *
+ * If a region of memory is freed with ::cuMemFree and a subsequent call
+ * to ::cuMemAlloc returns memory with the same device address,
+ * ::cuIpcGetMemHandle will return a unique handle for the
+ * new memory.
+ *
+ * IPC functionality is restricted to devices with support for unified
+ * addressing on Linux and Windows operating systems.
+ * IPC functionality on Windows is restricted to GPUs in TCC mode
+ *
+ * \param pHandle - Pointer to user allocated ::CUipcMemHandle to return
+ *                    the handle in.
+ * \param dptr    - Base pointer to previously allocated device memory
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_MAP_FAILED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuMemAlloc,
+ * ::cuMemFree,
+ * ::cuIpcGetEventHandle,
+ * ::cuIpcOpenEventHandle,
+ * ::cuIpcOpenMemHandle,
+ * ::cuIpcCloseMemHandle,
+ * ::cudaIpcGetMemHandle
+ */
+CUresult CUDAAPI cuIpcGetMemHandle(CUipcMemHandle *pHandle, CUdeviceptr dptr);
+
+/**
+ * \brief Opens an interprocess memory handle exported from another process
+ * and returns a device pointer usable in the local process.
+ *
+ * Maps memory exported from another process with ::cuIpcGetMemHandle into
+ * the current device address space. For contexts on different devices
+ * ::cuIpcOpenMemHandle can attempt to enable peer access between the
+ * devices as if the user called ::cuCtxEnablePeerAccess. This behavior is
+ * controlled by the ::CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS flag.
+ * ::cuDeviceCanAccessPeer can determine if a mapping is possible.
+ *
+ * Contexts that may open ::CUipcMemHandles are restricted in the following way.
+ * ::CUipcMemHandles from each ::CUdevice in a given process may only be opened
+ * by one ::CUcontext per ::CUdevice per other process.
+ *
+ * If the memory handle has already been opened by the current context, the
+ * reference count on the handle is incremented by 1 and the existing device pointer
+ * is returned.
+ *
+ * Memory returned from ::cuIpcOpenMemHandle must be freed with
+ * ::cuIpcCloseMemHandle.
+ *
+ * Calling ::cuMemFree on an exported memory region before calling
+ * ::cuIpcCloseMemHandle in the importing context will result in undefined
+ * behavior.
+ *
+ * IPC functionality is restricted to devices with support for unified
+ * addressing on Linux and Windows operating systems.
+ * IPC functionality on Windows is restricted to GPUs in TCC mode
+ *
+ * \param pdptr  - Returned device pointer
+ * \param handle - ::CUipcMemHandle to open
+ * \param Flags  - Flags for this operation. Must be specified as ::CU_IPC_MEM_LAZY_ENABLE_PEER_ACCESS
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_MAP_FAILED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_TOO_MANY_PEERS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \note No guarantees are made about the address returned in \p *pdptr.
+ * In particular, multiple processes may not receive the same address for the same \p handle.
+ *
+ * \sa
+ * ::cuMemAlloc,
+ * ::cuMemFree,
+ * ::cuIpcGetEventHandle,
+ * ::cuIpcOpenEventHandle,
+ * ::cuIpcGetMemHandle,
+ * ::cuIpcCloseMemHandle,
+ * ::cuCtxEnablePeerAccess,
+ * ::cuDeviceCanAccessPeer,
+ * ::cudaIpcOpenMemHandle
+ */
+CUresult CUDAAPI cuIpcOpenMemHandle(CUdeviceptr *pdptr, CUipcMemHandle handle, unsigned int Flags);
+
+/**
+ * \brief Attempts to close memory mapped with ::cuIpcOpenMemHandle
+ *
+ * Decrements the reference count of the memory returned by ::cuIpcOpenMemHandle by 1.
+ * When the reference count reaches 0, this API unmaps the memory. The original allocation
+ * in the exporting process as well as imported mappings in other processes
+ * will be unaffected.
+ *
+ * Any resources used to enable peer access will be freed if this is the
+ * last mapping using them.
+ *
+ * IPC functionality is restricted to devices with support for unified
+ * addressing on Linux and Windows operating systems.
+ * IPC functionality on Windows is restricted to GPUs in TCC mode
+ *
+ * \param dptr - Device pointer returned by ::cuIpcOpenMemHandle
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_MAP_FAILED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \sa
+ * ::cuMemAlloc,
+ * ::cuMemFree,
+ * ::cuIpcGetEventHandle,
+ * ::cuIpcOpenEventHandle,
+ * ::cuIpcGetMemHandle,
+ * ::cuIpcOpenMemHandle,
+ * ::cudaIpcCloseMemHandle
+ */
+CUresult CUDAAPI cuIpcCloseMemHandle(CUdeviceptr dptr);
+
+/**
+ * \brief Registers an existing host memory range for use by CUDA
+ *
+ * Page-locks the memory range specified by \p p and \p bytesize and maps it
+ * for the device(s) as specified by \p Flags. This memory range also is added
+ * to the same tracking mechanism as ::cuMemHostAlloc to automatically accelerate
+ * calls to functions such as ::cuMemcpyHtoD(). Since the memory can be accessed
+ * directly by the device, it can be read or written with much higher bandwidth
+ * than pageable memory that has not been registered.  Page-locking excessive
+ * amounts of memory may degrade system performance, since it reduces the amount
+ * of memory available to the system for paging. As a result, this function is
+ * best used sparingly to register staging areas for data exchange between
+ * host and device.
+ *
+ * The \p Flags parameter enables different options to be specified that
+ * affect the allocation, as follows.
+ *
+ * - ::CU_MEMHOSTREGISTER_PORTABLE: The memory returned by this call will be
+ *   considered as pinned memory by all CUDA contexts, not just the one that
+ *   performed the allocation.
+ *
+ * - ::CU_MEMHOSTREGISTER_DEVICEMAP: Maps the allocation into the CUDA address
+ *   space. The device pointer to the memory may be obtained by calling
+ *   ::cuMemHostGetDevicePointer().
+ *
+ * - ::CU_MEMHOSTREGISTER_IOMEMORY: The pointer is treated as pointing to some
+ *   I/O memory space, e.g. the PCI Express resource of a 3rd party device.
+ *
+ * - ::CU_MEMHOSTREGISTER_READ_ONLY: The pointer is treated as pointing to memory
+ *   that is considered read-only by the device.  On platforms without
+ *   ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, this flag is
+ *   required in order to register memory mapped to the CPU as read-only.  Support
+ *   for the use of this flag can be queried from the device attribute
+ *   ::CU_DEVICE_ATTRIBUTE_READ_ONLY_HOST_REGISTER_SUPPORTED.  Using this flag with
+ *   a current context associated with a device that does not have this attribute
+ *   set will cause ::cuMemHostRegister to error with CUDA_ERROR_NOT_SUPPORTED.
+ *
+ * All of these flags are orthogonal to one another: a developer may page-lock
+ * memory that is portable or mapped with no restrictions.
+ *
+ * The ::CU_MEMHOSTREGISTER_DEVICEMAP flag may be specified on CUDA contexts for
+ * devices that do not support mapped pinned memory. The failure is deferred
+ * to ::cuMemHostGetDevicePointer() because the memory may be mapped into
+ * other CUDA contexts via the ::CU_MEMHOSTREGISTER_PORTABLE flag.
+ *
+ * For devices that have a non-zero value for the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_HOST_POINTER_FOR_REGISTERED_MEM, the memory
+ * can also be accessed from the device using the host pointer \p p.
+ * The device pointer returned by ::cuMemHostGetDevicePointer() may or may not
+ * match the original host pointer \p ptr and depends on the devices visible to the
+ * application. If all devices visible to the application have a non-zero value for the
+ * device attribute, the device pointer returned by ::cuMemHostGetDevicePointer()
+ * will match the original pointer \p ptr. If any device visible to the application
+ * has a zero value for the device attribute, the device pointer returned by
+ * ::cuMemHostGetDevicePointer() will not match the original host pointer \p ptr,
+ * but it will be suitable for use on all devices provided Unified Virtual Addressing
+ * is enabled. In such systems, it is valid to access the memory using either pointer
+ * on devices that have a non-zero value for the device attribute. Note however that
+ * such devices should access the memory using only of the two pointers and not both.
+ *
+ * The memory page-locked by this function must be unregistered with
+ * ::cuMemHostUnregister().
+ *
+ * \param p        - Host pointer to memory to page-lock
+ * \param bytesize - Size in bytes of the address range to page-lock
+ * \param Flags    - Flags for allocation request
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_HOST_MEMORY_ALREADY_REGISTERED,
+ * ::CUDA_ERROR_NOT_PERMITTED,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemHostUnregister,
+ * ::cuMemHostGetFlags,
+ * ::cuMemHostGetDevicePointer,
+ * ::cudaHostRegister
+ */
+CUresult CUDAAPI cuMemHostRegister(void *p, size_t bytesize, unsigned int Flags);
+
+/**
+ * \brief Unregisters a memory range that was registered with cuMemHostRegister.
+ *
+ * Unmaps the memory range whose base address is specified by \p p, and makes
+ * it pageable again.
+ *
+ * The base address must be the same one specified to ::cuMemHostRegister().
+ *
+ * \param p - Host pointer to memory to unregister
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_HOST_MEMORY_NOT_REGISTERED,
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemHostRegister,
+ * ::cudaHostUnregister
+ */
+CUresult CUDAAPI cuMemHostUnregister(void *p);
+
+/**
+ * \brief Copies memory
+ *
+ * Copies data between two pointers.
+ * \p dst and \p src are base pointers of the destination and source, respectively.
+ * \p ByteCount specifies the number of bytes to copy.
+ * Note that this function infers the type of the transfer (host to host, host to
+ *   device, device to device, or device to host) from the pointer values.  This
+ *   function is only allowed in contexts which support unified addressing.
+ *
+ * \param dst - Destination unified virtual address space pointer
+ * \param src - Source unified virtual address space pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy,
+ * ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol
+ */
+CUresult CUDAAPI cuMemcpy(CUdeviceptr dst, CUdeviceptr src, size_t ByteCount);
+
+/**
+ * \brief Copies device memory between two contexts
+ *
+ * Copies from device memory in one context to device memory in another
+ * context. \p dstDevice is the base device pointer of the destination memory
+ * and \p dstContext is the destination context.  \p srcDevice is the base
+ * device pointer of the source memory and \p srcContext is the source pointer.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstDevice  - Destination device pointer
+ * \param dstContext - Destination context
+ * \param srcDevice  - Source device pointer
+ * \param srcContext - Source context
+ * \param ByteCount  - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuMemcpyDtoD, ::cuMemcpy3DPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ * ::cuMemcpy3DPeerAsync,
+ * ::cudaMemcpyPeer
+ */
+CUresult CUDAAPI cuMemcpyPeer(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Host to Device
+ *
+ * Copies from host memory to device memory. \p dstDevice and \p srcHost are
+ * the base addresses of the destination and source, respectively. \p ByteCount
+ * specifies the number of bytes to copy.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param srcHost   - Source host pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy,
+ * ::cudaMemcpyToSymbol
+ */
+CUresult CUDAAPI cuMemcpyHtoD(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Device to Host
+ *
+ * Copies from device to host memory. \p dstHost and \p srcDevice specify the
+ * base pointers of the destination and source, respectively. \p ByteCount
+ * specifies the number of bytes to copy.
+ *
+ * \param dstHost   - Destination host pointer
+ * \param srcDevice - Source device pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy,
+ * ::cudaMemcpyFromSymbol
+ */
+CUresult CUDAAPI cuMemcpyDtoH(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Device to Device
+ *
+ * Copies from device memory to device memory. \p dstDevice and \p srcDevice
+ * are the base pointers of the destination and source, respectively.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param srcDevice - Source device pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy,
+ * ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol
+ */
+CUresult CUDAAPI cuMemcpyDtoD(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Device to Array
+ *
+ * Copies from device memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ * specify the CUDA array handle and starting index of the destination data.
+ * \p srcDevice specifies the base pointer of the source. \p ByteCount
+ * specifies the number of bytes to copy.
+ *
+ * \param dstArray  - Destination array
+ * \param dstOffset - Offset in bytes of destination array
+ * \param srcDevice - Source device pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpyToArray
+ */
+CUresult CUDAAPI cuMemcpyDtoA(CUarray dstArray, size_t dstOffset, CUdeviceptr srcDevice, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Array to Device
+ *
+ * Copies from one 1D CUDA array to device memory. \p dstDevice specifies the
+ * base pointer of the destination and must be naturally aligned with the CUDA
+ * array elements. \p srcArray and \p srcOffset specify the CUDA array handle
+ * and the offset in bytes into the array where the copy is to begin.
+ * \p ByteCount specifies the number of bytes to copy and must be evenly
+ * divisible by the array element size.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param srcArray  - Source array
+ * \param srcOffset - Offset in bytes of source array
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpyFromArray
+ */
+CUresult CUDAAPI cuMemcpyAtoD(CUdeviceptr dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Host to Array
+ *
+ * Copies from host memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ * specify the CUDA array handle and starting offset in bytes of the destination
+ * data.  \p pSrc specifies the base address of the source. \p ByteCount specifies
+ * the number of bytes to copy.
+ *
+ * \param dstArray  - Destination array
+ * \param dstOffset - Offset in bytes of destination array
+ * \param srcHost   - Source host pointer
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpyToArray
+ */
+CUresult CUDAAPI cuMemcpyHtoA(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Array to Host
+ *
+ * Copies from one 1D CUDA array to host memory. \p dstHost specifies the base
+ * pointer of the destination. \p srcArray and \p srcOffset specify the CUDA
+ * array handle and starting offset in bytes of the source data.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstHost   - Destination device pointer
+ * \param srcArray  - Source array
+ * \param srcOffset - Offset in bytes of source array
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpyFromArray
+ */
+CUresult CUDAAPI cuMemcpyAtoH(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+
+/**
+ * \brief Copies memory from Array to Array
+ *
+ * Copies from one 1D CUDA array to another. \p dstArray and \p srcArray
+ * specify the handles of the destination and source CUDA arrays for the copy,
+ * respectively. \p dstOffset and \p srcOffset specify the destination and
+ * source offsets in bytes into the CUDA arrays. \p ByteCount is the number of
+ * bytes to be copied. The size of the elements in the CUDA arrays need not be
+ * the same format, but the elements must be the same size; and count must be
+ * evenly divisible by that size.
+ *
+ * \param dstArray  - Destination array
+ * \param dstOffset - Offset in bytes of destination array
+ * \param srcArray  - Source array
+ * \param srcOffset - Offset in bytes of source array
+ * \param ByteCount - Size of memory copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpyArrayToArray
+ */
+CUresult CUDAAPI cuMemcpyAtoA(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+
+/**
+ * \brief Copies memory for 2D arrays
+ *
+ * Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ * The ::CUDA_MEMCPY2D structure is defined as:
+ *
+ * \code
+   typedef struct CUDA_MEMCPY2D_st {
+      unsigned int srcXInBytes, srcY;
+      CUmemorytype srcMemoryType;
+          const void *srcHost;
+          CUdeviceptr srcDevice;
+          CUarray srcArray;
+          unsigned int srcPitch;
+
+      unsigned int dstXInBytes, dstY;
+      CUmemorytype dstMemoryType;
+          void *dstHost;
+          CUdeviceptr dstDevice;
+          CUarray dstArray;
+          unsigned int dstPitch;
+
+      unsigned int WidthInBytes;
+      unsigned int Height;
+   } CUDA_MEMCPY2D;
+ * \endcode
+ * where:
+ * - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ *   source and destination, respectively; ::CUmemorytype_enum is defined as:
+ *
+ * \code
+   typedef enum CUmemorytype_enum {
+      CU_MEMORYTYPE_HOST = 0x01,
+      CU_MEMORYTYPE_DEVICE = 0x02,
+      CU_MEMORYTYPE_ARRAY = 0x03,
+      CU_MEMORYTYPE_UNIFIED = 0x04
+   } CUmemorytype;
+ * \endcode
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::srcArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ * specify the (host) base address of the source data and the bytes per row to
+ * apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ * specify the (device) base address of the source data and the bytes per row
+ * to apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ * handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ * ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ * specify the (host) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::dstArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ * specify the (device) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ * handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ * ignored.
+ *
+ * - ::srcXInBytes and ::srcY specify the base address of the source data for
+ *   the copy.
+ *
+ * \par
+ * For host pointers, the starting address is
+ * \code
+  void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::dstXInBytes and ::dstY specify the base address of the destination data
+ *   for the copy.
+ *
+ * \par
+ * For host pointers, the base address is
+ * \code
+  void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ *   the 2D copy being performed.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ *
+ * \par
+ * ::cuMemcpy2D() returns an error if any pitch is greater than the maximum
+ * allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ * pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ * (device to device, CUDA array to device, CUDA array to CUDA array),
+ * ::cuMemcpy2D() may fail for pitches not computed by ::cuMemAllocPitch().
+ * ::cuMemcpy2DUnaligned() does not have this restriction, but may run
+ * significantly slower in the cases where ::cuMemcpy2D() would have returned
+ * an error code.
+ *
+ * \param pCopy - Parameters for the memory copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray,
+ * ::cudaMemcpy2DFromArray
+ */
+CUresult CUDAAPI cuMemcpy2D(const CUDA_MEMCPY2D *pCopy);
+
+/**
+ * \brief Copies memory for 2D arrays
+ *
+ * Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ * The ::CUDA_MEMCPY2D structure is defined as:
+ *
+ * \code
+   typedef struct CUDA_MEMCPY2D_st {
+      unsigned int srcXInBytes, srcY;
+      CUmemorytype srcMemoryType;
+      const void *srcHost;
+      CUdeviceptr srcDevice;
+      CUarray srcArray;
+      unsigned int srcPitch;
+      unsigned int dstXInBytes, dstY;
+      CUmemorytype dstMemoryType;
+      void *dstHost;
+      CUdeviceptr dstDevice;
+      CUarray dstArray;
+      unsigned int dstPitch;
+      unsigned int WidthInBytes;
+      unsigned int Height;
+   } CUDA_MEMCPY2D;
+ * \endcode
+ * where:
+ * - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ *   source and destination, respectively; ::CUmemorytype_enum is defined as:
+ *
+ * \code
+   typedef enum CUmemorytype_enum {
+      CU_MEMORYTYPE_HOST = 0x01,
+      CU_MEMORYTYPE_DEVICE = 0x02,
+      CU_MEMORYTYPE_ARRAY = 0x03,
+      CU_MEMORYTYPE_UNIFIED = 0x04
+   } CUmemorytype;
+ * \endcode
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::srcArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ * specify the (host) base address of the source data and the bytes per row to
+ * apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ * specify the (device) base address of the source data and the bytes per row
+ * to apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ * handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ * ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::dstArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ * specify the (host) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ * specify the (device) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ * handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ * ignored.
+ *
+ * - ::srcXInBytes and ::srcY specify the base address of the source data for
+ *   the copy.
+ *
+ * \par
+ * For host pointers, the starting address is
+ * \code
+  void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::dstXInBytes and ::dstY specify the base address of the destination data
+ *   for the copy.
+ *
+ * \par
+ * For host pointers, the base address is
+ * \code
+  void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ *   the 2D copy being performed.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ *
+ * \par
+ * ::cuMemcpy2D() returns an error if any pitch is greater than the maximum
+ * allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ * pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ * (device to device, CUDA array to device, CUDA array to CUDA array),
+ * ::cuMemcpy2D() may fail for pitches not computed by ::cuMemAllocPitch().
+ * ::cuMemcpy2DUnaligned() does not have this restriction, but may run
+ * significantly slower in the cases where ::cuMemcpy2D() would have returned
+ * an error code.
+ *
+ * \param pCopy - Parameters for the memory copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray,
+ * ::cudaMemcpy2DFromArray
+ */
+CUresult CUDAAPI cuMemcpy2DUnaligned(const CUDA_MEMCPY2D *pCopy);
+
+/**
+ * \brief Copies memory for 3D arrays
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p pCopy. The ::CUDA_MEMCPY3D structure is defined as:
+ *
+ * \code
+        typedef struct CUDA_MEMCPY3D_st {
+
+            unsigned int srcXInBytes, srcY, srcZ;
+            unsigned int srcLOD;
+            CUmemorytype srcMemoryType;
+                const void *srcHost;
+                CUdeviceptr srcDevice;
+                CUarray srcArray;
+                unsigned int srcPitch;  // ignored when src is array
+                unsigned int srcHeight; // ignored when src is array; may be 0 if Depth==1
+
+            unsigned int dstXInBytes, dstY, dstZ;
+            unsigned int dstLOD;
+            CUmemorytype dstMemoryType;
+                void *dstHost;
+                CUdeviceptr dstDevice;
+                CUarray dstArray;
+                unsigned int dstPitch;  // ignored when dst is array
+                unsigned int dstHeight; // ignored when dst is array; may be 0 if Depth==1
+
+            unsigned int WidthInBytes;
+            unsigned int Height;
+            unsigned int Depth;
+        } CUDA_MEMCPY3D;
+ * \endcode
+ * where:
+ * - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ *   source and destination, respectively; ::CUmemorytype_enum is defined as:
+ *
+ * \code
+   typedef enum CUmemorytype_enum {
+      CU_MEMORYTYPE_HOST = 0x01,
+      CU_MEMORYTYPE_DEVICE = 0x02,
+      CU_MEMORYTYPE_ARRAY = 0x03,
+      CU_MEMORYTYPE_UNIFIED = 0x04
+   } CUmemorytype;
+ * \endcode
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::srcArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost, ::srcPitch and
+ * ::srcHeight specify the (host) base address of the source data, the bytes
+ * per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ * ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice, ::srcPitch and
+ * ::srcHeight specify the (device) base address of the source data, the bytes
+ * per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ * ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ * handle of the source data. ::srcHost, ::srcDevice, ::srcPitch and
+ * ::srcHeight are ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::dstArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ * specify the (host) base address of the destination data, the bytes per row,
+ * and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ * specify the (device) base address of the destination data, the bytes per
+ * row, and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ * handle of the destination data. ::dstHost, ::dstDevice, ::dstPitch and
+ * ::dstHeight are ignored.
+ *
+ * - ::srcXInBytes, ::srcY and ::srcZ specify the base address of the source
+ *   data for the copy.
+ *
+ * \par
+ * For host pointers, the starting address is
+ * \code
+  void* Start = (void*)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - dstXInBytes, ::dstY and ::dstZ specify the base address of the
+ *   destination data for the copy.
+ *
+ * \par
+ * For host pointers, the base address is
+ * \code
+  void* dstStart = (void*)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::WidthInBytes, ::Height and ::Depth specify the width (in bytes), height
+ *   and depth of the 3D copy being performed.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ * - If specified, ::srcHeight must be greater than or equal to ::Height +
+ *   ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+ *
+ * \par
+ * ::cuMemcpy3D() returns an error if any pitch is greater than the maximum
+ * allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH).
+ *
+ * The ::srcLOD and ::dstLOD members of the ::CUDA_MEMCPY3D structure must be
+ * set to 0.
+ *
+ * \param pCopy - Parameters for the memory copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMemcpy3D
+ */
+CUresult CUDAAPI cuMemcpy3D(const CUDA_MEMCPY3D *pCopy);
+
+/**
+ * \brief Copies memory between contexts
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p pCopy.  See the definition of the ::CUDA_MEMCPY3D_PEER structure
+ * for documentation of its parameters.
+ *
+ * \param pCopy - Parameters for the memory copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_sync
+ *
+ * \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ * ::cuMemcpy3DPeerAsync,
+ * ::cudaMemcpy3DPeer
+ */
+CUresult CUDAAPI cuMemcpy3DPeer(const CUDA_MEMCPY3D_PEER *pCopy);
+
+/**
+ * \brief Copies memory asynchronously
+ *
+ * Copies data between two pointers.
+ * \p dst and \p src are base pointers of the destination and source, respectively.
+ * \p ByteCount specifies the number of bytes to copy.
+ * Note that this function infers the type of the transfer (host to host, host to
+ *   device, device to device, or device to host) from the pointer values.  This
+ *   function is only allowed in contexts which support unified addressing.
+ *
+ * \param dst       - Destination unified virtual address space pointer
+ * \param src       - Source unified virtual address space pointer
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyAsync,
+ * ::cudaMemcpyToSymbolAsync,
+ * ::cudaMemcpyFromSymbolAsync
+ */
+CUresult CUDAAPI cuMemcpyAsync(CUdeviceptr dst, CUdeviceptr src, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies device memory between two contexts asynchronously.
+ *
+ * Copies from device memory in one context to device memory in another
+ * context. \p dstDevice is the base device pointer of the destination memory
+ * and \p dstContext is the destination context.  \p srcDevice is the base
+ * device pointer of the source memory and \p srcContext is the source pointer.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstDevice  - Destination device pointer
+ * \param dstContext - Destination context
+ * \param srcDevice  - Source device pointer
+ * \param srcContext - Source context
+ * \param ByteCount  - Size of memory copy in bytes
+ * \param hStream    - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpy3DPeer, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpy3DPeerAsync,
+ * ::cudaMemcpyPeerAsync
+ */
+CUresult CUDAAPI cuMemcpyPeerAsync(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory from Host to Device
+ *
+ * Copies from host memory to device memory. \p dstDevice and \p srcHost are
+ * the base addresses of the destination and source, respectively. \p ByteCount
+ * specifies the number of bytes to copy.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param srcHost   - Source host pointer
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyAsync,
+ * ::cudaMemcpyToSymbolAsync
+ */
+CUresult CUDAAPI cuMemcpyHtoDAsync(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory from Device to Host
+ *
+ * Copies from device to host memory. \p dstHost and \p srcDevice specify the
+ * base pointers of the destination and source, respectively. \p ByteCount
+ * specifies the number of bytes to copy.
+ *
+ * \param dstHost   - Destination host pointer
+ * \param srcDevice - Source device pointer
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyAsync,
+ * ::cudaMemcpyFromSymbolAsync
+ */
+CUresult CUDAAPI cuMemcpyDtoHAsync(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory from Device to Device
+ *
+ * Copies from device memory to device memory. \p dstDevice and \p srcDevice
+ * are the base pointers of the destination and source, respectively.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param srcDevice - Source device pointer
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyAsync,
+ * ::cudaMemcpyToSymbolAsync,
+ * ::cudaMemcpyFromSymbolAsync
+ */
+CUresult CUDAAPI cuMemcpyDtoDAsync(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory from Host to Array
+ *
+ * Copies from host memory to a 1D CUDA array. \p dstArray and \p dstOffset
+ * specify the CUDA array handle and starting offset in bytes of the
+ * destination data. \p srcHost specifies the base address of the source.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstArray  - Destination array
+ * \param dstOffset - Offset in bytes of destination array
+ * \param srcHost   - Source host pointer
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyToArrayAsync
+ */
+CUresult CUDAAPI cuMemcpyHtoAAsync(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory from Array to Host
+ *
+ * Copies from one 1D CUDA array to host memory. \p dstHost specifies the base
+ * pointer of the destination. \p srcArray and \p srcOffset specify the CUDA
+ * array handle and starting offset in bytes of the source data.
+ * \p ByteCount specifies the number of bytes to copy.
+ *
+ * \param dstHost   - Destination pointer
+ * \param srcArray  - Source array
+ * \param srcOffset - Offset in bytes of source array
+ * \param ByteCount - Size of memory copy in bytes
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_memcpy
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpyFromArrayAsync
+ */
+CUresult CUDAAPI cuMemcpyAtoHAsync(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount, CUstream hStream);
+
+/**
+ * \brief Copies memory for 2D arrays
+ *
+ * Perform a 2D memory copy according to the parameters specified in \p pCopy.
+ * The ::CUDA_MEMCPY2D structure is defined as:
+ *
+ * \code
+   typedef struct CUDA_MEMCPY2D_st {
+      unsigned int srcXInBytes, srcY;
+      CUmemorytype srcMemoryType;
+      const void *srcHost;
+      CUdeviceptr srcDevice;
+      CUarray srcArray;
+      unsigned int srcPitch;
+      unsigned int dstXInBytes, dstY;
+      CUmemorytype dstMemoryType;
+      void *dstHost;
+      CUdeviceptr dstDevice;
+      CUarray dstArray;
+      unsigned int dstPitch;
+      unsigned int WidthInBytes;
+      unsigned int Height;
+   } CUDA_MEMCPY2D;
+ * \endcode
+ * where:
+ * - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ *   source and destination, respectively; ::CUmemorytype_enum is defined as:
+ *
+ * \code
+   typedef enum CUmemorytype_enum {
+      CU_MEMORYTYPE_HOST = 0x01,
+      CU_MEMORYTYPE_DEVICE = 0x02,
+      CU_MEMORYTYPE_ARRAY = 0x03,
+      CU_MEMORYTYPE_UNIFIED = 0x04
+   } CUmemorytype;
+ * \endcode
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost and ::srcPitch
+ * specify the (host) base address of the source data and the bytes per row to
+ * apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::srcArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice and ::srcPitch
+ * specify the (device) base address of the source data and the bytes per row
+ * to apply. ::srcArray is ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ * handle of the source data. ::srcHost, ::srcDevice and ::srcPitch are
+ * ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::dstArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ * specify the (host) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ * specify the (device) base address of the destination data and the bytes per
+ * row to apply. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ * handle of the destination data. ::dstHost, ::dstDevice and ::dstPitch are
+ * ignored.
+ *
+ * - ::srcXInBytes and ::srcY specify the base address of the source data for
+ *   the copy.
+ *
+ * \par
+ * For host pointers, the starting address is
+ * \code
+  void* Start = (void*)((char*)srcHost+srcY*srcPitch + srcXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr Start = srcDevice+srcY*srcPitch+srcXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::dstXInBytes and ::dstY specify the base address of the destination data
+ *   for the copy.
+ *
+ * \par
+ * For host pointers, the base address is
+ * \code
+  void* dstStart = (void*)((char*)dstHost+dstY*dstPitch + dstXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr dstStart = dstDevice+dstY*dstPitch+dstXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::WidthInBytes and ::Height specify the width (in bytes) and height of
+ *   the 2D copy being performed.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ * - If specified, ::srcHeight must be greater than or equal to ::Height +
+ *   ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+ *
+ * \par
+ * ::cuMemcpy2DAsync() returns an error if any pitch is greater than the maximum
+ * allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH). ::cuMemAllocPitch() passes back
+ * pitches that always work with ::cuMemcpy2D(). On intra-device memory copies
+ * (device to device, CUDA array to device, CUDA array to CUDA array),
+ * ::cuMemcpy2DAsync() may fail for pitches not computed by ::cuMemAllocPitch().
+ *
+ * \param pCopy   - Parameters for the memory copy
+ * \param hStream - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync
+ */
+CUresult CUDAAPI cuMemcpy2DAsync(const CUDA_MEMCPY2D *pCopy, CUstream hStream);
+
+/**
+ * \brief Copies memory for 3D arrays
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p pCopy. The ::CUDA_MEMCPY3D structure is defined as:
+ *
+ * \code
+        typedef struct CUDA_MEMCPY3D_st {
+
+            unsigned int srcXInBytes, srcY, srcZ;
+            unsigned int srcLOD;
+            CUmemorytype srcMemoryType;
+                const void *srcHost;
+                CUdeviceptr srcDevice;
+                CUarray srcArray;
+                unsigned int srcPitch;  // ignored when src is array
+                unsigned int srcHeight; // ignored when src is array; may be 0 if Depth==1
+
+            unsigned int dstXInBytes, dstY, dstZ;
+            unsigned int dstLOD;
+            CUmemorytype dstMemoryType;
+                void *dstHost;
+                CUdeviceptr dstDevice;
+                CUarray dstArray;
+                unsigned int dstPitch;  // ignored when dst is array
+                unsigned int dstHeight; // ignored when dst is array; may be 0 if Depth==1
+
+            unsigned int WidthInBytes;
+            unsigned int Height;
+            unsigned int Depth;
+        } CUDA_MEMCPY3D;
+ * \endcode
+ * where:
+ * - ::srcMemoryType and ::dstMemoryType specify the type of memory of the
+ *   source and destination, respectively; ::CUmemorytype_enum is defined as:
+ *
+ * \code
+   typedef enum CUmemorytype_enum {
+      CU_MEMORYTYPE_HOST = 0x01,
+      CU_MEMORYTYPE_DEVICE = 0x02,
+      CU_MEMORYTYPE_ARRAY = 0x03,
+      CU_MEMORYTYPE_UNIFIED = 0x04
+   } CUmemorytype;
+ * \endcode
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::srcDevice and ::srcPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::srcArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_HOST, ::srcHost, ::srcPitch and
+ * ::srcHeight specify the (host) base address of the source data, the bytes
+ * per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ * ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_DEVICE, ::srcDevice, ::srcPitch and
+ * ::srcHeight specify the (device) base address of the source data, the bytes
+ * per row, and the height of each 2D slice of the 3D array. ::srcArray is
+ * ignored.
+ *
+ * \par
+ * If ::srcMemoryType is ::CU_MEMORYTYPE_ARRAY, ::srcArray specifies the
+ * handle of the source data. ::srcHost, ::srcDevice, ::srcPitch and
+ * ::srcHeight are ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_UNIFIED, ::dstDevice and ::dstPitch
+ *   specify the (unified virtual address space) base address of the source data
+ *   and the bytes per row to apply.  ::dstArray is ignored.
+ * This value may be used only if unified addressing is supported in the calling
+ *   context.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_HOST, ::dstHost and ::dstPitch
+ * specify the (host) base address of the destination data, the bytes per row,
+ * and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_DEVICE, ::dstDevice and ::dstPitch
+ * specify the (device) base address of the destination data, the bytes per
+ * row, and the height of each 2D slice of the 3D array. ::dstArray is ignored.
+ *
+ * \par
+ * If ::dstMemoryType is ::CU_MEMORYTYPE_ARRAY, ::dstArray specifies the
+ * handle of the destination data. ::dstHost, ::dstDevice, ::dstPitch and
+ * ::dstHeight are ignored.
+ *
+ * - ::srcXInBytes, ::srcY and ::srcZ specify the base address of the source
+ *   data for the copy.
+ *
+ * \par
+ * For host pointers, the starting address is
+ * \code
+  void* Start = (void*)((char*)srcHost+(srcZ*srcHeight+srcY)*srcPitch + srcXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr Start = srcDevice+(srcZ*srcHeight+srcY)*srcPitch+srcXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::srcXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - dstXInBytes, ::dstY and ::dstZ specify the base address of the
+ *   destination data for the copy.
+ *
+ * \par
+ * For host pointers, the base address is
+ * \code
+  void* dstStart = (void*)((char*)dstHost+(dstZ*dstHeight+dstY)*dstPitch + dstXInBytes);
+ * \endcode
+ *
+ * \par
+ * For device pointers, the starting address is
+ * \code
+  CUdeviceptr dstStart = dstDevice+(dstZ*dstHeight+dstY)*dstPitch+dstXInBytes;
+ * \endcode
+ *
+ * \par
+ * For CUDA arrays, ::dstXInBytes must be evenly divisible by the array
+ * element size.
+ *
+ * - ::WidthInBytes, ::Height and ::Depth specify the width (in bytes), height
+ *   and depth of the 3D copy being performed.
+ * - If specified, ::srcPitch must be greater than or equal to ::WidthInBytes +
+ *   ::srcXInBytes, and ::dstPitch must be greater than or equal to
+ *   ::WidthInBytes + dstXInBytes.
+ * - If specified, ::srcHeight must be greater than or equal to ::Height +
+ *   ::srcY, and ::dstHeight must be greater than or equal to ::Height + ::dstY.
+ *
+ * \par
+ * ::cuMemcpy3DAsync() returns an error if any pitch is greater than the maximum
+ * allowed (::CU_DEVICE_ATTRIBUTE_MAX_PITCH).
+ *
+ * The ::srcLOD and ::dstLOD members of the ::CUDA_MEMCPY3D structure must be
+ * set to 0.
+ *
+ * \param pCopy - Parameters for the memory copy
+ * \param hStream - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemcpy3DAsync
+ */
+CUresult CUDAAPI cuMemcpy3DAsync(const CUDA_MEMCPY3D *pCopy, CUstream hStream);
+
+/**
+ * \brief Copies memory between contexts asynchronously.
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p pCopy.  See the definition of the ::CUDA_MEMCPY3D_PEER structure
+ * for documentation of its parameters.
+ *
+ * \param pCopy - Parameters for the memory copy
+ * \param hStream - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuMemcpyDtoD, ::cuMemcpyPeer, ::cuMemcpyDtoDAsync, ::cuMemcpyPeerAsync,
+ * ::cuMemcpy3DPeerAsync,
+ * ::cudaMemcpy3DPeerAsync
+ */
+CUresult CUDAAPI cuMemcpy3DPeerAsync(const CUDA_MEMCPY3D_PEER *pCopy, CUstream hStream);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the memory range of \p N 8-bit values to the specified value
+ * \p uc.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param uc        - Value to set
+ * \param N         - Number of elements
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset
+ */
+CUresult CUDAAPI cuMemsetD8(CUdeviceptr dstDevice, unsigned char uc, size_t N);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the memory range of \p N 16-bit values to the specified value
+ * \p us. The \p dstDevice pointer must be two byte aligned.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param us        - Value to set
+ * \param N         - Number of elements
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset
+ */
+CUresult CUDAAPI cuMemsetD16(CUdeviceptr dstDevice, unsigned short us, size_t N);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the memory range of \p N 32-bit values to the specified value
+ * \p ui. The \p dstDevice pointer must be four byte aligned.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param ui        - Value to set
+ * \param N         - Number of elements
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32Async,
+ * ::cudaMemset
+ */
+CUresult CUDAAPI cuMemsetD32(CUdeviceptr dstDevice, unsigned int ui, size_t N);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the 2D memory range of \p Width 8-bit values to the specified value
+ * \p uc. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param uc        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2D
+ */
+CUresult CUDAAPI cuMemsetD2D8(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the 2D memory range of \p Width 16-bit values to the specified value
+ * \p us. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. The \p dstDevice pointer
+ * and \p dstPitch offset must be two byte aligned. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param us        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2D
+ */
+CUresult CUDAAPI cuMemsetD2D16(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height);
+
+/**
+ * \brief Initializes device memory
+ *
+ * Sets the 2D memory range of \p Width 32-bit values to the specified value
+ * \p ui. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. The \p dstDevice pointer
+ * and \p dstPitch offset must be four byte aligned. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param ui        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2D
+ */
+CUresult CUDAAPI cuMemsetD2D32(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the memory range of \p N 8-bit values to the specified value
+ * \p uc.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param uc        - Value to set
+ * \param N         - Number of elements
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemsetAsync
+ */
+CUresult CUDAAPI cuMemsetD8Async(CUdeviceptr dstDevice, unsigned char uc, size_t N, CUstream hStream);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the memory range of \p N 16-bit values to the specified value
+ * \p us. The \p dstDevice pointer must be two byte aligned.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param us        - Value to set
+ * \param N         - Number of elements
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemsetAsync
+ */
+CUresult CUDAAPI cuMemsetD16Async(CUdeviceptr dstDevice, unsigned short us, size_t N, CUstream hStream);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the memory range of \p N 32-bit values to the specified value
+ * \p ui. The \p dstDevice pointer must be four byte aligned.
+ *
+ * \param dstDevice - Destination device pointer
+ * \param ui        - Value to set
+ * \param N         - Number of elements
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async, ::cuMemsetD32,
+ * ::cudaMemsetAsync
+ */
+CUresult CUDAAPI cuMemsetD32Async(CUdeviceptr dstDevice, unsigned int ui, size_t N, CUstream hStream);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the 2D memory range of \p Width 8-bit values to the specified value
+ * \p uc. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param uc        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2DAsync
+ */
+CUresult CUDAAPI cuMemsetD2D8Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height, CUstream hStream);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the 2D memory range of \p Width 16-bit values to the specified value
+ * \p us. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. The \p dstDevice pointer
+ * and \p dstPitch offset must be two byte aligned. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param us        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D32, ::cuMemsetD2D32Async,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2DAsync
+ */
+CUresult CUDAAPI cuMemsetD2D16Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height, CUstream hStream);
+
+/**
+ * \brief Sets device memory
+ *
+ * Sets the 2D memory range of \p Width 32-bit values to the specified value
+ * \p ui. \p Height specifies the number of rows to set, and \p dstPitch
+ * specifies the number of bytes between each row. The \p dstDevice pointer
+ * and \p dstPitch offset must be four byte aligned. This function performs
+ * fastest when the pitch is one that has been passed back by
+ * ::cuMemAllocPitch().
+ *
+ * \param dstDevice - Destination device pointer
+ * \param dstPitch  - Pitch of destination device pointer(Unused if \p Height is 1)
+ * \param ui        - Value to set
+ * \param Width     - Width of row
+ * \param Height    - Number of rows
+ * \param hStream   - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16, ::cuMemsetD2D16Async, ::cuMemsetD2D32,
+ * ::cuMemsetD8, ::cuMemsetD8Async, ::cuMemsetD16, ::cuMemsetD16Async,
+ * ::cuMemsetD32, ::cuMemsetD32Async,
+ * ::cudaMemset2DAsync
+ */
+CUresult CUDAAPI cuMemsetD2D32Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height, CUstream hStream);
+
+/**
+ * \brief Creates a 1D or 2D CUDA array
+ *
+ * Creates a CUDA array according to the ::CUDA_ARRAY_DESCRIPTOR structure
+ * \p pAllocateArray and returns a handle to the new CUDA array in \p *pHandle.
+ * The ::CUDA_ARRAY_DESCRIPTOR is defined as:
+ *
+ * \code
+    typedef struct {
+        unsigned int Width;
+        unsigned int Height;
+        CUarray_format Format;
+        unsigned int NumChannels;
+    } CUDA_ARRAY_DESCRIPTOR;
+ * \endcode
+ * where:
+ *
+ * - \p Width, and \p Height are the width, and height of the CUDA array (in
+ * elements); the CUDA array is one-dimensional if height is 0, two-dimensional
+ * otherwise;
+ * - ::Format specifies the format of the elements; ::CUarray_format is
+ * defined as:
+ * \code
+    typedef enum CUarray_format_enum {
+        CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+        CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+        CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+        CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+        CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+        CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+        CU_AD_FORMAT_HALF = 0x10,
+        CU_AD_FORMAT_FLOAT = 0x20
+    } CUarray_format;
+ *  \endcode
+ * - \p NumChannels specifies the number of packed components per CUDA array
+ * element; it may be 1, 2, or 4;
+ *
+ * Here are examples of CUDA array descriptions:
+ *
+ * Description for a CUDA array of 2048 floats:
+ * \code
+    CUDA_ARRAY_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_FLOAT;
+    desc.NumChannels = 1;
+    desc.Width = 2048;
+    desc.Height = 1;
+ * \endcode
+ *
+ * Description for a 64 x 64 CUDA array of floats:
+ * \code
+    CUDA_ARRAY_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_FLOAT;
+    desc.NumChannels = 1;
+    desc.Width = 64;
+    desc.Height = 64;
+ * \endcode
+ *
+ * Description for a \p width x \p height CUDA array of 64-bit, 4x16-bit
+ * float16's:
+ * \code
+    CUDA_ARRAY_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_HALF;
+    desc.NumChannels = 4;
+    desc.Width = width;
+    desc.Height = height;
+ * \endcode
+ *
+ * Description for a \p width x \p height CUDA array of 16-bit elements, each
+ * of which is two 8-bit unsigned chars:
+ * \code
+    CUDA_ARRAY_DESCRIPTOR arrayDesc;
+    desc.Format = CU_AD_FORMAT_UNSIGNED_INT8;
+    desc.NumChannels = 2;
+    desc.Width = width;
+    desc.Height = height;
+ * \endcode
+ *
+ * \param pHandle        - Returned array
+ * \param pAllocateArray - Array descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMallocArray
+ */
+CUresult CUDAAPI cuArrayCreate(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR *pAllocateArray);
+
+/**
+ * \brief Get a 1D or 2D CUDA array descriptor
+ *
+ * Returns in \p *pArrayDescriptor a descriptor containing information on the
+ * format and dimensions of the CUDA array \p hArray. It is useful for
+ * subroutines that have been passed a CUDA array, but need to know the CUDA
+ * array parameters for validation or other purposes.
+ *
+ * \param pArrayDescriptor - Returned array descriptor
+ * \param hArray           - Array to get descriptor of
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaArrayGetInfo
+ */
+CUresult CUDAAPI cuArrayGetDescriptor(CUDA_ARRAY_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
+
+/**
+ * \brief Returns the layout properties of a sparse CUDA array
+ *
+ * Returns the layout properties of a sparse CUDA array in \p sparseProperties
+ * If the CUDA array is not allocated with flag ::CUDA_ARRAY3D_SPARSE 
+ * ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * If the returned value in ::CUDA_ARRAY_SPARSE_PROPERTIES::flags contains ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL,
+ * then ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize represents the total size of the array. Otherwise, it will be zero.
+ * Also, the returned value in ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailFirstLevel is always zero.
+ * Note that the \p array must have been allocated using ::cuArrayCreate or ::cuArray3DCreate. For CUDA arrays obtained
+ * using ::cuMipmappedArrayGetLevel, ::CUDA_ERROR_INVALID_VALUE will be returned. Instead, ::cuMipmappedArrayGetSparseProperties 
+ * must be used to obtain the sparse properties of the entire CUDA mipmapped array to which \p array belongs to.
+ *
+ * \return
+ * ::CUDA_SUCCESS
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \param[out] sparseProperties - Pointer to ::CUDA_ARRAY_SPARSE_PROPERTIES
+ * \param[in] array - CUDA array to get the sparse properties of
+ * \sa ::cuMipmappedArrayGetSparseProperties, ::cuMemMapArrayAsync
+ */
+CUresult CUDAAPI cuArrayGetSparseProperties(CUDA_ARRAY_SPARSE_PROPERTIES *sparseProperties, CUarray array);
+
+/**
+ * \brief Returns the layout properties of a sparse CUDA mipmapped array
+ *
+ * Returns the sparse array layout properties in \p sparseProperties
+ * If the CUDA mipmapped array is not allocated with flag ::CUDA_ARRAY3D_SPARSE 
+ * ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * For non-layered CUDA mipmapped arrays, ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize returns the
+ * size of the mip tail region. The mip tail region includes all mip levels whose width, height or depth
+ * is less than that of the tile.
+ * For layered CUDA mipmapped arrays, if ::CUDA_ARRAY_SPARSE_PROPERTIES::flags contains ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL,
+ * then ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize specifies the size of the mip tail of all layers combined. 
+ * Otherwise, ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize specifies mip tail size per layer.
+ * The returned value of ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailFirstLevel is valid only if ::CUDA_ARRAY_SPARSE_PROPERTIES::miptailSize is non-zero.
+ *
+ * \return
+ * ::CUDA_SUCCESS
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \param[out] sparseProperties - Pointer to ::CUDA_ARRAY_SPARSE_PROPERTIES
+ * \param[in] mipmap - CUDA mipmapped array to get the sparse properties of
+ * \sa ::cuArrayGetSparseProperties, ::cuMemMapArrayAsync
+ */
+CUresult CUDAAPI cuMipmappedArrayGetSparseProperties(CUDA_ARRAY_SPARSE_PROPERTIES *sparseProperties, CUmipmappedArray mipmap);
+
+/**
+ * \brief Returns the memory requirements of a CUDA array
+ *
+ * Returns the memory requirements of a CUDA array in \p memoryRequirements
+ * If the CUDA array is not allocated with flag ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ * ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::size 
+ * represents the total size of the CUDA array.
+ * The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::alignment 
+ * represents the alignment necessary for mapping the CUDA array.
+ *
+ * \return
+ * ::CUDA_SUCCESS
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \param[out] memoryRequirements - Pointer to ::CUDA_ARRAY_MEMORY_REQUIREMENTS
+ * \param[in] array - CUDA array to get the memory requirements of
+ * \param[in] device - Device to get the memory requirements for
+ * \sa ::cuMipmappedArrayGetMemoryRequirements, ::cuMemMapArrayAsync
+ */
+CUresult CUDAAPI cuArrayGetMemoryRequirements(CUDA_ARRAY_MEMORY_REQUIREMENTS *memoryRequirements, CUarray array, CUdevice device);
+ 
+/**
+ * \brief Returns the memory requirements of a CUDA mipmapped array
+ *
+ * Returns the memory requirements of a CUDA mipmapped array in \p memoryRequirements
+ * If the CUDA mipmapped array is not allocated with flag ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ * ::CUDA_ERROR_INVALID_VALUE will be returned.
+ *
+ * The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::size 
+ * represents the total size of the CUDA mipmapped array.
+ * The returned value in ::CUDA_ARRAY_MEMORY_REQUIREMENTS::alignment 
+ * represents the alignment necessary for mapping the CUDA mipmapped  
+ * array.
+ *
+ * \return
+ * ::CUDA_SUCCESS
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \param[out] memoryRequirements - Pointer to ::CUDA_ARRAY_MEMORY_REQUIREMENTS
+ * \param[in] mipmap - CUDA mipmapped array to get the memory requirements of
+ * \param[in] device - Device to get the memory requirements for
+ * \sa ::cuArrayGetMemoryRequirements, ::cuMemMapArrayAsync
+ */
+CUresult CUDAAPI cuMipmappedArrayGetMemoryRequirements(CUDA_ARRAY_MEMORY_REQUIREMENTS *memoryRequirements, CUmipmappedArray mipmap, CUdevice device);
+
+/**
+ * \brief Gets a CUDA array plane from a CUDA array
+ *
+ * Returns in \p pPlaneArray a CUDA array that represents a single format plane
+ * of the CUDA array \p hArray.
+ *
+ * If \p planeIdx is greater than the maximum number of planes in this array or if the array does
+ * not have a multi-planar format e.g: ::CU_AD_FORMAT_NV12, then ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * Note that if the \p hArray has format ::CU_AD_FORMAT_NV12, then passing in 0 for \p planeIdx returns
+ * a CUDA array of the same size as \p hArray but with one channel and ::CU_AD_FORMAT_UNSIGNED_INT8 as its format.
+ * If 1 is passed for \p planeIdx, then the returned CUDA array has half the height and width
+ * of \p hArray with two channels and ::CU_AD_FORMAT_UNSIGNED_INT8 as its format.
+ *
+ * \param pPlaneArray   - Returned CUDA array referenced by the \p planeIdx
+ * \param hArray        - Multiplanar CUDA array
+ * \param planeIdx      - Plane index
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuArrayCreate,
+ * ::cudaGetArrayPlane
+ */
+CUresult CUDAAPI cuArrayGetPlane(CUarray *pPlaneArray, CUarray hArray, unsigned int planeIdx);
+
+/**
+ * \brief Destroys a CUDA array
+ *
+ * Destroys the CUDA array \p hArray.
+ *
+ * \param hArray - Array to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ARRAY_IS_MAPPED,
+ * ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaFreeArray
+ */
+CUresult CUDAAPI cuArrayDestroy(CUarray hArray);
+
+/**
+ * \brief Creates a 3D CUDA array
+ *
+ * Creates a CUDA array according to the ::CUDA_ARRAY3D_DESCRIPTOR structure
+ * \p pAllocateArray and returns a handle to the new CUDA array in \p *pHandle.
+ * The ::CUDA_ARRAY3D_DESCRIPTOR is defined as:
+ *
+ * \code
+    typedef struct {
+        unsigned int Width;
+        unsigned int Height;
+        unsigned int Depth;
+        CUarray_format Format;
+        unsigned int NumChannels;
+        unsigned int Flags;
+    } CUDA_ARRAY3D_DESCRIPTOR;
+ * \endcode
+ * where:
+ *
+ * - \p Width, \p Height, and \p Depth are the width, height, and depth of the
+ * CUDA array (in elements); the following types of CUDA arrays can be allocated:
+ *     - A 1D array is allocated if \p Height and \p Depth extents are both zero.
+ *     - A 2D array is allocated if only \p Depth extent is zero.
+ *     - A 3D array is allocated if all three extents are non-zero.
+ *     - A 1D layered CUDA array is allocated if only \p Height is zero and the
+ *       ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 1D array. The number
+ *       of layers is determined by the depth extent.
+ *     - A 2D layered CUDA array is allocated if all three extents are non-zero and
+ *       the ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 2D array. The number
+ *       of layers is determined by the depth extent.
+ *     - A cubemap CUDA array is allocated if all three extents are non-zero and the
+ *       ::CUDA_ARRAY3D_CUBEMAP flag is set. \p Width must be equal to \p Height, and
+ *       \p Depth must be six. A cubemap is a special type of 2D layered CUDA array,
+ *       where the six layers represent the six faces of a cube. The order of the six
+ *       layers in memory is the same as that listed in ::CUarray_cubemap_face.
+ *     - A cubemap layered CUDA array is allocated if all three extents are non-zero,
+ *       and both, ::CUDA_ARRAY3D_CUBEMAP and ::CUDA_ARRAY3D_LAYERED flags are set.
+ *       \p Width must be equal to \p Height, and \p Depth must be a multiple of six.
+ *       A cubemap layered CUDA array is a special type of 2D layered CUDA array that
+ *       consists of a collection of cubemaps. The first six layers represent the first
+ *       cubemap, the next six layers form the second cubemap, and so on.
+ *
+ * - ::Format specifies the format of the elements; ::CUarray_format is
+ * defined as:
+ * \code
+    typedef enum CUarray_format_enum {
+        CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+        CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+        CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+        CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+        CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+        CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+        CU_AD_FORMAT_HALF = 0x10,
+        CU_AD_FORMAT_FLOAT = 0x20
+    } CUarray_format;
+ *  \endcode
+ *
+ * - \p NumChannels specifies the number of packed components per CUDA array
+ * element; it may be 1, 2, or 4;
+ *
+ * - ::Flags may be set to
+ *   - ::CUDA_ARRAY3D_LAYERED to enable creation of layered CUDA arrays. If this flag is set,
+ *     \p Depth specifies the number of layers, not the depth of a 3D array.
+ *   - ::CUDA_ARRAY3D_SURFACE_LDST to enable surface references to be bound to the CUDA array.
+ *     If this flag is not set, ::cuSurfRefSetArray will fail when attempting to bind the CUDA array
+ *     to a surface reference.
+ *   - ::CUDA_ARRAY3D_CUBEMAP to enable creation of cubemaps. If this flag is set, \p Width must be
+ *     equal to \p Height, and \p Depth must be six. If the ::CUDA_ARRAY3D_LAYERED flag is also set,
+ *     then \p Depth must be a multiple of six.
+ *   - ::CUDA_ARRAY3D_TEXTURE_GATHER to indicate that the CUDA array will be used for texture gather.
+ *     Texture gather can only be performed on 2D CUDA arrays.
+ *
+ * \p Width, \p Height and \p Depth must meet certain size requirements as listed in the following table.
+ * All values are specified in elements. Note that for brevity's sake, the full name of the device attribute
+ * is not specified. For ex., TEXTURE1D_WIDTH refers to the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_WIDTH.
+ *
+ * Note that 2D CUDA arrays have different size requirements if the ::CUDA_ARRAY3D_TEXTURE_GATHER flag
+ * is set. \p Width and \p Height must not be greater than ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_WIDTH
+ * and ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_GATHER_HEIGHT respectively, in that case.
+ *
+ * <table>
+ * <tr><td><b>CUDA array type</b></td>
+ * <td><b>Valid extents that must always be met<br>{(width range in elements), (height range),
+ * (depth range)}</b></td>
+ * <td><b>Valid extents with CUDA_ARRAY3D_SURFACE_LDST set<br>
+ * {(width range in elements), (height range), (depth range)}</b></td></tr>
+ * <tr><td>1D</td>
+ * <td><small>{ (1,TEXTURE1D_WIDTH), 0, 0 }</small></td>
+ * <td><small>{ (1,SURFACE1D_WIDTH), 0, 0 }</small></td></tr>
+ * <tr><td>2D</td>
+ * <td><small>{ (1,TEXTURE2D_WIDTH), (1,TEXTURE2D_HEIGHT), 0 }</small></td>
+ * <td><small>{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }</small></td></tr>
+ * <tr><td>3D</td>
+ * <td><small>{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) }
+ * <br>OR<br>{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE),
+ * (1,TEXTURE3D_DEPTH_ALTERNATE) }</small></td>
+ * <td><small>{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT),
+ * (1,SURFACE3D_DEPTH) }</small></td></tr>
+ * <tr><td>1D Layered</td>
+ * <td><small>{ (1,TEXTURE1D_LAYERED_WIDTH), 0,
+ * (1,TEXTURE1D_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACE1D_LAYERED_WIDTH), 0,
+ * (1,SURFACE1D_LAYERED_LAYERS) }</small></td></tr>
+ * <tr><td>2D Layered</td>
+ * <td><small>{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT),
+ * (1,TEXTURE2D_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT),
+ * (1,SURFACE2D_LAYERED_LAYERS) }</small></td></tr>
+ * <tr><td>Cubemap</td>
+ * <td><small>{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }</small></td>
+ * <td><small>{ (1,SURFACECUBEMAP_WIDTH),
+ * (1,SURFACECUBEMAP_WIDTH), 6 }</small></td></tr>
+ * <tr><td>Cubemap Layered</td>
+ * <td><small>{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH),
+ * (1,TEXTURECUBEMAP_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH),
+ * (1,SURFACECUBEMAP_LAYERED_LAYERS) }</small></td></tr>
+ * </table>
+ *
+ * Here are examples of CUDA array descriptions:
+ *
+ * Description for a CUDA array of 2048 floats:
+ * \code
+    CUDA_ARRAY3D_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_FLOAT;
+    desc.NumChannels = 1;
+    desc.Width = 2048;
+    desc.Height = 0;
+    desc.Depth = 0;
+ * \endcode
+ *
+ * Description for a 64 x 64 CUDA array of floats:
+ * \code
+    CUDA_ARRAY3D_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_FLOAT;
+    desc.NumChannels = 1;
+    desc.Width = 64;
+    desc.Height = 64;
+    desc.Depth = 0;
+ * \endcode
+ *
+ * Description for a \p width x \p height x \p depth CUDA array of 64-bit,
+ * 4x16-bit float16's:
+ * \code
+    CUDA_ARRAY3D_DESCRIPTOR desc;
+    desc.Format = CU_AD_FORMAT_HALF;
+    desc.NumChannels = 4;
+    desc.Width = width;
+    desc.Height = height;
+    desc.Depth = depth;
+ * \endcode
+ *
+ * \param pHandle        - Returned array
+ * \param pAllocateArray - 3D array descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuArray3DGetDescriptor, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaMalloc3DArray
+ */
+CUresult CUDAAPI cuArray3DCreate(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR *pAllocateArray);
+
+/**
+ * \brief Get a 3D CUDA array descriptor
+ *
+ * Returns in \p *pArrayDescriptor a descriptor containing information on the
+ * format and dimensions of the CUDA array \p hArray. It is useful for
+ * subroutines that have been passed a CUDA array, but need to know the CUDA
+ * array parameters for validation or other purposes.
+ *
+ * This function may be called on 1D and 2D arrays, in which case the \p Height
+ * and/or \p Depth members of the descriptor struct will be set to 0.
+ *
+ * \param pArrayDescriptor - Returned 3D array descriptor
+ * \param hArray           - 3D array to get descriptor of
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ * \notefnerr
+ *
+ * \sa ::cuArray3DCreate, ::cuArrayCreate,
+ * ::cuArrayDestroy, ::cuArrayGetDescriptor, ::cuMemAlloc, ::cuMemAllocHost,
+ * ::cuMemAllocPitch, ::cuMemcpy2D, ::cuMemcpy2DAsync, ::cuMemcpy2DUnaligned,
+ * ::cuMemcpy3D, ::cuMemcpy3DAsync, ::cuMemcpyAtoA, ::cuMemcpyAtoD,
+ * ::cuMemcpyAtoH, ::cuMemcpyAtoHAsync, ::cuMemcpyDtoA, ::cuMemcpyDtoD, ::cuMemcpyDtoDAsync,
+ * ::cuMemcpyDtoH, ::cuMemcpyDtoHAsync, ::cuMemcpyHtoA, ::cuMemcpyHtoAAsync,
+ * ::cuMemcpyHtoD, ::cuMemcpyHtoDAsync, ::cuMemFree, ::cuMemFreeHost,
+ * ::cuMemGetAddressRange, ::cuMemGetInfo, ::cuMemHostAlloc,
+ * ::cuMemHostGetDevicePointer, ::cuMemsetD2D8, ::cuMemsetD2D16,
+ * ::cuMemsetD2D32, ::cuMemsetD8, ::cuMemsetD16, ::cuMemsetD32,
+ * ::cudaArrayGetInfo
+ */
+CUresult CUDAAPI cuArray3DGetDescriptor(CUDA_ARRAY3D_DESCRIPTOR *pArrayDescriptor, CUarray hArray);
+
+/**
+ * \brief Creates a CUDA mipmapped array
+ *
+ * Creates a CUDA mipmapped array according to the ::CUDA_ARRAY3D_DESCRIPTOR structure
+ * \p pMipmappedArrayDesc and returns a handle to the new CUDA mipmapped array in \p *pHandle.
+ * \p numMipmapLevels specifies the number of mipmap levels to be allocated. This value is
+ * clamped to the range [1, 1 + floor(log2(max(width, height, depth)))].
+ *
+ * The ::CUDA_ARRAY3D_DESCRIPTOR is defined as:
+ *
+ * \code
+    typedef struct {
+        unsigned int Width;
+        unsigned int Height;
+        unsigned int Depth;
+        CUarray_format Format;
+        unsigned int NumChannels;
+        unsigned int Flags;
+    } CUDA_ARRAY3D_DESCRIPTOR;
+ * \endcode
+ * where:
+ *
+ * - \p Width, \p Height, and \p Depth are the width, height, and depth of the
+ * CUDA array (in elements); the following types of CUDA arrays can be allocated:
+ *     - A 1D mipmapped array is allocated if \p Height and \p Depth extents are both zero.
+ *     - A 2D mipmapped array is allocated if only \p Depth extent is zero.
+ *     - A 3D mipmapped array is allocated if all three extents are non-zero.
+ *     - A 1D layered CUDA mipmapped array is allocated if only \p Height is zero and the
+ *       ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 1D array. The number
+ *       of layers is determined by the depth extent.
+ *     - A 2D layered CUDA mipmapped array is allocated if all three extents are non-zero and
+ *       the ::CUDA_ARRAY3D_LAYERED flag is set. Each layer is a 2D array. The number
+ *       of layers is determined by the depth extent.
+ *     - A cubemap CUDA mipmapped array is allocated if all three extents are non-zero and the
+ *       ::CUDA_ARRAY3D_CUBEMAP flag is set. \p Width must be equal to \p Height, and
+ *       \p Depth must be six. A cubemap is a special type of 2D layered CUDA array,
+ *       where the six layers represent the six faces of a cube. The order of the six
+ *       layers in memory is the same as that listed in ::CUarray_cubemap_face.
+ *     - A cubemap layered CUDA mipmapped array is allocated if all three extents are non-zero,
+ *       and both, ::CUDA_ARRAY3D_CUBEMAP and ::CUDA_ARRAY3D_LAYERED flags are set.
+ *       \p Width must be equal to \p Height, and \p Depth must be a multiple of six.
+ *       A cubemap layered CUDA array is a special type of 2D layered CUDA array that
+ *       consists of a collection of cubemaps. The first six layers represent the first
+ *       cubemap, the next six layers form the second cubemap, and so on.
+ *
+ * - ::Format specifies the format of the elements; ::CUarray_format is
+ * defined as:
+ * \code
+    typedef enum CUarray_format_enum {
+        CU_AD_FORMAT_UNSIGNED_INT8 = 0x01,
+        CU_AD_FORMAT_UNSIGNED_INT16 = 0x02,
+        CU_AD_FORMAT_UNSIGNED_INT32 = 0x03,
+        CU_AD_FORMAT_SIGNED_INT8 = 0x08,
+        CU_AD_FORMAT_SIGNED_INT16 = 0x09,
+        CU_AD_FORMAT_SIGNED_INT32 = 0x0a,
+        CU_AD_FORMAT_HALF = 0x10,
+        CU_AD_FORMAT_FLOAT = 0x20
+    } CUarray_format;
+ *  \endcode
+ *
+ * - \p NumChannels specifies the number of packed components per CUDA array
+ * element; it may be 1, 2, or 4;
+ *
+ * - ::Flags may be set to
+ *   - ::CUDA_ARRAY3D_LAYERED to enable creation of layered CUDA mipmapped arrays. If this flag is set,
+ *     \p Depth specifies the number of layers, not the depth of a 3D array.
+ *   - ::CUDA_ARRAY3D_SURFACE_LDST to enable surface references to be bound to individual mipmap levels of
+ *     the CUDA mipmapped array. If this flag is not set, ::cuSurfRefSetArray will fail when attempting to
+ *     bind a mipmap level of the CUDA mipmapped array to a surface reference.
+  *   - ::CUDA_ARRAY3D_CUBEMAP to enable creation of mipmapped cubemaps. If this flag is set, \p Width must be
+ *     equal to \p Height, and \p Depth must be six. If the ::CUDA_ARRAY3D_LAYERED flag is also set,
+ *     then \p Depth must be a multiple of six.
+ *   - ::CUDA_ARRAY3D_TEXTURE_GATHER to indicate that the CUDA mipmapped array will be used for texture gather.
+ *     Texture gather can only be performed on 2D CUDA mipmapped arrays.
+ *
+ * \p Width, \p Height and \p Depth must meet certain size requirements as listed in the following table.
+ * All values are specified in elements. Note that for brevity's sake, the full name of the device attribute
+ * is not specified. For ex., TEXTURE1D_MIPMAPPED_WIDTH refers to the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_MIPMAPPED_WIDTH.
+ *
+ * <table>
+ * <tr><td><b>CUDA array type</b></td>
+ * <td><b>Valid extents that must always be met<br>{(width range in elements), (height range),
+ * (depth range)}</b></td>
+ * <td><b>Valid extents with CUDA_ARRAY3D_SURFACE_LDST set<br>
+ * {(width range in elements), (height range), (depth range)}</b></td></tr>
+ * <tr><td>1D</td>
+ * <td><small>{ (1,TEXTURE1D_MIPMAPPED_WIDTH), 0, 0 }</small></td>
+ * <td><small>{ (1,SURFACE1D_WIDTH), 0, 0 }</small></td></tr>
+ * <tr><td>2D</td>
+ * <td><small>{ (1,TEXTURE2D_MIPMAPPED_WIDTH), (1,TEXTURE2D_MIPMAPPED_HEIGHT), 0 }</small></td>
+ * <td><small>{ (1,SURFACE2D_WIDTH), (1,SURFACE2D_HEIGHT), 0 }</small></td></tr>
+ * <tr><td>3D</td>
+ * <td><small>{ (1,TEXTURE3D_WIDTH), (1,TEXTURE3D_HEIGHT), (1,TEXTURE3D_DEPTH) }
+ * <br>OR<br>{ (1,TEXTURE3D_WIDTH_ALTERNATE), (1,TEXTURE3D_HEIGHT_ALTERNATE),
+ * (1,TEXTURE3D_DEPTH_ALTERNATE) }</small></td>
+ * <td><small>{ (1,SURFACE3D_WIDTH), (1,SURFACE3D_HEIGHT),
+ * (1,SURFACE3D_DEPTH) }</small></td></tr>
+ * <tr><td>1D Layered</td>
+ * <td><small>{ (1,TEXTURE1D_LAYERED_WIDTH), 0,
+ * (1,TEXTURE1D_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACE1D_LAYERED_WIDTH), 0,
+ * (1,SURFACE1D_LAYERED_LAYERS) }</small></td></tr>
+ * <tr><td>2D Layered</td>
+ * <td><small>{ (1,TEXTURE2D_LAYERED_WIDTH), (1,TEXTURE2D_LAYERED_HEIGHT),
+ * (1,TEXTURE2D_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACE2D_LAYERED_WIDTH), (1,SURFACE2D_LAYERED_HEIGHT),
+ * (1,SURFACE2D_LAYERED_LAYERS) }</small></td></tr>
+ * <tr><td>Cubemap</td>
+ * <td><small>{ (1,TEXTURECUBEMAP_WIDTH), (1,TEXTURECUBEMAP_WIDTH), 6 }</small></td>
+ * <td><small>{ (1,SURFACECUBEMAP_WIDTH),
+ * (1,SURFACECUBEMAP_WIDTH), 6 }</small></td></tr>
+ * <tr><td>Cubemap Layered</td>
+ * <td><small>{ (1,TEXTURECUBEMAP_LAYERED_WIDTH), (1,TEXTURECUBEMAP_LAYERED_WIDTH),
+ * (1,TEXTURECUBEMAP_LAYERED_LAYERS) }</small></td>
+ * <td><small>{ (1,SURFACECUBEMAP_LAYERED_WIDTH), (1,SURFACECUBEMAP_LAYERED_WIDTH),
+ * (1,SURFACECUBEMAP_LAYERED_LAYERS) }</small></td></tr>
+ * </table>
+ *
+ *
+ * \param pHandle             - Returned mipmapped array
+ * \param pMipmappedArrayDesc - mipmapped array descriptor
+ * \param numMipmapLevels     - Number of mipmap levels
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMipmappedArrayDestroy,
+ * ::cuMipmappedArrayGetLevel,
+ * ::cuArrayCreate,
+ * ::cudaMallocMipmappedArray
+ */
+CUresult CUDAAPI cuMipmappedArrayCreate(CUmipmappedArray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR *pMipmappedArrayDesc, unsigned int numMipmapLevels);
+
+/**
+ * \brief Gets a mipmap level of a CUDA mipmapped array
+ *
+ * Returns in \p *pLevelArray a CUDA array that represents a single mipmap level
+ * of the CUDA mipmapped array \p hMipmappedArray.
+ *
+ * If \p level is greater than the maximum number of levels in this mipmapped array,
+ * ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * \param pLevelArray     - Returned mipmap level CUDA array
+ * \param hMipmappedArray - CUDA mipmapped array
+ * \param level           - Mipmap level
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMipmappedArrayCreate,
+ * ::cuMipmappedArrayDestroy,
+ * ::cuArrayCreate,
+ * ::cudaGetMipmappedArrayLevel
+ */
+CUresult CUDAAPI cuMipmappedArrayGetLevel(CUarray *pLevelArray, CUmipmappedArray hMipmappedArray, unsigned int level);
+
+/**
+ * \brief Destroys a CUDA mipmapped array
+ *
+ * Destroys the CUDA mipmapped array \p hMipmappedArray.
+ *
+ * \param hMipmappedArray - Mipmapped array to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ARRAY_IS_MAPPED,
+ * ::CUDA_ERROR_CONTEXT_IS_DESTROYED
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMipmappedArrayCreate,
+ * ::cuMipmappedArrayGetLevel,
+ * ::cuArrayCreate,
+ * ::cudaFreeMipmappedArray
+ */
+CUresult CUDAAPI cuMipmappedArrayDestroy(CUmipmappedArray hMipmappedArray);
+
+/** 
+* \brief Retrieve handle for an address range 
+* 
+* Get a handle of the specified type to an address range. The address range
+* must have been obtained by a prior call to either ::cuMemAlloc or ::cuMemAddressReserve.
+* If the address range was obtained via ::cuMemAddressReserve, it must also be fully mapped via ::cuMemMap.
+* 
+* Users must ensure the \p dptr and \p size are aligned to the host page size.
+* 
+* When requesting CUmemRangeHandleType::CU_MEM_RANGE_HANDLE_TYPE_DMA_BUF_FD,
+* users are expected to query for dma_buf support for the platform
+* by using ::CU_DEVICE_ATTRIBUTE_DMA_BUF_SUPPORTED device attribute before calling
+* this API. The \p handle will be interpreted as a pointer to an integer to store the dma_buf file descriptor.
+* Users must ensure the entire address range is backed and mapped when
+* the address range is allocated by ::cuMemAddressReserve. All the physical
+* allocations backing the address range must be resident on the same device and
+* have identical allocation properties. Users are also expected to retrieve a
+* new handle every time the underlying physical allocation(s) corresponding
+* to a previously queried VA range are changed.
+* 
+* \param[out] handle     - Pointer to the location where the returned handle will be stored. 
+* \param[in] dptr        - Pointer to a valid CUDA device allocation. Must be aligned to host page size.
+* \param[in] size        - Length of the address range. Must be aligned to host page size.
+* \param[in] handleType  - Type of handle requested (defines type and size of the \p handle output parameter)
+* \param[in] flags       - Reserved, must be zero 
+* 
+* \return
+* CUDA_SUCCESS 
+* CUDA_ERROR_INVALID_VALUE 
+* CUDA_ERROR_NOT_SUPPORTED 
+*/
+CUresult CUDAAPI cuMemGetHandleForAddressRange(void *handle, CUdeviceptr dptr, size_t size, CUmemRangeHandleType handleType, unsigned long long flags);
+
+/** @} */ /* END CUDA_MEM */
+
+/**
+ * \defgroup CUDA_VA Virtual Memory Management
+ *
+ * ___MANBRIEF___ virtual memory management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the virtual memory management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+* \brief Allocate an address range reservation. 
+* 
+* Reserves a virtual address range based on the given parameters, giving
+* the starting address of the range in \p ptr.  This API requires a system that
+* supports UVA.  The size and address parameters must be a multiple of the
+* host page size and the alignment must be a power of two or zero for default
+* alignment.
+*
+* \param[out] ptr       - Resulting pointer to start of virtual address range allocated
+* \param[in]  size      - Size of the reserved virtual address range requested
+* \param[in]  alignment - Alignment of the reserved virtual address range requested
+* \param[in]  addr      - Fixed starting address range requested
+* \param[in]  flags     - Currently unused, must be zero
+* \return
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_OUT_OF_MEMORY,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemAddressFree
+*/
+CUresult CUDAAPI cuMemAddressReserve(CUdeviceptr *ptr, size_t size, size_t alignment, CUdeviceptr addr, unsigned long long flags);
+
+/**
+* \brief Free an address range reservation.
+* 
+* Frees a virtual address range reserved by cuMemAddressReserve.  The size
+* must match what was given to memAddressReserve and the ptr given must
+* match what was returned from memAddressReserve.
+*
+* \param[in] ptr  - Starting address of the virtual address range to free
+* \param[in] size - Size of the virtual address region to free
+* \return
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemAddressReserve
+*/
+CUresult CUDAAPI cuMemAddressFree(CUdeviceptr ptr, size_t size);
+
+/**
+* \brief Create a CUDA memory handle representing a memory allocation of a given size described by the given properties
+*
+* This creates a memory allocation on the target device specified through the
+* \p prop strcuture. The created allocation will not have any device or host
+* mappings. The generic memory \p handle for the allocation can be
+* mapped to the address space of calling process via ::cuMemMap. This handle
+* cannot be transmitted directly to other processes (see
+* ::cuMemExportToShareableHandle).  On Windows, the caller must also pass
+* an LPSECURITYATTRIBUTE in \p prop to be associated with this handle which
+* limits or allows access to this handle for a recepient process (see
+* ::CUmemAllocationProp::win32HandleMetaData for more).  The \p size of this
+* allocation must be a multiple of the the value given via
+* ::cuMemGetAllocationGranularity with the ::CU_MEM_ALLOC_GRANULARITY_MINIMUM
+* flag.
+* If ::CUmemAllocationProp::allocFlags::usage contains ::CU_MEM_CREATE_USAGE_TILE_POOL flag then
+* the memory allocation is intended only to be used as backing tile pool for sparse CUDA arrays
+* and sparse CUDA mipmapped arrays.
+* (see ::cuMemMapArrayAsync).
+*
+* \param[out] handle - Value of handle returned. All operations on this allocation are to be performed using this handle.
+* \param[in]  size   - Size of the allocation requested
+* \param[in]  prop   - Properties of the allocation to create.
+* \param[in]  flags  - flags for future use, must be zero now.
+* \return
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_OUT_OF_MEMORY,
+* ::CUDA_ERROR_INVALID_DEVICE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+* \notefnerr
+*
+* \sa ::cuMemRelease, ::cuMemExportToShareableHandle, ::cuMemImportFromShareableHandle
+*/
+CUresult CUDAAPI cuMemCreate(CUmemGenericAllocationHandle *handle, size_t size, const CUmemAllocationProp *prop, unsigned long long flags);
+
+/**
+* \brief Release a memory handle representing a memory allocation which was previously allocated through cuMemCreate.
+* 
+* Frees the memory that was allocated on a device through cuMemCreate.
+*
+* The memory allocation will be freed when all outstanding mappings to the memory
+* are unmapped and when all outstanding references to the handle (including it's
+* shareable counterparts) are also released. The generic memory handle can be
+* freed when there are still outstanding mappings made with this handle. Each
+* time a recepient process imports a shareable handle, it needs to pair it with
+* ::cuMemRelease for the handle to be freed.  If \p handle is not a valid handle
+* the behavior is undefined. 
+*
+* \param[in] handle Value of handle which was returned previously by cuMemCreate.
+* \return
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+* \notefnerr
+*
+* \sa ::cuMemCreate
+*/
+CUresult CUDAAPI cuMemRelease(CUmemGenericAllocationHandle handle);
+
+/**
+* \brief Maps an allocation handle to a reserved virtual address range.
+*
+* Maps bytes of memory represented by \p handle starting from byte \p offset to
+* \p size to address range [\p addr, \p addr + \p size]. This range must be an
+* address reservation previously reserved with ::cuMemAddressReserve, and
+* \p offset + \p size must be less than the size of the memory allocation.
+* Both \p ptr, \p size, and \p offset must be a multiple of the value given via
+* ::cuMemGetAllocationGranularity with the ::CU_MEM_ALLOC_GRANULARITY_MINIMUM flag.
+* 
+* Please note calling ::cuMemMap does not make the address accessible,
+* the caller needs to update accessibility of a contiguous mapped VA
+* range by calling ::cuMemSetAccess.
+* 
+* Once a recipient process obtains a shareable memory handle
+* from ::cuMemImportFromShareableHandle, the process must
+* use ::cuMemMap to map the memory into its address ranges before
+* setting accessibility with ::cuMemSetAccess.
+*  
+* ::cuMemMap can only create mappings on VA range reservations 
+* that are not currently mapped.
+* 
+* \param[in] ptr    - Address where memory will be mapped. 
+* \param[in] size   - Size of the memory mapping. 
+* \param[in] offset - Offset into the memory represented by 
+*                   - \p handle from which to start mapping
+*                   - Note: currently must be zero.
+* \param[in] handle - Handle to a shareable memory 
+* \param[in] flags  - flags for future use, must be zero now. 
+* \return
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_INVALID_DEVICE,
+* ::CUDA_ERROR_OUT_OF_MEMORY,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+* \notefnerr
+*
+* \sa ::cuMemUnmap, ::cuMemSetAccess, ::cuMemCreate, ::cuMemAddressReserve, ::cuMemImportFromShareableHandle
+*/
+CUresult CUDAAPI cuMemMap(CUdeviceptr ptr, size_t size, size_t offset, CUmemGenericAllocationHandle handle, unsigned long long flags);
+
+/**
+ * \brief Maps or unmaps subregions of sparse CUDA arrays and sparse CUDA mipmapped arrays
+ *
+ * Performs map or unmap operations on subregions of sparse CUDA arrays and sparse CUDA mipmapped arrays.
+ * Each operation is specified by a ::CUarrayMapInfo entry in the \p mapInfoList array of size \p count.
+ * The structure ::CUarrayMapInfo is defined as follow:
+ \code
+     typedef struct CUarrayMapInfo_st {
+        CUresourcetype resourceType;                   
+        union {
+            CUmipmappedArray mipmap;
+            CUarray array;
+        } resource;
+
+        CUarraySparseSubresourceType subresourceType;   
+        union {
+            struct {
+                unsigned int level;                     
+                unsigned int layer;                     
+                unsigned int offsetX;                   
+                unsigned int offsetY;                   
+                unsigned int offsetZ;                   
+                unsigned int extentWidth;               
+                unsigned int extentHeight;              
+                unsigned int extentDepth;               
+            } sparseLevel;
+            struct {
+                unsigned int layer;
+                unsigned long long offset;              
+                unsigned long long size;                
+            } miptail;
+        } subresource;
+
+        CUmemOperationType memOperationType;
+        
+        CUmemHandleType memHandleType;                  
+        union {
+            CUmemGenericAllocationHandle memHandle;
+        } memHandle;
+
+        unsigned long long offset;                      
+        unsigned int deviceBitMask;                     
+        unsigned int flags;                             
+        unsigned int reserved[2];                       
+    } CUarrayMapInfo;
+ \endcode
+ *
+ * where ::CUarrayMapInfo::resourceType specifies the type of resource to be operated on.
+ * If ::CUarrayMapInfo::resourceType is set to ::CUresourcetype::CU_RESOURCE_TYPE_ARRAY then 
+ * ::CUarrayMapInfo::resource::array must be set to a valid sparse CUDA array handle.
+ * The CUDA array must be either a 2D, 2D layered or 3D CUDA array and must have been allocated using
+ * ::cuArrayCreate or ::cuArray3DCreate with the flag ::CUDA_ARRAY3D_SPARSE
+ * or ::CUDA_ARRAY3D_DEFERRED_MAPPING.
+ * For CUDA arrays obtained using ::cuMipmappedArrayGetLevel, ::CUDA_ERROR_INVALID_VALUE will be returned.
+ * If ::CUarrayMapInfo::resourceType is set to ::CUresourcetype::CU_RESOURCE_TYPE_MIPMAPPED_ARRAY 
+ * then ::CUarrayMapInfo::resource::mipmap must be set to a valid sparse CUDA mipmapped array handle.
+ * The CUDA mipmapped array must be either a 2D, 2D layered or 3D CUDA mipmapped array and must have been
+ * allocated using ::cuMipmappedArrayCreate with the flag ::CUDA_ARRAY3D_SPARSE
+ * or ::CUDA_ARRAY3D_DEFERRED_MAPPING.
+ *
+ * ::CUarrayMapInfo::subresourceType specifies the type of subresource within the resource. 
+ * ::CUarraySparseSubresourceType_enum is defined as:
+ \code
+    typedef enum CUarraySparseSubresourceType_enum {
+        CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL = 0,
+        CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL = 1
+    } CUarraySparseSubresourceType;
+ \endcode
+ *
+ * where ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL indicates a
+ * sparse-miplevel which spans at least one tile in every dimension. The remaining miplevels which
+ * are too small to span at least one tile in any dimension constitute the mip tail region as indicated by 
+ * ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL subresource type.
+ *
+ * If ::CUarrayMapInfo::subresourceType is set to ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_SPARSE_LEVEL
+ * then ::CUarrayMapInfo::subresource::sparseLevel struct must contain valid array subregion offsets and extents.
+ * The ::CUarrayMapInfo::subresource::sparseLevel::offsetX, ::CUarrayMapInfo::subresource::sparseLevel::offsetY
+ * and ::CUarrayMapInfo::subresource::sparseLevel::offsetZ must specify valid X, Y and Z offsets respectively.
+ * The ::CUarrayMapInfo::subresource::sparseLevel::extentWidth, ::CUarrayMapInfo::subresource::sparseLevel::extentHeight
+ * and ::CUarrayMapInfo::subresource::sparseLevel::extentDepth must specify valid width, height and depth extents respectively.
+ * These offsets and extents must be aligned to the corresponding tile dimension.
+ * For CUDA mipmapped arrays ::CUarrayMapInfo::subresource::sparseLevel::level must specify a valid mip level index. Otherwise,
+ * must be zero.
+ * For layered CUDA arrays and layered CUDA mipmapped arrays ::CUarrayMapInfo::subresource::sparseLevel::layer must specify a valid layer index. Otherwise,
+ * must be zero.
+ * ::CUarrayMapInfo::subresource::sparseLevel::offsetZ must be zero and ::CUarrayMapInfo::subresource::sparseLevel::extentDepth
+ * must be set to 1 for 2D and 2D layered CUDA arrays and CUDA mipmapped arrays.
+ * Tile extents can be obtained by calling ::cuArrayGetSparseProperties and ::cuMipmappedArrayGetSparseProperties
+ *
+ * If ::CUarrayMapInfo::subresourceType is set to ::CUarraySparseSubresourceType::CU_ARRAY_SPARSE_SUBRESOURCE_TYPE_MIPTAIL
+ * then ::CUarrayMapInfo::subresource::miptail struct must contain valid mip tail offset in 
+ * ::CUarrayMapInfo::subresource::miptail::offset and size in ::CUarrayMapInfo::subresource::miptail::size.
+ * Both, mip tail offset and mip tail size must be aligned to the tile size. 
+ * For layered CUDA mipmapped arrays which don't have the flag ::CU_ARRAY_SPARSE_PROPERTIES_SINGLE_MIPTAIL set in ::CUDA_ARRAY_SPARSE_PROPERTIES::flags
+ * as returned by ::cuMipmappedArrayGetSparseProperties, ::CUarrayMapInfo::subresource::miptail::layer must specify a valid layer index.
+ * Otherwise, must be zero.
+ *
+ * If ::CUarrayMapInfo::resource::array or ::CUarrayMapInfo::resource::mipmap was created with ::CUDA_ARRAY3D_DEFERRED_MAPPING
+ * flag set the ::CUarrayMapInfo::subresourceType and the contents of ::CUarrayMapInfo::subresource will be ignored.
+ *
+ * ::CUarrayMapInfo::memOperationType specifies the type of operation. ::CUmemOperationType is defined as:
+ \code
+    typedef enum CUmemOperationType_enum {
+        CU_MEM_OPERATION_TYPE_MAP = 1,
+        CU_MEM_OPERATION_TYPE_UNMAP = 2
+    } CUmemOperationType;
+ \endcode
+ * If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_MAP then the subresource 
+ * will be mapped onto the tile pool memory specified by ::CUarrayMapInfo::memHandle at offset ::CUarrayMapInfo::offset. 
+ * The tile pool allocation has to be created by specifying the ::CU_MEM_CREATE_USAGE_TILE_POOL flag when calling ::cuMemCreate. Also, 
+ * ::CUarrayMapInfo::memHandleType must be set to ::CUmemHandleType::CU_MEM_HANDLE_TYPE_GENERIC.
+ * 
+ * If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_UNMAP then an unmapping operation
+ * is performed. ::CUarrayMapInfo::memHandle must be NULL.
+ *
+ * ::CUarrayMapInfo::deviceBitMask specifies the list of devices that must map or unmap physical memory. 
+ * Currently, this mask must have exactly one bit set, and the corresponding device must match the device associated with the stream. 
+ * If ::CUarrayMapInfo::memOperationType is set to ::CUmemOperationType::CU_MEM_OPERATION_TYPE_MAP, the device must also match 
+ * the device associated with the tile pool memory allocation as specified by ::CUarrayMapInfo::memHandle.
+ *
+ * ::CUarrayMapInfo::flags and ::CUarrayMapInfo::reserved[] are unused and must be set to zero.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ *
+ * \param[in] mapInfoList - List of ::CUarrayMapInfo
+ * \param[in] count       - Count of ::CUarrayMapInfo  in \p mapInfoList
+ * \param[in] hStream     - Stream identifier for the stream to use for map or unmap operations
+ *
+ * \sa ::cuMipmappedArrayCreate, ::cuArrayCreate, ::cuArray3DCreate, ::cuMemCreate, ::cuArrayGetSparseProperties, ::cuMipmappedArrayGetSparseProperties
+ */
+CUresult CUDAAPI cuMemMapArrayAsync(CUarrayMapInfo  *mapInfoList, unsigned int count, CUstream hStream);
+
+/**
+* \brief Unmap the backing memory of a given address range.
+*
+* The range must be the entire contiguous address range that was mapped to.  In
+* other words, ::cuMemUnmap cannot unmap a sub-range of an address range mapped
+* by ::cuMemCreate / ::cuMemMap.  Any backing memory allocations will be freed
+* if there are no existing mappings and there are no unreleased memory handles.
+*
+* When ::cuMemUnmap returns successfully the address range is converted to an
+* address reservation and can be used for a future calls to ::cuMemMap.  Any new
+* mapping to this virtual address will need to have access granted through
+* ::cuMemSetAccess, as all mappings start with no accessibility setup.
+*
+* \param[in] ptr  - Starting address for the virtual address range to unmap
+* \param[in] size - Size of the virtual address range to unmap
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+* \notefnerr
+* \note_sync
+*
+* \sa ::cuMemCreate, ::cuMemAddressReserve
+*/
+CUresult CUDAAPI cuMemUnmap(CUdeviceptr ptr, size_t size);
+
+/**
+* \brief Set the access flags for each location specified in \p desc for the given virtual address range
+* 
+* Given the virtual address range via \p ptr and \p size, and the locations
+* in the array given by \p desc and \p count, set the access flags for the
+* target locations.  The range must be a fully mapped address range
+* containing all allocations created by ::cuMemMap / ::cuMemCreate.
+*
+* \param[in] ptr   - Starting address for the virtual address range
+* \param[in] size  - Length of the virtual address range
+* \param[in] desc  - Array of ::CUmemAccessDesc that describe how to change the
+*                  - mapping for each location specified
+* \param[in] count - Number of ::CUmemAccessDesc in \p desc
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_INVALID_DEVICE,
+* ::CUDA_ERROR_NOT_SUPPORTED
+* \notefnerr
+* \note_sync
+*
+* \sa ::cuMemSetAccess, ::cuMemCreate, :cuMemMap
+*/
+CUresult CUDAAPI cuMemSetAccess(CUdeviceptr ptr, size_t size, const CUmemAccessDesc *desc, size_t count);
+
+/**
+* \brief Get the access \p flags set for the given \p location and \p ptr
+*
+* \param[out] flags   - Flags set for this location
+* \param[in] location - Location in which to check the flags for
+* \param[in] ptr      - Address in which to check the access flags for
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_INVALID_DEVICE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemSetAccess
+*/
+CUresult CUDAAPI cuMemGetAccess(unsigned long long *flags, const CUmemLocation *location, CUdeviceptr ptr);
+
+/**
+* \brief Exports an allocation to a requested shareable handle type
+*
+* Given a CUDA memory handle, create a shareable memory
+* allocation handle that can be used to share the memory with other
+* processes. The recipient process can convert the shareable handle back into a
+* CUDA memory handle using ::cuMemImportFromShareableHandle and map
+* it with ::cuMemMap. The implementation of what this handle is and how it
+* can be transferred is defined by the requested handle type in \p handleType
+*
+* Once all shareable handles are closed and the allocation is released, the allocated
+* memory referenced will be released back to the OS and uses of the CUDA handle afterward
+* will lead to undefined behavior.
+*
+* This API can also be used in conjunction with other APIs (e.g. Vulkan, OpenGL)
+* that support importing memory from the shareable type
+*
+* \param[out] shareableHandle - Pointer to the location in which to store the requested handle type
+* \param[in] handle           - CUDA handle for the memory allocation
+* \param[in] handleType       - Type of shareable handle requested (defines type and size of the \p shareableHandle output parameter)
+* \param[in] flags            - Reserved, must be zero
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemImportFromShareableHandle
+*/
+CUresult CUDAAPI cuMemExportToShareableHandle(void *shareableHandle, CUmemGenericAllocationHandle handle, CUmemAllocationHandleType handleType, unsigned long long flags);
+
+/**
+* \brief Imports an allocation from a requested shareable handle type.
+*
+* If the current process cannot support the memory described by this shareable
+* handle, this API will error as CUDA_ERROR_NOT_SUPPORTED.
+*
+* \note Importing shareable handles exported from some graphics APIs(VUlkan, OpenGL, etc)
+* created on devices under an SLI group may not be supported, and thus this API will
+* return CUDA_ERROR_NOT_SUPPORTED.
+* There is no guarantee that the contents of \p handle will be the same CUDA memory handle
+* for the same given OS shareable handle, or the same underlying allocation.
+*
+* \param[out] handle       - CUDA Memory handle for the memory allocation.
+* \param[in]  osHandle     - Shareable Handle representing the memory allocation that is to be imported. 
+* \param[in]  shHandleType - handle type of the exported handle ::CUmemAllocationHandleType.
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemExportToShareableHandle, ::cuMemMap, ::cuMemRelease
+*/
+CUresult CUDAAPI cuMemImportFromShareableHandle(CUmemGenericAllocationHandle *handle, void *osHandle, CUmemAllocationHandleType shHandleType);
+
+/**
+* \brief Calculates either the minimal or recommended granularity 
+*
+* Calculates either the minimal or recommended granularity
+* for a given allocation specification and returns it in granularity.  This
+* granularity can be used as a multiple for alignment, size, or address mapping.
+*
+* \param[out] granularity Returned granularity.
+* \param[in]  prop Property for which to determine the granularity for
+* \param[in]  option Determines which granularity to return
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemCreate, ::cuMemMap
+*/
+CUresult CUDAAPI cuMemGetAllocationGranularity(size_t *granularity, const CUmemAllocationProp *prop, CUmemAllocationGranularity_flags option);
+
+/**
+* \brief Retrieve the contents of the property structure defining properties for this handle
+*
+* \param[out] prop  - Pointer to a properties structure which will hold the information about this handle
+* \param[in] handle - Handle which to perform the query on
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemCreate, ::cuMemImportFromShareableHandle
+*/
+CUresult CUDAAPI cuMemGetAllocationPropertiesFromHandle(CUmemAllocationProp *prop, CUmemGenericAllocationHandle handle);
+
+/**
+* \brief Given an address \p addr, returns the allocation handle of the backing memory allocation.
+*
+* The handle is guaranteed to be the same handle value used to map the memory. If the address
+* requested is not mapped, the function will fail. The returned handle must be released with
+* corresponding number of calls to ::cuMemRelease.
+*
+* \note The address \p addr, can be any address in a range previously mapped
+* by ::cuMemMap, and not necessarily the start address.
+*
+* \param[out] handle CUDA Memory handle for the backing memory allocation.
+* \param[in] addr Memory address to query, that has been mapped previously.
+* \returns
+* ::CUDA_SUCCESS,
+* ::CUDA_ERROR_INVALID_VALUE,
+* ::CUDA_ERROR_NOT_INITIALIZED,
+* ::CUDA_ERROR_DEINITIALIZED,
+* ::CUDA_ERROR_NOT_PERMITTED,
+* ::CUDA_ERROR_NOT_SUPPORTED
+*
+* \sa ::cuMemCreate, ::cuMemRelease, ::cuMemMap
+*/
+CUresult CUDAAPI cuMemRetainAllocationHandle(CUmemGenericAllocationHandle *handle, void *addr);
+
+/** @} */ /* END CUDA_VA */
+
+/**
+ * \defgroup CUDA_MALLOC_ASYNC Stream Ordered Memory Allocator
+ *
+ * ___MANBRIEF___ Functions for performing allocation and free operations in stream order.
+ *                Functions for controlling the behavior of the underlying allocator.
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the stream ordered memory allocator exposed by the
+ * low-level CUDA driver application programming interface.
+ *
+ * @{
+ *
+ * \section CUDA_MALLOC_ASYNC_overview overview
+ *
+ * The asynchronous allocator allows the user to allocate and free in stream order.
+ * All asynchronous accesses of the allocation must happen between
+ * the stream executions of the allocation and the free. If the memory is accessed
+ * outside of the promised stream order, a use before allocation / use after free error
+ * will cause undefined behavior.
+ *
+ * The allocator is free to reallocate the memory as long as it can guarantee
+ * that compliant memory accesses will not overlap temporally.
+ * The allocator may refer to internal stream ordering as well as inter-stream dependencies
+ * (such as CUDA events and null stream dependencies) when establishing the temporal guarantee.
+ * The allocator may also insert inter-stream dependencies to establish the temporal guarantee. 
+ *
+ * \section CUDA_MALLOC_ASYNC_support Supported Platforms
+ *
+ * Whether or not a device supports the integrated stream ordered memory allocator
+ * may be queried by calling ::cuDeviceGetAttribute() with the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_MEMORY_POOLS_SUPPORTED
+ */
+
+/**
+ * \brief Frees memory with stream ordered semantics
+ *
+ * Inserts a free operation into \p hStream.
+ * The allocation must not be accessed after stream execution reaches the free.
+ * After this API returns, accessing the memory from any subsequent work launched on the GPU
+ * or querying its pointer attributes results in undefined behavior.
+ *
+ * \note During stream capture, this function results in the creation of a free node and
+ *       must therefore be passed the address of a graph allocation.
+ * 
+ * \param dptr - memory to free
+ * \param hStream - The stream establishing the stream ordering contract. 
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ */
+CUresult CUDAAPI cuMemFreeAsync(CUdeviceptr dptr, CUstream hStream);
+
+/**
+ * \brief Allocates memory with stream ordered semantics
+ *
+ * Inserts an allocation operation into \p hStream.
+ * A pointer to the allocated memory is returned immediately in *dptr.
+ * The allocation must not be accessed until the the allocation operation completes.
+ * The allocation comes from the memory pool current to the stream's device.
+ *
+ * \note The default memory pool of a device contains device memory from that device.
+ * \note Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ *       Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ *       operation completes before work submitted in a separate stream runs. 
+ * \note During stream capture, this function results in the creation of an allocation node.  In this case,
+ *       the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ *       are used to set the node's creation parameters.
+ *
+ * \param[out] dptr    - Returned device pointer
+ * \param[in] bytesize - Number of bytes to allocate
+ * \param[in] hStream  - The stream establishing the stream ordering contract and the memory pool to allocate from
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemAllocFromPoolAsync, ::cuMemFreeAsync, ::cuDeviceSetMemPool,
+ *     ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate,
+ *     ::cuMemPoolSetAccess, ::cuMemPoolSetAttribute
+ */
+CUresult CUDAAPI cuMemAllocAsync(CUdeviceptr *dptr, size_t bytesize, CUstream hStream);
+
+/**
+ * \brief Tries to release memory back to the OS
+ *
+ * Releases memory back to the OS until the pool contains fewer than minBytesToKeep
+ * reserved bytes, or there is no more memory that the allocator can safely release.
+ * The allocator cannot release OS allocations that back outstanding asynchronous allocations.
+ * The OS allocations may happen at different granularity from the user allocations.
+ *
+ * \note: Allocations that have not been freed count as outstanding. 
+ * \note: Allocations that have been asynchronously freed but whose completion has
+ *        not been observed on the host (eg. by a synchronize) can count as outstanding.
+ *
+ * \param[in] pool           - The memory pool to trim
+ * \param[in] minBytesToKeep - If the pool has less than minBytesToKeep reserved,
+ * the TrimTo operation is a no-op.  Otherwise the pool will be guaranteed to have
+ * at least minBytesToKeep bytes reserved after the operation.
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolTrimTo(CUmemoryPool pool, size_t minBytesToKeep);
+
+/**
+ * \brief Sets attributes of a memory pool
+ *
+ * Supported attributes are:
+ * - ::CU_MEMPOOL_ATTR_RELEASE_THRESHOLD: (value type = cuuint64_t)
+ *                    Amount of reserved memory in bytes to hold onto before trying
+ *                    to release memory back to the OS. When more than the release
+ *                    threshold bytes of memory are held by the memory pool, the
+ *                    allocator will try to release memory back to the OS on the
+ *                    next call to stream, event or context synchronize. (default 0)
+ * - ::CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES: (value type = int)
+ *                    Allow ::cuMemAllocAsync to use memory asynchronously freed
+ *                    in another stream as long as a stream ordering dependency
+ *                    of the allocating stream on the free action exists.
+ *                    Cuda events and null stream interactions can create the required
+ *                    stream ordered dependencies. (default enabled)
+ * - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC: (value type = int)
+ *                    Allow reuse of already completed frees when there is no dependency
+ *                    between the free and allocation. (default enabled)
+ * - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES: (value type = int)
+ *                    Allow ::cuMemAllocAsync to insert new stream dependencies
+ *                    in order to establish the stream ordering required to reuse
+ *                    a piece of memory released by ::cuMemFreeAsync (default enabled).
+ * - ::CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH: (value type = cuuint64_t)
+ *                    Reset the high watermark that tracks the amount of backing memory that was
+ *                    allocated for the memory pool. It is illegal to set this attribute to a non-zero value.
+ * - ::CU_MEMPOOL_ATTR_USED_MEM_HIGH: (value type = cuuint64_t)
+ *                    Reset the high watermark that tracks the amount of used memory that was
+ *                    allocated for the memory pool.
+ *
+ * \param[in] pool  - The memory pool to modify
+ * \param[in] attr  - The attribute to modify
+ * \param[in] value - Pointer to the value to assign
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolSetAttribute(CUmemoryPool pool, CUmemPool_attribute attr, void *value);
+
+/**
+ * \brief Gets attributes of a memory pool
+ *
+ * Supported attributes are:
+ * - ::CU_MEMPOOL_ATTR_RELEASE_THRESHOLD: (value type = cuuint64_t)
+ *                    Amount of reserved memory in bytes to hold onto before trying
+ *                    to release memory back to the OS. When more than the release
+ *                    threshold bytes of memory are held by the memory pool, the
+ *                    allocator will try to release memory back to the OS on the
+ *                    next call to stream, event or context synchronize. (default 0)
+ * - ::CU_MEMPOOL_ATTR_REUSE_FOLLOW_EVENT_DEPENDENCIES: (value type = int)
+ *                    Allow ::cuMemAllocAsync to use memory asynchronously freed
+ *                    in another stream as long as a stream ordering dependency
+ *                    of the allocating stream on the free action exists.
+ *                    Cuda events and null stream interactions can create the required
+ *                    stream ordered dependencies. (default enabled)
+ * - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_OPPORTUNISTIC: (value type = int)
+ *                    Allow reuse of already completed frees when there is no dependency
+ *                    between the free and allocation. (default enabled)
+ * - ::CU_MEMPOOL_ATTR_REUSE_ALLOW_INTERNAL_DEPENDENCIES: (value type = int)
+ *                    Allow ::cuMemAllocAsync to insert new stream dependencies
+ *                    in order to establish the stream ordering required to reuse
+ *                    a piece of memory released by ::cuMemFreeAsync (default enabled).
+ * - ::CU_MEMPOOL_ATTR_RESERVED_MEM_CURRENT: (value type = cuuint64_t)
+ *                    Amount of backing memory currently allocated for the mempool
+ * - ::CU_MEMPOOL_ATTR_RESERVED_MEM_HIGH: (value type = cuuint64_t)
+ *                    High watermark of backing memory allocated for the mempool since the
+ *                    last time it was reset.
+ * - ::CU_MEMPOOL_ATTR_USED_MEM_CURRENT: (value type = cuuint64_t)
+ *                    Amount of memory from the pool that is currently in use by the application.
+ * - ::CU_MEMPOOL_ATTR_USED_MEM_HIGH: (value type = cuuint64_t)
+ *                    High watermark of the amount of memory from the pool that was in use by the application.
+ *
+ * \param[in] pool   - The memory pool to get attributes of
+ * \param[in] attr   - The attribute to get 
+ * \param[out] value - Retrieved value
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolGetAttribute(CUmemoryPool pool, CUmemPool_attribute attr, void *value);
+
+/**
+ * \brief Controls visibility of pools between devices
+ *
+ * \param[in] pool  - The pool being modified
+ * \param[in] map   - Array of access descriptors. Each descriptor instructs the access to enable for a single gpu.
+ * \param[in] count - Number of descriptors in the map array.
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolSetAccess(CUmemoryPool pool, const CUmemAccessDesc *map, size_t count);
+
+/**
+ * \brief Returns the accessibility of a pool from a device
+ *
+ * Returns the accessibility of the pool's memory from the specified location. 
+ *
+ * \param[out] flags   - the accessibility of the pool from the specified location
+ * \param[in] memPool  - the pool being queried
+ * \param[in] location - the location accessing the pool
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolGetAccess(CUmemAccess_flags *flags, CUmemoryPool memPool, CUmemLocation *location);
+
+/**
+ * \brief Creates a memory pool
+ *
+ * Creates a CUDA memory pool and returns the handle in \p pool.  The \p poolProps determines
+ * the properties of the pool such as the backing device and IPC capabilities. 
+ *
+ * By default, the pool's memory will be accessible from the device it is allocated on.
+ *
+ * \note Specifying CU_MEM_HANDLE_TYPE_NONE creates a memory pool that will not support IPC.
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ *
+ * \sa ::cuDeviceSetMemPool, ::cuDeviceGetMemPool, ::cuDeviceGetDefaultMemPool,
+ *     ::cuMemAllocFromPoolAsync, ::cuMemPoolExportToShareableHandle
+ */
+CUresult CUDAAPI cuMemPoolCreate(CUmemoryPool *pool, const CUmemPoolProps *poolProps);
+
+/**
+ * \brief Destroys the specified memory pool
+ *
+ * If any pointers obtained from this pool haven't been freed or
+ * the pool has free operations that haven't completed
+ * when ::cuMemPoolDestroy is invoked, the function will return immediately and the
+ * resources associated with the pool will be released automatically
+ * once there are no more outstanding allocations. 
+ *
+ * Destroying the current mempool of a device sets the default mempool of
+ * that device as the current mempool for that device.
+ *
+ * \note A device's default memory pool cannot be destroyed.
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuMemFreeAsync, ::cuDeviceSetMemPool, ::cuDeviceGetMemPool,
+ *     ::cuDeviceGetDefaultMemPool, ::cuMemPoolCreate
+ */
+CUresult CUDAAPI cuMemPoolDestroy(CUmemoryPool pool);
+
+/**
+ * \brief Allocates memory from a specified pool with stream ordered semantics.
+ *
+ * Inserts an allocation operation into \p hStream.
+ * A pointer to the allocated memory is returned immediately in *dptr.
+ * The allocation must not be accessed until the the allocation operation completes.
+ * The allocation comes from the specified memory pool.
+ *
+ * \note
+ *    -  The specified memory pool may be from a device different than that of the specified \p hStream. 
+ * 
+ *    -  Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ *       Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ *       operation completes before work submitted in a separate stream runs. 
+ *
+ * \note During stream capture, this function results in the creation of an allocation node.  In this case,
+ *       the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ *       are used to set the node's creation parameters.
+ *
+ * \param[out] dptr    - Returned device pointer
+ * \param[in] bytesize - Number of bytes to allocate
+ * \param[in] pool     - The pool to allocate from 
+ * \param[in] hStream  - The stream establishing the stream ordering semantic
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT (default stream specified with no current context),
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemAllocAsync, ::cuMemFreeAsync, ::cuDeviceGetDefaultMemPool,
+ *     ::cuDeviceGetMemPool, ::cuMemPoolCreate, ::cuMemPoolSetAccess,
+ *     ::cuMemPoolSetAttribute
+ */
+CUresult CUDAAPI cuMemAllocFromPoolAsync(CUdeviceptr *dptr, size_t bytesize, CUmemoryPool pool, CUstream hStream);
+
+/**
+ * \brief Exports a memory pool to the requested handle type.
+ *
+ * Given an IPC capable mempool, create an OS handle to share the pool with another process.
+ * A recipient process can convert the shareable handle into a mempool with ::cuMemPoolImportFromShareableHandle.
+ * Individual pointers can then be shared with the ::cuMemPoolExportPointer and ::cuMemPoolImportPointer APIs.
+ * The implementation of what the shareable handle is and how it can be transferred is defined by the requested
+ * handle type.
+ *
+ * \note: To create an IPC capable mempool, create a mempool with a CUmemAllocationHandleType other than CU_MEM_HANDLE_TYPE_NONE.
+ *
+ * \param[out] handle_out  - Returned OS handle 
+ * \param[in] pool         - pool to export 
+ * \param[in] handleType   - the type of handle to create 
+ * \param[in] flags        - must be 0 
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemPoolImportFromShareableHandle, ::cuMemPoolExportPointer,
+ *     ::cuMemPoolImportPointer, ::cuMemAllocAsync, ::cuMemFreeAsync,
+ *     ::cuDeviceGetDefaultMemPool, ::cuDeviceGetMemPool, ::cuMemPoolCreate,
+ *     ::cuMemPoolSetAccess, ::cuMemPoolSetAttribute
+ */
+CUresult CUDAAPI cuMemPoolExportToShareableHandle(void *handle_out, CUmemoryPool pool, CUmemAllocationHandleType handleType, unsigned long long flags);
+
+/**
+ * \brief imports a memory pool from a shared handle.
+ *
+ * Specific allocations can be imported from the imported pool with cuMemPoolImportPointer.
+ *
+ * \note Imported memory pools do not support creating new allocations.
+ *       As such imported memory pools may not be used in cuDeviceSetMemPool
+ *       or ::cuMemAllocFromPoolAsync calls.
+ *
+ * \param[out] pool_out    - Returned memory pool
+ * \param[in] handle       - OS handle of the pool to open 
+ * \param[in] handleType   - The type of handle being imported 
+ * \param[in] flags        - must be 0 
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolExportPointer, ::cuMemPoolImportPointer
+ */
+CUresult CUDAAPI cuMemPoolImportFromShareableHandle(
+        CUmemoryPool *pool_out,
+        void *handle,
+        CUmemAllocationHandleType handleType,
+        unsigned long long flags);
+
+/**
+ * \brief Export data to share a memory pool allocation between processes.
+ *
+ * Constructs \p shareData_out for sharing a specific allocation from an already shared memory pool.
+ * The recipient process can import the allocation with the ::cuMemPoolImportPointer api.
+ * The data is not a handle and may be shared through any IPC mechanism.
+ *
+ * \param[out] shareData_out - Returned export data  
+ * \param[in] ptr            - pointer to memory being exported
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolImportFromShareableHandle, ::cuMemPoolImportPointer
+ */
+CUresult CUDAAPI cuMemPoolExportPointer(CUmemPoolPtrExportData *shareData_out, CUdeviceptr ptr);
+
+/**
+ * \brief Import a memory pool allocation from another process.
+ *
+ * Returns in \p ptr_out a pointer to the imported memory.
+ * The imported memory must not be accessed before the allocation operation completes
+ * in the exporting process. The imported memory must be freed from all importing processes before
+ * being freed in the exporting process. The pointer may be freed with cuMemFree
+ * or cuMemFreeAsync.  If cuMemFreeAsync is used, the free must be completed
+ * on the importing process before the free operation on the exporting process.
+ *
+ * \note The cuMemFreeAsync api may be used in the exporting process before
+ *       the cuMemFreeAsync operation completes in its stream as long as the
+ *       cuMemFreeAsync in the exporting process specifies a stream with
+ *       a stream dependency on the importing process's cuMemFreeAsync.
+ *
+ * \param[out] ptr_out  - pointer to imported memory
+ * \param[in] pool      - pool from which to import
+ * \param[in] shareData - data specifying the memory to import
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemPoolExportToShareableHandle, ::cuMemPoolImportFromShareableHandle, ::cuMemPoolExportPointer
+ */
+CUresult CUDAAPI cuMemPoolImportPointer(CUdeviceptr *ptr_out, CUmemoryPool pool, CUmemPoolPtrExportData *shareData);
+
+/** @} */ /* END CUDA_MALLOC_ASYNC */
+
+/**
+ * \defgroup CUDA_UNIFIED Unified Addressing
+ *
+ * ___MANBRIEF___ unified addressing functions of the low-level CUDA driver
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the unified addressing functions of the
+ * low-level CUDA driver application programming interface.
+ *
+ * @{
+ *
+ * \section CUDA_UNIFIED_overview Overview
+ *
+ * CUDA devices can share a unified address space with the host.
+ * For these devices there is no distinction between a device
+ * pointer and a host pointer -- the same pointer value may be
+ * used to access memory from the host program and from a kernel
+ * running on the device (with exceptions enumerated below).
+ *
+ * \section CUDA_UNIFIED_support Supported Platforms
+ *
+ * Whether or not a device supports unified addressing may be
+ * queried by calling ::cuDeviceGetAttribute() with the device
+ * attribute ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING.
+ *
+ * Unified addressing is automatically enabled in 64-bit processes
+ *
+ * \section CUDA_UNIFIED_lookup Looking Up Information from Pointer Values
+ *
+ * It is possible to look up information about the memory which backs a
+ * pointer value.  For instance, one may want to know if a pointer points
+ * to host or device memory.  As another example, in the case of device
+ * memory, one may want to know on which CUDA device the memory
+ * resides.  These properties may be queried using the function
+ * ::cuPointerGetAttribute()
+ *
+ * Since pointers are unique, it is not necessary to specify information
+ * about the pointers specified to the various copy functions in the
+ * CUDA API.  The function ::cuMemcpy() may be used to perform a copy
+ * between two pointers, ignoring whether they point to host or device
+ * memory (making ::cuMemcpyHtoD(), ::cuMemcpyDtoD(), and ::cuMemcpyDtoH()
+ * unnecessary for devices supporting unified addressing).  For
+ * multidimensional copies, the memory type ::CU_MEMORYTYPE_UNIFIED may be
+ * used to specify that the CUDA driver should infer the location of the
+ * pointer from its value.
+ *
+ * \section CUDA_UNIFIED_automaphost Automatic Mapping of Host Allocated Host Memory
+ *
+ * All host memory allocated in all contexts using ::cuMemAllocHost() and
+ * ::cuMemHostAlloc() is always directly accessible from all contexts on
+ * all devices that support unified addressing.  This is the case regardless
+ * of whether or not the flags ::CU_MEMHOSTALLOC_PORTABLE and
+ * ::CU_MEMHOSTALLOC_DEVICEMAP are specified.
+ *
+ * The pointer value through which allocated host memory may be accessed
+ * in kernels on all devices that support unified addressing is the same
+ * as the pointer value through which that memory is accessed on the host,
+ * so it is not necessary to call ::cuMemHostGetDevicePointer() to get the device
+ * pointer for these allocations.
+ *
+ * Note that this is not the case for memory allocated using the flag
+ * ::CU_MEMHOSTALLOC_WRITECOMBINED, as discussed below.
+ *
+ * \section CUDA_UNIFIED_autopeerregister Automatic Registration of Peer Memory
+ *
+ * Upon enabling direct access from a context that supports unified addressing
+ * to another peer context that supports unified addressing using
+ * ::cuCtxEnablePeerAccess() all memory allocated in the peer context using
+ * ::cuMemAlloc() and ::cuMemAllocPitch() will immediately be accessible
+ * by the current context.  The device pointer value through
+ * which any peer memory may be accessed in the current context
+ * is the same pointer value through which that memory may be
+ * accessed in the peer context.
+ *
+ * \section CUDA_UNIFIED_exceptions Exceptions, Disjoint Addressing
+ *
+ * Not all memory may be accessed on devices through the same pointer
+ * value through which they are accessed on the host.  These exceptions
+ * are host memory registered using ::cuMemHostRegister() and host memory
+ * allocated using the flag ::CU_MEMHOSTALLOC_WRITECOMBINED.  For these
+ * exceptions, there exists a distinct host and device address for the
+ * memory.  The device address is guaranteed to not overlap any valid host
+ * pointer range and is guaranteed to have the same value across all
+ * contexts that support unified addressing.
+ *
+ * This device address may be queried using ::cuMemHostGetDevicePointer()
+ * when a context using unified addressing is current.  Either the host
+ * or the unified device pointer value may be used to refer to this memory
+ * through ::cuMemcpy() and similar functions using the
+ * ::CU_MEMORYTYPE_UNIFIED memory type.
+ *
+ */
+
+/**
+ * \brief Returns information about a pointer
+ *
+ * The supported attributes are:
+ *
+ * - ::CU_POINTER_ATTRIBUTE_CONTEXT:
+ *
+ *      Returns in \p *data the ::CUcontext in which \p ptr was allocated or
+ *      registered.
+ *      The type of \p data must be ::CUcontext *.
+ *
+ *      If \p ptr was not allocated by, mapped by, or registered with
+ *      a ::CUcontext which uses unified virtual addressing then
+ *      ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_MEMORY_TYPE:
+ *
+ *      Returns in \p *data the physical memory type of the memory that
+ *      \p ptr addresses as a ::CUmemorytype enumerated value.
+ *      The type of \p data must be unsigned int.
+ *
+ *      If \p ptr addresses device memory then \p *data is set to
+ *      ::CU_MEMORYTYPE_DEVICE.  The particular ::CUdevice on which the
+ *      memory resides is the ::CUdevice of the ::CUcontext returned by the
+ *      ::CU_POINTER_ATTRIBUTE_CONTEXT attribute of \p ptr.
+ *
+ *      If \p ptr addresses host memory then \p *data is set to
+ *      ::CU_MEMORYTYPE_HOST.
+ *
+ *      If \p ptr was not allocated by, mapped by, or registered with
+ *      a ::CUcontext which uses unified virtual addressing then
+ *      ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ *      If the current ::CUcontext does not support unified virtual
+ *      addressing then ::CUDA_ERROR_INVALID_CONTEXT is returned.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER:
+ *
+ *      Returns in \p *data the device pointer value through which
+ *      \p ptr may be accessed by kernels running in the current
+ *      ::CUcontext.
+ *      The type of \p data must be CUdeviceptr *.
+ *
+ *      If there exists no device pointer value through which
+ *      kernels running in the current ::CUcontext may access
+ *      \p ptr then ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ *      If there is no current ::CUcontext then
+ *      ::CUDA_ERROR_INVALID_CONTEXT is returned.
+ *
+ *      Except in the exceptional disjoint addressing cases discussed
+ *      below, the value returned in \p *data will equal the input
+ *      value \p ptr.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_HOST_POINTER:
+ *
+ *      Returns in \p *data the host pointer value through which
+ *      \p ptr may be accessed by by the host program.
+ *      The type of \p data must be void **.
+ *      If there exists no host pointer value through which
+ *      the host program may directly access \p ptr then
+ *      ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ *      Except in the exceptional disjoint addressing cases discussed
+ *      below, the value returned in \p *data will equal the input
+ *      value \p ptr.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_P2P_TOKENS:
+ *
+ *      Returns in \p *data two tokens for use with the nv-p2p.h Linux
+ *      kernel interface. \p data must be a struct of type
+ *      CUDA_POINTER_ATTRIBUTE_P2P_TOKENS.
+ *
+ *      \p ptr must be a pointer to memory obtained from :cuMemAlloc().
+ *      Note that p2pToken and vaSpaceToken are only valid for the
+ *      lifetime of the source allocation. A subsequent allocation at
+ *      the same address may return completely different tokens.
+ *      Querying this attribute has a side effect of setting the attribute
+ *      ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS for the region of memory that
+ *      \p ptr points to.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS:
+ *
+ *      A boolean attribute which when set, ensures that synchronous memory operations
+ *      initiated on the region of memory that \p ptr points to will always synchronize.
+ *      See further documentation in the section titled "API synchronization behavior"
+ *      to learn more about cases when synchronous memory operations can
+ *      exhibit asynchronous behavior.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_BUFFER_ID:
+ *
+ *      Returns in \p *data a buffer ID which is guaranteed to be unique within the process.
+ *      \p data must point to an unsigned long long.
+ *
+ *      \p ptr must be a pointer to memory obtained from a CUDA memory allocation API.
+ *      Every memory allocation from any of the CUDA memory allocation APIs will
+ *      have a unique ID over a process lifetime. Subsequent allocations do not reuse IDs
+ *      from previous freed allocations. IDs are only unique within a single process.
+ *
+ *
+ * - ::CU_POINTER_ATTRIBUTE_IS_MANAGED:
+ *
+ *      Returns in \p *data a boolean that indicates whether the pointer points to
+ *      managed memory or not.
+ *
+ *      If \p ptr is not a valid CUDA pointer then ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL:
+ *
+ *      Returns in \p *data an integer representing a device ordinal of a device against
+ *      which the memory was allocated or registered.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE:
+ *
+ *      Returns in \p *data a boolean that indicates if this pointer maps to
+ *      an allocation that is suitable for ::cudaIpcGetMemHandle.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_RANGE_START_ADDR:
+ *
+ *      Returns in \p *data the starting address for the allocation referenced
+ *      by the device pointer \p ptr.  Note that this is not necessarily the
+ *      address of the mapped region, but the address of the mappable address
+ *      range \p ptr references (e.g. from ::cuMemAddressReserve).
+ *
+ * - ::CU_POINTER_ATTRIBUTE_RANGE_SIZE:
+ *
+ *      Returns in \p *data the size for the allocation referenced by the device
+ *      pointer \p ptr.  Note that this is not necessarily the size of the mapped
+ *      region, but the size of the mappable address range \p ptr references
+ *      (e.g. from ::cuMemAddressReserve).  To retrieve the size of the mapped
+ *      region, see ::cuMemGetAddressRange
+ *
+ * - ::CU_POINTER_ATTRIBUTE_MAPPED:
+ *
+ *      Returns in \p *data a boolean that indicates if this pointer is in a
+ *      valid address range that is mapped to a backing allocation.
+ *
+ * - ::CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES:
+ *
+ *      Returns a bitmask of the allowed handle types for an allocation that may
+ *      be passed to ::cuMemExportToShareableHandle.
+ * 
+ * - ::CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE:
+ * 
+ *      Returns in \p *data the handle to the mempool that the allocation was obtained from.
+ *
+ * \par
+ *
+ * Note that for most allocations in the unified virtual address space
+ * the host and device pointer for accessing the allocation will be the
+ * same.  The exceptions to this are
+ *  - user memory registered using ::cuMemHostRegister
+ *  - host memory allocated using ::cuMemHostAlloc with the
+ *    ::CU_MEMHOSTALLOC_WRITECOMBINED flag
+ * For these types of allocation there will exist separate, disjoint host
+ * and device addresses for accessing the allocation.  In particular
+ *  - The host address will correspond to an invalid unmapped device address
+ *    (which will result in an exception if accessed from the device)
+ *  - The device address will correspond to an invalid unmapped host address
+ *    (which will result in an exception if accessed from the host).
+ * For these types of allocations, querying ::CU_POINTER_ATTRIBUTE_HOST_POINTER
+ * and ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER may be used to retrieve the host
+ * and device addresses from either address.
+ *
+ * \param data      - Returned pointer attribute value
+ * \param attribute - Pointer attribute to query
+ * \param ptr       - Pointer
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuPointerSetAttribute,
+ * ::cuMemAlloc,
+ * ::cuMemFree,
+ * ::cuMemAllocHost,
+ * ::cuMemFreeHost,
+ * ::cuMemHostAlloc,
+ * ::cuMemHostRegister,
+ * ::cuMemHostUnregister,
+ * ::cudaPointerGetAttributes
+ */
+CUresult CUDAAPI cuPointerGetAttribute(void *data, CUpointer_attribute attribute, CUdeviceptr ptr);
+
+/**
+ * \brief Prefetches memory to the specified destination device
+ *
+ * Prefetches memory to the specified destination device.  \p devPtr is the
+ * base device pointer of the memory to be prefetched and \p dstDevice is the
+ * destination device. \p count specifies the number of bytes to copy. \p hStream
+ * is the stream in which the operation is enqueued. The memory range must refer
+ * to managed memory allocated via ::cuMemAllocManaged or declared via __managed__ variables.
+ *
+ * Passing in CU_DEVICE_CPU for \p dstDevice will prefetch the data to host memory. If
+ * \p dstDevice is a GPU, then the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS
+ * must be non-zero. Additionally, \p hStream must be associated with a device that has a
+ * non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ *
+ * The start address and end address of the memory range will be rounded down and rounded up
+ * respectively to be aligned to CPU page size before the prefetch operation is enqueued
+ * in the stream.
+ *
+ * If no physical memory has been allocated for this region, then this memory region
+ * will be populated and mapped on the destination device. If there's insufficient
+ * memory to prefetch the desired region, the Unified Memory driver may evict pages from other
+ * ::cuMemAllocManaged allocations to host memory in order to make room. Device memory
+ * allocated using ::cuMemAlloc or ::cuArrayCreate will not be evicted.
+ *
+ * By default, any mappings to the previous location of the migrated pages are removed and
+ * mappings for the new location are only setup on \p dstDevice. The exact behavior however
+ * also depends on the settings applied to this memory range via ::cuMemAdvise as described
+ * below:
+ *
+ * If ::CU_MEM_ADVISE_SET_READ_MOSTLY was set on any subset of this memory range,
+ * then that subset will create a read-only copy of the pages on \p dstDevice.
+ *
+ * If ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION was called on any subset of this memory
+ * range, then the pages will be migrated to \p dstDevice even if \p dstDevice is not the
+ * preferred location of any pages in the memory range.
+ *
+ * If ::CU_MEM_ADVISE_SET_ACCESSED_BY was called on any subset of this memory range,
+ * then mappings to those pages from all the appropriate processors are updated to
+ * refer to the new location if establishing such a mapping is possible. Otherwise,
+ * those mappings are cleared.
+ *
+ * Note that this API is not required for functionality and only serves to improve performance
+ * by allowing the application to migrate data to a suitable location before it is accessed.
+ * Memory accesses to this range are always coherent and are allowed even when the data is
+ * actively being migrated.
+ *
+ * Note that this function is asynchronous with respect to the host and all work
+ * on other devices.
+ *
+ * \param devPtr    - Pointer to be prefetched
+ * \param count     - Size in bytes
+ * \param dstDevice - Destination device to prefetch to
+ * \param hStream    - Stream to enqueue prefetch operation
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ * ::cuMemcpy3DPeerAsync, ::cuMemAdvise,
+ * ::cudaMemPrefetchAsync
+ */
+CUresult CUDAAPI cuMemPrefetchAsync(CUdeviceptr devPtr, size_t count, CUdevice dstDevice, CUstream hStream);
+
+/**
+ * \brief Advise about the usage of a given memory range
+ *
+ * Advise the Unified Memory subsystem about the usage pattern for the memory range
+ * starting at \p devPtr with a size of \p count bytes. The start address and end address of the memory
+ * range will be rounded down and rounded up respectively to be aligned to CPU page size before the
+ * advice is applied. The memory range must refer to managed memory allocated via ::cuMemAllocManaged
+ * or declared via __managed__ variables. The memory range could also refer to system-allocated pageable
+ * memory provided it represents a valid, host-accessible region of memory and all additional constraints
+ * imposed by \p advice as outlined below are also satisfied. Specifying an invalid system-allocated pageable
+ * memory range results in an error being returned.
+ *
+ * The \p advice parameter can take the following values:
+ * - ::CU_MEM_ADVISE_SET_READ_MOSTLY: This implies that the data is mostly going to be read
+ * from and only occasionally written to. Any read accesses from any processor to this region will create a
+ * read-only copy of at least the accessed pages in that processor's memory. Additionally, if ::cuMemPrefetchAsync
+ * is called on this region, it will create a read-only copy of the data on the destination processor.
+ * If any processor writes to this region, all copies of the corresponding page will be invalidated
+ * except for the one where the write occurred. The \p device argument is ignored for this advice.
+ * Note that for a page to be read-duplicated, the accessing processor must either be the CPU or a GPU
+ * that has a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ * Also, if a context is created on a device that does not have the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS set, then read-duplication will not occur until
+ * all such contexts are destroyed.
+ * If the memory region refers to valid system-allocated pageable memory, then the accessing device must
+ * have a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS for a read-only
+ * copy to be created on that device. Note however that if the accessing device also has a non-zero value for the
+ * device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES, then setting this advice
+ * will not create a read-only copy when that device accesses this memory region.
+ *
+ * - ::CU_MEM_ADVISE_UNSET_READ_MOSTLY:  Undoes the effect of ::CU_MEM_ADVISE_SET_READ_MOSTLY and also prevents the
+ * Unified Memory driver from attempting heuristic read-duplication on the memory range. Any read-duplicated
+ * copies of the data will be collapsed into a single copy. The location for the collapsed
+ * copy will be the preferred location if the page has a preferred location and one of the read-duplicated
+ * copies was resident at that location. Otherwise, the location chosen is arbitrary.
+ *
+ * - ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION: This advice sets the preferred location for the
+ * data to be the memory belonging to \p device. Passing in CU_DEVICE_CPU for \p device sets the
+ * preferred location as host memory. If \p device is a GPU, then it must have a non-zero value for the
+ * device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. Setting the preferred location
+ * does not cause data to migrate to that location immediately. Instead, it guides the migration policy
+ * when a fault occurs on that memory region. If the data is already in its preferred location and the
+ * faulting processor can establish a mapping without requiring the data to be migrated, then
+ * data migration will be avoided. On the other hand, if the data is not in its preferred location
+ * or if a direct mapping cannot be established, then it will be migrated to the processor accessing
+ * it. It is important to note that setting the preferred location does not prevent data prefetching
+ * done using ::cuMemPrefetchAsync.
+ * Having a preferred location can override the page thrash detection and resolution logic in the Unified
+ * Memory driver. Normally, if a page is detected to be constantly thrashing between for example host and device
+ * memory, the page may eventually be pinned to host memory by the Unified Memory driver. But
+ * if the preferred location is set as device memory, then the page will continue to thrash indefinitely.
+ * If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ * policies associated with that advice will override the policies of this advice, unless read accesses from
+ * \p device will not result in a read-only copy being created on that device as outlined in description for
+ * the advice ::CU_MEM_ADVISE_SET_READ_MOSTLY.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS. Additionally, if \p device has
+ * a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ * then this call has no effect. Note however that this behavior may change in the future.
+ *
+ * - ::CU_MEM_ADVISE_UNSET_PREFERRED_LOCATION: Undoes the effect of ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION
+ * and changes the preferred location to none.
+ *
+ * - ::CU_MEM_ADVISE_SET_ACCESSED_BY: This advice implies that the data will be accessed by \p device.
+ * Passing in ::CU_DEVICE_CPU for \p device will set the advice for the CPU. If \p device is a GPU, then
+ * the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS must be non-zero.
+ * This advice does not cause data migration and has no impact on the location of the data per se. Instead,
+ * it causes the data to always be mapped in the specified processor's page tables, as long as the
+ * location of the data permits a mapping to be established. If the data gets migrated for any reason,
+ * the mappings are updated accordingly.
+ * This advice is recommended in scenarios where data locality is not important, but avoiding faults is.
+ * Consider for example a system containing multiple GPUs with peer-to-peer access enabled, where the
+ * data located on one GPU is occasionally accessed by peer GPUs. In such scenarios, migrating data
+ * over to the other GPUs is not as important because the accesses are infrequent and the overhead of
+ * migration may be too high. But preventing faults can still help improve performance, and so having
+ * a mapping set up in advance is useful. Note that on CPU access of this data, the data may be migrated
+ * to host memory because the CPU typically cannot access device memory directly. Any GPU that had the
+ * ::CU_MEM_ADVISE_SET_ACCESSED_BY flag set for this data will now have its mapping updated to point to the
+ * page in host memory.
+ * If ::CU_MEM_ADVISE_SET_READ_MOSTLY is also set on this memory region or any subset of it, then the
+ * policies associated with that advice will override the policies of this advice. Additionally, if the
+ * preferred location of this memory region or any subset of it is also \p device, then the policies
+ * associated with ::CU_MEM_ADVISE_SET_PREFERRED_LOCATION will override the policies of this advice.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS. Additionally, if \p device has
+ * a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ * then this call has no effect.
+ *
+ * - ::CU_MEM_ADVISE_UNSET_ACCESSED_BY: Undoes the effect of ::CU_MEM_ADVISE_SET_ACCESSED_BY. Any mappings to
+ * the data from \p device may be removed at any time causing accesses to result in non-fatal page faults.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS. Additionally, if \p device has
+ * a non-zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS_USES_HOST_PAGE_TABLES,
+ * then this call has no effect.
+ *
+ * \param devPtr - Pointer to memory to set the advice for
+ * \param count  - Size in bytes of the memory range
+ * \param advice - Advice to be applied for the specified memory range
+ * \param device - Device to apply the advice for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuMemcpy, ::cuMemcpyPeer, ::cuMemcpyAsync,
+ * ::cuMemcpy3DPeerAsync, ::cuMemPrefetchAsync,
+ * ::cudaMemAdvise
+ */
+CUresult CUDAAPI cuMemAdvise(CUdeviceptr devPtr, size_t count, CUmem_advise advice, CUdevice device);
+
+/**
+ * \brief Query an attribute of a given memory range
+ *
+ * Query an attribute about the memory range starting at \p devPtr with a size of \p count bytes. The
+ * memory range must refer to managed memory allocated via ::cuMemAllocManaged or declared via
+ * __managed__ variables.
+ *
+ * The \p attribute parameter can take the following values:
+ * - ::CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY: If this attribute is specified, \p data will be interpreted
+ * as a 32-bit integer, and \p dataSize must be 4. The result returned will be 1 if all pages in the given
+ * memory range have read-duplication enabled, or 0 otherwise.
+ * - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION: If this attribute is specified, \p data will be
+ * interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be a GPU device
+ * id if all pages in the memory range have that GPU as their preferred location, or it will be CU_DEVICE_CPU
+ * if all pages in the memory range have the CPU as their preferred location, or it will be CU_DEVICE_INVALID
+ * if either all the pages don't have the same preferred location or some of the pages don't have a
+ * preferred location at all. Note that the actual location of the pages in the memory range at the time of
+ * the query may be different from the preferred location.
+ * - ::CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY: If this attribute is specified, \p data will be interpreted
+ * as an array of 32-bit integers, and \p dataSize must be a non-zero multiple of 4. The result returned
+ * will be a list of device ids that had ::CU_MEM_ADVISE_SET_ACCESSED_BY set for that entire memory range.
+ * If any device does not have that advice set for the entire memory range, that device will not be included.
+ * If \p data is larger than the number of devices that have that advice set for that memory range,
+ * CU_DEVICE_INVALID will be returned in all the extra space provided. For ex., if \p dataSize is 12
+ * (i.e. \p data has 3 elements) and only device 0 has the advice set, then the result returned will be
+ * { 0, CU_DEVICE_INVALID, CU_DEVICE_INVALID }. If \p data is smaller than the number of devices that have
+ * that advice set, then only as many devices will be returned as can fit in the array. There is no
+ * guarantee on which specific devices will be returned, however.
+ * - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION: If this attribute is specified, \p data will be
+ * interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be the last location
+ * to which all pages in the memory range were prefetched explicitly via ::cuMemPrefetchAsync. This will either be
+ * a GPU id or CU_DEVICE_CPU depending on whether the last location for prefetch was a GPU or the CPU
+ * respectively. If any page in the memory range was never explicitly prefetched or if all pages were not
+ * prefetched to the same location, CU_DEVICE_INVALID will be returned. Note that this simply returns the
+ * last location that the applicaton requested to prefetch the memory range to. It gives no indication as to
+ * whether the prefetch operation to that location has completed or even begun.
+ *
+ * \param data      - A pointers to a memory location where the result
+ *                    of each attribute query will be written to.
+ * \param dataSize  - Array containing the size of data
+ * \param attribute - The attribute to query
+ * \param devPtr    - Start of the range to query
+ * \param count     - Size of the range to query
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ *
+ * \sa ::cuMemRangeGetAttributes, ::cuMemPrefetchAsync,
+ * ::cuMemAdvise,
+ * ::cudaMemRangeGetAttribute
+ */
+CUresult CUDAAPI cuMemRangeGetAttribute(void *data, size_t dataSize, CUmem_range_attribute attribute, CUdeviceptr devPtr, size_t count);
+
+/**
+ * \brief Query attributes of a given memory range.
+ *
+ * Query attributes of the memory range starting at \p devPtr with a size of \p count bytes. The
+ * memory range must refer to managed memory allocated via ::cuMemAllocManaged or declared via
+ * __managed__ variables. The \p attributes array will be interpreted to have \p numAttributes
+ * entries. The \p dataSizes array will also be interpreted to have \p numAttributes entries.
+ * The results of the query will be stored in \p data.
+ *
+ * The list of supported attributes are given below. Please refer to ::cuMemRangeGetAttribute for
+ * attribute descriptions and restrictions.
+ *
+ * - ::CU_MEM_RANGE_ATTRIBUTE_READ_MOSTLY
+ * - ::CU_MEM_RANGE_ATTRIBUTE_PREFERRED_LOCATION
+ * - ::CU_MEM_RANGE_ATTRIBUTE_ACCESSED_BY
+ * - ::CU_MEM_RANGE_ATTRIBUTE_LAST_PREFETCH_LOCATION
+ *
+ * \param data          - A two-dimensional array containing pointers to memory
+ *                        locations where the result of each attribute query will be written to.
+ * \param dataSizes     - Array containing the sizes of each result
+ * \param attributes    - An array of attributes to query
+ *                        (numAttributes and the number of attributes in this array should match)
+ * \param numAttributes - Number of attributes to query
+ * \param devPtr        - Start of the range to query
+ * \param count         - Size of the range to query
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa ::cuMemRangeGetAttribute, ::cuMemAdvise,
+ * ::cuMemPrefetchAsync,
+ * ::cudaMemRangeGetAttributes
+ */
+CUresult CUDAAPI cuMemRangeGetAttributes(void **data, size_t *dataSizes, CUmem_range_attribute *attributes, size_t numAttributes, CUdeviceptr devPtr, size_t count);
+
+/**
+ * \brief Set attributes on a previously allocated memory region
+ *
+ * The supported attributes are:
+ *
+ * - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS:
+ *
+ *      A boolean attribute that can either be set (1) or unset (0). When set,
+ *      the region of memory that \p ptr points to is guaranteed to always synchronize
+ *      memory operations that are synchronous. If there are some previously initiated
+ *      synchronous memory operations that are pending when this attribute is set, the
+ *      function does not return until those memory operations are complete.
+ *      See further documentation in the section titled "API synchronization behavior"
+ *      to learn more about cases when synchronous memory operations can
+ *      exhibit asynchronous behavior.
+ *      \p value will be considered as a pointer to an unsigned integer to which this attribute is to be set.
+ *
+ * \param value     - Pointer to memory containing the value to be set
+ * \param attribute - Pointer attribute to set
+ * \param ptr       - Pointer to a memory region allocated using CUDA memory allocation APIs
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa ::cuPointerGetAttribute,
+ * ::cuPointerGetAttributes,
+ * ::cuMemAlloc,
+ * ::cuMemFree,
+ * ::cuMemAllocHost,
+ * ::cuMemFreeHost,
+ * ::cuMemHostAlloc,
+ * ::cuMemHostRegister,
+ * ::cuMemHostUnregister
+ */
+CUresult CUDAAPI cuPointerSetAttribute(const void *value, CUpointer_attribute attribute, CUdeviceptr ptr);
+
+/**
+ * \brief Returns information about a pointer.
+ *
+ * The supported attributes are (refer to ::cuPointerGetAttribute for attribute descriptions and restrictions):
+ *
+ * - ::CU_POINTER_ATTRIBUTE_CONTEXT
+ * - ::CU_POINTER_ATTRIBUTE_MEMORY_TYPE
+ * - ::CU_POINTER_ATTRIBUTE_DEVICE_POINTER
+ * - ::CU_POINTER_ATTRIBUTE_HOST_POINTER
+ * - ::CU_POINTER_ATTRIBUTE_SYNC_MEMOPS
+ * - ::CU_POINTER_ATTRIBUTE_BUFFER_ID
+ * - ::CU_POINTER_ATTRIBUTE_IS_MANAGED
+ * - ::CU_POINTER_ATTRIBUTE_DEVICE_ORDINAL
+ * - ::CU_POINTER_ATTRIBUTE_RANGE_START_ADDR
+ * - ::CU_POINTER_ATTRIBUTE_RANGE_SIZE
+ * - ::CU_POINTER_ATTRIBUTE_MAPPED
+ * - ::CU_POINTER_ATTRIBUTE_IS_LEGACY_CUDA_IPC_CAPABLE
+ * - ::CU_POINTER_ATTRIBUTE_ALLOWED_HANDLE_TYPES
+ * - ::CU_POINTER_ATTRIBUTE_MEMPOOL_HANDLE
+ *
+ * \param numAttributes - Number of attributes to query
+ * \param attributes    - An array of attributes to query
+ *                      (numAttributes and the number of attributes in this array should match)
+ * \param data          - A two-dimensional array containing pointers to memory
+ *                      locations where the result of each attribute query will be written to.
+ * \param ptr           - Pointer to query
+ *
+ * Unlike ::cuPointerGetAttribute, this function will not return an error when the \p ptr
+ * encountered is not a valid CUDA pointer. Instead, the attributes are assigned default NULL values
+ * and CUDA_SUCCESS is returned.
+ *
+ * If \p ptr was not allocated by, mapped by, or registered with a ::CUcontext which uses UVA
+ * (Unified Virtual Addressing), ::CUDA_ERROR_INVALID_CONTEXT is returned.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuPointerGetAttribute,
+ * ::cuPointerSetAttribute,
+ * ::cudaPointerGetAttributes
+ */
+CUresult CUDAAPI cuPointerGetAttributes(unsigned int numAttributes, CUpointer_attribute *attributes, void **data, CUdeviceptr ptr);
+
+/** @} */ /* END CUDA_UNIFIED */
+
+/**
+ * \defgroup CUDA_STREAM Stream Management
+ *
+ * ___MANBRIEF___ stream management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the stream management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Create a stream
+ *
+ * Creates a stream and returns a handle in \p phStream.  The \p Flags argument
+ * determines behaviors of the stream.
+ *
+ * Valid values for \p Flags are:
+ * - ::CU_STREAM_DEFAULT: Default stream creation flag.
+ * - ::CU_STREAM_NON_BLOCKING: Specifies that work running in the created
+ *   stream may run concurrently with work in stream 0 (the NULL stream), and that
+ *   the created stream should perform no implicit synchronization with stream 0.
+ *
+ * \param phStream - Returned newly created stream
+ * \param Flags    - Parameters for stream creation
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuStreamDestroy,
+ * ::cuStreamCreateWithPriority,
+ * ::cuStreamGetPriority,
+ * ::cuStreamGetFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamCreate,
+ * ::cudaStreamCreateWithFlags
+ */
+CUresult CUDAAPI cuStreamCreate(CUstream *phStream, unsigned int Flags);
+
+/**
+ * \brief Create a stream with the given priority
+ *
+ * Creates a stream with the specified priority and returns a handle in \p phStream.
+ * This API alters the scheduler priority of work in the stream. Work in a higher
+ * priority stream may preempt work already executing in a low priority stream.
+ *
+ * \p priority follows a convention where lower numbers represent higher priorities.
+ * '0' represents default priority. The range of meaningful numerical priorities can
+ * be queried using ::cuCtxGetStreamPriorityRange. If the specified priority is
+ * outside the numerical range returned by ::cuCtxGetStreamPriorityRange,
+ * it will automatically be clamped to the lowest or the highest number in the range.
+ *
+ * \param phStream    - Returned newly created stream
+ * \param flags       - Flags for stream creation. See ::cuStreamCreate for a list of
+ *                      valid flags
+ * \param priority    - Stream priority. Lower numbers represent higher priorities.
+ *                      See ::cuCtxGetStreamPriorityRange for more information about
+ *                      meaningful stream priorities that can be passed.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \note Stream priorities are supported only on GPUs
+ * with compute capability 3.5 or higher.
+ *
+ * \note In the current implementation, only compute kernels launched in
+ * priority streams are affected by the stream's priority. Stream priorities have
+ * no effect on host-to-device and device-to-host memory operations.
+ *
+ * \sa ::cuStreamDestroy,
+ * ::cuStreamCreate,
+ * ::cuStreamGetPriority,
+ * ::cuCtxGetStreamPriorityRange,
+ * ::cuStreamGetFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamCreateWithPriority
+ */
+CUresult CUDAAPI cuStreamCreateWithPriority(CUstream *phStream, unsigned int flags, int priority);
+
+
+/**
+ * \brief Query the priority of a given stream
+ *
+ * Query the priority of a stream created using ::cuStreamCreate or ::cuStreamCreateWithPriority
+ * and return the priority in \p priority. Note that if the stream was created with a
+ * priority outside the numerical range returned by ::cuCtxGetStreamPriorityRange,
+ * this function returns the clamped priority.
+ * See ::cuStreamCreateWithPriority for details about priority clamping.
+ *
+ * \param hStream    - Handle to the stream to be queried
+ * \param priority   - Pointer to a signed integer in which the stream's priority is returned
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuStreamDestroy,
+ * ::cuStreamCreate,
+ * ::cuStreamCreateWithPriority,
+ * ::cuCtxGetStreamPriorityRange,
+ * ::cuStreamGetFlags,
+ * ::cudaStreamGetPriority
+ */
+CUresult CUDAAPI cuStreamGetPriority(CUstream hStream, int *priority);
+
+/**
+ * \brief Query the flags of a given stream
+ *
+ * Query the flags of a stream created using ::cuStreamCreate or ::cuStreamCreateWithPriority
+ * and return the flags in \p flags.
+ *
+ * \param hStream    - Handle to the stream to be queried
+ * \param flags      - Pointer to an unsigned integer in which the stream's flags are returned
+ *                     The value returned in \p flags is a logical 'OR' of all flags that
+ *                     were used while creating this stream. See ::cuStreamCreate for the list
+ *                     of valid flags
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuStreamDestroy,
+ * ::cuStreamCreate,
+ * ::cuStreamGetPriority,
+ * ::cudaStreamGetFlags
+ */
+CUresult CUDAAPI cuStreamGetFlags(CUstream hStream, unsigned int *flags);
+
+/**
+ * \brief Query the context associated with a stream
+ *
+ * Returns the CUDA context that the stream is associated with.
+ *
+ * The stream handle \p hStream can refer to any of the following:
+ * <ul>
+ *   <li>a stream created via any of the CUDA driver APIs such as ::cuStreamCreate
+ *   and ::cuStreamCreateWithPriority, or their runtime API equivalents such as
+ *   ::cudaStreamCreate, ::cudaStreamCreateWithFlags and ::cudaStreamCreateWithPriority.
+ *   The returned context is the context that was active in the calling thread when the
+ *   stream was created. Passing an invalid handle will result in undefined behavior.</li>
+ *   <li>any of the special streams such as the NULL stream, ::CU_STREAM_LEGACY and
+ *   ::CU_STREAM_PER_THREAD. The runtime API equivalents of these are also accepted,
+ *   which are NULL, ::cudaStreamLegacy and ::cudaStreamPerThread respectively.
+ *   Specifying any of the special handles will return the context current to the
+ *   calling thread. If no context is current to the calling thread,
+ *   ::CUDA_ERROR_INVALID_CONTEXT is returned.</li>
+ * </ul>
+ *
+ * \param hStream - Handle to the stream to be queried
+ * \param pctx    - Returned context associated with the stream
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * \notefnerr
+ *
+ * \sa ::cuStreamDestroy,
+ * ::cuStreamCreateWithPriority,
+ * ::cuStreamGetPriority,
+ * ::cuStreamGetFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamCreate,
+ * ::cudaStreamCreateWithFlags
+ */
+CUresult CUDAAPI cuStreamGetCtx(CUstream hStream, CUcontext *pctx);
+
+/**
+ * \brief Make a compute stream wait on an event
+ *
+ * Makes all future work submitted to \p hStream wait for all work captured in
+ * \p hEvent.  See ::cuEventRecord() for details on what is captured by an event.
+ * The synchronization will be performed efficiently on the device when applicable.
+ * \p hEvent may be from a different context or device than \p hStream.
+ *
+ * flags include:
+ * - ::CU_EVENT_WAIT_DEFAULT: Default event creation flag.
+ * - ::CU_EVENT_WAIT_EXTERNAL: Event is captured in the graph as an external
+ *   event node when performing stream capture. This flag is invalid outside
+ *   of stream capture.
+ *
+ * \param hStream - Stream to wait
+ * \param hEvent  - Event to wait on (may not be NULL)
+ * \param Flags   - See ::CUevent_capture_flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuEventRecord,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cuStreamDestroy,
+ * ::cudaStreamWaitEvent
+ */
+CUresult CUDAAPI cuStreamWaitEvent(CUstream hStream, CUevent hEvent, unsigned int Flags);
+
+/**
+ * \brief Add a callback to a compute stream
+ *
+ * \note This function is slated for eventual deprecation and removal. If
+ * you do not require the callback to execute in case of a device error,
+ * consider using ::cuLaunchHostFunc. Additionally, this function is not
+ * supported with ::cuStreamBeginCapture and ::cuStreamEndCapture, unlike
+ * ::cuLaunchHostFunc.
+ *
+ * Adds a callback to be called on the host after all currently enqueued
+ * items in the stream have completed.  For each
+ * cuStreamAddCallback call, the callback will be executed exactly once.
+ * The callback will block later work in the stream until it is finished.
+ *
+ * The callback may be passed ::CUDA_SUCCESS or an error code.  In the event
+ * of a device error, all subsequently executed callbacks will receive an
+ * appropriate ::CUresult.
+ *
+ * Callbacks must not make any CUDA API calls.  Attempting to use a CUDA API
+ * will result in ::CUDA_ERROR_NOT_PERMITTED.  Callbacks must not perform any
+ * synchronization that may depend on outstanding device work or other callbacks
+ * that are not mandated to run earlier.  Callbacks without a mandated order
+ * (in independent streams) execute in undefined order and may be serialized.
+ *
+ * For the purposes of Unified Memory, callback execution makes a number of
+ * guarantees:
+ * <ul>
+ *   <li>The callback stream is considered idle for the duration of the
+ *   callback.  Thus, for example, a callback may always use memory attached
+ *   to the callback stream.</li>
+ *   <li>The start of execution of a callback has the same effect as
+ *   synchronizing an event recorded in the same stream immediately prior to
+ *   the callback.  It thus synchronizes streams which have been "joined"
+ *   prior to the callback.</li>
+ *   <li>Adding device work to any stream does not have the effect of making
+ *   the stream active until all preceding host functions and stream callbacks
+ *   have executed.  Thus, for
+ *   example, a callback might use global attached memory even if work has
+ *   been added to another stream, if the work has been ordered behind the
+ *   callback with an event.</li>
+ *   <li>Completion of a callback does not cause a stream to become
+ *   active except as described above.  The callback stream will remain idle
+ *   if no device work follows the callback, and will remain idle across
+ *   consecutive callbacks without device work in between.  Thus, for example,
+ *   stream synchronization can be done by signaling from a callback at the
+ *   end of the stream.</li>
+ * </ul>
+ *
+ * \param hStream  - Stream to add callback to
+ * \param callback - The function to call once preceding stream operations are complete
+ * \param userData - User specified data to be passed to the callback function
+ * \param flags    - Reserved for future use, must be 0
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamDestroy,
+ * ::cuMemAllocManaged,
+ * ::cuStreamAttachMemAsync,
+ * ::cuStreamLaunchHostFunc,
+ * ::cudaStreamAddCallback
+ */
+CUresult CUDAAPI cuStreamAddCallback(CUstream hStream, CUstreamCallback callback, void *userData, unsigned int flags);
+
+/**
+ * \brief Begins graph capture on a stream
+ *
+ * Begin graph capture on \p hStream. When a stream is in capture mode, all operations
+ * pushed into the stream will not be executed, but will instead be captured into
+ * a graph, which will be returned via ::cuStreamEndCapture. Capture may not be initiated
+ * if \p stream is CU_STREAM_LEGACY. Capture must be ended on the same stream in which
+ * it was initiated, and it may only be initiated if the stream is not already in capture
+ * mode. The capture mode may be queried via ::cuStreamIsCapturing. A unique id
+ * representing the capture sequence may be queried via ::cuStreamGetCaptureInfo.
+ *
+ * If \p mode is not ::CU_STREAM_CAPTURE_MODE_RELAXED, ::cuStreamEndCapture must be
+ * called on this stream from the same thread.
+ *
+ * \param hStream - Stream in which to initiate capture
+ * \param mode    - Controls the interaction of this capture sequence with other API
+ *                  calls that are potentially unsafe. For more details see
+ *                  ::cuThreadExchangeStreamCaptureMode.
+ *
+ * \note Kernels captured using this API must not use texture and surface references.
+ *       Reading or writing through any texture or surface reference is undefined
+ *       behavior. This restriction does not apply to texture and surface objects.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamCreate,
+ * ::cuStreamIsCapturing,
+ * ::cuStreamEndCapture,
+ * ::cuThreadExchangeStreamCaptureMode
+ */
+CUresult CUDAAPI cuStreamBeginCapture(CUstream hStream, CUstreamCaptureMode mode);
+
+/**
+ * \brief Swaps the stream capture interaction mode for a thread
+ *
+ * Sets the calling thread's stream capture interaction mode to the value contained
+ * in \p *mode, and overwrites \p *mode with the previous mode for the thread. To
+ * facilitate deterministic behavior across function or module boundaries, callers
+ * are encouraged to use this API in a push-pop fashion: \code
+     CUstreamCaptureMode mode = desiredMode;
+     cuThreadExchangeStreamCaptureMode(&mode);
+     ...
+     cuThreadExchangeStreamCaptureMode(&mode); // restore previous mode
+ * \endcode
+ *
+ * During stream capture (see ::cuStreamBeginCapture), some actions, such as a call
+ * to ::cudaMalloc, may be unsafe. In the case of ::cudaMalloc, the operation is
+ * not enqueued asynchronously to a stream, and is not observed by stream capture.
+ * Therefore, if the sequence of operations captured via ::cuStreamBeginCapture
+ * depended on the allocation being replayed whenever the graph is launched, the
+ * captured graph would be invalid.
+ *
+ * Therefore, stream capture places restrictions on API calls that can be made within
+ * or concurrently to a ::cuStreamBeginCapture-::cuStreamEndCapture sequence. This
+ * behavior can be controlled via this API and flags to ::cuStreamBeginCapture.
+ *
+ * A thread's mode is one of the following:
+ * - \p CU_STREAM_CAPTURE_MODE_GLOBAL: This is the default mode. If the local thread has
+ *   an ongoing capture sequence that was not initiated with
+ *   \p CU_STREAM_CAPTURE_MODE_RELAXED at \p cuStreamBeginCapture, or if any other thread
+ *   has a concurrent capture sequence initiated with \p CU_STREAM_CAPTURE_MODE_GLOBAL,
+ *   this thread is prohibited from potentially unsafe API calls.
+ * - \p CU_STREAM_CAPTURE_MODE_THREAD_LOCAL: If the local thread has an ongoing capture
+ *   sequence not initiated with \p CU_STREAM_CAPTURE_MODE_RELAXED, it is prohibited
+ *   from potentially unsafe API calls. Concurrent capture sequences in other threads
+ *   are ignored.
+ * - \p CU_STREAM_CAPTURE_MODE_RELAXED: The local thread is not prohibited from potentially
+ *   unsafe API calls. Note that the thread is still prohibited from API calls which
+ *   necessarily conflict with stream capture, for example, attempting ::cuEventQuery
+ *   on an event that was last recorded inside a capture sequence.
+ *
+ * \param mode - Pointer to mode value to swap with the current mode
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamBeginCapture
+ */
+CUresult CUDAAPI cuThreadExchangeStreamCaptureMode(CUstreamCaptureMode *mode);
+
+/**
+ * \brief Ends capture on a stream, returning the captured graph
+ *
+ * End capture on \p hStream, returning the captured graph via \p phGraph.
+ * Capture must have been initiated on \p hStream via a call to ::cuStreamBeginCapture.
+ * If capture was invalidated, due to a violation of the rules of stream capture, then
+ * a NULL graph will be returned.
+ *
+ * If the \p mode argument to ::cuStreamBeginCapture was not
+ * ::CU_STREAM_CAPTURE_MODE_RELAXED, this call must be from the same thread as
+ * ::cuStreamBeginCapture.
+ *
+ * \param hStream - Stream to query
+ * \param phGraph - The captured graph
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_STREAM_CAPTURE_WRONG_THREAD
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamCreate,
+ * ::cuStreamBeginCapture,
+ * ::cuStreamIsCapturing
+ */
+CUresult CUDAAPI cuStreamEndCapture(CUstream hStream, CUgraph *phGraph);
+
+/**
+ * \brief Returns a stream's capture status
+ *
+ * Return the capture status of \p hStream via \p captureStatus. After a successful
+ * call, \p *captureStatus will contain one of the following:
+ * - ::CU_STREAM_CAPTURE_STATUS_NONE: The stream is not capturing.
+ * - ::CU_STREAM_CAPTURE_STATUS_ACTIVE: The stream is capturing.
+ * - ::CU_STREAM_CAPTURE_STATUS_INVALIDATED: The stream was capturing but an error
+ *   has invalidated the capture sequence. The capture sequence must be terminated
+ *   with ::cuStreamEndCapture on the stream where it was initiated in order to
+ *   continue using \p hStream.
+ *
+ * Note that, if this is called on ::CU_STREAM_LEGACY (the "null stream") while
+ * a blocking stream in the same context is capturing, it will return
+ * ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT and \p *captureStatus is unspecified
+ * after the call. The blocking stream capture is not invalidated.
+ *
+ * When a blocking stream is capturing, the legacy stream is in an
+ * unusable state until the blocking stream capture is terminated. The legacy
+ * stream is not supported for stream capture, but attempted use would have an
+ * implicit dependency on the capturing stream(s).
+ *
+ * \param hStream       - Stream to query
+ * \param captureStatus - Returns the stream's capture status
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamCreate,
+ * ::cuStreamBeginCapture,
+ * ::cuStreamEndCapture
+ */
+CUresult CUDAAPI cuStreamIsCapturing(CUstream hStream, CUstreamCaptureStatus *captureStatus);
+
+/**
+ * \brief Query capture status of a stream
+ *
+ * Note there is a later version of this API, ::cuStreamGetCaptureInfo_v2. It will
+ * supplant this version in 12.0, which is retained for minor version compatibility.
+ *
+ * Query the capture status of a stream and and get an id for 
+ * the capture sequence, which is unique over the lifetime of the process.
+ *
+ * If called on ::CU_STREAM_LEGACY (the "null stream") while a stream not created 
+ * with ::CU_STREAM_NON_BLOCKING is capturing, returns ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT.
+ *
+ * A valid id is returned only if both of the following are true:
+ * - the call returns CUDA_SUCCESS
+ * - captureStatus is set to ::CU_STREAM_CAPTURE_STATUS_ACTIVE
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamGetCaptureInfo_v2,
+ * ::cuStreamBeginCapture,
+ * ::cuStreamIsCapturing
+ */
+CUresult CUDAAPI cuStreamGetCaptureInfo(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out);
+
+/**
+ * \brief Query a stream's capture state (11.3+)
+ *
+ * Query stream state related to stream capture.
+ *
+ * If called on ::CU_STREAM_LEGACY (the "null stream") while a stream not created 
+ * with ::CU_STREAM_NON_BLOCKING is capturing, returns ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT.
+ *
+ * Valid data (other than capture status) is returned only if both of the following are true:
+ * - the call returns CUDA_SUCCESS
+ * - the returned capture status is ::CU_STREAM_CAPTURE_STATUS_ACTIVE
+ *
+ * This version of cuStreamGetCaptureInfo is introduced in CUDA 11.3 and will supplant the
+ * previous version in 12.0. Developers requiring compatibility across minor versions to
+ * CUDA 11.0 (driver version 445) should use ::cuStreamGetCaptureInfo or include a fallback
+ * path.
+ *
+ * \param hStream - The stream to query
+ * \param captureStatus_out - Location to return the capture status of the stream; required
+ * \param id_out - Optional location to return an id for the capture sequence, which is
+ *           unique over the lifetime of the process
+ * \param graph_out - Optional location to return the graph being captured into. All
+ *           operations other than destroy and node removal are permitted on the graph
+ *           while the capture sequence is in progress. This API does not transfer
+ *           ownership of the graph, which is transferred or destroyed at
+ *           ::cuStreamEndCapture. Note that the graph handle may be invalidated before
+ *           end of capture for certain errors. Nodes that are or become
+ *           unreachable from the original stream at ::cuStreamEndCapture due to direct
+ *           actions on the graph do not trigger ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED.
+ * \param dependencies_out - Optional location to store a pointer to an array of nodes.
+ *           The next node to be captured in the stream will depend on this set of nodes,
+ *           absent operations such as event wait which modify this set. The array pointer
+ *           is valid until the next API call which operates on the stream or until end of
+ *           capture. The node handles may be copied out and are valid until they or the
+ *           graph is destroyed. The driver-owned array may also be passed directly to
+ *           APIs that operate on the graph (not the stream) without copying.
+ * \param numDependencies_out - Optional location to store the size of the array
+ *           returned in dependencies_out.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_STREAM_CAPTURE_IMPLICIT
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamGetCaptureInfo,
+ * ::cuStreamBeginCapture,
+ * ::cuStreamIsCapturing,
+ * ::cuStreamUpdateCaptureDependencies
+ */
+CUresult CUDAAPI cuStreamGetCaptureInfo_v2(CUstream hStream, CUstreamCaptureStatus *captureStatus_out,
+        cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
+
+/**
+ * \brief Update the set of dependencies in a capturing stream (11.3+)
+ *
+ * Modifies the dependency set of a capturing stream. The dependency set is the set
+ * of nodes that the next captured node in the stream will depend on.
+ *
+ * Valid flags are ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES and
+ * ::CU_STREAM_SET_CAPTURE_DEPENDENCIES. These control whether the set passed to
+ * the API is added to the existing set or replaces it. A flags value of 0 defaults
+ * to ::CU_STREAM_ADD_CAPTURE_DEPENDENCIES.
+ *
+ * Nodes that are removed from the dependency set via this API do not result in
+ * ::CUDA_ERROR_STREAM_CAPTURE_UNJOINED if they are unreachable from the stream at
+ * ::cuStreamEndCapture.
+ *
+ * Returns ::CUDA_ERROR_ILLEGAL_STATE if the stream is not capturing.
+ *
+ * This API is new in CUDA 11.3. Developers requiring compatibility across minor
+ * versions to CUDA 11.0 should not use this API or provide a fallback.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_ILLEGAL_STATE
+ *
+ * \sa
+ * ::cuStreamBeginCapture,
+ * ::cuStreamGetCaptureInfo,
+ * ::cuStreamGetCaptureInfo_v2
+ */
+CUresult CUDAAPI cuStreamUpdateCaptureDependencies(CUstream hStream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
+
+/**
+ * \brief Attach memory to a stream asynchronously
+ *
+ * Enqueues an operation in \p hStream to specify stream association of
+ * \p length bytes of memory starting from \p dptr. This function is a
+ * stream-ordered operation, meaning that it is dependent on, and will
+ * only take effect when, previous work in stream has completed. Any
+ * previous association is automatically replaced.
+ *
+ * \p dptr must point to one of the following types of memories:
+ * - managed memory declared using the __managed__ keyword or allocated with
+ *   ::cuMemAllocManaged.
+ * - a valid host-accessible region of system-allocated pageable memory. This
+ *   type of memory may only be specified if the device associated with the
+ *   stream reports a non-zero value for the device attribute
+ *   ::CU_DEVICE_ATTRIBUTE_PAGEABLE_MEMORY_ACCESS.
+ *
+ * For managed allocations, \p length must be either zero or the entire
+ * allocation's size. Both indicate that the entire allocation's stream
+ * association is being changed. Currently, it is not possible to change stream
+ * association for a portion of a managed allocation.
+ *
+ * For pageable host allocations, \p length must be non-zero.
+ *
+ * The stream association is specified using \p flags which must be
+ * one of ::CUmemAttach_flags.
+ * If the ::CU_MEM_ATTACH_GLOBAL flag is specified, the memory can be accessed
+ * by any stream on any device.
+ * If the ::CU_MEM_ATTACH_HOST flag is specified, the program makes a guarantee
+ * that it won't access the memory on the device from any stream on a device that
+ * has a zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS.
+ * If the ::CU_MEM_ATTACH_SINGLE flag is specified and \p hStream is associated with
+ * a device that has a zero value for the device attribute ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS,
+ * the program makes a guarantee that it will only access the memory on the device
+ * from \p hStream. It is illegal to attach singly to the NULL stream, because the
+ * NULL stream is a virtual global stream and not a specific stream. An error will
+ * be returned in this case.
+ *
+ * When memory is associated with a single stream, the Unified Memory system will
+ * allow CPU access to this memory region so long as all operations in \p hStream
+ * have completed, regardless of whether other streams are active. In effect,
+ * this constrains exclusive ownership of the managed memory region by
+ * an active GPU to per-stream activity instead of whole-GPU activity.
+ *
+ * Accessing memory on the device from streams that are not associated with
+ * it will produce undefined results. No error checking is performed by the
+ * Unified Memory system to ensure that kernels launched into other streams
+ * do not access this region.
+ *
+ * It is a program's responsibility to order calls to ::cuStreamAttachMemAsync
+ * via events, synchronization or other means to ensure legal access to memory
+ * at all times. Data visibility and coherency will be changed appropriately
+ * for all kernels which follow a stream-association change.
+ *
+ * If \p hStream is destroyed while data is associated with it, the association is
+ * removed and the association reverts to the default visibility of the allocation
+ * as specified at ::cuMemAllocManaged. For __managed__ variables, the default
+ * association is always ::CU_MEM_ATTACH_GLOBAL. Note that destroying a stream is an
+ * asynchronous operation, and as a result, the change to default association won't
+ * happen until all work in the stream has completed.
+ *
+ * \param hStream - Stream in which to enqueue the attach operation
+ * \param dptr    - Pointer to memory (must be a pointer to managed memory or
+ *                  to a valid host-accessible region of system-allocated
+ *                  pageable memory)
+ * \param length  - Length of memory
+ * \param flags   - Must be one of ::CUmemAttach_flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamDestroy,
+ * ::cuMemAllocManaged,
+ * ::cudaStreamAttachMemAsync
+ */
+CUresult CUDAAPI cuStreamAttachMemAsync(CUstream hStream, CUdeviceptr dptr, size_t length, unsigned int flags);
+
+/**
+ * \brief Determine status of a compute stream
+ *
+ * Returns ::CUDA_SUCCESS if all operations in the stream specified by
+ * \p hStream have completed, or ::CUDA_ERROR_NOT_READY if not.
+ *
+ * For the purposes of Unified Memory, a return value of ::CUDA_SUCCESS
+ * is equivalent to having called ::cuStreamSynchronize().
+ *
+ * \param hStream - Stream to query status of
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_READY
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamDestroy,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamQuery
+ */
+CUresult CUDAAPI cuStreamQuery(CUstream hStream);
+
+/**
+ * \brief Wait until a stream's tasks are completed
+ *
+ * Waits until the device has completed all operations in the stream specified
+ * by \p hStream. If the context was created with the
+ * ::CU_CTX_SCHED_BLOCKING_SYNC flag, the CPU thread will block until the
+ * stream is finished with all of its tasks.
+ *
+ * \param hStream - Stream to wait for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE
+
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamDestroy,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamQuery,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamSynchronize
+ */
+CUresult CUDAAPI cuStreamSynchronize(CUstream hStream);
+
+/**
+ * \brief Destroys a stream
+ *
+ * Destroys the stream specified by \p hStream.
+ *
+ * In case the device is still doing work in the stream \p hStream
+ * when ::cuStreamDestroy() is called, the function will return immediately
+ * and the resources associated with \p hStream will be released automatically
+ * once the device has completed all work in \p hStream.
+ *
+ * \param hStream - Stream to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamAddCallback,
+ * ::cudaStreamDestroy
+ */
+CUresult CUDAAPI cuStreamDestroy(CUstream hStream);
+
+/**
+ * \brief Copies attributes from source stream to destination stream.
+ *
+ * Copies attributes from source stream \p src to destination stream \p dst.
+ * Both streams must have the same context.
+ *
+ * \param[out] dst Destination stream
+ * \param[in] src Source stream
+ * For list of attributes see ::CUstreamAttrID
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuStreamCopyAttributes(CUstream dst, CUstream src);
+
+/**
+ * \brief Queries stream attribute.
+ *
+ * Queries attribute \p attr from \p hStream and stores it in corresponding
+ * member of \p value_out.
+ *
+ * \param[in] hStream
+ * \param[in] attr
+ * \param[out] value_out
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuStreamGetAttribute(CUstream hStream, CUstreamAttrID attr,
+                                      CUstreamAttrValue *value_out);
+
+/**
+ * \brief Sets stream attribute.
+ *
+ * Sets attribute \p attr on \p hStream from corresponding attribute of
+ * \p value. The updated attribute will be applied to subsequent work
+ * submitted to the stream. It will not affect previously submitted work.
+ *
+ * \param[out] hStream
+ * \param[in] attr
+ * \param[in] value
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuStreamSetAttribute(CUstream hStream, CUstreamAttrID attr,
+                                      const CUstreamAttrValue *value);
+
+/** @} */ /* END CUDA_STREAM */
+
+
+/**
+ * \defgroup CUDA_EVENT Event Management
+ *
+ * ___MANBRIEF___ event management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the event management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates an event
+ *
+ * Creates an event *phEvent for the current context with the flags specified via
+ * \p Flags. Valid flags include:
+ * - ::CU_EVENT_DEFAULT: Default event creation flag.
+ * - ::CU_EVENT_BLOCKING_SYNC: Specifies that the created event should use blocking
+ *   synchronization.  A CPU thread that uses ::cuEventSynchronize() to wait on
+ *   an event created with this flag will block until the event has actually
+ *   been recorded.
+ * - ::CU_EVENT_DISABLE_TIMING: Specifies that the created event does not need
+ *   to record timing data.  Events created with this flag specified and
+ *   the ::CU_EVENT_BLOCKING_SYNC flag not specified will provide the best
+ *   performance when used with ::cuStreamWaitEvent() and ::cuEventQuery().
+ * - ::CU_EVENT_INTERPROCESS: Specifies that the created event may be used as an
+ *   interprocess event by ::cuIpcGetEventHandle(). ::CU_EVENT_INTERPROCESS must
+ *   be specified along with ::CU_EVENT_DISABLE_TIMING.
+ *
+ * \param phEvent - Returns newly created event
+ * \param Flags   - Event creation flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa
+ * ::cuEventRecord,
+ * ::cuEventQuery,
+ * ::cuEventSynchronize,
+ * ::cuEventDestroy,
+ * ::cuEventElapsedTime,
+ * ::cudaEventCreate,
+ * ::cudaEventCreateWithFlags
+ */
+CUresult CUDAAPI cuEventCreate(CUevent *phEvent, unsigned int Flags);
+
+/**
+ * \brief Records an event
+ *
+ * Captures in \p hEvent the contents of \p hStream at the time of this call.
+ * \p hEvent and \p hStream must be from the same context.
+ * Calls such as ::cuEventQuery() or ::cuStreamWaitEvent() will then
+ * examine or wait for completion of the work that was captured. Uses of
+ * \p hStream after this call do not modify \p hEvent. See note on default
+ * stream behavior for what is captured in the default case.
+ *
+ * ::cuEventRecord() can be called multiple times on the same event and
+ * will overwrite the previously captured state. Other APIs such as
+ * ::cuStreamWaitEvent() use the most recently captured state at the time
+ * of the API call, and are not affected by later calls to
+ * ::cuEventRecord(). Before the first call to ::cuEventRecord(), an
+ * event represents an empty set of work, so for example ::cuEventQuery()
+ * would return ::CUDA_SUCCESS.
+ *
+ * \param hEvent  - Event to record
+ * \param hStream - Stream to record event for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventQuery,
+ * ::cuEventSynchronize,
+ * ::cuStreamWaitEvent,
+ * ::cuEventDestroy,
+ * ::cuEventElapsedTime,
+ * ::cudaEventRecord,
+ * ::cuEventRecordWithFlags
+ */
+CUresult CUDAAPI cuEventRecord(CUevent hEvent, CUstream hStream);
+
+/**
+ * \brief Records an event
+ *
+ * Captures in \p hEvent the contents of \p hStream at the time of this call.
+ * \p hEvent and \p hStream must be from the same context.
+ * Calls such as ::cuEventQuery() or ::cuStreamWaitEvent() will then
+ * examine or wait for completion of the work that was captured. Uses of
+ * \p hStream after this call do not modify \p hEvent. See note on default
+ * stream behavior for what is captured in the default case.
+ *
+ * ::cuEventRecordWithFlags() can be called multiple times on the same event and
+ * will overwrite the previously captured state. Other APIs such as
+ * ::cuStreamWaitEvent() use the most recently captured state at the time
+ * of the API call, and are not affected by later calls to
+ * ::cuEventRecordWithFlags(). Before the first call to ::cuEventRecordWithFlags(), an
+ * event represents an empty set of work, so for example ::cuEventQuery()
+ * would return ::CUDA_SUCCESS.
+ *
+ * flags include:
+ * - ::CU_EVENT_RECORD_DEFAULT: Default event creation flag.
+ * - ::CU_EVENT_RECORD_EXTERNAL: Event is captured in the graph as an external
+ *   event node when performing stream capture. This flag is invalid outside
+ *   of stream capture.
+ *
+ * \param hEvent  - Event to record
+ * \param hStream - Stream to record event for
+ * \param flags   - See ::CUevent_capture_flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventQuery,
+ * ::cuEventSynchronize,
+ * ::cuStreamWaitEvent,
+ * ::cuEventDestroy,
+ * ::cuEventElapsedTime,
+ * ::cuEventRecord,
+ * ::cudaEventRecord
+ */
+CUresult CUDAAPI cuEventRecordWithFlags(CUevent hEvent, CUstream hStream, unsigned int flags);
+
+/**
+ * \brief Queries an event's status
+ *
+ * Queries the status of all work currently captured by \p hEvent. See
+ * ::cuEventRecord() for details on what is captured by an event.
+ *
+ * Returns ::CUDA_SUCCESS if all captured work has been completed, or
+ * ::CUDA_ERROR_NOT_READY if any captured work is incomplete.
+ *
+ * For the purposes of Unified Memory, a return value of ::CUDA_SUCCESS
+ * is equivalent to having called ::cuEventSynchronize().
+ *
+ * \param hEvent - Event to query
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_READY
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventRecord,
+ * ::cuEventSynchronize,
+ * ::cuEventDestroy,
+ * ::cuEventElapsedTime,
+ * ::cudaEventQuery
+ */
+CUresult CUDAAPI cuEventQuery(CUevent hEvent);
+
+/**
+ * \brief Waits for an event to complete
+ *
+ * Waits until the completion of all work currently captured in \p hEvent.
+ * See ::cuEventRecord() for details on what is captured by an event.
+ *
+ * Waiting for an event that was created with the ::CU_EVENT_BLOCKING_SYNC
+ * flag will cause the calling CPU thread to block until the event has
+ * been completed by the device.  If the ::CU_EVENT_BLOCKING_SYNC flag has
+ * not been set, then the CPU thread will busy-wait until the event has
+ * been completed by the device.
+ *
+ * \param hEvent - Event to wait for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventRecord,
+ * ::cuEventQuery,
+ * ::cuEventDestroy,
+ * ::cuEventElapsedTime,
+ * ::cudaEventSynchronize
+ */
+CUresult CUDAAPI cuEventSynchronize(CUevent hEvent);
+
+/**
+ * \brief Destroys an event
+ *
+ * Destroys the event specified by \p hEvent.
+ *
+ * An event may be destroyed before it is complete (i.e., while
+ * ::cuEventQuery() would return ::CUDA_ERROR_NOT_READY). In this case, the
+ * call does not block on completion of the event, and any associated
+ * resources will automatically be released asynchronously at completion.
+ *
+ * \param hEvent - Event to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventRecord,
+ * ::cuEventQuery,
+ * ::cuEventSynchronize,
+ * ::cuEventElapsedTime,
+ * ::cudaEventDestroy
+ */
+CUresult CUDAAPI cuEventDestroy(CUevent hEvent);
+
+/**
+ * \brief Computes the elapsed time between two events
+ *
+ * Computes the elapsed time between two events (in milliseconds with a
+ * resolution of around 0.5 microseconds).
+ *
+ * If either event was last recorded in a non-NULL stream, the resulting time
+ * may be greater than expected (even if both used the same stream handle). This
+ * happens because the ::cuEventRecord() operation takes place asynchronously
+ * and there is no guarantee that the measured latency is actually just between
+ * the two events. Any number of other different stream operations could execute
+ * in between the two measured events, thus altering the timing in a significant
+ * way.
+ *
+ * If ::cuEventRecord() has not been called on either event then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If ::cuEventRecord() has been called
+ * on both events but one or both of them has not yet been completed (that is,
+ * ::cuEventQuery() would return ::CUDA_ERROR_NOT_READY on at least one of the
+ * events), ::CUDA_ERROR_NOT_READY is returned. If either event was created with
+ * the ::CU_EVENT_DISABLE_TIMING flag, then this function will return
+ * ::CUDA_ERROR_INVALID_HANDLE.
+ *
+ * \param pMilliseconds - Time between \p hStart and \p hEnd in ms
+ * \param hStart        - Starting event
+ * \param hEnd          - Ending event
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_READY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuEventCreate,
+ * ::cuEventRecord,
+ * ::cuEventQuery,
+ * ::cuEventSynchronize,
+ * ::cuEventDestroy,
+ * ::cudaEventElapsedTime
+ */
+CUresult CUDAAPI cuEventElapsedTime(float *pMilliseconds, CUevent hStart, CUevent hEnd);
+
+/** @} */ /* END CUDA_EVENT */
+
+/**
+ * \defgroup CUDA_EXTRES_INTEROP External Resource Interoperability
+ *
+ * ___MANBRIEF___ External resource interoperability functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the external resource interoperability functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+ /**
+ * \brief Imports an external memory object
+ *
+ * Imports an externally allocated memory object and returns
+ * a handle to that in \p extMem_out.
+ *
+ * The properties of the handle being imported must be described in
+ * \p memHandleDesc. The ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC structure
+ * is defined as follows:
+ *
+ * \code
+        typedef struct CUDA_EXTERNAL_MEMORY_HANDLE_DESC_st {
+            CUexternalMemoryHandleType type;
+            union {
+                int fd;
+                struct {
+                    void *handle;
+                    const void *name;
+                } win32;
+                const void *nvSciBufObject;
+            } handle;
+            unsigned long long size;
+            unsigned int flags;
+        } CUDA_EXTERNAL_MEMORY_HANDLE_DESC;
+ * \endcode
+ *
+ * where ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type specifies the type
+ * of handle being imported. ::CUexternalMemoryHandleType is
+ * defined as:
+ *
+ * \code
+        typedef enum CUexternalMemoryHandleType_enum {
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD          = 1,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32       = 2,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT   = 3,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP         = 4,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE     = 5,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE     = 6,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT = 7,
+            CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF           = 8
+        } CUexternalMemoryHandleType;
+ * \endcode
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD, then
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::fd must be a valid
+ * file descriptor referencing a memory object. Ownership of
+ * the file descriptor is transferred to the CUDA driver when the
+ * handle is imported successfully. Performing any operations on the
+ * file descriptor after it is imported results in undefined behavior.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32, then exactly one
+ * of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a memory object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a memory object.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT, then
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ * be non-NULL and
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * must be NULL. The handle specified must be a globally shared KMT
+ * handle. This handle does not hold a reference to the underlying
+ * object, and thus will be invalid when all references to the
+ * memory object are destroyed.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP, then exactly one
+ * of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Heap object. This handle holds a reference to the underlying
+ * object. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D12Heap object.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE, then exactly one
+ * of ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Resource object. This handle holds a reference to the
+ * underlying object. If
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D12Resource object.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE, then
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ * represent a valid shared NT handle that is returned by
+ * IDXGIResource1::CreateSharedHandle when referring to a
+ * ID3D11Resource object. If
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D11Resource object.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT, then
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::handle must
+ * represent a valid shared KMT handle that is returned by
+ * IDXGIResource::GetSharedHandle when referring to a
+ * ID3D11Resource object and
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::win32::name
+ * must be NULL.
+ *
+ * If ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF, then
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::handle::nvSciBufObject must be non-NULL
+ * and reference a valid NvSciBuf object.
+ * If the NvSciBuf object imported into CUDA is also mapped by other drivers, then the
+ * application must use ::cuWaitExternalSemaphoresAsync or ::cuSignalExternalSemaphoresAsync
+ * as appropriate barriers to maintain coherence between CUDA and the other drivers.
+ * See ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC and ::CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC
+ * for memory synchronization.
+ *
+ *
+ * The size of the memory object must be specified in
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::size.
+ *
+ * Specifying the flag ::CUDA_EXTERNAL_MEMORY_DEDICATED in
+ * ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::flags indicates that the
+ * resource is a dedicated resource. The definition of what a
+ * dedicated resource is outside the scope of this extension.
+ * This flag must be set if ::CUDA_EXTERNAL_MEMORY_HANDLE_DESC::type
+ * is one of the following:
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_RESOURCE_KMT
+ *
+ * \param extMem_out    - Returned handle to an external memory object
+ * \param memHandleDesc - Memory import handle descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \note If the Vulkan memory imported into CUDA is mapped on the CPU then the
+ * application must use vkInvalidateMappedMemoryRanges/vkFlushMappedMemoryRanges
+ * as well as appropriate Vulkan pipeline barriers to maintain coherence between
+ * CPU and GPU. For more information on these APIs, please refer to "Synchronization
+ * and Cache Control" chapter from Vulkan specification.
+ *
+ * \sa ::cuDestroyExternalMemory,
+ * ::cuExternalMemoryGetMappedBuffer,
+ * ::cuExternalMemoryGetMappedMipmappedArray
+ */
+CUresult CUDAAPI cuImportExternalMemory(CUexternalMemory *extMem_out, const CUDA_EXTERNAL_MEMORY_HANDLE_DESC *memHandleDesc);
+
+/**
+ * \brief Maps a buffer onto an imported memory object
+ *
+ * Maps a buffer onto an imported memory object and returns a device
+ * pointer in \p devPtr.
+ *
+ * The properties of the buffer being mapped must be described in
+ * \p bufferDesc. The ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC structure is
+ * defined as follows:
+ *
+ * \code
+        typedef struct CUDA_EXTERNAL_MEMORY_BUFFER_DESC_st {
+            unsigned long long offset;
+            unsigned long long size;
+            unsigned int flags;
+        } CUDA_EXTERNAL_MEMORY_BUFFER_DESC;
+ * \endcode
+ *
+ * where ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::offset is the offset in
+ * the memory object where the buffer's base address is.
+ * ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::size is the size of the buffer.
+ * ::CUDA_EXTERNAL_MEMORY_BUFFER_DESC::flags must be zero.
+ *
+ * The offset and size have to be suitably aligned to match the
+ * requirements of the external API. Mapping two buffers whose ranges
+ * overlap may or may not result in the same virtual address being
+ * returned for the overlapped portion. In such cases, the application
+ * must ensure that all accesses to that region from the GPU are
+ * volatile. Otherwise writes made via one address are not guaranteed
+ * to be visible via the other address, even if they're issued by the
+ * same thread. It is recommended that applications map the combined
+ * range instead of mapping separate buffers and then apply the
+ * appropriate offsets to the returned pointer to derive the
+ * individual buffers.
+ *
+ * The returned pointer \p devPtr must be freed using ::cuMemFree.
+ *
+ * \param devPtr     - Returned device pointer to buffer
+ * \param extMem     - Handle to external memory object
+ * \param bufferDesc - Buffer descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuImportExternalMemory,
+ * ::cuDestroyExternalMemory,
+ * ::cuExternalMemoryGetMappedMipmappedArray
+ */
+CUresult CUDAAPI cuExternalMemoryGetMappedBuffer(CUdeviceptr *devPtr, CUexternalMemory extMem, const CUDA_EXTERNAL_MEMORY_BUFFER_DESC *bufferDesc);
+
+/**
+ * \brief Maps a CUDA mipmapped array onto an external memory object
+ *
+ * Maps a CUDA mipmapped array onto an external object and returns a
+ * handle to it in \p mipmap.
+ *
+ * The properties of the CUDA mipmapped array being mapped must be
+ * described in \p mipmapDesc. The structure
+ * ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC is defined as follows:
+ *
+ * \code
+        typedef struct CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_st {
+            unsigned long long offset;
+            CUDA_ARRAY3D_DESCRIPTOR arrayDesc;
+            unsigned int numLevels;
+        } CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC;
+ * \endcode
+ *
+ * where ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::offset is the
+ * offset in the memory object where the base level of the mipmap
+ * chain is.
+ * ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::arrayDesc describes
+ * the format, dimensions and type of the base level of the mipmap
+ * chain. For further details on these parameters, please refer to the
+ * documentation for ::cuMipmappedArrayCreate. Note that if the mipmapped
+ * array is bound as a color target in the graphics API, then the flag
+ * ::CUDA_ARRAY3D_COLOR_ATTACHMENT must be specified in
+ * ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::arrayDesc::Flags.
+ * ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::numLevels specifies
+ * the total number of levels in the mipmap chain.
+ *
+ * If \p extMem was imported from a handle of type ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF, then
+ * ::CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC::numLevels must be equal to 1.
+ *
+ * The returned CUDA mipmapped array must be freed using ::cuMipmappedArrayDestroy.
+ *
+ * \param mipmap     - Returned CUDA mipmapped array
+ * \param extMem     - Handle to external memory object
+ * \param mipmapDesc - CUDA array descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \note On Tegra devices, this API will always attempt to do a compressed mapping when the \p extMem is
+ * imported from a handle of type ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD
+ *
+ * \sa ::cuImportExternalMemory,
+ * ::cuDestroyExternalMemory,
+ * ::cuExternalMemoryGetMappedBuffer
+ */
+CUresult CUDAAPI cuExternalMemoryGetMappedMipmappedArray(CUmipmappedArray *mipmap, CUexternalMemory extMem, const CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC *mipmapDesc);
+
+/**
+ * \brief Destroys an external memory object.
+ *
+ * Destroys the specified external memory object. Any existing buffers
+ * and CUDA mipmapped arrays mapped onto this object must no longer be
+ * used and must be explicitly freed using ::cuMemFree and
+ * ::cuMipmappedArrayDestroy respectively.
+ *
+ * \param extMem - External memory object to be destroyed
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuImportExternalMemory,
+ * ::cuExternalMemoryGetMappedBuffer,
+ * ::cuExternalMemoryGetMappedMipmappedArray
+ */
+CUresult CUDAAPI cuDestroyExternalMemory(CUexternalMemory extMem);
+
+/**
+ * \brief Imports an external semaphore
+ *
+ * Imports an externally allocated synchronization object and returns
+ * a handle to that in \p extSem_out.
+ *
+ * The properties of the handle being imported must be described in
+ * \p semHandleDesc. The ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC is
+ * defined as follows:
+ *
+ * \code
+        typedef struct CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_st {
+            CUexternalSemaphoreHandleType type;
+            union {
+                int fd;
+                struct {
+                    void *handle;
+                    const void *name;
+                } win32;
+                const void* NvSciSyncObj;
+            } handle;
+            unsigned int flags;
+        } CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC;
+ * \endcode
+ *
+ * where ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type specifies the type of
+ * handle being imported. ::CUexternalSemaphoreHandleType is defined
+ * as:
+ *
+ * \code
+        typedef enum CUexternalSemaphoreHandleType_enum {
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD                = 1,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32             = 2,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT         = 3,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE              = 4,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE              = 5,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC                = 6,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX        = 7,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT    = 8,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD    = 9,
+            CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32 = 10
+        } CUexternalSemaphoreHandleType;
+ * \endcode
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd must be a valid
+ * file descriptor referencing a synchronization object. Ownership of
+ * the file descriptor is transferred to the CUDA driver when the
+ * handle is imported successfully. Performing any operations on the
+ * file descriptor after it is imported results in undefined behavior.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32, then exactly one
+ * of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a synchronization object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle must
+ * be non-NULL and
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * must be NULL. The handle specified must be a globally shared KMT
+ * handle. This handle does not hold a reference to the underlying
+ * object, and thus will be invalid when all references to the
+ * synchronization object are destroyed.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE, then exactly one
+ * of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Fence object. This handle holds a reference to the underlying
+ * object. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object that
+ * refers to a valid ID3D12Fence object.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * represents a valid shared NT handle that is returned by
+ * ID3D11Fence::CreateSharedHandle. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object that
+ * refers to a valid ID3D11Fence object.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::nvSciSyncObj
+ * represents a valid NvSciSyncObj.
+ *
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * represents a valid shared NT handle that
+ * is returned by IDXGIResource1::CreateSharedHandle when referring to
+ * a IDXGIKeyedMutex object. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object that
+ * refers to a valid IDXGIKeyedMutex object.
+ *
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * represents a valid shared KMT handle that
+ * is returned by IDXGIResource::GetSharedHandle when referring to
+ * a IDXGIKeyedMutex object and
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must be NULL.
+ * 
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD, then
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::fd must be a valid
+ * file descriptor referencing a synchronization object. Ownership of
+ * the file descriptor is transferred to the CUDA driver when the
+ * handle is imported successfully. Performing any operations on the
+ * file descriptor after it is imported results in undefined behavior.
+ * 
+ * If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::type is
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32, then exactly one
+ * of ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle and
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name must not be
+ * NULL. If
+ * ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a synchronization object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object.
+ *
+ * \param extSem_out    - Returned handle to an external semaphore
+ * \param semHandleDesc - Semaphore import handle descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuDestroyExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuImportExternalSemaphore(CUexternalSemaphore *extSem_out, const CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC *semHandleDesc);
+
+/**
+ * \brief Signals a set of external semaphore objects
+ *
+ * Enqueues a signal operation on a set of externally allocated
+ * semaphore object in the specified stream. The operations will be
+ * executed when all prior operations in the stream complete.
+ *
+ * The exact semantics of signaling a semaphore depends on the type of
+ * the object.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+ * then signaling the semaphore will set it to the signaled state.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32
+ * then the semaphore will be set to the value specified in
+ * ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::fence::value.
+ *
+ * If the semaphore object is of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC
+ * this API sets ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence
+ * to a value that can be used by subsequent waiters of the same NvSciSync object
+ * to order operations with those currently submitted in \p stream. Such an update
+ * will overwrite previous contents of
+ * ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence. By default,
+ * signaling such an external semaphore object causes appropriate memory synchronization
+ * operations to be performed over all external memory objects that are imported as
+ * ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF. This ensures that any subsequent accesses
+ * made by other importers of the same set of NvSciBuf memory object(s) are coherent.
+ * These operations can be skipped by specifying the flag
+ * ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_SKIP_NVSCIBUF_MEMSYNC, which can be used as a
+ * performance optimization when data coherency is not required. But specifying this
+ * flag in scenarios where data coherency is required results in undefined behavior.
+ * Also, for semaphore object of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC,
+ * if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ * ::cuDeviceGetNvSciSyncAttributes to CUDA_NVSCISYNC_ATTR_SIGNAL, this API will return
+ * CUDA_ERROR_NOT_SUPPORTED.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT
+ * then the keyed mutex will be released with the key specified in
+ * ::CUDA_EXTERNAL_SEMAPHORE_PARAMS::params::keyedmutex::key.
+ *
+ * \param extSemArray - Set of external semaphores to be signaled
+ * \param paramsArray - Array of semaphore parameters
+ * \param numExtSems  - Number of semaphores to signal
+ * \param stream      - Stream to enqueue the signal operations in
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuImportExternalSemaphore,
+ * ::cuDestroyExternalSemaphore,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuSignalExternalSemaphoresAsync(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS *paramsArray, unsigned int numExtSems, CUstream stream);
+
+/**
+ * \brief Waits on a set of external semaphore objects
+ *
+ * Enqueues a wait operation on a set of externally allocated
+ * semaphore object in the specified stream. The operations will be
+ * executed when all prior operations in the stream complete.
+ *
+ * The exact semantics of waiting on a semaphore depends on the type
+ * of the object.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT
+ * then waiting on the semaphore will wait until the semaphore reaches
+ * the signaled state. The semaphore will then be reset to the
+ * unsignaled state. Therefore for every signal operation, there can
+ * only be one wait operation.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_FD,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_TIMELINE_SEMAPHORE_WIN32
+ * then waiting on the semaphore will wait until the value of the
+ * semaphore is greater than or equal to
+ * ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::fence::value.
+ *
+ * If the semaphore object is of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC
+ * then, waiting on the semaphore will wait until the
+ * ::CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS::params::nvSciSync::fence is signaled by the
+ * signaler of the NvSciSyncObj that was associated with this semaphore object.
+ * By default, waiting on such an external semaphore object causes appropriate
+ * memory synchronization operations to be performed over all external memory objects
+ * that are imported as ::CU_EXTERNAL_MEMORY_HANDLE_TYPE_NVSCIBUF. This ensures that
+ * any subsequent accesses made by other importers of the same set of NvSciBuf memory
+ * object(s) are coherent. These operations can be skipped by specifying the flag
+ * ::CUDA_EXTERNAL_SEMAPHORE_WAIT_SKIP_NVSCIBUF_MEMSYNC, which can be used as a
+ * performance optimization when data coherency is not required. But specifying this
+ * flag in scenarios where data coherency is required results in undefined behavior.
+ * Also, for semaphore object of the type ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_NVSCISYNC,
+ * if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ * ::cuDeviceGetNvSciSyncAttributes to CUDA_NVSCISYNC_ATTR_WAIT, this API will return
+ * CUDA_ERROR_NOT_SUPPORTED.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX,
+ * ::CU_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_KEYED_MUTEX_KMT
+ * then the keyed mutex will be acquired when it is released with the key 
+ * specified in ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::key 
+ * or until the timeout specified by
+ * ::CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS::params::keyedmutex::timeoutMs
+ * has lapsed. The timeout interval can either be a finite value
+ * specified in milliseconds or an infinite value. In case an infinite
+ * value is specified the timeout never elapses. The windows INFINITE
+ * macro must be used to specify infinite timeout.
+ *
+ * \param extSemArray - External semaphores to be waited on
+ * \param paramsArray - Array of semaphore parameters
+ * \param numExtSems  - Number of semaphores to wait on
+ * \param stream      - Stream to enqueue the wait operations in
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_TIMEOUT
+ * \notefnerr
+ *
+ * \sa ::cuImportExternalSemaphore,
+ * ::cuDestroyExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuWaitExternalSemaphoresAsync(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS *paramsArray, unsigned int numExtSems, CUstream stream);
+
+/**
+ * \brief Destroys an external semaphore
+ *
+ * Destroys an external semaphore object and releases any references
+ * to the underlying resource. Any outstanding signals or waits must
+ * have completed before the semaphore is destroyed.
+ *
+ * \param extSem - External semaphore to be destroyed
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuImportExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuDestroyExternalSemaphore(CUexternalSemaphore extSem);
+
+/** @} */ /* END CUDA_EXTRES_INTEROP */
+
+/**
+ * \defgroup CUDA_MEMOP Stream Memory Operations
+ *
+ * ___MANBRIEF___ Stream memory operations of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the stream memory operations of the low-level CUDA
+ * driver application programming interface.
+ *
+ * There are two versions of these APIs, a legacy version and a newer V2 version.
+ *
+ * V1:
+ *
+ * The V1 API is disabled by default. Users are required
+ * to explicitly enable it, e.g. on Linux by passing the kernel module
+ * parameter shown below:
+ *     modprobe nvidia NVreg_EnableStreamMemOPs=1
+ * There is currently no way to enable these operations on other operating
+ * systems.
+ *
+ * Users can programmatically query whether the device supports these
+ * operations with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS.
+ *
+ * Support for the ::CU_STREAM_WAIT_VALUE_NOR flag can be queried with
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR.
+ *
+ * Support for the ::cuStreamWriteValue64() and ::cuStreamWaitValue64()
+ * functions, as well as for the ::CU_STREAM_MEM_OP_WAIT_VALUE_64 and
+ * ::CU_STREAM_MEM_OP_WRITE_VALUE_64 flags, can be queried with
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS.
+ *
+ * Support for both ::CU_STREAM_WAIT_VALUE_FLUSH and
+ * ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES requires dedicated platform
+ * hardware features and can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES.
+ *
+ * V2:
+ *
+ * The V2 APIs are available by default on all platforms.
+ *
+ * Support for the ::CU_STREAM_WAIT_VALUE_NOR flag can be queried with
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V2.
+ *
+ * Support for the ::cuStreamWriteValue64() and ::cuStreamWaitValue64()
+ * functions, as well as for the ::CU_STREAM_MEM_OP_WAIT_VALUE_64 and
+ * ::CU_STREAM_MEM_OP_WRITE_VALUE_64 flags, can be queried with
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V2.
+ *
+ * Support for both ::CU_STREAM_WAIT_VALUE_FLUSH and
+ * ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES requires dedicated platform
+ * hardware features and can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_FLUSH_REMOTE_WRITES.
+ *
+ * V1 & V2:
+ *
+ * Note that all memory pointers passed as parameters to these operations
+ * are device pointers. Where necessary a device pointer should be
+ * obtained, for example with ::cuMemHostGetDevicePointer().
+ *
+ * None of the operations accepts pointers to managed memory buffers
+ * (::cuMemAllocManaged).
+ *
+ * \note
+ * Warning:
+ * Improper use of these APIs may deadlock the application. Synchronization 
+ * ordering established through these APIs is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by these APIs should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order.
+ *
+ * @{
+ */
+
+/**
+ * \brief Wait on a memory location
+ *
+ * Enqueues a synchronization of the stream on the given memory location. Work
+ * ordered after the operation will block until the given condition on the
+ * memory is satisfied. By default, the condition is to wait for
+ * (int32_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ * Other condition types can be specified via \p flags.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ * be used with managed memory (::cuMemAllocManaged).
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS.
+ *
+ * Support for CU_STREAM_WAIT_VALUE_NOR can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to synchronize on the memory location.
+ * \param addr The memory location to wait on.
+ * \param value The value to compare with the memory location.
+ * \param flags See ::CUstreamWaitValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue64,
+ * ::cuStreamWriteValue32,
+ * ::cuStreamWriteValue64,
+ * ::cuStreamBatchMemOp,
+ * ::cuMemHostRegister,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuStreamWaitValue32(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+
+/**
+ * \brief Wait on a memory location
+ *
+ * Enqueues a synchronization of the stream on the given memory location. Work
+ * ordered after the operation will block until the given condition on the
+ * memory is satisfied. By default, the condition is to wait for
+ * (int64_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ * Other condition types can be specified via \p flags.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer().
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to synchronize on the memory location.
+ * \param addr The memory location to wait on.
+ * \param value The value to compare with the memory location.
+ * \param flags See ::CUstreamWaitValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue32,
+ * ::cuStreamWriteValue32,
+ * ::cuStreamWriteValue64,
+ * ::cuStreamBatchMemOp,
+ * ::cuMemHostRegister,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuStreamWaitValue64(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+
+/**
+ * \brief Write a value to memory
+ *
+ * Write a value to memory. Unless the ::CU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER
+ * flag is passed, the write is preceded by a system-wide memory fence,
+ * equivalent to a __threadfence_system() but scoped to the stream
+ * rather than a CUDA thread.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ * be used with managed memory (::cuMemAllocManaged).
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS.
+ *
+ * \param stream The stream to do the write in.
+ * \param addr The device address to write to.
+ * \param value The value to write.
+ * \param flags See ::CUstreamWriteValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWriteValue64,
+ * ::cuStreamWaitValue32,
+ * ::cuStreamWaitValue64,
+ * ::cuStreamBatchMemOp,
+ * ::cuMemHostRegister,
+ * ::cuEventRecord
+ */
+CUresult CUDAAPI cuStreamWriteValue32(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+
+/**
+ * \brief Write a value to memory
+ *
+ * Write a value to memory. Unless the ::CU_STREAM_WRITE_VALUE_NO_MEMORY_BARRIER
+ * flag is passed, the write is preceded by a system-wide memory fence,
+ * equivalent to a __threadfence_system() but scoped to the stream
+ * rather than a CUDA thread.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer().
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS.
+ *
+ * \param stream The stream to do the write in.
+ * \param addr The device address to write to.
+ * \param value The value to write.
+ * \param flags See ::CUstreamWriteValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWriteValue32,
+ * ::cuStreamWaitValue32,
+ * ::cuStreamWaitValue64,
+ * ::cuStreamBatchMemOp,
+ * ::cuMemHostRegister,
+ * ::cuEventRecord
+ */
+CUresult CUDAAPI cuStreamWriteValue64(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+
+/**
+ * \brief Batch operations to synchronize the stream via memory operations
+ *
+ * This is a batch version of ::cuStreamWaitValue32() and ::cuStreamWriteValue32().
+ * Batching operations may avoid some performance overhead in both the API call
+ * and the device execution versus adding them to the stream in separate API
+ * calls. The operations are enqueued in the order they appear in the array.
+ *
+ * See ::CUstreamBatchMemOpType for the full set of supported operations, and
+ * ::cuStreamWaitValue32(), ::cuStreamWaitValue64(), ::cuStreamWriteValue32(),
+ * and ::cuStreamWriteValue64() for details of specific operations.
+ *
+ * Basic support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_MEM_OPS. See related APIs for details
+ * on querying support for specific operations.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to enqueue the operations in.
+ * \param count The number of operations in the array. Must be less than 256.
+ * \param paramArray The types and parameters of the individual operations.
+ * \param flags Reserved for future expansion; must be 0.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue32,
+ * ::cuStreamWaitValue64,
+ * ::cuStreamWriteValue32,
+ * ::cuStreamWriteValue64,
+ * ::cuMemHostRegister
+ */
+CUresult CUDAAPI cuStreamBatchMemOp(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+
+/**
+ * \brief Wait on a memory location
+ *
+ * Enqueues a synchronization of the stream on the given memory location. Work
+ * ordered after the operation will block until the given condition on the
+ * memory is satisfied. By default, the condition is to wait for
+ * (int32_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ * Other condition types can be specified via \p flags.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ * be used with managed memory (::cuMemAllocManaged).
+ *
+ * Support for CU_STREAM_WAIT_VALUE_NOR can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_STREAM_WAIT_VALUE_NOR_V2.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to synchronize on the memory location.
+ * \param addr The memory location to wait on.
+ * \param value The value to compare with the memory location.
+ * \param flags See ::CUstreamWaitValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue64_v2,
+ * ::cuStreamWriteValue32_v2,
+ * ::cuStreamWriteValue64_v2,
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuMemHostRegister,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuStreamWaitValue32_v2(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+
+/**
+ * \brief Wait on a memory location
+ *
+ * Enqueues a synchronization of the stream on the given memory location. Work
+ * ordered after the operation will block until the given condition on the
+ * memory is satisfied. By default, the condition is to wait for
+ * (int64_t)(*addr - value) >= 0, a cyclic greater-or-equal.
+ * Other condition types can be specified via \p flags.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer().
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V2.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to synchronize on the memory location.
+ * \param addr The memory location to wait on.
+ * \param value The value to compare with the memory location.
+ * \param flags See ::CUstreamWaitValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue32_v2,
+ * ::cuStreamWriteValue32_v2,
+ * ::cuStreamWriteValue64_v2,
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuMemHostRegister,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuStreamWaitValue64_v2(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+
+/**
+ * \brief Write a value to memory
+ *
+ * Write a value to memory.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer(). This function cannot
+ * be used with managed memory (::cuMemAllocManaged).
+ *
+ * \param stream The stream to do the write in.
+ * \param addr The device address to write to.
+ * \param value The value to write.
+ * \param flags See ::CUstreamWriteValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWriteValue64_v2,
+ * ::cuStreamWaitValue32_v2,
+ * ::cuStreamWaitValue64_v2,
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuMemHostRegister,
+ * ::cuEventRecord
+ */
+CUresult CUDAAPI cuStreamWriteValue32_v2(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+
+/**
+ * \brief Write a value to memory
+ *
+ * Write a value to memory.
+ *
+ * If the memory was registered via ::cuMemHostRegister(), the device pointer
+ * should be obtained with ::cuMemHostGetDevicePointer().
+ *
+ * Support for this can be queried with ::cuDeviceGetAttribute() and
+ * ::CU_DEVICE_ATTRIBUTE_CAN_USE_64_BIT_STREAM_MEM_OPS_V2.
+ *
+ * \param stream The stream to do the write in.
+ * \param addr The device address to write to.
+ * \param value The value to write.
+ * \param flags See ::CUstreamWriteValue_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWriteValue32_v2,
+ * ::cuStreamWaitValue32_v2,
+ * ::cuStreamWaitValue64_v2,
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuMemHostRegister,
+ * ::cuEventRecord
+ */
+CUresult CUDAAPI cuStreamWriteValue64_v2(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+
+/**
+ * \brief Batch operations to synchronize the stream via memory operations
+ *
+ * This is a batch version of ::cuStreamWaitValue32_v2() and ::cuStreamWriteValue32_v2().
+ * Batching operations may avoid some performance overhead in both the API call
+ * and the device execution versus adding them to the stream in separate API
+ * calls. The operations are enqueued in the order they appear in the array.
+ *
+ * See ::CUstreamBatchMemOpType for the full set of supported operations, and
+ * ::cuStreamWaitValue32_v2(), ::cuStreamWaitValue64_v2(), ::cuStreamWriteValue32_v2(),
+ * and ::cuStreamWriteValue64_v2() for details of specific operations.
+ *
+ * See related APIs for details on querying support for specific operations.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param stream The stream to enqueue the operations in.
+ * \param count The number of operations in the array. Must be less than 256.
+ * \param paramArray The types and parameters of the individual operations.
+ * \param flags Reserved for future expansion; must be 0.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \notefnerr
+ *
+ * \sa ::cuStreamWaitValue32_v2,
+ * ::cuStreamWaitValue64_v2,
+ * ::cuStreamWriteValue32_v2,
+ * ::cuStreamWriteValue64_v2,
+ * ::cuMemHostRegister
+ */
+CUresult CUDAAPI cuStreamBatchMemOp_v2(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+
+/** @} */ /* END CUDA_MEMOP */
+
+/**
+ * \defgroup CUDA_EXEC Execution Control
+ *
+ * ___MANBRIEF___ execution control functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the execution control functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns information about a function
+ *
+ * Returns in \p *pi the integer value of the attribute \p attrib on the kernel
+ * given by \p hfunc. The supported attributes are:
+ * - ::CU_FUNC_ATTRIBUTE_MAX_THREADS_PER_BLOCK: The maximum number of threads
+ *   per block, beyond which a launch of the function would fail. This number
+ *   depends on both the function and the device on which the function is
+ *   currently loaded.
+ * - ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES: The size in bytes of
+ *   statically-allocated shared memory per block required by this function.
+ *   This does not include dynamically-allocated shared memory requested by
+ *   the user at runtime.
+ * - ::CU_FUNC_ATTRIBUTE_CONST_SIZE_BYTES: The size in bytes of user-allocated
+ *   constant memory required by this function.
+ * - ::CU_FUNC_ATTRIBUTE_LOCAL_SIZE_BYTES: The size in bytes of local memory
+ *   used by each thread of this function.
+ * - ::CU_FUNC_ATTRIBUTE_NUM_REGS: The number of registers used by each thread
+ *   of this function.
+ * - ::CU_FUNC_ATTRIBUTE_PTX_VERSION: The PTX virtual architecture version for
+ *   which the function was compiled. This value is the major PTX version * 10
+ *   + the minor PTX version, so a PTX version 1.3 function would return the
+ *   value 13. Note that this may return the undefined value of 0 for cubins
+ *   compiled prior to CUDA 3.0.
+ * - ::CU_FUNC_ATTRIBUTE_BINARY_VERSION: The binary architecture version for
+ *   which the function was compiled. This value is the major binary
+ *   version * 10 + the minor binary version, so a binary version 1.3 function
+ *   would return the value 13. Note that this will return a value of 10 for
+ *   legacy cubins that do not have a properly-encoded binary architecture
+ *   version.
+ * - ::CU_FUNC_CACHE_MODE_CA: The attribute to indicate whether the function has
+ *   been compiled with user specified option "-Xptxas --dlcm=ca" set .
+ * - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: The maximum size in bytes of
+ *   dynamically-allocated shared memory.
+ * - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: Preferred shared memory-L1
+ *   cache split ratio in percent of total shared memory.
+ * - ::CU_FUNC_ATTRIBUTE_CLUSTER_SIZE_MUST_BE_SET: If this attribute is set, the
+ *   kernel must launch with a valid cluster size specified.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ *   blocks.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ *   blocks.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ *   blocks.
+ * - ::CU_FUNC_ATTRIBUTE_NON_PORTABLE_CLUSTER_SIZE_ALLOWED: Indicates whether
+ *   the function can be launched with non-portable cluster size. 1 is allowed,
+ *   0 is disallowed. A non-portable cluster size may only function on the
+ *   specific SKUs the program is tested on. The launch might fail if the
+ *   program is run on a different hardware platform. CUDA API provides
+ *   cudaOccupancyMaxActiveClusters to assist with checking whether the desired
+ *   size can be launched on the current device. A portable cluster size is
+ *   guaranteed to be functional on all compute capabilities higher than the
+ *   target compute capability. The portable cluster size for sm_90 is 8 blocks
+ *   per cluster. This value may increase for future compute capabilities. The
+ *   specific hardware unit may support higher cluster sizes that’s not
+ *   guaranteed to be portable.
+ * - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ *   scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+ *
+ * \param pi     - Returned attribute value
+ * \param attrib - Attribute requested
+ * \param hfunc  - Function to query attribute of
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuLaunchKernel,
+ * ::cudaFuncGetAttributes,
+ * ::cudaFuncSetAttribute
+ */
+CUresult CUDAAPI cuFuncGetAttribute(int *pi, CUfunction_attribute attrib, CUfunction hfunc);
+
+/**
+ * \brief Sets information about a function
+ *
+ * This call sets the value of a specified attribute \p attrib on the kernel given
+ * by \p hfunc to an integer value specified by \p val
+ * This function returns CUDA_SUCCESS if the new value of the attribute could be
+ * successfully set. If the set fails, this call will return an error.
+ * Not all attributes can have values set. Attempting to set a value on a read-only
+ * attribute will result in an error (CUDA_ERROR_INVALID_VALUE)
+ *
+ * Supported attributes for the cuFuncSetAttribute call are:
+ * - ::CU_FUNC_ATTRIBUTE_MAX_DYNAMIC_SHARED_SIZE_BYTES: This maximum size in bytes of
+ *   dynamically-allocated shared memory. The value should contain the requested
+ *   maximum size of dynamically-allocated shared memory. The sum of this value and
+ *   the function attribute ::CU_FUNC_ATTRIBUTE_SHARED_SIZE_BYTES cannot exceed the
+ *   device attribute ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_BLOCK_OPTIN.
+ *   The maximal size of requestable dynamic shared memory may differ by GPU
+ *   architecture.
+ * - ::CU_FUNC_ATTRIBUTE_PREFERRED_SHARED_MEMORY_CARVEOUT: On devices where the L1
+ *   cache and shared memory use the same hardware resources, this sets the shared memory
+ *   carveout preference, in percent of the total shared memory. 
+ *   See ::CU_DEVICE_ATTRIBUTE_MAX_SHARED_MEMORY_PER_MULTIPROCESSOR
+ *   This is only a hint, and the driver can choose a different ratio if required to execute the function.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_WIDTH: The required cluster width in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_HEIGHT: The required cluster height in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ * - ::CU_FUNC_ATTRIBUTE_REQUIRED_CLUSTER_DEPTH: The required cluster depth in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return CUDA_ERROR_NOT_PERMITTED.
+ * - ::CU_FUNC_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE: The block
+ *   scheduling policy of a function. The value type is CUclusterSchedulingPolicy.
+ *
+ * \param hfunc  - Function to query attribute of
+ * \param attrib - Attribute requested
+ * \param value   - The value to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuLaunchKernel,
+ * ::cudaFuncGetAttributes,
+ * ::cudaFuncSetAttribute
+ */
+CUresult CUDAAPI cuFuncSetAttribute(CUfunction hfunc, CUfunction_attribute attrib, int value);
+
+/**
+ * \brief Sets the preferred cache configuration for a device function
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p config the preferred cache configuration for
+ * the device function \p hfunc. This is only a preference. The driver will use
+ * the requested configuration if possible, but it is free to choose a different
+ * configuration if required to execute \p hfunc.  Any context-wide preference
+ * set via ::cuCtxSetCacheConfig() will be overridden by this per-function
+ * setting unless the per-function setting is ::CU_FUNC_CACHE_PREFER_NONE. In
+ * that case, the current context-wide setting will be used.
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ *
+ * The supported cache configurations are:
+ * - ::CU_FUNC_CACHE_PREFER_NONE: no preference for shared memory or L1 (default)
+ * - ::CU_FUNC_CACHE_PREFER_SHARED: prefer larger shared memory and smaller L1 cache
+ * - ::CU_FUNC_CACHE_PREFER_L1: prefer larger L1 cache and smaller shared memory
+ * - ::CU_FUNC_CACHE_PREFER_EQUAL: prefer equal sized L1 cache and shared memory
+ *
+ * \param hfunc  - Kernel to configure cache for
+ * \param config - Requested cache configuration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuLaunchKernel,
+ * ::cudaFuncSetCacheConfig
+ */
+CUresult CUDAAPI cuFuncSetCacheConfig(CUfunction hfunc, CUfunc_cache config);
+
+/**
+ * \brief Sets the shared memory configuration for a device function.
+ *
+ * On devices with configurable shared memory banks, this function will
+ * force all subsequent launches of the specified device function to have
+ * the given shared memory bank size configuration. On any given launch of the
+ * function, the shared memory configuration of the device will be temporarily
+ * changed if needed to suit the function's preferred configuration. Changes in
+ * shared memory configuration between subsequent launches of functions,
+ * may introduce a device side synchronization point.
+ *
+ * Any per-function setting of shared memory bank size set via
+ * ::cuFuncSetSharedMemConfig will override the context wide setting set with
+ * ::cuCtxSetSharedMemConfig.
+ *
+ * Changing the shared memory bank size will not increase shared memory usage
+ * or affect occupancy of kernels, but may have major effects on performance.
+ * Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ * but will change what kinds of accesses to shared memory will result in bank
+ * conflicts.
+ *
+ * This function will do nothing on devices with fixed shared memory bank size.
+ *
+ * The supported bank configurations are:
+ * - ::CU_SHARED_MEM_CONFIG_DEFAULT_BANK_SIZE: use the context's shared memory
+ *   configuration when launching this function.
+ * - ::CU_SHARED_MEM_CONFIG_FOUR_BYTE_BANK_SIZE: set shared memory bank width to
+ *   be natively four bytes when launching this function.
+ * - ::CU_SHARED_MEM_CONFIG_EIGHT_BYTE_BANK_SIZE: set shared memory bank width to
+ *   be natively eight bytes when launching this function.
+ *
+ * \param hfunc  - kernel to be given a shared memory config
+ * \param config - requested shared memory configuration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuCtxGetSharedMemConfig,
+ * ::cuCtxSetSharedMemConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuLaunchKernel,
+ * ::cudaFuncSetSharedMemConfig
+ */
+CUresult CUDAAPI cuFuncSetSharedMemConfig(CUfunction hfunc, CUsharedconfig config);
+
+/**
+ * \brief Returns a module handle
+ *
+ * Returns in \p *hmod the handle of the module that function \p hfunc
+ * is located in. The lifetime of the module corresponds to the lifetime of
+ * the context it was loaded in or until the module is explicitly unloaded.
+ *
+ * The CUDA runtime manages its own modules loaded into the primary context.
+ * If the handle returned by this API refers to a module loaded by the CUDA runtime,
+ * calling ::cuModuleUnload() on that module will result in undefined behavior.
+ *
+ * \param hmod - Returned module handle
+ * \param hfunc   - Function to retrieve module for
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \notefnerr
+ *
+ */
+CUresult CUDAAPI cuFuncGetModule(CUmodule *hmod, CUfunction hfunc);
+
+/**
+ * \brief Launches a CUDA function
+ *
+ * Invokes the kernel \p f on a \p gridDimX x \p gridDimY x \p gridDimZ
+ * grid of blocks. Each block contains \p blockDimX x \p blockDimY x
+ * \p blockDimZ threads.
+ *
+ * \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ * available to each thread block.
+ *
+ * Kernel parameters to \p f can be specified in one of two ways:
+ *
+ * 1) Kernel parameters can be specified via \p kernelParams.  If \p f
+ * has N parameters, then \p kernelParams needs to be an array of N
+ * pointers.  Each of \p kernelParams[0] through \p kernelParams[N-1]
+ * must point to a region of memory from which the actual kernel
+ * parameter will be copied.  The number of kernel parameters and their
+ * offsets and sizes do not need to be specified as that information is
+ * retrieved directly from the kernel's image.
+ *
+ * 2) Kernel parameters can also be packaged by the application into
+ * a single buffer that is passed in via the \p extra parameter.
+ * This places the burden on the application of knowing each kernel
+ * parameter's size and alignment/padding within the buffer.  Here is
+ * an example of using the \p extra parameter in this manner:
+ * \code
+    size_t argBufferSize;
+    char argBuffer[256];
+
+    // populate argBuffer and argBufferSize
+
+    void *config[] = {
+        CU_LAUNCH_PARAM_BUFFER_POINTER, argBuffer,
+        CU_LAUNCH_PARAM_BUFFER_SIZE,    &argBufferSize,
+        CU_LAUNCH_PARAM_END
+    };
+    status = cuLaunchKernel(f, gx, gy, gz, bx, by, bz, sh, s, NULL, config);
+ * \endcode
+ *
+ * The \p extra parameter exists to allow ::cuLaunchKernel to take
+ * additional less commonly used arguments.  \p extra specifies a list of
+ * names of extra settings and their corresponding values.  Each extra
+ * setting name is immediately followed by the corresponding value.  The
+ * list must be terminated with either NULL or ::CU_LAUNCH_PARAM_END.
+ *
+ * - ::CU_LAUNCH_PARAM_END, which indicates the end of the \p extra
+ *   array;
+ * - ::CU_LAUNCH_PARAM_BUFFER_POINTER, which specifies that the next
+ *   value in \p extra will be a pointer to a buffer containing all
+ *   the kernel parameters for launching kernel \p f;
+ * - ::CU_LAUNCH_PARAM_BUFFER_SIZE, which specifies that the next
+ *   value in \p extra will be a pointer to a size_t containing the
+ *   size of the buffer specified with ::CU_LAUNCH_PARAM_BUFFER_POINTER;
+ *
+ * The error ::CUDA_ERROR_INVALID_VALUE will be returned if kernel
+ * parameters are specified with both \p kernelParams and \p extra
+ * (i.e. both \p kernelParams and \p extra are non-NULL).
+ *
+ * Calling ::cuLaunchKernel() invalidates the persistent function state
+ * set through the following deprecated APIs:
+ *  ::cuFuncSetBlockShape(),
+ *  ::cuFuncSetSharedSize(),
+ *  ::cuParamSetSize(),
+ *  ::cuParamSeti(),
+ *  ::cuParamSetf(),
+ *  ::cuParamSetv().
+ *
+ * Note that to use ::cuLaunchKernel(), the kernel \p f must either have
+ * been compiled with toolchain version 3.2 or later so that it will
+ * contain kernel parameter information, or have no kernel parameters.
+ * If either of these conditions is not met, then ::cuLaunchKernel() will
+ * return ::CUDA_ERROR_INVALID_IMAGE.
+ *
+ * \param f              - Kernel to launch
+ * \param gridDimX       - Width of grid in blocks
+ * \param gridDimY       - Height of grid in blocks
+ * \param gridDimZ       - Depth of grid in blocks
+ * \param blockDimX      - X dimension of each thread block
+ * \param blockDimY      - Y dimension of each thread block
+ * \param blockDimZ      - Z dimension of each thread block
+ * \param sharedMemBytes - Dynamic shared-memory size per thread block in bytes
+ * \param hStream        - Stream identifier
+ * \param kernelParams   - Array of pointers to kernel parameters
+ * \param extra          - Extra options
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cudaLaunchKernel
+ */
+CUresult CUDAAPI cuLaunchKernel(CUfunction f,
+                                unsigned int gridDimX,
+                                unsigned int gridDimY,
+                                unsigned int gridDimZ,
+                                unsigned int blockDimX,
+                                unsigned int blockDimY,
+                                unsigned int blockDimZ,
+                                unsigned int sharedMemBytes,
+                                CUstream hStream,
+                                void **kernelParams,
+                                void **extra);
+
+/**
+ * \brief Launches a CUDA function with launch-time configuration
+ *
+ * Invokes the kernel \p f with the specified launch-time configuration
+ * \p config.
+ *
+ * The ::CUlaunchConfig structure is defined as:
+ * \code
+        typedef struct CUlaunchConfig_st {
+            unsigned int gridDimX;
+            unsigned int gridDimY;
+            unsigned int gridDimZ;
+            unsigned int blockDimX;
+            unsigned int blockDimY;
+            unsigned int blockDimZ;
+            unsigned int sharedMemBytes;
+            CUstream hStream;
+            CUlaunchAttribute *attrs;
+            unsigned int numAttrs;
+        } CUlaunchConfig;
+ * \endcode
+ * where:
+ * - ::CUlaunchConfig::gridDimX is the width of the grid in blocks.
+ * - ::CUlaunchConfig::gridDimY is the height of the grid in blocks.
+ * - ::CUlaunchConfig::gridDimZ is the depth of the grid in blocks.
+ * - ::CUlaunchConfig::blockDimX is the X dimension of each thread block.
+ * - ::CUlaunchConfig::blockDimX is the Y dimension of each thread block.
+ * - ::CUlaunchConfig::blockDimZ is the Z dimension of each thread block.
+ * - ::CUlaunchConfig::sharedMemBytes is the dynamic shared-memory size per
+ *   thread block in bytes.
+ * - ::CUlaunchConfig::hStream is the handle to the stream to perform the launch
+ *   in. The CUDA context associated with this stream must match that associated
+ *   with function f.
+ * - ::CUlaunchConfig::attrs is an array of ::CUlaunchConfig::numAttrs
+ *   continguous ::CUlaunchAttribute elements. The value of this pointer is not
+ *   considered if ::CUlaunchConfig::numAttrs is zero. However, in that case, it
+ *   is recommended to set the pointer to NULL.
+ * - ::CUlaunchConfig::numAttrs is the numbers of attributes populating the
+ *   first ::CUlaunchConfig::numAttrs positions of the ::CUlaunchConfig::attrs
+ *   array.
+ *
+ * Launch-time configuration is specified by adding entries to
+ * ::CUlaunchConfig::attrs. Each entry is an attribute ID and a corresponding
+ * attribute value.
+ *
+ * The ::CUlaunchAttribute structure is defined as:
+ * \code
+        typedef struct CUlaunchAttribute_st {
+            CUlaunchAttributeID id;
+            CUlaunchAttributeValue value;
+        } CUlaunchAttribute;
+ * \endcode
+ * where:
+ * - ::CUlaunchAttribute::id is a unique enum identifying the attribute.
+ * - ::CUlaunchAttribute::value is a union that hold the attribute value.
+ *
+ * An example of using the \p config parameter:
+ * \code
+        CUlaunchAttribute coopAttr = {.id = CU_LAUNCH_ATTRIBUTE_COOPERATIVE,
+                                      .value = 1};
+        CUlaunchConfig config = {... // set block and grid dimensions
+                                 .attrs = &coopAttr,
+                                 .numAttrs = 1};
+
+        cuLaunchKernelEx(&config, kernel, NULL, NULL);
+ * \endcode
+ *
+ * The ::CUlaunchAttributeID enum is defined as:
+ * \code
+        typedef enum CUlaunchAttributeID_enum {
+            CU_LAUNCH_ATTRIBUTE_IGNORE = 0,
+            CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW   = 1,
+            CU_LAUNCH_ATTRIBUTE_COOPERATIVE            = 2,
+            CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY = 3,
+            CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION                    = 4,
+            CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE = 5,
+            CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION    = 6,
+            CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT                   = 7,
+        } CUlaunchAttributeID;
+ * \endcode
+ *
+ * and the corresponding ::CUlaunchAttributeValue union as :
+ * \code
+        typedef union CUlaunchAttributeValue_union {
+            cuuint64_t pad[8];
+            CUaccessPolicyWindow accessPolicyWindow;
+            int cooperative;
+            CUsynchronizationPolicy syncPolicy;
+            struct {
+                unsigned int x;
+                unsigned int y;
+                unsigned int z;
+            } clusterDim;
+            CUclusterSchedulingPolicy clusterSchedulingPolicyPreference;
+            int programmaticStreamSerializationAllowed;
+            struct {
+                CUevent event;
+                int flags;
+                int triggerAtBlockStart;
+            } programmaticEvent;
+        } CUlaunchAttributeValue;
+ * \endcode
+ *
+ * Setting ::CU_LAUNCH_ATTRIBUTE_COOPERATIVE to a non-zero value causes the
+ * kernel launch to be a cooperative launch, with exactly the same usage and
+ * semantics of ::cuLaunchCooperativeKernel.
+ *
+ * Setting ::CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_STREAM_SERIALIZATION to a non-zero
+ * values causes the kernel to use programmatic means to resolve its stream
+ * dependency -- enabling the CUDA runtime to opportunistically allow the grid's
+ * execution to overlap with the previous kernel in the stream, if that kernel
+ * requests the overlap.
+ *
+ * ::CU_LAUNCH_ATTRIBUTE_PROGRAMMATIC_EVENT records an event along with the
+ * kernel launch. Event recorded through this launch attribute is guaranteed to
+ * only trigger after all block in the associated kernel trigger the event. A
+ * block can trigger the event through PTX launchdep.release or CUDA builtin
+ * function cudaTriggerProgrammaticLaunchCompletion(). A trigger can also be
+ * inserted at the beginning of each block's execution if triggerAtBlockStart is
+ * set to non-0. Note that dependents (including the CPU thread calling
+ * cuEventSynchronize()) are not guaranteed to observe the release precisely
+ * when it is released. For example, cuEventSynchronize() may only observe the
+ * event trigger long after the associated kernel has completed. This recording
+ * type is primarily meant for establishing programmatic dependency between
+ * device tasks. The event supplied must not be an interprocess or interop
+ * event. The event must disable timing (i.e. created with
+ * ::CU_EVENT_DISABLE_TIMING flag set).
+ *
+ * The effect of other attributes is consistent with their effect when set via
+ * persistent APIs.
+ *
+ * See ::cuStreamSetAttribute for
+ * - ::CU_LAUNCH_ATTRIBUTE_ACCESS_POLICY_WINDOW
+ * - ::CU_LAUNCH_ATTRIBUTE_SYNCHRONIZATION_POLICY
+ *
+ * See ::cuFunctionSetAttribute for
+ * - ::CU_LAUNCH_ATTRIBUTE_CLUSTER_DIMENSION
+ * - ::CU_LAUNCH_ATTRIBUTE_CLUSTER_SCHEDULING_POLICY_PREFERENCE
+ *
+ * Kernel parameters to \p f can be specified in the same ways that they can be
+ * using ::cuLaunchKernel.
+ *
+ * \param config         - Kernel to launch
+ * \param f              - Kernel to launch
+ * \param kernelParams   - Array of pointers to kernel parameters
+ * \param extra          - Extra options
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cudaLaunchKernel,
+ * ::cudaLaunchKernelEx
+ */
+CUresult CUDAAPI cuLaunchKernelEx(const CUlaunchConfig *config,
+                                  CUfunction f,
+                                  void **kernelParams,
+                                  void **extra);
+
+/**
+ * \brief Launches a CUDA function where thread blocks can cooperate and synchronize as they execute
+ *
+ * Invokes the kernel \p f on a \p gridDimX x \p gridDimY x \p gridDimZ
+ * grid of blocks. Each block contains \p blockDimX x \p blockDimY x
+ * \p blockDimZ threads.
+ *
+ * \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ * available to each thread block.
+ *
+ * The device on which this kernel is invoked must have a non-zero value for
+ * the device attribute ::CU_DEVICE_ATTRIBUTE_COOPERATIVE_LAUNCH.
+ *
+ * The total number of blocks launched cannot exceed the maximum number of blocks per
+ * multiprocessor as returned by ::cuOccupancyMaxActiveBlocksPerMultiprocessor (or
+ * ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ * as specified by the device attribute ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT.
+ *
+ * The kernel cannot make use of CUDA dynamic parallelism.
+ *
+ * Kernel parameters must be specified via \p kernelParams.  If \p f
+ * has N parameters, then \p kernelParams needs to be an array of N
+ * pointers.  Each of \p kernelParams[0] through \p kernelParams[N-1]
+ * must point to a region of memory from which the actual kernel
+ * parameter will be copied.  The number of kernel parameters and their
+ * offsets and sizes do not need to be specified as that information is
+ * retrieved directly from the kernel's image.
+ *
+ * Calling ::cuLaunchCooperativeKernel() sets persistent function state that is
+ * the same as function state set through ::cuLaunchKernel API
+ *
+ * When the kernel \p f is launched via ::cuLaunchCooperativeKernel(), the previous
+ * block shape, shared size and parameter info associated with \p f
+ * is overwritten.
+ *
+ * Note that to use ::cuLaunchCooperativeKernel(), the kernel \p f must either have
+ * been compiled with toolchain version 3.2 or later so that it will
+ * contain kernel parameter information, or have no kernel parameters.
+ * If either of these conditions is not met, then ::cuLaunchCooperativeKernel() will
+ * return ::CUDA_ERROR_INVALID_IMAGE.
+ *
+ * \param f              - Kernel to launch
+ * \param gridDimX       - Width of grid in blocks
+ * \param gridDimY       - Height of grid in blocks
+ * \param gridDimZ       - Depth of grid in blocks
+ * \param blockDimX      - X dimension of each thread block
+ * \param blockDimY      - Y dimension of each thread block
+ * \param blockDimZ      - Z dimension of each thread block
+ * \param sharedMemBytes - Dynamic shared-memory size per thread block in bytes
+ * \param hStream        - Stream identifier
+ * \param kernelParams   - Array of pointers to kernel parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuLaunchCooperativeKernelMultiDevice,
+ * ::cudaLaunchCooperativeKernel
+ */
+CUresult CUDAAPI cuLaunchCooperativeKernel(CUfunction f,
+                                unsigned int gridDimX,
+                                unsigned int gridDimY,
+                                unsigned int gridDimZ,
+                                unsigned int blockDimX,
+                                unsigned int blockDimY,
+                                unsigned int blockDimZ,
+                                unsigned int sharedMemBytes,
+                                CUstream hStream,
+                                void **kernelParams);
+
+/**
+ * \brief Launches CUDA functions on multiple devices where thread blocks can cooperate and synchronize as they execute
+ *
+ * \deprecated This function is deprecated as of CUDA 11.3.
+ *
+ * Invokes kernels as specified in the \p launchParamsList array where each element
+ * of the array specifies all the parameters required to perform a single kernel launch.
+ * These kernels can cooperate and synchronize as they execute. The size of the array is
+ * specified by \p numDevices.
+ *
+ * No two kernels can be launched on the same device. All the devices targeted by this
+ * multi-device launch must be identical. All devices must have a non-zero value for the
+ * device attribute ::CU_DEVICE_ATTRIBUTE_COOPERATIVE_MULTI_DEVICE_LAUNCH.
+ *
+ * All kernels launched must be identical with respect to the compiled code. Note that
+ * any __device__, __constant__ or __managed__ variables present in the module that owns
+ * the kernel launched on each device, are independently instantiated on every device.
+ * It is the application's responsiblity to ensure these variables are initialized and
+ * used appropriately.
+ *
+ * The size of the grids as specified in blocks, the size of the blocks themselves
+ * and the amount of shared memory used by each thread block must also match across
+ * all launched kernels.
+ *
+ * The streams used to launch these kernels must have been created via either ::cuStreamCreate
+ * or ::cuStreamCreateWithPriority. The NULL stream or ::CU_STREAM_LEGACY or ::CU_STREAM_PER_THREAD
+ * cannot be used.
+ *
+ * The total number of blocks launched per kernel cannot exceed the maximum number of blocks
+ * per multiprocessor as returned by ::cuOccupancyMaxActiveBlocksPerMultiprocessor (or
+ * ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ * as specified by the device attribute ::CU_DEVICE_ATTRIBUTE_MULTIPROCESSOR_COUNT. Since the
+ * total number of blocks launched per device has to match across all devices, the maximum
+ * number of blocks that can be launched per device will be limited by the device with the
+ * least number of multiprocessors.
+ *
+ * The kernels cannot make use of CUDA dynamic parallelism.
+ *
+ * The ::CUDA_LAUNCH_PARAMS structure is defined as:
+ * \code
+        typedef struct CUDA_LAUNCH_PARAMS_st
+        {
+            CUfunction function;
+            unsigned int gridDimX;
+            unsigned int gridDimY;
+            unsigned int gridDimZ;
+            unsigned int blockDimX;
+            unsigned int blockDimY;
+            unsigned int blockDimZ;
+            unsigned int sharedMemBytes;
+            CUstream hStream;
+            void **kernelParams;
+        } CUDA_LAUNCH_PARAMS;
+ * \endcode
+ * where:
+ * - ::CUDA_LAUNCH_PARAMS::function specifies the kernel to be launched. All functions must
+ *   be identical with respect to the compiled code.
+ * - ::CUDA_LAUNCH_PARAMS::gridDimX is the width of the grid in blocks. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::gridDimY is the height of the grid in blocks. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::gridDimZ is the depth of the grid in blocks. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::blockDimX is the X dimension of each thread block. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::blockDimX is the Y dimension of each thread block. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::blockDimZ is the Z dimension of each thread block. This must match across
+ *   all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::sharedMemBytes is the dynamic shared-memory size per thread block in bytes.
+ *   This must match across all kernels launched.
+ * - ::CUDA_LAUNCH_PARAMS::hStream is the handle to the stream to perform the launch in. This cannot
+ *   be the NULL stream or ::CU_STREAM_LEGACY or ::CU_STREAM_PER_THREAD. The CUDA context associated
+ *   with this stream must match that associated with ::CUDA_LAUNCH_PARAMS::function.
+ * - ::CUDA_LAUNCH_PARAMS::kernelParams is an array of pointers to kernel parameters. If
+ *   ::CUDA_LAUNCH_PARAMS::function has N parameters, then ::CUDA_LAUNCH_PARAMS::kernelParams
+ *   needs to be an array of N pointers. Each of ::CUDA_LAUNCH_PARAMS::kernelParams[0] through
+ *   ::CUDA_LAUNCH_PARAMS::kernelParams[N-1] must point to a region of memory from which the actual
+ *   kernel parameter will be copied. The number of kernel parameters and their offsets and sizes
+ *   do not need to be specified as that information is retrieved directly from the kernel's image.
+ *
+ * By default, the kernel won't begin execution on any GPU until all prior work in all the specified
+ * streams has completed. This behavior can be overridden by specifying the flag
+ * ::CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_PRE_LAUNCH_SYNC. When this flag is specified, each kernel
+ * will only wait for prior work in the stream corresponding to that GPU to complete before it begins
+ * execution.
+ *
+ * Similarly, by default, any subsequent work pushed in any of the specified streams will not begin
+ * execution until the kernels on all GPUs have completed. This behavior can be overridden by specifying
+ * the flag ::CUDA_COOPERATIVE_LAUNCH_MULTI_DEVICE_NO_POST_LAUNCH_SYNC. When this flag is specified,
+ * any subsequent work pushed in any of the specified streams will only wait for the kernel launched
+ * on the GPU corresponding to that stream to complete before it begins execution.
+ *
+ * Calling ::cuLaunchCooperativeKernelMultiDevice() sets persistent function state that is
+ * the same as function state set through ::cuLaunchKernel API when called individually for each
+ * element in \p launchParamsList.
+ *
+ * When kernels are launched via ::cuLaunchCooperativeKernelMultiDevice(), the previous
+ * block shape, shared size and parameter info associated with each ::CUDA_LAUNCH_PARAMS::function
+ * in \p launchParamsList is overwritten.
+ *
+ * Note that to use ::cuLaunchCooperativeKernelMultiDevice(), the kernels must either have
+ * been compiled with toolchain version 3.2 or later so that it will
+ * contain kernel parameter information, or have no kernel parameters.
+ * If either of these conditions is not met, then ::cuLaunchCooperativeKernelMultiDevice() will
+ * return ::CUDA_ERROR_INVALID_IMAGE.
+ *
+ * \param launchParamsList - List of launch parameters, one per device
+ * \param numDevices       - Size of the \p launchParamsList array
+ * \param flags            - Flags to control launch behavior
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_IMAGE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_COOPERATIVE_LAUNCH_TOO_LARGE,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuCtxGetCacheConfig,
+ * ::cuCtxSetCacheConfig,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuLaunchCooperativeKernel,
+ * ::cudaLaunchCooperativeKernelMultiDevice
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuLaunchCooperativeKernelMultiDevice(CUDA_LAUNCH_PARAMS *launchParamsList, unsigned int numDevices, unsigned int flags);
+
+/**
+ * \brief Enqueues a host function call in a stream
+ *
+ * Enqueues a host function to run in a stream.  The function will be called
+ * after currently enqueued work and will block work added after it.
+ *
+ * The host function must not make any CUDA API calls.  Attempting to use a
+ * CUDA API may result in ::CUDA_ERROR_NOT_PERMITTED, but this is not required.
+ * The host function must not perform any synchronization that may depend on
+ * outstanding CUDA work not mandated to run earlier.  Host functions without a
+ * mandated order (such as in independent streams) execute in undefined order
+ * and may be serialized.
+ *
+ * For the purposes of Unified Memory, execution makes a number of guarantees:
+ * <ul>
+ *   <li>The stream is considered idle for the duration of the function's
+ *   execution.  Thus, for example, the function may always use memory attached
+ *   to the stream it was enqueued in.</li>
+ *   <li>The start of execution of the function has the same effect as
+ *   synchronizing an event recorded in the same stream immediately prior to
+ *   the function.  It thus synchronizes streams which have been "joined"
+ *   prior to the function.</li>
+ *   <li>Adding device work to any stream does not have the effect of making
+ *   the stream active until all preceding host functions and stream callbacks
+ *   have executed.  Thus, for
+ *   example, a function might use global attached memory even if work has
+ *   been added to another stream, if the work has been ordered behind the
+ *   function call with an event.</li>
+ *   <li>Completion of the function does not cause a stream to become
+ *   active except as described above.  The stream will remain idle
+ *   if no device work follows the function, and will remain idle across
+ *   consecutive host functions or stream callbacks without device work in
+ *   between.  Thus, for example,
+ *   stream synchronization can be done by signaling from a host function at the
+ *   end of the stream.</li>
+ * </ul>
+ *
+ * Note that, in contrast to ::cuStreamAddCallback, the function will not be
+ * called in the event of an error in the CUDA context.
+ *
+ * \param hStream  - Stream to enqueue function call in
+ * \param fn       - The function to call once preceding stream operations are complete
+ * \param userData - User-specified data to be passed to the function
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_SUPPORTED
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuStreamCreate,
+ * ::cuStreamQuery,
+ * ::cuStreamSynchronize,
+ * ::cuStreamWaitEvent,
+ * ::cuStreamDestroy,
+ * ::cuMemAllocManaged,
+ * ::cuStreamAttachMemAsync,
+ * ::cuStreamAddCallback
+ */
+CUresult CUDAAPI cuLaunchHostFunc(CUstream hStream, CUhostFn fn, void *userData);
+
+/** @} */ /* END CUDA_EXEC */
+
+/**
+ * \defgroup CUDA_EXEC_DEPRECATED Execution Control [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated execution control functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the deprecated execution control functions of the
+ * low-level CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Sets the block-dimensions for the function
+ *
+ * \deprecated
+ *
+ * Specifies the \p x, \p y, and \p z dimensions of the thread blocks that are
+ * created when the kernel given by \p hfunc is launched.
+ *
+ * \param hfunc - Kernel to specify dimensions of
+ * \param x     - X dimension
+ * \param y     - Y dimension
+ * \param z     - Z dimension
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetSharedSize,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSeti,
+ * ::cuParamSetf,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuFuncSetBlockShape(CUfunction hfunc, int x, int y, int z);
+
+/**
+ * \brief Sets the dynamic shared-memory size for the function
+ *
+ * \deprecated
+ *
+ * Sets through \p bytes the amount of dynamic shared memory that will be
+ * available to each thread block when the kernel given by \p hfunc is launched.
+ *
+ * \param hfunc - Kernel to specify dynamic shared-memory size for
+ * \param bytes - Dynamic shared-memory size per thread in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetCacheConfig,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSeti,
+ * ::cuParamSetf,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuFuncSetSharedSize(CUfunction hfunc, unsigned int bytes);
+
+/**
+ * \brief Sets the parameter size for the function
+ *
+ * \deprecated
+ *
+ * Sets through \p numbytes the total size in bytes needed by the function
+ * parameters of the kernel corresponding to \p hfunc.
+ *
+ * \param hfunc    - Kernel to set parameter size for
+ * \param numbytes - Size of parameter list in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetf,
+ * ::cuParamSeti,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuParamSetSize(CUfunction hfunc, unsigned int numbytes);
+
+/**
+ * \brief Adds an integer parameter to the function's argument list
+ *
+ * \deprecated
+ *
+ * Sets an integer parameter that will be specified the next time the
+ * kernel corresponding to \p hfunc will be invoked. \p offset is a byte offset.
+ *
+ * \param hfunc  - Kernel to add parameter to
+ * \param offset - Offset to add parameter to argument list
+ * \param value  - Value of parameter
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSetf,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuParamSeti(CUfunction hfunc, int offset, unsigned int value);
+
+/**
+ * \brief Adds a floating-point parameter to the function's argument list
+ *
+ * \deprecated
+ *
+ * Sets a floating-point parameter that will be specified the next time the
+ * kernel corresponding to \p hfunc will be invoked. \p offset is a byte offset.
+ *
+ * \param hfunc  - Kernel to add parameter to
+ * \param offset - Offset to add parameter to argument list
+ * \param value  - Value of parameter
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSeti,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuParamSetf(CUfunction hfunc, int offset, float value);
+
+/**
+ * \brief Adds arbitrary data to the function's argument list
+ *
+ * \deprecated
+ *
+ * Copies an arbitrary amount of data (specified in \p numbytes) from \p ptr
+ * into the parameter space of the kernel corresponding to \p hfunc. \p offset
+ * is a byte offset.
+ *
+ * \param hfunc    - Kernel to add data to
+ * \param offset   - Offset to add data to argument list
+ * \param ptr      - Pointer to arbitrary data
+ * \param numbytes - Size of data to copy in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSetf,
+ * ::cuParamSeti,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuParamSetv(CUfunction hfunc, int offset, void *ptr, unsigned int numbytes);
+
+/**
+ * \brief Launches a CUDA function
+ *
+ * \deprecated
+ *
+ * Invokes the kernel \p f on a 1 x 1 x 1 grid of blocks. The block
+ * contains the number of threads specified by a previous call to
+ * ::cuFuncSetBlockShape().
+ *
+ * The block shape, dynamic shared memory size, and parameter information
+ * must be set using
+ *  ::cuFuncSetBlockShape(),
+ *  ::cuFuncSetSharedSize(),
+ *  ::cuParamSetSize(),
+ *  ::cuParamSeti(),
+ *  ::cuParamSetf(), and
+ *  ::cuParamSetv()
+ * prior to calling this function.
+ *
+ * Launching a function via ::cuLaunchKernel() invalidates the function's
+ * block shape, dynamic shared memory size, and parameter information. After
+ * launching via cuLaunchKernel, this state must be re-initialized prior to
+ * calling this function. Failure to do so results in undefined behavior.
+ *
+ * \param f - Kernel to launch
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSetf,
+ * ::cuParamSeti,
+ * ::cuParamSetv,
+ * ::cuLaunchGrid,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuLaunch(CUfunction f);
+
+/**
+ * \brief Launches a CUDA function
+ *
+ * \deprecated
+ *
+ * Invokes the kernel \p f on a \p grid_width x \p grid_height grid of
+ * blocks. Each block contains the number of threads specified by a previous
+ * call to ::cuFuncSetBlockShape().
+ *
+ * The block shape, dynamic shared memory size, and parameter information
+ * must be set using
+ *  ::cuFuncSetBlockShape(),
+ *  ::cuFuncSetSharedSize(),
+ *  ::cuParamSetSize(),
+ *  ::cuParamSeti(),
+ *  ::cuParamSetf(), and
+ *  ::cuParamSetv()
+ * prior to calling this function.
+ *
+ * Launching a function via ::cuLaunchKernel() invalidates the function's
+ * block shape, dynamic shared memory size, and parameter information. After
+ * launching via cuLaunchKernel, this state must be re-initialized prior to
+ * calling this function. Failure to do so results in undefined behavior.
+ *
+ * \param f           - Kernel to launch
+ * \param grid_width  - Width of grid in blocks
+ * \param grid_height - Height of grid in blocks
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSetf,
+ * ::cuParamSeti,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGridAsync,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuLaunchGrid(CUfunction f, int grid_width, int grid_height);
+
+/**
+ * \brief Launches a CUDA function
+ *
+ * \deprecated
+ *
+ * Invokes the kernel \p f on a \p grid_width x \p grid_height grid of
+ * blocks. Each block contains the number of threads specified by a previous
+ * call to ::cuFuncSetBlockShape().
+ *
+ * The block shape, dynamic shared memory size, and parameter information
+ * must be set using
+ *  ::cuFuncSetBlockShape(),
+ *  ::cuFuncSetSharedSize(),
+ *  ::cuParamSetSize(),
+ *  ::cuParamSeti(),
+ *  ::cuParamSetf(), and
+ *  ::cuParamSetv()
+ * prior to calling this function.
+ *
+ * Launching a function via ::cuLaunchKernel() invalidates the function's
+ * block shape, dynamic shared memory size, and parameter information. After
+ * launching via cuLaunchKernel, this state must be re-initialized prior to
+ * calling this function. Failure to do so results in undefined behavior.
+ *
+ * \param f           - Kernel to launch
+ * \param grid_width  - Width of grid in blocks
+ * \param grid_height - Height of grid in blocks
+ * \param hStream     - Stream identifier
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_LAUNCH_FAILED,
+ * ::CUDA_ERROR_LAUNCH_OUT_OF_RESOURCES,
+ * ::CUDA_ERROR_LAUNCH_TIMEOUT,
+ * ::CUDA_ERROR_LAUNCH_INCOMPATIBLE_TEXTURING,
+ * ::CUDA_ERROR_SHARED_OBJECT_INIT_FAILED
+ *
+ * \note In certain cases where cubins are created with no ABI (i.e., using \p ptxas \p --abi-compile \p no),
+ *       this function may serialize kernel launches. The CUDA driver retains asynchronous behavior by
+ *       growing the per-thread stack as needed per launch and not shrinking it afterwards.
+ *
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa ::cuFuncSetBlockShape,
+ * ::cuFuncSetSharedSize,
+ * ::cuFuncGetAttribute,
+ * ::cuParamSetSize,
+ * ::cuParamSetf,
+ * ::cuParamSeti,
+ * ::cuParamSetv,
+ * ::cuLaunch,
+ * ::cuLaunchGrid,
+ * ::cuLaunchKernel
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuLaunchGridAsync(CUfunction f, int grid_width, int grid_height, CUstream hStream);
+
+
+/**
+ * \brief Adds a texture-reference to the function's argument list
+ *
+ * \deprecated
+ *
+ * Makes the CUDA array or linear memory bound to the texture reference
+ * \p hTexRef available to a device program as a texture. In this version of
+ * CUDA, the texture-reference must be obtained via ::cuModuleGetTexRef() and
+ * the \p texunit parameter must be set to ::CU_PARAM_TR_DEFAULT.
+ *
+ * \param hfunc   - Kernel to add texture-reference to
+ * \param texunit - Texture unit (must be ::CU_PARAM_TR_DEFAULT)
+ * \param hTexRef - Texture-reference to add to argument list
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuParamSetTexRef(CUfunction hfunc, int texunit, CUtexref hTexRef);
+/** @} */ /* END CUDA_EXEC_DEPRECATED */
+
+/**
+ * \defgroup CUDA_GRAPH Graph Management
+ *
+ * ___MANBRIEF___ graph management functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the graph management functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates a graph
+ *
+ * Creates an empty graph, which is returned via \p phGraph.
+ *
+ * \param phGraph - Returns newly created graph
+ * \param flags   - Graph creation flags, must be 0
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ * ::cuGraphInstantiate,
+ * ::cuGraphDestroy,
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphGetEdges,
+ * ::cuGraphClone
+ */
+CUresult CUDAAPI cuGraphCreate(CUgraph *phGraph, unsigned int flags);
+
+/**
+ * \brief Creates a kernel execution node and adds it to a graph
+ *
+ * Creates a new kernel execution node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * The CUDA_KERNEL_NODE_PARAMS structure is defined as:
+ *
+ * \code
+ *  typedef struct CUDA_KERNEL_NODE_PARAMS_st {
+ *      CUfunction func;
+ *      unsigned int gridDimX;
+ *      unsigned int gridDimY;
+ *      unsigned int gridDimZ;
+ *      unsigned int blockDimX;
+ *      unsigned int blockDimY;
+ *      unsigned int blockDimZ;
+ *      unsigned int sharedMemBytes;
+ *      void **kernelParams;
+ *      void **extra;
+ *  } CUDA_KERNEL_NODE_PARAMS;
+ * \endcode
+ *
+ * When the graph is launched, the node will invoke kernel \p func on a (\p gridDimX x
+ * \p gridDimY x \p gridDimZ) grid of blocks. Each block contains
+ * (\p blockDimX x \p blockDimY x \p blockDimZ) threads.
+ *
+ * \p sharedMemBytes sets the amount of dynamic shared memory that will be
+ * available to each thread block.
+ *
+ * Kernel parameters to \p func can be specified in one of two ways:
+ *
+ * 1) Kernel parameters can be specified via \p kernelParams. If the kernel has N
+ * parameters, then \p kernelParams needs to be an array of N pointers. Each pointer,
+ * from \p kernelParams[0] to \p kernelParams[N-1], points to the region of memory from which the actual
+ * parameter will be copied. The number of kernel parameters and their offsets and sizes do not need
+ * to be specified as that information is retrieved directly from the kernel's image.
+ *
+ * 2) Kernel parameters for non-cooperative kernels can also be packaged by the application into a single
+ * buffer that is passed in via \p extra. This places the burden on the application of knowing each
+ * kernel parameter's size and alignment/padding within the buffer. The \p extra parameter exists
+ * to allow this function to take additional less commonly used arguments. \p extra specifies
+ * a list of names of extra settings and their corresponding values. Each extra setting name is
+ * immediately followed by the corresponding value. The list must be terminated with either NULL or
+ * CU_LAUNCH_PARAM_END.
+ *
+ * - ::CU_LAUNCH_PARAM_END, which indicates the end of the \p extra
+ *   array;
+ * - ::CU_LAUNCH_PARAM_BUFFER_POINTER, which specifies that the next
+ *   value in \p extra will be a pointer to a buffer
+ *   containing all the kernel parameters for launching kernel
+ *   \p func;
+ * - ::CU_LAUNCH_PARAM_BUFFER_SIZE, which specifies that the next
+ *   value in \p extra will be a pointer to a size_t
+ *   containing the size of the buffer specified with
+ *   ::CU_LAUNCH_PARAM_BUFFER_POINTER;
+ *
+ * The error ::CUDA_ERROR_INVALID_VALUE will be returned if kernel parameters are specified with both
+ * \p kernelParams and \p extra (i.e. both \p kernelParams and \p extra are non-NULL).
+ * ::CUDA_ERROR_INVALID_VALUE will be returned if \p extra is used for a cooperative kernel.
+ *
+ * The \p kernelParams or \p extra array, as well as the argument values it points to,
+ * are copied during this call.
+ *
+ * \note Kernels launched using graphs must not use texture and surface references. Reading or
+ *       writing through any texture or surface reference is undefined behavior.
+ *       This restriction does not apply to texture and surface objects.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the GPU execution node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchKernel,
+ * ::cuLaunchCooperativeKernel,
+ * ::cuGraphKernelNodeGetParams,
+ * ::cuGraphKernelNodeSetParams,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddKernelNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_KERNEL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns a kernel node's parameters
+ *
+ * Returns the parameters of kernel node \p hNode in \p nodeParams.
+ * The \p kernelParams or \p extra array returned in \p nodeParams,
+ * as well as the argument values it points to, are owned by the node.
+ * This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cuGraphKernelNodeSetParams to update the
+ * parameters of this node.
+ *
+ * The params will contain either \p kernelParams or \p extra,
+ * according to which of these was most recently set on the node.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param nodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchKernel,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphKernelNodeSetParams
+ */
+CUresult CUDAAPI cuGraphKernelNodeGetParams(CUgraphNode hNode, CUDA_KERNEL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets a kernel node's parameters
+ *
+ * Sets the parameters of kernel node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchKernel,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphKernelNodeGetParams
+ */
+CUresult CUDAAPI cuGraphKernelNodeSetParams(CUgraphNode hNode, const CUDA_KERNEL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates a memcpy node and adds it to a graph
+ *
+ * Creates a new memcpy node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * When the graph is launched, the node will perform the memcpy described by \p copyParams.
+ * See ::cuMemcpy3D() for a description of the structure and its restrictions.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_CONCURRENT_MANAGED_ACCESS. If one or more of the operands refer
+ * to managed memory, then using the memory type ::CU_MEMORYTYPE_UNIFIED is disallowed
+ * for those operand(s). The managed memory will be treated as residing on either the
+ * host or the device, depending on which memory type is specified.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param copyParams      - Parameters for the memory copy
+ * \param ctx             - Context on which to run the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemcpy3D,
+ * ::cuGraphMemcpyNodeGetParams,
+ * ::cuGraphMemcpyNodeSetParams,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddMemcpyNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_MEMCPY3D *copyParams, CUcontext ctx);
+
+/**
+ * \brief Returns a memcpy node's parameters
+ *
+ * Returns the parameters of memcpy node \p hNode in \p nodeParams.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param nodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemcpy3D,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphMemcpyNodeSetParams
+ */
+CUresult CUDAAPI cuGraphMemcpyNodeGetParams(CUgraphNode hNode, CUDA_MEMCPY3D *nodeParams);
+
+/**
+ * \brief Sets a memcpy node's parameters
+ *
+ * Sets the parameters of memcpy node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemcpy3D,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphMemcpyNodeGetParams
+ */
+CUresult CUDAAPI cuGraphMemcpyNodeSetParams(CUgraphNode hNode, const CUDA_MEMCPY3D *nodeParams);
+
+/**
+ * \brief Creates a memset node and adds it to a graph
+ *
+ * Creates a new memset node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * The element size must be 1, 2, or 4 bytes.
+ * When the graph is launched, the node will perform the memset described by \p memsetParams.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param memsetParams    - Parameters for the memory set
+ * \param ctx             - Context on which to run the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemsetD2D32,
+ * ::cuGraphMemsetNodeGetParams,
+ * ::cuGraphMemsetNodeSetParams,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode
+ */
+CUresult CUDAAPI cuGraphAddMemsetNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_MEMSET_NODE_PARAMS *memsetParams, CUcontext ctx);
+
+/**
+ * \brief Returns a memset node's parameters
+ *
+ * Returns the parameters of memset node \p hNode in \p nodeParams.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param nodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemsetD2D32,
+ * ::cuGraphAddMemsetNode,
+ * ::cuGraphMemsetNodeSetParams
+ */
+CUresult CUDAAPI cuGraphMemsetNodeGetParams(CUgraphNode hNode, CUDA_MEMSET_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets a memset node's parameters
+ *
+ * Sets the parameters of memset node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuMemsetD2D32,
+ * ::cuGraphAddMemsetNode,
+ * ::cuGraphMemsetNodeGetParams
+ */
+CUresult CUDAAPI cuGraphMemsetNodeSetParams(CUgraphNode hNode, const CUDA_MEMSET_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates a host execution node and adds it to a graph
+ *
+ * Creates a new CPU execution node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * When the graph is launched, the node will invoke the specified CPU function.
+ * Host nodes are not supported under MPS with pre-Volta GPUs.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the host node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchHostFunc,
+ * ::cuGraphHostNodeGetParams,
+ * ::cuGraphHostNodeSetParams,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddHostNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_HOST_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns a host node's parameters
+ *
+ * Returns the parameters of host node \p hNode in \p nodeParams.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param nodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchHostFunc,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphHostNodeSetParams
+ */
+CUresult CUDAAPI cuGraphHostNodeGetParams(CUgraphNode hNode, CUDA_HOST_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets a host node's parameters
+ *
+ * Sets the parameters of host node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchHostFunc,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphHostNodeGetParams
+ */
+CUresult CUDAAPI cuGraphHostNodeSetParams(CUgraphNode hNode, const CUDA_HOST_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates a child graph node and adds it to a graph
+ *
+ * Creates a new node which executes an embedded graph, and adds it to \p hGraph with
+ * \p numDependencies dependencies specified via \p dependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * If \p hGraph contains allocation or free nodes, this call will return an error.
+ *
+ * The node executes an embedded child graph. The child graph is cloned in this call.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param childGraph      - The graph to clone into this node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphChildGraphNodeGetGraph,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ * ::cuGraphClone
+ */
+CUresult CUDAAPI cuGraphAddChildGraphNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUgraph childGraph);
+
+/**
+ * \brief Gets a handle to the embedded graph of a child graph node
+ *
+ * Gets a handle to the embedded graph in a child graph node. This call
+ * does not clone the graph. Changes to the graph will be reflected in
+ * the node, and the node retains ownership of the graph.
+ *
+ * Allocation and free nodes cannot be added to the returned graph.
+ * Attempting to do so will return an error.
+ *
+ * \param hNode   - Node to get the embedded graph for
+ * \param phGraph - Location to store a handle to the graph
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphNodeFindInClone
+ */
+CUresult CUDAAPI cuGraphChildGraphNodeGetGraph(CUgraphNode hNode, CUgraph *phGraph);
+
+/**
+ * \brief Creates an empty node and adds it to a graph
+ *
+ * Creates a new node which performs no operation, and adds it to \p hGraph with
+ * \p numDependencies dependencies specified via \p dependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * An empty node performs no operation during execution, but can be used for
+ * transitive ordering. For example, a phased execution graph with 2 groups of n
+ * nodes with a barrier between them can be represented using an empty node and
+ * 2*n dependency edges, rather than no empty node and n^2 dependency edges.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddEmptyNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies);
+
+/**
+ * \brief Creates an event record node and adds it to a graph
+ *
+ * Creates a new event record node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and event specified in \p event.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * Each launch of the graph will record \p event to capture execution of the
+ * node's dependencies.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param event           - Event for the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventWaitNode,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ */
+CUresult CUDAAPI cuGraphAddEventRecordNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUevent event);
+ 
+/**
+ * \brief Returns the event associated with an event record node
+ *
+ * Returns the event of event record node \p hNode in \p event_out.
+ *
+ * \param hNode     - Node to get the event for
+ * \param event_out - Pointer to return the event
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphEventRecordNodeSetEvent,
+ * ::cuGraphEventWaitNodeGetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuGraphEventRecordNodeGetEvent(CUgraphNode hNode, CUevent *event_out);
+
+/**
+ * \brief Sets an event record node's event
+ *
+ * Sets the event of event record node \p hNode to \p event.
+ *
+ * \param hNode - Node to set the event for
+ * \param event - Event to use
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphEventRecordNodeGetEvent,
+ * ::cuGraphEventWaitNodeSetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuGraphEventRecordNodeSetEvent(CUgraphNode hNode, CUevent event);
+
+/**
+ * \brief Creates an event wait node and adds it to a graph
+ *
+ * Creates a new event wait node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and event specified in \p event.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * The graph node will wait for all work captured in \p event.  See ::cuEventRecord()
+ * for details on what is captured by an event. \p event may be from a different context
+ * or device than the launch stream.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param event           - Event for the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventRecordNode,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ */
+CUresult CUDAAPI cuGraphAddEventWaitNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUevent event);
+
+/**
+ * \brief Returns the event associated with an event wait node
+ *
+ * Returns the event of event wait node \p hNode in \p event_out.
+ *
+ * \param hNode     - Node to get the event for
+ * \param event_out - Pointer to return the event
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphEventWaitNodeSetEvent,
+ * ::cuGraphEventRecordNodeGetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuGraphEventWaitNodeGetEvent(CUgraphNode hNode, CUevent *event_out);
+
+/**
+ * \brief Sets an event wait node's event
+ *
+ * Sets the event of event wait node \p hNode to \p event.
+ *
+ * \param hNode - Node to set the event for
+ * \param event - Event to use
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphEventWaitNodeGetEvent,
+ * ::cuGraphEventRecordNodeSetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent
+ */
+CUresult CUDAAPI cuGraphEventWaitNodeSetEvent(CUgraphNode hNode, CUevent event);
+
+/**
+ * \brief Creates an external semaphore signal node and adds it to a graph
+ *
+ * Creates a new external semaphore signal node and adds it to \p hGraph with \p
+ * numDependencies dependencies specified via \p dependencies and arguments specified
+ * in \p nodeParams. It is possible for \p numDependencies to be 0, in which case the
+ * node will be placed at the root of the graph. \p dependencies may not have any
+ * duplicate entries. A handle to the new node will be returned in \p phGraphNode.
+ *
+ * Performs a signal operation on a set of externally allocated semaphore objects
+ * when the node is launched.  The operation(s) will occur after all of the node's
+ * dependencies have completed.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphExternalSemaphoresSignalNodeGetParams,
+ * ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuImportExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ */
+CUresult CUDAAPI cuGraphAddExternalSemaphoresSignalNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns an external semaphore signal node's parameters
+ *
+ * Returns the parameters of an external semaphore signal node \p hNode in \p params_out.
+ * The \p extSemArray and \p paramsArray returned in \p params_out,
+ * are owned by the node.  This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cuGraphExternalSemaphoresSignalNodeSetParams to update the
+ * parameters of this node.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchKernel,
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuGraphExternalSemaphoresSignalNodeGetParams(CUgraphNode hNode, CUDA_EXT_SEM_SIGNAL_NODE_PARAMS *params_out);
+
+/**
+ * \brief Sets an external semaphore signal node's parameters
+ *
+ * Sets the parameters of an external semaphore signal node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuGraphExternalSemaphoresSignalNodeSetParams(CUgraphNode hNode, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates an external semaphore wait node and adds it to a graph
+ *
+ * Creates a new external semaphore wait node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p phGraphNode.
+ *
+ * Performs a wait operation on a set of externally allocated semaphore objects
+ * when the node is launched.  The node's dependencies will not be launched until
+ * the wait operation has completed.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphExternalSemaphoresWaitNodeGetParams,
+ * ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuImportExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ */
+CUresult CUDAAPI cuGraphAddExternalSemaphoresWaitNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_EXT_SEM_WAIT_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns an external semaphore wait node's parameters
+ *
+ * Returns the parameters of an external semaphore wait node \p hNode in \p params_out.
+ * The \p extSemArray and \p paramsArray returned in \p params_out,
+ * are owned by the node.  This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cuGraphExternalSemaphoresSignalNodeSetParams to update the
+ * parameters of this node.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuLaunchKernel,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuGraphExternalSemaphoresWaitNodeGetParams(CUgraphNode hNode, CUDA_EXT_SEM_WAIT_NODE_PARAMS *params_out);
+
+/**
+ * \brief Sets an external semaphore wait node's parameters
+ *
+ * Sets the parameters of an external semaphore wait node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync
+ */
+CUresult CUDAAPI cuGraphExternalSemaphoresWaitNodeSetParams(CUgraphNode hNode, const CUDA_EXT_SEM_WAIT_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates a batch memory operation node and adds it to a graph
+ *
+ * Creates a new batch memory operation node and adds it to \p hGraph with \p
+ * numDependencies dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * When the node is added, the paramArray inside \p nodeParams is copied and therefore it can be
+ * freed after the call returns.
+ *
+ * \note
+ * Warning:
+ * Improper use of this API may deadlock the application. Synchronization 
+ * ordering established through this API is not visible to CUDA. CUDA tasks 
+ * that are (even indirectly) ordered by this API should also have that order
+ * expressed with CUDA-visible dependencies such as events. This ensures that 
+ * the scheduler does not serialize them in an improper order. For more 
+ * information, see the Stream Memory Operations section in the programming 
+ * guide(https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html).
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuStreamWaitValue32_v2,
+ * ::cuStreamWriteValue32_v2,
+ * ::cuStreamWaitValue64_v2,
+ * ::cuStreamWriteValue64_v2,
+ * ::cuGraphBatchMemOpNodeGetParams,
+ * ::cuGraphBatchMemOpNodeSetParams,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode,
+ */
+CUresult CUDAAPI cuGraphAddBatchMemOpNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns a batch mem op node's parameters
+ *
+ * Returns the parameters of batch mem op node \p hNode in \p nodeParams_out.
+ * The \p paramArray returned in \p nodeParams_out is owned by the node.
+ * This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cuGraphBatchMemOpNodeSetParams to update the
+ * parameters of this node.
+ *
+ * \param hNode          - Node to get the parameters for
+ * \param nodeParams_out - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuGraphAddBatchMemOpNode,
+ * ::cuGraphBatchMemOpNodeSetParams
+ */
+CUresult CUDAAPI cuGraphBatchMemOpNodeGetParams(CUgraphNode hNode, CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams_out);
+
+/**
+ * \brief Sets a batch mem op node's parameters
+ *
+ * Sets the parameters of batch mem op node \p hNode to \p nodeParams.
+ *
+ * The paramArray inside \p nodeParams is copied and therefore it can be
+ * freed after the call returns.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuGraphAddBatchMemOpNode,
+ * ::cuGraphBatchMemOpNodeGetParams
+ */
+CUresult CUDAAPI cuGraphBatchMemOpNodeSetParams(CUgraphNode hNode, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets the parameters for a batch mem op node in the given graphExec
+ *
+ * Sets the parameters of a batch mem op node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * The following fields on operations may be modified on an executable graph:
+ *
+ *  op.waitValue.address
+ *  op.waitValue.value[64]
+ *  op.waitValue.flags bits corresponding to wait type (i.e. CU_STREAM_WAIT_VALUE_FLUSH bit cannot be modified)
+ *  op.writeValue.address
+ *  op.writeValue.value[64]
+ *
+ * Other fields, such as the context, count or type of operations, and other types of operations such as membars, 
+ * may not be modified.
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * The paramArray inside \p nodeParams is copied and therefore it can be
+ * freed after the call returns.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Batch mem op node from the graph from which graphExec was instantiated
+ * \param nodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuStreamBatchMemOp_v2,
+ * ::cuGraphAddBatchMemOpNode,
+ * ::cuGraphBatchMemOpNodeGetParams,
+ * ::cuGraphBatchMemOpNodeSetParams,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecBatchMemOpNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Creates an allocation node and adds it to a graph
+ *
+ * Creates a new allocation node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p phGraphNode.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * When ::cuGraphAddMemAllocNode creates an allocation node, it returns the address of the allocation in
+ * \p nodeParams.dptr.  The allocation's address remains fixed across instantiations and launches.
+ *
+ * If the allocation is freed in the same graph, by creating a free node using ::cuGraphAddMemFreeNode,
+ * the allocation can be accessed by nodes ordered after the allocation node but before the free node.
+ * These allocations cannot be freed outside the owning graph, and they can only be freed once in the
+ * owning graph.
+ *
+ * If the allocation is not freed in the same graph, then it can be accessed not only by nodes in the
+ * graph which are ordered after the allocation node, but also by stream operations ordered after the
+ * graph's execution but before the allocation is freed.
+ *
+ * Allocations which are not freed in the same graph can be freed by:
+ * - passing the allocation to ::cuMemFreeAsync or ::cuMemFree;
+ * - launching a graph with a free node for that allocation; or
+ * - specifying ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH during instantiation, which makes
+ * each launch behave as though it called ::cuMemFreeAsync for every unfreed allocation.
+ * 
+ * It is not possible to free an allocation in both the owning graph and another graph.  If the allocation
+ * is freed in the same graph, a free node cannot be added to another graph.  If the allocation is freed
+ * in another graph, a free node can no longer be added to the owning graph.
+ *
+ * The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ * - Nodes and edges of the graph cannot be deleted.
+ * - The graph cannot be used in a child node.
+ * - Only one instantiation of the graph may exist at any point in time.
+ * - The graph cannot be cloned.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemFreeNode,
+ * ::cuGraphMemAllocNodeGetParams,
+ * ::cuDeviceGraphMemTrim,
+ * ::cuDeviceGetGraphMemAttribute,
+ * ::cuDeviceSetGraphMemAttribute,
+ * ::cuMemAllocAsync,
+ * ::cuMemFreeAsync,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddMemAllocNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUDA_MEM_ALLOC_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Returns a memory alloc node's parameters
+ *
+ * Returns the parameters of a memory alloc node \p hNode in \p params_out.
+ * The \p poolProps and \p accessDescs returned in \p params_out, are owned by the
+ * node.  This memory remains valid until the node is destroyed.  The returned
+ * parameters must not be modified.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemAllocNode,
+ * ::cuGraphMemFreeNodeGetParams
+ */
+CUresult CUDAAPI cuGraphMemAllocNodeGetParams(CUgraphNode hNode, CUDA_MEM_ALLOC_NODE_PARAMS *params_out);
+
+/**
+ * \brief Creates a memory free node and adds it to a graph
+ *
+ * Creates a new memory free node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p phGraphNode.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param dptr            - Address of memory to free
+ *
+ * ::cuGraphAddMemFreeNode will return ::CUDA_ERROR_INVALID_VALUE if the user attempts to free:
+ * - an allocation twice in the same graph.
+ * - an address that was not returned by an allocation node.
+ * - an invalid address.
+ *
+ * The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ * - Nodes and edges of the graph cannot be deleted.
+ * - The graph cannot be used in a child node.
+ * - Only one instantiation of the graph may exist at any point in time.
+ * - The graph cannot be cloned.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemAllocNode,
+ * ::cuGraphMemFreeNodeGetParams,
+ * ::cuDeviceGraphMemTrim,
+ * ::cuDeviceGetGraphMemAttribute,
+ * ::cuDeviceSetGraphMemAttribute,
+ * ::cuMemAllocAsync,
+ * ::cuMemFreeAsync,
+ * ::cuGraphCreate,
+ * ::cuGraphDestroyNode,
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphAddMemFreeNode(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUdeviceptr dptr);
+
+/**
+ * \brief Returns a memory free node's parameters
+ *
+ * Returns the address of a memory free node \p hNode in \p dptr_out.
+ *
+ * \param hNode    - Node to get the parameters for
+ * \param dptr_out - Pointer to return the device address
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemFreeNode,
+ * ::cuGraphMemAllocNodeGetParams
+ */
+CUresult CUDAAPI cuGraphMemFreeNodeGetParams(CUgraphNode hNode, CUdeviceptr *dptr_out);
+
+/**
+ * \brief Free unused memory that was cached on the specified device for use with graphs back to the OS.
+ *
+ * Blocks which are not in use by a graph that is either currently executing or scheduled to execute are
+ * freed back to the operating system.
+ *
+ * \param device - The device for which cached memory should be freed.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ *
+ * \sa
+ * ::cuGraphAddMemAllocNode,
+ * ::cuGraphAddMemFreeNode,
+ * ::cuDeviceSetGraphMemAttribute,
+ * ::cuDeviceGetGraphMemAttribute
+ */
+CUresult CUDAAPI cuDeviceGraphMemTrim(CUdevice device);
+
+/**
+ * \brief Query asynchronous allocation attributes related to graphs
+ *
+ * Valid attributes are:
+ *
+ * - ::CU_GRAPH_MEM_ATTR_USED_MEM_CURRENT: Amount of memory, in bytes, currently associated with graphs
+ * - ::CU_GRAPH_MEM_ATTR_USED_MEM_HIGH: High watermark of memory, in bytes, associated with graphs since the
+ *   last time it was reset.  High watermark can only be reset to zero.
+ * - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_CURRENT: Amount of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ * - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH: High watermark of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ *
+ * \param device - Specifies the scope of the query
+ * \param attr - attribute to get
+ * \param value - retrieved value
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ *
+ * \sa
+ * ::cuDeviceSetGraphMemAttribute,
+ * ::cuGraphAddMemAllocNode,
+ * ::cuGraphAddMemFreeNode
+ */
+CUresult CUDAAPI cuDeviceGetGraphMemAttribute(CUdevice device, CUgraphMem_attribute attr, void* value);
+
+/**
+ * \brief Set asynchronous allocation attributes related to graphs
+ *
+ * Valid attributes are:
+ *
+ * - ::CU_GRAPH_MEM_ATTR_USED_MEM_HIGH: High watermark of memory, in bytes, associated with graphs since the
+ *   last time it was reset.  High watermark can only be reset to zero.
+ * - ::CU_GRAPH_MEM_ATTR_RESERVED_MEM_HIGH: High watermark of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ *
+ * \param device - Specifies the scope of the query
+ * \param attr - attribute to get
+ * \param value - pointer to value to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ *
+ * \sa
+ * ::cuDeviceGetGraphMemAttribute,
+ * ::cuGraphAddMemAllocNode,
+ * ::cuGraphAddMemFreeNode
+ */
+CUresult CUDAAPI cuDeviceSetGraphMemAttribute(CUdevice device, CUgraphMem_attribute attr, void* value);
+
+/**
+ * \brief Clones a graph
+ *
+ * This function creates a copy of \p originalGraph and returns it in \p phGraphClone.
+ * All parameters are copied into the cloned graph. The original graph may be modified
+ * after this call without affecting the clone.
+ *
+ * Child graph nodes in the original graph are recursively copied into the clone.
+ *
+ * \param phGraphClone  - Returns newly created cloned graph
+ * \param originalGraph - Graph to clone
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphCreate,
+ * ::cuGraphNodeFindInClone
+ */
+CUresult CUDAAPI cuGraphClone(CUgraph *phGraphClone, CUgraph originalGraph);
+
+/**
+ * \brief Finds a cloned version of a node
+ *
+ * This function returns the node in \p hClonedGraph corresponding to \p hOriginalNode
+ * in the original graph.
+ *
+ * \p hClonedGraph must have been cloned from \p hOriginalGraph via ::cuGraphClone.
+ * \p hOriginalNode must have been in \p hOriginalGraph at the time of the call to
+ * ::cuGraphClone, and the corresponding cloned node in \p hClonedGraph must not have
+ * been removed. The cloned node is then returned via \p phClonedNode.
+ *
+ * \param phNode  - Returns handle to the cloned node
+ * \param hOriginalNode - Handle to the original node
+ * \param hClonedGraph - Cloned graph to query
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphClone
+ */
+CUresult CUDAAPI cuGraphNodeFindInClone(CUgraphNode *phNode, CUgraphNode hOriginalNode, CUgraph hClonedGraph);
+
+/**
+ * \brief Returns a node's type
+ *
+ * Returns the node type of \p hNode in \p type.
+ *
+ * \param hNode - Node to query
+ * \param type  - Pointer to return the node type
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphChildGraphNodeGetGraph,
+ * ::cuGraphKernelNodeGetParams,
+ * ::cuGraphKernelNodeSetParams,
+ * ::cuGraphHostNodeGetParams,
+ * ::cuGraphHostNodeSetParams,
+ * ::cuGraphMemcpyNodeGetParams,
+ * ::cuGraphMemcpyNodeSetParams,
+ * ::cuGraphMemsetNodeGetParams,
+ * ::cuGraphMemsetNodeSetParams
+ */
+CUresult CUDAAPI cuGraphNodeGetType(CUgraphNode hNode, CUgraphNodeType *type);
+
+/**
+ * \brief Returns a graph's nodes
+ *
+ * Returns a list of \p hGraph's nodes. \p nodes may be NULL, in which case this
+ * function will return the number of nodes in \p numNodes. Otherwise,
+ * \p numNodes entries will be filled in. If \p numNodes is higher than the actual
+ * number of nodes, the remaining entries in \p nodes will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p numNodes.
+ *
+ * \param hGraph   - Graph to query
+ * \param nodes    - Pointer to return the nodes
+ * \param numNodes - See description
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphCreate,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphGetEdges,
+ * ::cuGraphNodeGetType,
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphNodeGetDependentNodes
+ */
+CUresult CUDAAPI cuGraphGetNodes(CUgraph hGraph, CUgraphNode *nodes, size_t *numNodes);
+
+/**
+ * \brief Returns a graph's root nodes
+ *
+ * Returns a list of \p hGraph's root nodes. \p rootNodes may be NULL, in which case this
+ * function will return the number of root nodes in \p numRootNodes. Otherwise,
+ * \p numRootNodes entries will be filled in. If \p numRootNodes is higher than the actual
+ * number of root nodes, the remaining entries in \p rootNodes will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p numRootNodes.
+ *
+ * \param hGraph       - Graph to query
+ * \param rootNodes    - Pointer to return the root nodes
+ * \param numRootNodes - See description
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphCreate,
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetEdges,
+ * ::cuGraphNodeGetType,
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphNodeGetDependentNodes
+ */
+CUresult CUDAAPI cuGraphGetRootNodes(CUgraph hGraph, CUgraphNode *rootNodes, size_t *numRootNodes);
+
+/**
+ * \brief Returns a graph's dependency edges
+ *
+ * Returns a list of \p hGraph's dependency edges. Edges are returned via corresponding
+ * indices in \p from and \p to; that is, the node in \p to[i] has a dependency on the
+ * node in \p from[i]. \p from and \p to may both be NULL, in which
+ * case this function only returns the number of edges in \p numEdges. Otherwise,
+ * \p numEdges entries will be filled in. If \p numEdges is higher than the actual
+ * number of edges, the remaining entries in \p from and \p to will be set to NULL, and
+ * the number of edges actually returned will be written to \p numEdges.
+ *
+ * \param hGraph   - Graph to get the edges from
+ * \param from     - Location to return edge endpoints
+ * \param to       - Location to return edge endpoints
+ * \param numEdges - See description
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphAddDependencies,
+ * ::cuGraphRemoveDependencies,
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphNodeGetDependentNodes
+ */
+CUresult CUDAAPI cuGraphGetEdges(CUgraph hGraph, CUgraphNode *from, CUgraphNode *to, size_t *numEdges);
+
+/**
+ * \brief Returns a node's dependencies
+ *
+ * Returns a list of \p node's dependencies. \p dependencies may be NULL, in which case this
+ * function will return the number of dependencies in \p numDependencies. Otherwise,
+ * \p numDependencies entries will be filled in. If \p numDependencies is higher than the actual
+ * number of dependencies, the remaining entries in \p dependencies will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p numDependencies.
+ *
+ * \param hNode           - Node to query
+ * \param dependencies    - Pointer to return the dependencies
+ * \param numDependencies - See description
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphNodeGetDependentNodes,
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphGetEdges,
+ * ::cuGraphAddDependencies,
+ * ::cuGraphRemoveDependencies
+ */
+CUresult CUDAAPI cuGraphNodeGetDependencies(CUgraphNode hNode, CUgraphNode *dependencies, size_t *numDependencies);
+
+/**
+ * \brief Returns a node's dependent nodes
+ *
+ * Returns a list of \p node's dependent nodes. \p dependentNodes may be NULL, in which
+ * case this function will return the number of dependent nodes in \p numDependentNodes.
+ * Otherwise, \p numDependentNodes entries will be filled in. If \p numDependentNodes is
+ * higher than the actual number of dependent nodes, the remaining entries in
+ * \p dependentNodes will be set to NULL, and the number of nodes actually obtained will
+ * be returned in \p numDependentNodes.
+ *
+ * \param hNode             - Node to query
+ * \param dependentNodes    - Pointer to return the dependent nodes
+ * \param numDependentNodes - See description
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphGetNodes,
+ * ::cuGraphGetRootNodes,
+ * ::cuGraphGetEdges,
+ * ::cuGraphAddDependencies,
+ * ::cuGraphRemoveDependencies
+ */
+CUresult CUDAAPI cuGraphNodeGetDependentNodes(CUgraphNode hNode, CUgraphNode *dependentNodes, size_t *numDependentNodes);
+
+/**
+ * \brief Adds dependency edges to a graph
+ *
+ * The number of dependencies to be added is defined by \p numDependencies
+ * Elements in \p from and \p to at corresponding indices define a dependency.
+ * Each node in \p from and \p to must belong to \p hGraph.
+ *
+ * If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ * Specifying an existing dependency will return an error.
+ *
+ * \param hGraph - Graph to which dependencies are added
+ * \param from - Array of nodes that provide the dependencies
+ * \param to - Array of dependent nodes
+ * \param numDependencies - Number of dependencies to be added
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphRemoveDependencies,
+ * ::cuGraphGetEdges,
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphNodeGetDependentNodes
+ */
+CUresult CUDAAPI cuGraphAddDependencies(CUgraph hGraph, const CUgraphNode *from, const CUgraphNode *to, size_t numDependencies);
+
+/**
+ * \brief Removes dependency edges from a graph
+ *
+ * The number of \p dependencies to be removed is defined by \p numDependencies.
+ * Elements in \p from and \p to at corresponding indices define a dependency.
+ * Each node in \p from and \p to must belong to \p hGraph.
+ *
+ * If \p numDependencies is 0, elements in \p from and \p to will be ignored.
+ * Specifying a non-existing dependency will return an error.
+ *
+ * Dependencies cannot be removed from graphs which contain allocation or free nodes.
+ * Any attempt to do so will return an error.
+ *
+ * \param hGraph - Graph from which to remove dependencies
+ * \param from - Array of nodes that provide the dependencies
+ * \param to - Array of dependent nodes
+ * \param numDependencies - Number of dependencies to be removed
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddDependencies,
+ * ::cuGraphGetEdges,
+ * ::cuGraphNodeGetDependencies,
+ * ::cuGraphNodeGetDependentNodes
+ */
+CUresult CUDAAPI cuGraphRemoveDependencies(CUgraph hGraph, const CUgraphNode *from, const CUgraphNode *to, size_t numDependencies);
+
+/**
+ * \brief Remove a node from the graph
+ *
+ * Removes \p hNode from its graph. This operation also severs any dependencies of other nodes
+ * on \p hNode and vice versa.
+ *
+ * Nodes which belong to a graph which contains allocation or free nodes cannot be destroyed.
+ * Any attempt to do so will return an error.
+ *
+ * \param hNode  - Node to remove
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphAddEmptyNode,
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphAddHostNode,
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphAddMemsetNode
+ */
+CUresult CUDAAPI cuGraphDestroyNode(CUgraphNode hNode);
+
+/**
+ * \brief Creates an executable graph from a graph
+ *
+ * Instantiates \p hGraph as an executable graph. The graph is validated for any
+ * structural constraints or intra-node constraints which were not previously
+ * validated. If instantiation is successful, a handle to the instantiated graph
+ * is returned in \p phGraphExec.
+ *
+ * If there are any errors, diagnostic information may be returned in \p errorNode and
+ * \p logBuffer. This is the primary way to inspect instantiation errors. The output
+ * will be null terminated unless the diagnostics overflow
+ * the buffer. In this case, they will be truncated, and the last byte can be
+ * inspected to determine if truncation occurred.
+ *
+ * \param phGraphExec - Returns instantiated graph
+ * \param hGraph      - Graph to instantiate
+ * \param phErrorNode - In case of an instantiation error, this may be modified to
+ *                      indicate a node contributing to the error
+ * \param logBuffer   - A character buffer to store diagnostic messages
+ * \param bufferSize  - Size of the log buffer in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiateWithFlags,
+ * ::cuGraphCreate,
+ * ::cuGraphUpload,
+ * ::cuGraphLaunch,
+ * ::cuGraphExecDestroy
+ */
+CUresult CUDAAPI cuGraphInstantiate(CUgraphExec *phGraphExec, CUgraph hGraph, CUgraphNode *phErrorNode, char *logBuffer, size_t bufferSize);
+
+/**
+ * \brief Creates an executable graph from a graph
+ *
+ * Instantiates \p hGraph as an executable graph. The graph is validated for any
+ * structural constraints or intra-node constraints which were not previously
+ * validated. If instantiation is successful, a handle to the instantiated graph
+ * is returned in \p phGraphExec.
+ *
+ * The \p flags parameter controls the behavior of instantiation and subsequent
+ * graph launches.  Valid flags are:
+ *
+ * - ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH, which configures a
+ * graph containing memory allocation nodes to automatically free any
+ * unfreed memory allocations before the graph is relaunched.
+ *
+ * - ::CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, which causes the graph
+ * to use the priorities from the per-node attributes rather than the priority
+ * of the launch stream during execution. Note that priorities are only available
+ * on kernel nodes, and are copied from stream priority during stream capture.
+ *
+ * If \p hGraph contains any allocation or free nodes, there can be at most one
+ * executable graph in existence for that graph at a time.
+ *
+ * An attempt to instantiate a second executable graph before destroying the first
+ * with ::cuGraphExecDestroy will result in an error.
+ *
+ * \param phGraphExec - Returns instantiated graph
+ * \param hGraph      - Graph to instantiate
+ * \param flags       - Flags to control instantiation.  See ::CUgraphInstantiate_flags.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiate,
+ * ::cuGraphCreate,
+ * ::cuGraphUpload,
+ * ::cuGraphLaunch,
+ * ::cuGraphExecDestroy
+ */
+CUresult CUDAAPI cuGraphInstantiateWithFlags(CUgraphExec *phGraphExec, CUgraph hGraph, unsigned long long flags);
+
+/**
+ * \brief Sets the parameters for a kernel node in the given graphExec
+ *
+ * Sets the parameters of a kernel node in an executable graph \p hGraphExec. 
+ * The node is identified by the corresponding node \p hNode in the 
+ * non-executable graph, from which the executable graph was instantiated. 
+ *
+ * \p hNode must not have been removed from the original graph. All \p nodeParams 
+ * fields may change, but the following restrictions apply to \p func updates: 
+ *
+ *   - The owning context of the function cannot change.
+ *   - A node whose function originally did not use CUDA dynamic parallelism cannot be updated
+ *     to a function which uses CDP
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already 
+ * enqueued or running launches of \p hGraphExec are not affected by this call. 
+ * \p hNode is also not modified by this call.
+ * 
+ * \param hGraphExec  - The executable graph in which to set the specified node
+ * \param hNode       - kernel node from the graph from which graphExec was instantiated
+ * \param nodeParams  - Updated Parameters to set
+ * 
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddKernelNode,
+ * ::cuGraphKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecKernelNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_KERNEL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec.
+ *
+ * Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had 
+ * contained \p copyParams at instantiation.  hNode must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from hNode are ignored.
+ *
+ * The source and destination memory in \p copyParams must be allocated from the same 
+ * contexts as the original source and destination memory.  Both the instantiation-time 
+ * memory operands and the memory operands in \p copyParams must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  hNode is also 
+ * not modified by this call.
+ *
+ * Returns CUDA_ERROR_INVALID_VALUE if the memory operands' mappings changed or
+ * either the original or new memory operands are multidimensional.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Memcpy node from the graph which was used to instantiate graphExec
+ * \param copyParams - The updated parameters to set
+ * \param ctx        - Context on which to run the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemcpyNode,
+ * ::cuGraphMemcpyNodeSetParams,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecMemcpyNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_MEMCPY3D *copyParams, CUcontext ctx);
+
+/**
+ * \brief Sets the parameters for a memset node in the given graphExec.
+ *
+ * Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had 
+ * contained \p memsetParams at instantiation.  hNode must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from hNode are ignored.
+ *
+ * The destination memory in \p memsetParams must be allocated from the same 
+ * contexts as the original destination memory.  Both the instantiation-time 
+ * memory operand and the memory operand in \p memsetParams must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  hNode is also 
+ * not modified by this call.
+ *
+ * Returns CUDA_ERROR_INVALID_VALUE if the memory operand's mappings changed or
+ * either the original or new memory operand are multidimensional.
+ *
+ * \param hGraphExec   - The executable graph in which to set the specified node
+ * \param hNode        - Memset node from the graph which was used to instantiate graphExec
+ * \param memsetParams - The updated parameters to set
+ * \param ctx          - Context on which to run the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddMemsetNode,
+ * ::cuGraphMemsetNodeSetParams,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecMemsetNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_MEMSET_NODE_PARAMS *memsetParams, CUcontext ctx);
+
+/**
+ * \brief Sets the parameters for a host node in the given graphExec.
+ *
+ * Updates the work represented by \p hNode in \p hGraphExec as though \p hNode had 
+ * contained \p nodeParams at instantiation.  hNode must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from hNode are ignored.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  hNode is also 
+ * not modified by this call.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Host node from the graph which was used to instantiate graphExec
+ * \param nodeParams - The updated parameters to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddHostNode,
+ * ::cuGraphHostNodeSetParams,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecHostNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_HOST_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Updates node parameters in the child graph node in the given graphExec.
+ *
+ * Updates the work represented by \p hNode in \p hGraphExec as though the nodes contained
+ * in \p hNode's graph had the parameters contained in \p childGraph's nodes at instantiation.
+ * \p hNode must remain in the graph which was used to instantiate \p hGraphExec.
+ * Changed edges to and from \p hNode are ignored.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p hNode is also 
+ * not modified by this call.
+ *
+ * The topology of \p childGraph, as well as the node insertion order,  must match that
+ * of the graph contained in \p hNode.  See ::cuGraphExecUpdate() for a list of restrictions
+ * on what can be updated in an instantiated graph.  The update is recursive, so child graph
+ * nodes contained within the top level child graph will also be updated.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Host node from the graph which was used to instantiate graphExec
+ * \param childGraph - The graph supplying the updated parameters
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddChildGraphNode,
+ * ::cuGraphChildGraphNodeGetGraph,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecChildGraphNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, CUgraph childGraph);
+
+/**
+ * \brief Sets the event for an event record node in the given graphExec
+ *
+ * Sets the event of an event record node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - event record node from the graph from which graphExec was instantiated
+ * \param event      - Updated event to use
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventRecordNode,
+ * ::cuGraphEventRecordNodeGetEvent,
+ * ::cuGraphEventWaitNodeSetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecEventRecordNodeSetEvent(CUgraphExec hGraphExec, CUgraphNode hNode, CUevent event);
+
+/**
+ * \brief Sets the event for an event wait node in the given graphExec
+ *
+ * Sets the event of an event wait node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - event wait node from the graph from which graphExec was instantiated
+ * \param event      - Updated event to use
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddEventWaitNode,
+ * ::cuGraphEventWaitNodeGetEvent,
+ * ::cuGraphEventRecordNodeSetEvent,
+ * ::cuEventRecordWithFlags,
+ * ::cuStreamWaitEvent,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecEventWaitNodeSetEvent(CUgraphExec hGraphExec, CUgraphNode hNode, CUevent event);
+
+/**
+ * \brief Sets the parameters for an external semaphore signal node in the given graphExec
+ *
+ * Sets the parameters of an external semaphore signal node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * Changing \p nodeParams->numExtSems is not supported.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - semaphore signal node from the graph from which graphExec was instantiated
+ * \param nodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddExternalSemaphoresSignalNode,
+ * ::cuImportExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecExternalSemaphoresSignalNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Sets the parameters for an external semaphore wait node in the given graphExec
+ *
+ * Sets the parameters of an external semaphore wait node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * Changing \p nodeParams->numExtSems is not supported.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - semaphore wait node from the graph from which graphExec was instantiated
+ * \param nodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphAddExternalSemaphoresWaitNode,
+ * ::cuImportExternalSemaphore,
+ * ::cuSignalExternalSemaphoresAsync,
+ * ::cuWaitExternalSemaphoresAsync,
+ * ::cuGraphExecKernelNodeSetParams,
+ * ::cuGraphExecMemcpyNodeSetParams,
+ * ::cuGraphExecMemsetNodeSetParams,
+ * ::cuGraphExecHostNodeSetParams,
+ * ::cuGraphExecChildGraphNodeSetParams,
+ * ::cuGraphExecEventRecordNodeSetEvent,
+ * ::cuGraphExecEventWaitNodeSetEvent,
+ * ::cuGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ */
+CUresult CUDAAPI cuGraphExecExternalSemaphoresWaitNodeSetParams(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_EXT_SEM_WAIT_NODE_PARAMS *nodeParams);
+
+/**
+ * \brief Enables or disables the specified node in the given graphExec
+ *
+ * Sets \p hNode to be either enabled or disabled. Disabled nodes are functionally equivalent 
+ * to empty nodes until they are reenabled. Existing node parameters are not affected by 
+ * disabling/enabling the node.
+ *  
+ * The node is identified by the corresponding node \p hNode in the non-executable 
+ * graph, from which the executable graph was instantiated.   
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \note Currently only kernel, memset and memcpy nodes are supported. 
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Node from the graph from which graphExec was instantiated
+ * \param isEnabled  - Node is enabled if != 0, otherwise the node is disabled
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphNodeGetEnabled,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ * ::cuGraphLaunch
+ */
+CUresult CUDAAPI cuGraphNodeSetEnabled(CUgraphExec hGraphExec, CUgraphNode hNode, unsigned int isEnabled);
+
+/**
+ * \brief Query whether a node in the given graphExec is enabled
+ *
+ * Sets isEnabled to 1 if \p hNode is enabled, or 0 if \p hNode is disabled.
+ *
+ * The node is identified by the corresponding node \p hNode in the non-executable 
+ * graph, from which the executable graph was instantiated.   
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * \note Currently only kernel, memset and memcpy nodes are supported. 
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Node from the graph from which graphExec was instantiated
+ * \param isEnabled  - Location to return the enabled status of the node
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphNodeSetEnabled,
+ * ::cuGraphExecUpdate,
+ * ::cuGraphInstantiate
+ * ::cuGraphLaunch
+ */
+CUresult CUDAAPI cuGraphNodeGetEnabled(CUgraphExec hGraphExec, CUgraphNode hNode, unsigned int *isEnabled);
+
+/**
+ * \brief Uploads an executable graph in a stream
+ *
+ * Uploads \p hGraphExec to the device in \p hStream without executing it. Uploads of
+ * the same \p hGraphExec will be serialized. Each upload is ordered behind both any
+ * previous work in \p hStream and any previous launches of \p hGraphExec.
+ * Uses memory cached by \p stream to back the allocations owned by \p hGraphExec.
+ *
+ * \param hGraphExec - Executable graph to upload
+ * \param hStream    - Stream in which to upload the graph
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiate,
+ * ::cuGraphLaunch,
+ * ::cuGraphExecDestroy
+ */
+CUresult CUDAAPI cuGraphUpload(CUgraphExec hGraphExec, CUstream hStream);
+
+/**
+ * \brief Launches an executable graph in a stream
+ *
+ * Executes \p hGraphExec in \p hStream. Only one instance of \p hGraphExec may be executing
+ * at a time. Each launch is ordered behind both any previous work in \p hStream
+ * and any previous launches of \p hGraphExec. To execute a graph concurrently, it must be
+ * instantiated multiple times into multiple executable graphs.
+ *
+ * If any allocations created by \p hGraphExec remain unfreed (from a previous launch) and
+ * \p hGraphExec was not instantiated with ::CUDA_GRAPH_INSTANTIATE_FLAG_AUTO_FREE_ON_LAUNCH,
+ * the launch will fail with ::CUDA_ERROR_INVALID_VALUE.
+ *
+ * \param hGraphExec - Executable graph to launch
+ * \param hStream    - Stream in which to launch the graph
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiate,
+ * ::cuGraphUpload,
+ * ::cuGraphExecDestroy
+ */
+CUresult CUDAAPI cuGraphLaunch(CUgraphExec hGraphExec, CUstream hStream);
+
+/**
+ * \brief Destroys an executable graph
+ *
+ * Destroys the executable graph specified by \p hGraphExec, as well
+ * as all of its executable nodes. If the executable graph is
+ * in-flight, it will not be terminated, but rather freed
+ * asynchronously on completion.
+ *
+ * \param hGraphExec - Executable graph to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiate,
+ * ::cuGraphUpload,
+ * ::cuGraphLaunch
+ */
+CUresult CUDAAPI cuGraphExecDestroy(CUgraphExec hGraphExec);
+
+/**
+ * \brief Destroys a graph
+ *
+ * Destroys the graph specified by \p hGraph, as well as all of its nodes.
+ *
+ * \param hGraph - Graph to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuGraphDestroy(CUgraph hGraph);
+
+/**
+ * \brief Check whether an executable graph can be updated with a graph and perform the update if possible
+ *
+ * Updates the node parameters in the instantiated graph specified by \p hGraphExec with the
+ * node parameters in a topologically identical graph specified by \p hGraph.
+ *
+ * Limitations:
+ *
+ * - Kernel nodes:
+ *   - The owning context of the function cannot change.
+ *   - A node whose function originally did not use CUDA dynamic parallelism cannot be updated
+ *     to a function which uses CDP.
+ *   - A cooperative node cannot be updated to a non-cooperative node, and vice-versa.
+ *   - If the graph was instantiated with CUDA_GRAPH_INSTANTIATE_FLAG_USE_NODE_PRIORITY, the
+ *     priority attribute cannot change. Equality is checked on the originally requested
+ *     priority values, before they are clamped to the device's supported range.
+ * - Memset and memcpy nodes:
+ *   - The CUDA device(s) to which the operand(s) was allocated/mapped cannot change.
+ *   - The source/destination memory must be allocated from the same contexts as the original
+ *     source/destination memory.
+ *   - Only 1D memsets can be changed.
+ * - Additional memcpy node restrictions:
+ *   - Changing either the source or destination memory type(i.e. CU_MEMORYTYPE_DEVICE,
+ *     CU_MEMORYTYPE_ARRAY, etc.) is not supported.
+ * - External semaphore wait nodes and record nodes:
+ *   - Changing the number of semaphores is not supported.
+ *
+ * Note:  The API may add further restrictions in future releases.  The return code should always be checked.
+ *
+ * cuGraphExecUpdate sets \p updateResult_out to CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED under
+ * the following conditions:
+ *
+ * - The count of nodes directly in \p hGraphExec and \p hGraph differ, in which case \p hErrorNode_out
+ *   is NULL.
+ * - A node is deleted in \p hGraph but not not its pair from \p hGraphExec, in which case \p hErrorNode_out
+ *   is NULL.
+ * - A node is deleted in \p hGraphExec but not its pair from \p hGraph, in which case \p hErrorNode_out is
+ *   the pairless node from \p hGraph.
+ * - The dependent nodes of a pair differ, in which case \p hErrorNode_out is the node from \p hGraph.
+ *
+ * cuGraphExecUpdate sets \p updateResult_out to:
+ * - CU_GRAPH_EXEC_UPDATE_ERROR if passed an invalid value.
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_TOPOLOGY_CHANGED if the graph topology changed
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_NODE_TYPE_CHANGED if the type of a node changed, in which case
+ *   \p hErrorNode_out is set to the node from \p hGraph.
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_UNSUPPORTED_FUNCTION_CHANGE if the function changed in an unsupported
+ *   way(see note above), in which case \p hErrorNode_out is set to the node from \p hGraph
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_PARAMETERS_CHANGED if any parameters to a node changed in a way 
+ *   that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph.
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_ATTRIBUTES_CHANGED if any attributes of a node changed in a way
+ *   that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph.
+ * - CU_GRAPH_EXEC_UPDATE_ERROR_NOT_SUPPORTED if something about a node is unsupported, like 
+ *   the node's type or configuration, in which case \p hErrorNode_out is set to the node from \p hGraph
+ *
+ * If \p updateResult_out isn't set in one of the situations described above, the update check passes
+ * and cuGraphExecUpdate updates \p hGraphExec to match the contents of \p hGraph.  If an error happens
+ * during the update, \p updateResult_out will be set to CU_GRAPH_EXEC_UPDATE_ERROR; otherwise,
+ * \p updateResult_out is set to CU_GRAPH_EXEC_UPDATE_SUCCESS.
+ *
+ * cuGraphExecUpdate returns CUDA_SUCCESS when the updated was performed successfully.  It returns
+ * CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE if the graph update was not performed because it included 
+ * changes which violated constraints specific to instantiated graph update.
+ *
+ * \param hGraphExec The instantiated graph to be updated
+ * \param hGraph The graph containing the updated parameters
+ * \param hErrorNode_out The node which caused the permissibility check to forbid the update, if any
+ * \param updateResult_out Whether the graph update was permitted.  If was forbidden, the reason why
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_GRAPH_EXEC_UPDATE_FAILURE,
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphInstantiate,
+ */
+CUresult CUDAAPI cuGraphExecUpdate(CUgraphExec hGraphExec, CUgraph hGraph, CUgraphNode *hErrorNode_out, CUgraphExecUpdateResult *updateResult_out);
+
+/**
+ * \brief Copies attributes from source node to destination node.
+ *
+ * Copies attributes from source node \p src to destination node \p dst.
+ * Both node must have the same context.
+ *
+ * \param[out] dst Destination node
+ * \param[in] src Source node
+ * For list of attributes see ::CUkernelNodeAttrID
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuGraphKernelNodeCopyAttributes(CUgraphNode dst, CUgraphNode src);
+
+/**
+ * \brief Queries node attribute.
+ * 
+ * Queries attribute \p attr from node \p hNode and stores it in corresponding
+ * member of \p value_out.
+ *
+ * \param[in] hNode
+ * \param[in] attr
+ * \param[out] value_out 
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *  
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuGraphKernelNodeGetAttribute(CUgraphNode hNode, CUkernelNodeAttrID attr,
+                                      CUkernelNodeAttrValue *value_out);
+ 
+/**
+ * \brief Sets node attribute.
+ * 
+ * Sets attribute \p attr on node \p hNode from corresponding attribute of
+ * \p value.
+ *
+ * \param[out] hNode
+ * \param[in] attr
+ * \param[out] value
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa
+ * ::CUaccessPolicyWindow
+ */
+CUresult CUDAAPI cuGraphKernelNodeSetAttribute(CUgraphNode hNode, CUkernelNodeAttrID attr,
+                                      const CUkernelNodeAttrValue *value);
+
+/**
+ * \brief Write a DOT file describing graph structure
+ *
+ * Using the provided \p hGraph, write to \p path a DOT formatted description of the graph.
+ * By default this includes the graph topology, node types, node id, kernel names and memcpy direction.
+ * \p flags can be specified to write more detailed information about each node type such as
+ * parameter values, kernel attributes, node and function handles.
+ *
+ * \param hGraph - The graph to create a DOT file from
+ * \param path   - The path to write the DOT file to
+ * \param flags  - Flags from CUgraphDebugDot_flags for specifying which additional node information to write
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OPERATING_SYSTEM
+ */
+CUresult CUDAAPI cuGraphDebugDotPrint(CUgraph hGraph, const char *path, unsigned int flags);
+
+/**
+ * \brief Create a user object
+ *
+ * Create a user object with the specified destructor callback and initial reference count. The
+ * initial references are owned by the caller.
+ *
+ * Destructor callbacks cannot make CUDA API calls and should avoid blocking behavior, as they
+ * are executed by a shared internal thread. Another thread may be signaled to perform such
+ * actions, if it does not block forward progress of tasks scheduled through CUDA.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object_out      - Location to return the user object handle
+ * \param ptr             - The pointer to pass to the destroy function
+ * \param destroy         - Callback to free the user object when it is no longer in use
+ * \param initialRefcount - The initial refcount to create the object with, typically 1. The
+ *                          initial references are owned by the calling thread.
+ * \param flags           - Currently it is required to pass ::CU_USER_OBJECT_NO_DESTRUCTOR_SYNC,
+ *                          which is the only defined flag. This indicates that the destroy
+ *                          callback cannot be waited on by any CUDA API. Users requiring
+ *                          synchronization of the callback should signal its completion
+ *                          manually.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuUserObjectRetain,
+ * ::cuUserObjectRelease,
+ * ::cuGraphRetainUserObject,
+ * ::cuGraphReleaseUserObject,
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuUserObjectCreate(CUuserObject *object_out, void *ptr, CUhostFn destroy,
+                                    unsigned int initialRefcount, unsigned int flags);
+
+/**
+ * \brief Retain a reference to a user object
+ *
+ * Retains new references to a user object. The new references are owned by the caller.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object - The object to retain
+ * \param count  - The number of references to retain, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuUserObjectCreate,
+ * ::cuUserObjectRelease,
+ * ::cuGraphRetainUserObject,
+ * ::cuGraphReleaseUserObject,
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuUserObjectRetain(CUuserObject object, unsigned int count);
+
+/**
+ * \brief Release a reference to a user object
+ *
+ * Releases user object references owned by the caller. The object's destructor is invoked if
+ * the reference count reaches zero.
+ *
+ * It is undefined behavior to release references not owned by the caller, or to use a user
+ * object handle after all references are released.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object - The object to release
+ * \param count  - The number of references to release, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuUserObjectCreate,
+ * ::cuUserObjectRetain,
+ * ::cuGraphRetainUserObject,
+ * ::cuGraphReleaseUserObject,
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuUserObjectRelease(CUuserObject object, unsigned int count);
+
+/**
+ * \brief Retain a reference to a user object from a graph
+ *
+ * Creates or moves user object references that will be owned by a CUDA graph.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param graph  - The graph to associate the reference with
+ * \param object - The user object to retain a reference for
+ * \param count  - The number of references to add to the graph, typically 1. Must be
+ *                 nonzero and not larger than INT_MAX.
+ * \param flags  - The optional flag ::CU_GRAPH_USER_OBJECT_MOVE transfers references
+ *                 from the calling thread, rather than create new references. Pass 0
+ *                 to create new references.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuUserObjectCreate,
+ * ::cuUserObjectRetain,
+ * ::cuUserObjectRelease,
+ * ::cuGraphReleaseUserObject,
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuGraphRetainUserObject(CUgraph graph, CUuserObject object, unsigned int count, unsigned int flags);
+
+/**
+ * \brief Release a user object reference from a graph
+ *
+ * Releases user object references owned by a graph.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param graph  - The graph that will release the reference
+ * \param object - The user object to release a reference for
+ * \param count  - The number of references to release, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuUserObjectCreate,
+ * ::cuUserObjectRetain,
+ * ::cuUserObjectRelease,
+ * ::cuGraphRetainUserObject,
+ * ::cuGraphCreate
+ */
+CUresult CUDAAPI cuGraphReleaseUserObject(CUgraph graph, CUuserObject object, unsigned int count);
+
+/** @} */ /* END CUDA_GRAPH */
+
+/**
+ * \defgroup CUDA_OCCUPANCY Occupancy
+ *
+ * ___MANBRIEF___ occupancy calculation functions of the low-level CUDA driver
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the occupancy calculation functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns occupancy of a function
+ *
+ * Returns in \p *numBlocks the number of the maximum active blocks per
+ * streaming multiprocessor.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel for which occupancy is calculated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ */
+CUresult CUDAAPI cuOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize);
+
+/**
+ * \brief Returns occupancy of a function
+ *
+ * Returns in \p *numBlocks the number of the maximum active blocks per
+ * streaming multiprocessor.
+ *
+ * The \p Flags parameter controls how special cases are handled. The
+ * valid flags are:
+ *
+ * - ::CU_OCCUPANCY_DEFAULT, which maintains the default behavior as
+ *   ::cuOccupancyMaxActiveBlocksPerMultiprocessor;
+ *
+ * - ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE, which suppresses the
+ *   default behavior on platform where global caching affects
+ *   occupancy. On such platforms, if caching is enabled, but
+ *   per-block SM resource usage would result in zero occupancy, the
+ *   occupancy calculator will calculate the occupancy as if caching
+ *   is disabled. Setting ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE makes
+ *   the occupancy calculator to return 0 in such cases. More information
+ *   can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel for which occupancy is calculated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ * \param flags           - Requested behavior for the occupancy calculator
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ */
+CUresult CUDAAPI cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize, unsigned int flags);
+
+/**
+ * \brief Suggest a launch configuration with reasonable occupancy
+ *
+ * Returns in \p *blockSize a reasonable block size that can achieve
+ * the maximum occupancy (or, the maximum number of active warps with
+ * the fewest blocks per multiprocessor), and in \p *minGridSize the
+ * minimum grid size to achieve the maximum occupancy.
+ *
+ * If \p blockSizeLimit is 0, the configurator will use the maximum
+ * block size permitted by the device / function instead.
+ *
+ * If per-block dynamic shared memory allocation is not needed, the
+ * user should leave both \p blockSizeToDynamicSMemSize and \p
+ * dynamicSMemSize as 0.
+ *
+ * If per-block dynamic shared memory allocation is needed, then if
+ * the dynamic shared memory size is constant regardless of block
+ * size, the size should be passed through \p dynamicSMemSize, and \p
+ * blockSizeToDynamicSMemSize should be NULL.
+ *
+ * Otherwise, if the per-block dynamic shared memory size varies with
+ * different block sizes, the user needs to provide a unary function
+ * through \p blockSizeToDynamicSMemSize that computes the dynamic
+ * shared memory needed by \p func for any given block size. \p
+ * dynamicSMemSize is ignored. An example signature is:
+ *
+ * \code
+ *    // Take block size, returns dynamic shared memory needed
+ *    size_t blockToSmem(int blockSize);
+ * \endcode
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the maximum occupancy
+ * \param blockSize   - Returned maximum block size that can achieve the maximum occupancy
+ * \param func        - Kernel for which launch configuration is calculated
+ * \param blockSizeToDynamicSMemSize - A function that calculates how much per-block dynamic shared memory \p func uses based on the block size
+ * \param dynamicSMemSize - Dynamic shared memory usage intended, in bytes
+ * \param blockSizeLimit  - The maximum block size \p func is designed to handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaOccupancyMaxPotentialBlockSize
+ */
+CUresult CUDAAPI cuOccupancyMaxPotentialBlockSize(int *minGridSize, int *blockSize, CUfunction func, CUoccupancyB2DSize blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit);
+
+/**
+ * \brief Suggest a launch configuration with reasonable occupancy
+ *
+ * An extended version of ::cuOccupancyMaxPotentialBlockSize. In
+ * addition to arguments passed to ::cuOccupancyMaxPotentialBlockSize,
+ * ::cuOccupancyMaxPotentialBlockSizeWithFlags also takes a \p Flags
+ * parameter.
+ *
+ * The \p Flags parameter controls how special cases are handled. The
+ * valid flags are:
+ *
+ * - ::CU_OCCUPANCY_DEFAULT, which maintains the default behavior as
+ *   ::cuOccupancyMaxPotentialBlockSize;
+ *
+ * - ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE, which suppresses the
+ *   default behavior on platform where global caching affects
+ *   occupancy. On such platforms, the launch configurations that
+ *   produces maximal occupancy might not support global
+ *   caching. Setting ::CU_OCCUPANCY_DISABLE_CACHING_OVERRIDE
+ *   guarantees that the the produced launch configuration is global
+ *   caching compatible at a potential cost of occupancy. More information
+ *   can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the maximum occupancy
+ * \param blockSize   - Returned maximum block size that can achieve the maximum occupancy
+ * \param func        - Kernel for which launch configuration is calculated
+ * \param blockSizeToDynamicSMemSize - A function that calculates how much per-block dynamic shared memory \p func uses based on the block size
+ * \param dynamicSMemSize - Dynamic shared memory usage intended, in bytes
+ * \param blockSizeLimit  - The maximum block size \p func is designed to handle
+ * \param flags       - Options
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ */
+CUresult CUDAAPI cuOccupancyMaxPotentialBlockSizeWithFlags(int *minGridSize, int *blockSize, CUfunction func, CUoccupancyB2DSize blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit, unsigned int flags);
+
+/**
+ * \brief Returns dynamic shared memory available per block when launching \p numBlocks blocks on SM 
+ *
+ * Returns in \p *dynamicSmemSize the maximum size of dynamic shared memory to allow \p numBlocks blocks per SM. 
+ *
+ * \param dynamicSmemSize - Returned maximum dynamic shared memory 
+ * \param func            - Kernel function for which occupancy is calculated
+ * \param numBlocks       - Number of blocks to fit on SM 
+ * \param blockSize       - Size of the blocks
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ */
+CUresult CUDAAPI cuOccupancyAvailableDynamicSMemPerBlock(size_t *dynamicSmemSize, CUfunction func, int numBlocks, int blockSize);
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum cluster size in \p *clusterSize.
+ *
+ * The cluster dimensions in \p config are ignored. If func has a required
+ * cluster size set (see ::cudaFuncGetAttributes / ::cuFuncGetAttribute),\p
+ * *clusterSize will reflect the required cluster size.
+ *
+ * By default this function will always return a value that's portable on
+ * future hardware. A higher value may be returned if the kernel function
+ * allows non-portable cluster sizes.
+ *
+ * This function will respect the compile time launch bounds.
+ *
+ * \param clusterSize - Returned maximum cluster size that can be launched
+ *                      for the given kernel function and launch configuration
+ * \param func        - Kernel function for which maximum cluster
+ *                      size is calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaFuncGetAttributes
+ * ::cuFuncGetAttributes
+ */
+CUresult CUDAAPI cuOccupancyMaxPotentialClusterSize(int *clusterSize, CUfunction func, const CUlaunchConfig *config);
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum number of clusters that could co-exist
+ * on the target device in \p *numClusters.
+ *
+ * If the function has required cluster size already set (see
+ * ::cudaFuncGetAttributes / ::cuFuncGetAttribute), the cluster size
+ * from config must either be unspecified or match the required size.
+ * Without required sizes, the cluster size must be specified in config,
+ * else the function will return an error.
+ *
+ * Note that various attributes of the kernel function may affect occupancy
+ * calculation. Runtime environment may affect how the hardware schedules
+ * the clusters, so the calculated occupancy is not guaranteed to be achievable.
+ *
+ * \param numClusters - Returned maximum number of clusters that
+ *                      could co-exist on the target device
+ * \param func        - Kernel function for which maximum number
+ *                      of clusters are calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_CLUSTER_SIZE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaFuncGetAttributes
+ * ::cuFuncGetAttributes
+ */
+CUresult CUDAAPI cuOccupancyMaxActiveClusters(int *numClusters, CUfunction func, const CUlaunchConfig *config);
+/** @} */ /* END CUDA_OCCUPANCY */
+
+/**
+ * \defgroup CUDA_TEXREF_DEPRECATED Texture Reference Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated texture reference management functions of the
+ * low-level CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the deprecated texture reference management
+ * functions of the low-level CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Binds an array as a texture reference
+ *
+ * \deprecated
+ *
+ * Binds the CUDA array \p hArray to the texture reference \p hTexRef. Any
+ * previous address or CUDA array state associated with the texture reference
+ * is superseded by this function. \p Flags must be set to
+ * ::CU_TRSA_OVERRIDE_FORMAT. Any CUDA array previously bound to \p hTexRef is
+ * unbound.
+ *
+ * \param hTexRef - Texture reference to bind
+ * \param hArray  - Array to bind
+ * \param Flags   - Options (must be ::CU_TRSA_OVERRIDE_FORMAT)
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetArray(CUtexref hTexRef, CUarray hArray, unsigned int Flags);
+
+/**
+ * \brief Binds a mipmapped array to a texture reference
+ *
+ * \deprecated
+ *
+ * Binds the CUDA mipmapped array \p hMipmappedArray to the texture reference \p hTexRef.
+ * Any previous address or CUDA array state associated with the texture reference
+ * is superseded by this function. \p Flags must be set to ::CU_TRSA_OVERRIDE_FORMAT.
+ * Any CUDA array previously bound to \p hTexRef is unbound.
+ *
+ * \param hTexRef         - Texture reference to bind
+ * \param hMipmappedArray - Mipmapped array to bind
+ * \param Flags           - Options (must be ::CU_TRSA_OVERRIDE_FORMAT)
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetMipmappedArray(CUtexref hTexRef, CUmipmappedArray hMipmappedArray, unsigned int Flags);
+
+/**
+ * \brief Binds an address as a texture reference
+ *
+ * \deprecated
+ *
+ * Binds a linear address range to the texture reference \p hTexRef. Any
+ * previous address or CUDA array state associated with the texture reference
+ * is superseded by this function. Any memory previously bound to \p hTexRef
+ * is unbound.
+ *
+ * Since the hardware enforces an alignment requirement on texture base
+ * addresses, ::cuTexRefSetAddress() passes back a byte offset in
+ * \p *ByteOffset that must be applied to texture fetches in order to read from
+ * the desired memory. This offset must be divided by the texel size and
+ * passed to kernels that read from the texture so they can be applied to the
+ * ::tex1Dfetch() function.
+ *
+ * If the device memory pointer was returned from ::cuMemAlloc(), the offset
+ * is guaranteed to be 0 and NULL may be passed as the \p ByteOffset parameter.
+ *
+ * The total number of elements (or texels) in the linear address range
+ * cannot exceed ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH.
+ * The number of elements is computed as (\p bytes / bytesPerElement),
+ * where bytesPerElement is determined from the data format and number of
+ * components set using ::cuTexRefSetFormat().
+ *
+ * \param ByteOffset - Returned byte offset
+ * \param hTexRef    - Texture reference to bind
+ * \param dptr       - Device pointer to bind
+ * \param bytes      - Size of memory to bind in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTexture
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetAddress(size_t *ByteOffset, CUtexref hTexRef, CUdeviceptr dptr, size_t bytes);
+
+/**
+ * \brief Binds an address as a 2D texture reference
+ *
+ * \deprecated
+ *
+ * Binds a linear address range to the texture reference \p hTexRef. Any
+ * previous address or CUDA array state associated with the texture reference
+ * is superseded by this function. Any memory previously bound to \p hTexRef
+ * is unbound.
+ *
+ * Using a ::tex2D() function inside a kernel requires a call to either
+ * ::cuTexRefSetArray() to bind the corresponding texture reference to an
+ * array, or ::cuTexRefSetAddress2D() to bind the texture reference to linear
+ * memory.
+ *
+ * Function calls to ::cuTexRefSetFormat() cannot follow calls to
+ * ::cuTexRefSetAddress2D() for the same texture reference.
+ *
+ * It is required that \p dptr be aligned to the appropriate hardware-specific
+ * texture alignment. You can query this value using the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT. If an unaligned \p dptr is
+ * supplied, ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * \p Pitch has to be aligned to the hardware-specific texture pitch alignment.
+ * This value can be queried using the device attribute
+ * ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT. If an unaligned \p Pitch is
+ * supplied, ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * Width and Height, which are specified in elements (or texels), cannot exceed
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH and
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT respectively.
+ * \p Pitch, which is specified in bytes, cannot exceed
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH.
+ *
+ * \param hTexRef - Texture reference to bind
+ * \param desc    - Descriptor of CUDA array
+ * \param dptr    - Device pointer to bind
+ * \param Pitch   - Line pitch in bytes
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTexture2D
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetAddress2D(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR *desc, CUdeviceptr dptr, size_t Pitch);
+
+/**
+ * \brief Sets the format for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the format of the data to be read by the texture reference
+ * \p hTexRef. \p fmt and \p NumPackedComponents are exactly analogous to the
+ * ::Format and ::NumChannels members of the ::CUDA_ARRAY_DESCRIPTOR structure:
+ * They specify the format of each component and the number of components per
+ * array element.
+ *
+ * \param hTexRef             - Texture reference
+ * \param fmt                 - Format to set
+ * \param NumPackedComponents - Number of components per array element
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaCreateChannelDesc,
+ * ::cudaBindTexture,
+ * ::cudaBindTexture2D,
+ * ::cudaBindTextureToArray,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetFormat(CUtexref hTexRef, CUarray_format fmt, int NumPackedComponents);
+
+/**
+ * \brief Sets the addressing mode for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the addressing mode \p am for the given dimension \p dim of the
+ * texture reference \p hTexRef. If \p dim is zero, the addressing mode is
+ * applied to the first parameter of the functions used to fetch from the
+ * texture; if \p dim is 1, the second, and so on. ::CUaddress_mode is defined
+ * as:
+ * \code
+   typedef enum CUaddress_mode_enum {
+      CU_TR_ADDRESS_MODE_WRAP = 0,
+      CU_TR_ADDRESS_MODE_CLAMP = 1,
+      CU_TR_ADDRESS_MODE_MIRROR = 2,
+      CU_TR_ADDRESS_MODE_BORDER = 3
+   } CUaddress_mode;
+ * \endcode
+ *
+ * Note that this call has no effect if \p hTexRef is bound to linear memory.
+ * Also, if the flag, ::CU_TRSF_NORMALIZED_COORDINATES, is not set, the only
+ * supported address mode is ::CU_TR_ADDRESS_MODE_CLAMP.
+ *
+ * \param hTexRef - Texture reference
+ * \param dim     - Dimension
+ * \param am      - Addressing mode to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTexture,
+ * ::cudaBindTexture2D,
+ * ::cudaBindTextureToArray,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetAddressMode(CUtexref hTexRef, int dim, CUaddress_mode am);
+
+/**
+ * \brief Sets the filtering mode for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the filtering mode \p fm to be used when reading memory through
+ * the texture reference \p hTexRef. ::CUfilter_mode_enum is defined as:
+ *
+ * \code
+   typedef enum CUfilter_mode_enum {
+      CU_TR_FILTER_MODE_POINT = 0,
+      CU_TR_FILTER_MODE_LINEAR = 1
+   } CUfilter_mode;
+ * \endcode
+ *
+ * Note that this call has no effect if \p hTexRef is bound to linear memory.
+ *
+ * \param hTexRef - Texture reference
+ * \param fm      - Filtering mode to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetFilterMode(CUtexref hTexRef, CUfilter_mode fm);
+
+/**
+ * \brief Sets the mipmap filtering mode for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the mipmap filtering mode \p fm to be used when reading memory through
+ * the texture reference \p hTexRef. ::CUfilter_mode_enum is defined as:
+ *
+ * \code
+   typedef enum CUfilter_mode_enum {
+      CU_TR_FILTER_MODE_POINT = 0,
+      CU_TR_FILTER_MODE_LINEAR = 1
+   } CUfilter_mode;
+ * \endcode
+ *
+ * Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+ *
+ * \param hTexRef - Texture reference
+ * \param fm      - Filtering mode to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetMipmapFilterMode(CUtexref hTexRef, CUfilter_mode fm);
+
+/**
+ * \brief Sets the mipmap level bias for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the mipmap level bias \p bias to be added to the specified mipmap level when
+ * reading memory through the texture reference \p hTexRef.
+ *
+ * Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+ *
+ * \param hTexRef - Texture reference
+ * \param bias    - Mipmap level bias
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetMipmapLevelBias(CUtexref hTexRef, float bias);
+
+/**
+ * \brief Sets the mipmap min/max mipmap level clamps for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the min/max mipmap level clamps, \p minMipmapLevelClamp and \p maxMipmapLevelClamp
+ * respectively, to be used when reading memory through the texture reference
+ * \p hTexRef.
+ *
+ * Note that this call has no effect if \p hTexRef is not bound to a mipmapped array.
+ *
+ * \param hTexRef        - Texture reference
+ * \param minMipmapLevelClamp - Mipmap min level clamp
+ * \param maxMipmapLevelClamp - Mipmap max level clamp
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetMipmapLevelClamp(CUtexref hTexRef, float minMipmapLevelClamp, float maxMipmapLevelClamp);
+
+/**
+ * \brief Sets the maximum anisotropy for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the maximum anisotropy \p maxAniso to be used when reading memory through
+ * the texture reference \p hTexRef.
+ *
+ * Note that this call has no effect if \p hTexRef is bound to linear memory.
+ *
+ * \param hTexRef  - Texture reference
+ * \param maxAniso - Maximum anisotropy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTextureToArray,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetMaxAnisotropy(CUtexref hTexRef, unsigned int maxAniso);
+
+/**
+ * \brief Sets the border color for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies the value of the RGBA color via the \p pBorderColor to the texture reference
+ * \p hTexRef. The color value supports only float type and holds color components in
+ * the following sequence:
+ * pBorderColor[0] holds 'R' component
+ * pBorderColor[1] holds 'G' component
+ * pBorderColor[2] holds 'B' component
+ * pBorderColor[3] holds 'A' component
+ *
+ * Note that the color values can be set only when the Address mode is set to
+ * CU_TR_ADDRESS_MODE_BORDER using ::cuTexRefSetAddressMode.
+ * Applications using integer border color values have to "reinterpret_cast" their values to float.
+ *
+ * \param hTexRef       - Texture reference
+ * \param pBorderColor  - RGBA color
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddressMode,
+ * ::cuTexRefGetAddressMode, ::cuTexRefGetBorderColor,
+ * ::cudaBindTexture,
+ * ::cudaBindTexture2D,
+ * ::cudaBindTextureToArray,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetBorderColor(CUtexref hTexRef, float *pBorderColor);
+
+/**
+ * \brief Sets the flags for a texture reference
+ *
+ * \deprecated
+ *
+ * Specifies optional flags via \p Flags to specify the behavior of data
+ * returned through the texture reference \p hTexRef. The valid flags are:
+ *
+ * - ::CU_TRSF_READ_AS_INTEGER, which suppresses the default behavior of
+ *   having the texture promote integer data to floating point data in the
+ *   range [0, 1]. Note that texture with 32-bit integer format
+ *   would not be promoted, regardless of whether or not this
+ *   flag is specified;
+ * - ::CU_TRSF_NORMALIZED_COORDINATES, which suppresses the
+ *   default behavior of having the texture coordinates range
+ *   from [0, Dim) where Dim is the width or height of the CUDA
+ *   array. Instead, the texture coordinates [0, 1.0) reference
+ *   the entire breadth of the array dimension;
+ * - ::CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION, which disables any trilinear
+ *   filtering optimizations. Trilinear optimizations improve texture filtering
+ *   performance by allowing bilinear filtering on textures in scenarios where
+ *   it can closely approximate the expected results.
+ *
+ * \param hTexRef - Texture reference
+ * \param Flags   - Optional flags to set
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat,
+ * ::cudaBindTexture,
+ * ::cudaBindTexture2D,
+ * ::cudaBindTextureToArray,
+ * ::cudaBindTextureToMipmappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefSetFlags(CUtexref hTexRef, unsigned int Flags);
+
+/**
+ * \brief Gets the address associated with a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *pdptr the base address bound to the texture reference
+ * \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ * is not bound to any device memory range.
+ *
+ * \param pdptr   - Returned device address
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetAddress(CUdeviceptr *pdptr, CUtexref hTexRef);
+
+/**
+ * \brief Gets the array bound to a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *phArray the CUDA array bound to the texture reference
+ * \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ * is not bound to any CUDA array.
+ *
+ * \param phArray - Returned array
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetArray(CUarray *phArray, CUtexref hTexRef);
+
+/**
+ * \brief Gets the mipmapped array bound to a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *phMipmappedArray the CUDA mipmapped array bound to the texture
+ * reference \p hTexRef, or returns ::CUDA_ERROR_INVALID_VALUE if the texture reference
+ * is not bound to any CUDA mipmapped array.
+ *
+ * \param phMipmappedArray - Returned mipmapped array
+ * \param hTexRef          - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetMipmappedArray(CUmipmappedArray *phMipmappedArray, CUtexref hTexRef);
+
+/**
+ * \brief Gets the addressing mode used by a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *pam the addressing mode corresponding to the
+ * dimension \p dim of the texture reference \p hTexRef. Currently, the only
+ * valid value for \p dim are 0 and 1.
+ *
+ * \param pam     - Returned addressing mode
+ * \param hTexRef - Texture reference
+ * \param dim     - Dimension
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetAddressMode(CUaddress_mode *pam, CUtexref hTexRef, int dim);
+
+/**
+ * \brief Gets the filter-mode used by a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *pfm the filtering mode of the texture reference
+ * \p hTexRef.
+ *
+ * \param pfm     - Returned filtering mode
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetFilterMode(CUfilter_mode *pfm, CUtexref hTexRef);
+
+/**
+ * \brief Gets the format used by a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *pFormat and \p *pNumChannels the format and number
+ * of components of the CUDA array bound to the texture reference \p hTexRef.
+ * If \p pFormat or \p pNumChannels is NULL, it will be ignored.
+ *
+ * \param pFormat      - Returned format
+ * \param pNumChannels - Returned number of components
+ * \param hTexRef      - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetFormat(CUarray_format *pFormat, int *pNumChannels, CUtexref hTexRef);
+
+/**
+ * \brief Gets the mipmap filtering mode for a texture reference
+ *
+ * \deprecated
+ *
+ * Returns the mipmap filtering mode in \p pfm that's used when reading memory through
+ * the texture reference \p hTexRef.
+ *
+ * \param pfm     - Returned mipmap filtering mode
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetMipmapFilterMode(CUfilter_mode *pfm, CUtexref hTexRef);
+
+/**
+ * \brief Gets the mipmap level bias for a texture reference
+ *
+ * \deprecated
+ *
+ * Returns the mipmap level bias in \p pBias that's added to the specified mipmap
+ * level when reading memory through the texture reference \p hTexRef.
+ *
+ * \param pbias   - Returned mipmap level bias
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetMipmapLevelBias(float *pbias, CUtexref hTexRef);
+
+/**
+ * \brief Gets the min/max mipmap level clamps for a texture reference
+ *
+ * \deprecated
+ *
+ * Returns the min/max mipmap level clamps in \p pminMipmapLevelClamp and \p pmaxMipmapLevelClamp
+ * that's used when reading memory through the texture reference \p hTexRef.
+ *
+ * \param pminMipmapLevelClamp - Returned mipmap min level clamp
+ * \param pmaxMipmapLevelClamp - Returned mipmap max level clamp
+ * \param hTexRef              - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetMipmapLevelClamp(float *pminMipmapLevelClamp, float *pmaxMipmapLevelClamp, CUtexref hTexRef);
+
+/**
+ * \brief Gets the maximum anisotropy for a texture reference
+ *
+ * \deprecated
+ *
+ * Returns the maximum anisotropy in \p pmaxAniso that's used when reading memory through
+ * the texture reference \p hTexRef.
+ *
+ * \param pmaxAniso - Returned maximum anisotropy
+ * \param hTexRef   - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFlags, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetMaxAnisotropy(int *pmaxAniso, CUtexref hTexRef);
+
+/**
+ * \brief Gets the border color used by a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p pBorderColor, values of the RGBA color used by
+ * the texture reference \p hTexRef.
+ * The color value is of type float and holds color components in
+ * the following sequence:
+ * pBorderColor[0] holds 'R' component
+ * pBorderColor[1] holds 'G' component
+ * pBorderColor[2] holds 'B' component
+ * pBorderColor[3] holds 'A' component
+ *
+ * \param hTexRef  - Texture reference
+ * \param pBorderColor   - Returned Type and Value of RGBA color
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetAddressMode, ::cuTexRefSetBorderColor
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetBorderColor(float *pBorderColor, CUtexref hTexRef);
+
+/**
+ * \brief Gets the flags used by a texture reference
+ *
+ * \deprecated
+ *
+ * Returns in \p *pFlags the flags of the texture reference \p hTexRef.
+ *
+ * \param pFlags  - Returned flags
+ * \param hTexRef - Texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddress2D, ::cuTexRefSetAddressMode, ::cuTexRefSetArray,
+ * ::cuTexRefSetFilterMode, ::cuTexRefSetFlags, ::cuTexRefSetFormat,
+ * ::cuTexRefGetAddress, ::cuTexRefGetAddressMode, ::cuTexRefGetArray,
+ * ::cuTexRefGetFilterMode, ::cuTexRefGetFormat
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefGetFlags(unsigned int *pFlags, CUtexref hTexRef);
+
+/**
+ * \brief Creates a texture reference
+ *
+ * \deprecated
+ *
+ * Creates a texture reference and returns its handle in \p *pTexRef. Once
+ * created, the application must call ::cuTexRefSetArray() or
+ * ::cuTexRefSetAddress() to associate the reference with allocated memory.
+ * Other texture reference functions are used to specify the format and
+ * interpretation (addressing, filtering, etc.) to be used when the memory is
+ * read through this texture reference.
+ *
+ * \param pTexRef - Returned texture reference
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefDestroy
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefCreate(CUtexref *pTexRef);
+
+/**
+ * \brief Destroys a texture reference
+ *
+ * \deprecated
+ *
+ * Destroys the texture reference specified by \p hTexRef.
+ *
+ * \param hTexRef - Texture reference to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuTexRefCreate
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuTexRefDestroy(CUtexref hTexRef);
+
+/** @} */ /* END CUDA_TEXREF_DEPRECATED */
+
+
+/**
+ * \defgroup CUDA_SURFREF_DEPRECATED Surface Reference Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ surface reference management functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the surface reference management functions of the
+ * low-level CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Sets the CUDA array for a surface reference.
+ *
+ * \deprecated
+ *
+ * Sets the CUDA array \p hArray to be read and written by the surface reference
+ * \p hSurfRef.  Any previous CUDA array state associated with the surface
+ * reference is superseded by this function.  \p Flags must be set to 0.
+ * The ::CUDA_ARRAY3D_SURFACE_LDST flag must have been set for the CUDA array.
+ * Any CUDA array previously bound to \p hSurfRef is unbound.
+
+ * \param hSurfRef - Surface reference handle
+ * \param hArray - CUDA array handle
+ * \param Flags - set to 0
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuModuleGetSurfRef,
+ * ::cuSurfRefGetArray,
+ * ::cudaBindSurfaceToArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuSurfRefSetArray(CUsurfref hSurfRef, CUarray hArray, unsigned int Flags);
+
+/**
+ * \brief Passes back the CUDA array bound to a surface reference.
+ *
+ * \deprecated
+ *
+ * Returns in \p *phArray the CUDA array bound to the surface reference
+ * \p hSurfRef, or returns ::CUDA_ERROR_INVALID_VALUE if the surface reference
+ * is not bound to any CUDA array.
+
+ * \param phArray - Surface reference handle
+ * \param hSurfRef - Surface reference handle
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa ::cuModuleGetSurfRef, ::cuSurfRefSetArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuSurfRefGetArray(CUarray *phArray, CUsurfref hSurfRef);
+
+/** @} */ /* END CUDA_SURFREF_DEPRECATED */
+
+/**
+ * \defgroup CUDA_TEXOBJECT Texture Object Management
+ *
+ * ___MANBRIEF___ texture object management functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the texture object management functions of the
+ * low-level CUDA driver application programming interface. The texture
+ * object API is only supported on devices of compute capability 3.0 or higher.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates a texture object
+ *
+ * Creates a texture object and returns it in \p pTexObject. \p pResDesc describes
+ * the data to texture from. \p pTexDesc describes how the data should be sampled.
+ * \p pResViewDesc is an optional argument that specifies an alternate format for
+ * the data described by \p pResDesc, and also describes the subresource region
+ * to restrict access to when texturing. \p pResViewDesc can only be specified if
+ * the type of resource is a CUDA array or a CUDA mipmapped array.
+ *
+ * Texture objects are only supported on devices of compute capability 3.0 or higher.
+ * Additionally, a texture object is an opaque value, and, as such, should only be
+ * accessed through CUDA API calls.
+ *
+ * The ::CUDA_RESOURCE_DESC structure is defined as:
+ * \code
+        typedef struct CUDA_RESOURCE_DESC_st
+        {
+            CUresourcetype resType;
+
+            union {
+                struct {
+                    CUarray hArray;
+                } array;
+                struct {
+                    CUmipmappedArray hMipmappedArray;
+                } mipmap;
+                struct {
+                    CUdeviceptr devPtr;
+                    CUarray_format format;
+                    unsigned int numChannels;
+                    size_t sizeInBytes;
+                } linear;
+                struct {
+                    CUdeviceptr devPtr;
+                    CUarray_format format;
+                    unsigned int numChannels;
+                    size_t width;
+                    size_t height;
+                    size_t pitchInBytes;
+                } pitch2D;
+            } res;
+
+            unsigned int flags;
+        } CUDA_RESOURCE_DESC;
+
+ * \endcode
+ * where:
+ * - ::CUDA_RESOURCE_DESC::resType specifies the type of resource to texture from.
+ * CUresourceType is defined as:
+ * \code
+        typedef enum CUresourcetype_enum {
+            CU_RESOURCE_TYPE_ARRAY           = 0x00,
+            CU_RESOURCE_TYPE_MIPMAPPED_ARRAY = 0x01,
+            CU_RESOURCE_TYPE_LINEAR          = 0x02,
+            CU_RESOURCE_TYPE_PITCH2D         = 0x03
+        } CUresourcetype;
+ * \endcode
+ *
+ * \par
+ * If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_ARRAY, ::CUDA_RESOURCE_DESC::res::array::hArray
+ * must be set to a valid CUDA array handle.
+ *
+ * \par
+ * If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_MIPMAPPED_ARRAY, ::CUDA_RESOURCE_DESC::res::mipmap::hMipmappedArray
+ * must be set to a valid CUDA mipmapped array handle.
+ *
+ * \par
+ * If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_LINEAR, ::CUDA_RESOURCE_DESC::res::linear::devPtr
+ * must be set to a valid device pointer, that is aligned to ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT.
+ * ::CUDA_RESOURCE_DESC::res::linear::format and ::CUDA_RESOURCE_DESC::res::linear::numChannels
+ * describe the format of each component and the number of components per array element. ::CUDA_RESOURCE_DESC::res::linear::sizeInBytes
+ * specifies the size of the array in bytes. The total number of elements in the linear address range cannot exceed
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE1D_LINEAR_WIDTH. The number of elements is computed as (sizeInBytes / (sizeof(format) * numChannels)).
+ *
+ * \par
+ * If ::CUDA_RESOURCE_DESC::resType is set to ::CU_RESOURCE_TYPE_PITCH2D, ::CUDA_RESOURCE_DESC::res::pitch2D::devPtr
+ * must be set to a valid device pointer, that is aligned to ::CU_DEVICE_ATTRIBUTE_TEXTURE_ALIGNMENT.
+ * ::CUDA_RESOURCE_DESC::res::pitch2D::format and ::CUDA_RESOURCE_DESC::res::pitch2D::numChannels
+ * describe the format of each component and the number of components per array element. ::CUDA_RESOURCE_DESC::res::pitch2D::width
+ * and ::CUDA_RESOURCE_DESC::res::pitch2D::height specify the width and height of the array in elements, and cannot exceed
+ * ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_WIDTH and ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_HEIGHT respectively.
+ * ::CUDA_RESOURCE_DESC::res::pitch2D::pitchInBytes specifies the pitch between two rows in bytes and has to be aligned to
+ * ::CU_DEVICE_ATTRIBUTE_TEXTURE_PITCH_ALIGNMENT. Pitch cannot exceed ::CU_DEVICE_ATTRIBUTE_MAXIMUM_TEXTURE2D_LINEAR_PITCH.
+ *
+ * - ::flags must be set to zero.
+ *
+ *
+ * The ::CUDA_TEXTURE_DESC struct is defined as
+ * \code
+        typedef struct CUDA_TEXTURE_DESC_st {
+            CUaddress_mode addressMode[3];
+            CUfilter_mode filterMode;
+            unsigned int flags;
+            unsigned int maxAnisotropy;
+            CUfilter_mode mipmapFilterMode;
+            float mipmapLevelBias;
+            float minMipmapLevelClamp;
+            float maxMipmapLevelClamp;
+        } CUDA_TEXTURE_DESC;
+ * \endcode
+ * where
+ * - ::CUDA_TEXTURE_DESC::addressMode specifies the addressing mode for each dimension of the texture data. ::CUaddress_mode is defined as:
+ *   \code
+        typedef enum CUaddress_mode_enum {
+            CU_TR_ADDRESS_MODE_WRAP = 0,
+            CU_TR_ADDRESS_MODE_CLAMP = 1,
+            CU_TR_ADDRESS_MODE_MIRROR = 2,
+            CU_TR_ADDRESS_MODE_BORDER = 3
+        } CUaddress_mode;
+ *   \endcode
+ *   This is ignored if ::CUDA_RESOURCE_DESC::resType is ::CU_RESOURCE_TYPE_LINEAR. Also, if the flag, ::CU_TRSF_NORMALIZED_COORDINATES
+ *   is not set, the only supported address mode is ::CU_TR_ADDRESS_MODE_CLAMP.
+ *
+ * - ::CUDA_TEXTURE_DESC::filterMode specifies the filtering mode to be used when fetching from the texture. CUfilter_mode is defined as:
+ *   \code
+        typedef enum CUfilter_mode_enum {
+            CU_TR_FILTER_MODE_POINT = 0,
+            CU_TR_FILTER_MODE_LINEAR = 1
+        } CUfilter_mode;
+ *   \endcode
+ *   This is ignored if ::CUDA_RESOURCE_DESC::resType is ::CU_RESOURCE_TYPE_LINEAR.
+ *
+ * - ::CUDA_TEXTURE_DESC::flags can be any combination of the following:
+ *   - ::CU_TRSF_READ_AS_INTEGER, which suppresses the default behavior of
+ *   having the texture promote integer data to floating point data in the
+ *   range [0, 1]. Note that texture with 32-bit integer format would not be 
+ *   promoted, regardless of whether or not this flag is specified.
+ *   - ::CU_TRSF_NORMALIZED_COORDINATES, which suppresses the default behavior
+ *   of having the texture coordinates range from [0, Dim) where Dim is the 
+ *   width or height of the CUDA array. Instead, the texture coordinates 
+ *   [0, 1.0) reference the entire breadth of the array dimension; Note that
+ *   for CUDA mipmapped arrays, this flag has to be set.
+ *   - ::CU_TRSF_DISABLE_TRILINEAR_OPTIMIZATION, which disables any trilinear
+ *   filtering optimizations. Trilinear optimizations improve texture filtering
+ *   performance by allowing bilinear filtering on textures in scenarios where
+ *   it can closely approximate the expected results.
+ *   - ::CU_TRSF_SEAMLESS_CUBEMAP, which enables seamless cube map filtering. 
+ *   This flag can only be specified if the underlying resource is a CUDA array 
+ *   or a CUDA mipmapped array that was created with the flag ::CUDA_ARRAY3D_CUBEMAP.
+ *   When seamless cube map filtering is enabled, texture address modes specified 
+ *   by ::CUDA_TEXTURE_DESC::addressMode are ignored. Instead, if the ::CUDA_TEXTURE_DESC::filterMode 
+ *   is set to ::CU_TR_FILTER_MODE_POINT the address mode ::CU_TR_ADDRESS_MODE_CLAMP 
+ *   will be applied for all dimensions. If the ::CUDA_TEXTURE_DESC::filterMode is 
+ *   set to ::CU_TR_FILTER_MODE_LINEAR seamless cube map filtering will be performed
+ *   when sampling along the cube face borders.
+ *
+ * - ::CUDA_TEXTURE_DESC::maxAnisotropy specifies the maximum anisotropy ratio to be used when doing anisotropic filtering. This value will be
+ *   clamped to the range [1,16].
+ *
+ * - ::CUDA_TEXTURE_DESC::mipmapFilterMode specifies the filter mode when the calculated mipmap level lies between two defined mipmap levels.
+ *
+ * - ::CUDA_TEXTURE_DESC::mipmapLevelBias specifies the offset to be applied to the calculated mipmap level.
+ *
+ * - ::CUDA_TEXTURE_DESC::minMipmapLevelClamp specifies the lower end of the mipmap level range to clamp access to.
+ *
+ * - ::CUDA_TEXTURE_DESC::maxMipmapLevelClamp specifies the upper end of the mipmap level range to clamp access to.
+ *
+ *
+ * The ::CUDA_RESOURCE_VIEW_DESC struct is defined as
+ * \code
+        typedef struct CUDA_RESOURCE_VIEW_DESC_st
+        {
+            CUresourceViewFormat format;
+            size_t width;
+            size_t height;
+            size_t depth;
+            unsigned int firstMipmapLevel;
+            unsigned int lastMipmapLevel;
+            unsigned int firstLayer;
+            unsigned int lastLayer;
+        } CUDA_RESOURCE_VIEW_DESC;
+ * \endcode
+ * where:
+ * - ::CUDA_RESOURCE_VIEW_DESC::format specifies how the data contained in the CUDA array or CUDA mipmapped array should
+ *   be interpreted. Note that this can incur a change in size of the texture data. If the resource view format is a block
+ *   compressed format, then the underlying CUDA array or CUDA mipmapped array has to have a base of format ::CU_AD_FORMAT_UNSIGNED_INT32.
+ *   with 2 or 4 channels, depending on the block compressed format. For ex., BC1 and BC4 require the underlying CUDA array to have
+ *   a format of ::CU_AD_FORMAT_UNSIGNED_INT32 with 2 channels. The other BC formats require the underlying resource to have the same base
+ *   format but with 4 channels.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::width specifies the new width of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original width of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::height specifies the new height of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original height of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::depth specifies the new depth of the texture data. This value has to be equal to that of the
+ *   original resource.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::firstMipmapLevel specifies the most detailed mipmap level. This will be the new mipmap level zero.
+ *   For non-mipmapped resources, this value has to be zero.::CUDA_TEXTURE_DESC::minMipmapLevelClamp and ::CUDA_TEXTURE_DESC::maxMipmapLevelClamp
+ *   will be relative to this value. For ex., if the firstMipmapLevel is set to 2, and a minMipmapLevelClamp of 1.2 is specified,
+ *   then the actual minimum mipmap level clamp will be 3.2.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::lastMipmapLevel specifies the least detailed mipmap level. For non-mipmapped resources, this value
+ *   has to be zero.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::firstLayer specifies the first layer index for layered textures. This will be the new layer zero.
+ *   For non-layered resources, this value has to be zero.
+ *
+ * - ::CUDA_RESOURCE_VIEW_DESC::lastLayer specifies the last layer index for layered textures. For non-layered resources,
+ *   this value has to be zero.
+ *
+ *
+ * \param pTexObject   - Texture object to create
+ * \param pResDesc     - Resource descriptor
+ * \param pTexDesc     - Texture descriptor
+ * \param pResViewDesc - Resource view descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexObjectDestroy,
+ * ::cudaCreateTextureObject
+ */
+CUresult CUDAAPI cuTexObjectCreate(CUtexObject *pTexObject, const CUDA_RESOURCE_DESC *pResDesc, const CUDA_TEXTURE_DESC *pTexDesc, const CUDA_RESOURCE_VIEW_DESC *pResViewDesc);
+
+/**
+ * \brief Destroys a texture object
+ *
+ * Destroys the texture object specified by \p texObject.
+ *
+ * \param texObject - Texture object to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexObjectCreate,
+ * ::cudaDestroyTextureObject
+ */
+CUresult CUDAAPI cuTexObjectDestroy(CUtexObject texObject);
+
+/**
+ * \brief Returns a texture object's resource descriptor
+ *
+ * Returns the resource descriptor for the texture object specified by \p texObject.
+ *
+ * \param pResDesc  - Resource descriptor
+ * \param texObject - Texture object
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexObjectCreate,
+ * ::cudaGetTextureObjectResourceDesc,
+ */
+CUresult CUDAAPI cuTexObjectGetResourceDesc(CUDA_RESOURCE_DESC *pResDesc, CUtexObject texObject);
+
+/**
+ * \brief Returns a texture object's texture descriptor
+ *
+ * Returns the texture descriptor for the texture object specified by \p texObject.
+ *
+ * \param pTexDesc  - Texture descriptor
+ * \param texObject - Texture object
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexObjectCreate,
+ * ::cudaGetTextureObjectTextureDesc
+ */
+CUresult CUDAAPI cuTexObjectGetTextureDesc(CUDA_TEXTURE_DESC *pTexDesc, CUtexObject texObject);
+
+/**
+ * \brief Returns a texture object's resource view descriptor
+ *
+ * Returns the resource view descriptor for the texture object specified by \p texObject.
+ * If no resource view was set for \p texObject, the ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * \param pResViewDesc - Resource view descriptor
+ * \param texObject    - Texture object
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuTexObjectCreate,
+ * ::cudaGetTextureObjectResourceViewDesc
+ */
+CUresult CUDAAPI cuTexObjectGetResourceViewDesc(CUDA_RESOURCE_VIEW_DESC *pResViewDesc, CUtexObject texObject);
+
+/** @} */ /* END CUDA_TEXOBJECT */
+
+/**
+ * \defgroup CUDA_SURFOBJECT Surface Object Management
+ *
+ * ___MANBRIEF___ surface object management functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the surface object management functions of the
+ * low-level CUDA driver application programming interface. The surface
+ * object API is only supported on devices of compute capability 3.0 or higher.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates a surface object
+ *
+ * Creates a surface object and returns it in \p pSurfObject. \p pResDesc describes
+ * the data to perform surface load/stores on. ::CUDA_RESOURCE_DESC::resType must be
+ * ::CU_RESOURCE_TYPE_ARRAY and  ::CUDA_RESOURCE_DESC::res::array::hArray
+ * must be set to a valid CUDA array handle. ::CUDA_RESOURCE_DESC::flags must be set to zero.
+ *
+ * Surface objects are only supported on devices of compute capability 3.0 or higher.
+ * Additionally, a surface object is an opaque value, and, as such, should only be
+ * accessed through CUDA API calls.
+ *
+ * \param pSurfObject - Surface object to create
+ * \param pResDesc    - Resource descriptor
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuSurfObjectDestroy,
+ * ::cudaCreateSurfaceObject
+ */
+CUresult CUDAAPI cuSurfObjectCreate(CUsurfObject *pSurfObject, const CUDA_RESOURCE_DESC *pResDesc);
+
+/**
+ * \brief Destroys a surface object
+ *
+ * Destroys the surface object specified by \p surfObject.
+ *
+ * \param surfObject - Surface object to destroy
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuSurfObjectCreate,
+ * ::cudaDestroySurfaceObject
+ */
+CUresult CUDAAPI cuSurfObjectDestroy(CUsurfObject surfObject);
+
+/**
+ * \brief Returns a surface object's resource descriptor
+ *
+ * Returns the resource descriptor for the surface object specified by \p surfObject.
+ *
+ * \param pResDesc   - Resource descriptor
+ * \param surfObject - Surface object
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ *
+ * \sa
+ * ::cuSurfObjectCreate,
+ * ::cudaGetSurfaceObjectResourceDesc
+ */
+CUresult CUDAAPI cuSurfObjectGetResourceDesc(CUDA_RESOURCE_DESC *pResDesc, CUsurfObject surfObject);
+
+/** @} */ /* END CUDA_SURFOBJECT */
+
+/**
+ * \defgroup CUDA_PEER_ACCESS Peer Context Memory Access
+ *
+ * ___MANBRIEF___ direct peer context memory access functions of the low-level
+ * CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the direct peer context memory access functions
+ * of the low-level CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Queries if a device may directly access a peer device's memory.
+ *
+ * Returns in \p *canAccessPeer a value of 1 if contexts on \p dev are capable of
+ * directly accessing memory from contexts on \p peerDev and 0 otherwise.
+ * If direct access of \p peerDev from \p dev is possible, then access may be
+ * enabled on two specific contexts by calling ::cuCtxEnablePeerAccess().
+ *
+ * \param canAccessPeer - Returned access capability
+ * \param dev           - Device from which allocations on \p peerDev are to
+ *                        be directly accessed.
+ * \param peerDev       - Device on which the allocations to be directly accessed
+ *                        by \p dev reside.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuCtxEnablePeerAccess,
+ * ::cuCtxDisablePeerAccess,
+ * ::cudaDeviceCanAccessPeer
+ */
+CUresult CUDAAPI cuDeviceCanAccessPeer(int *canAccessPeer, CUdevice dev, CUdevice peerDev);
+
+/**
+ * \brief Enables direct access to memory allocations in a peer context.
+ *
+ * If both the current context and \p peerContext are on devices which support unified
+ * addressing (as may be queried using ::CU_DEVICE_ATTRIBUTE_UNIFIED_ADDRESSING) and same
+ * major compute capability, then on success all allocations from \p peerContext will
+ * immediately be accessible by the current context.  See \ref CUDA_UNIFIED for additional
+ * details.
+ *
+ * Note that access granted by this call is unidirectional and that in order to access
+ * memory from the current context in \p peerContext, a separate symmetric call
+ * to ::cuCtxEnablePeerAccess() is required.
+ *
+ * Note that there are both device-wide and system-wide limitations per system
+ * configuration, as noted in the CUDA Programming Guide under the section
+ * "Peer-to-Peer Memory Access".
+ *
+ * Returns ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED if ::cuDeviceCanAccessPeer() indicates
+ * that the ::CUdevice of the current context cannot directly access memory
+ * from the ::CUdevice of \p peerContext.
+ *
+ * Returns ::CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED if direct access of
+ * \p peerContext from the current context has already been enabled.
+ *
+ * Returns ::CUDA_ERROR_TOO_MANY_PEERS if direct peer access is not possible
+ * because hardware resources required for peer access have been exhausted.
+ *
+ * Returns ::CUDA_ERROR_INVALID_CONTEXT if there is no current context, \p peerContext
+ * is not a valid context, or if the current context is \p peerContext.
+ *
+ * Returns ::CUDA_ERROR_INVALID_VALUE if \p Flags is not 0.
+ *
+ * \param peerContext - Peer context to enable direct access to from the current context
+ * \param Flags       - Reserved for future use and must be set to 0
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_PEER_ACCESS_ALREADY_ENABLED,
+ * ::CUDA_ERROR_TOO_MANY_PEERS,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_PEER_ACCESS_UNSUPPORTED,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceCanAccessPeer,
+ * ::cuCtxDisablePeerAccess,
+ * ::cudaDeviceEnablePeerAccess
+ */
+CUresult CUDAAPI cuCtxEnablePeerAccess(CUcontext peerContext, unsigned int Flags);
+
+/**
+ * \brief Disables direct access to memory allocations in a peer context and
+ * unregisters any registered allocations.
+ *
+  Returns ::CUDA_ERROR_PEER_ACCESS_NOT_ENABLED if direct peer access has
+ * not yet been enabled from \p peerContext to the current context.
+ *
+ * Returns ::CUDA_ERROR_INVALID_CONTEXT if there is no current context, or if
+ * \p peerContext is not a valid context.
+ *
+ * \param peerContext - Peer context to disable direct access to
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_PEER_ACCESS_NOT_ENABLED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * \notefnerr
+ *
+ * \sa
+ * ::cuDeviceCanAccessPeer,
+ * ::cuCtxEnablePeerAccess,
+ * ::cudaDeviceDisablePeerAccess
+ */
+CUresult CUDAAPI cuCtxDisablePeerAccess(CUcontext peerContext);
+
+/**
+ * \brief Queries attributes of the link between two devices.
+ *
+ * Returns in \p *value the value of the requested attribute \p attrib of the
+ * link between \p srcDevice and \p dstDevice. The supported attributes are:
+ * - ::CU_DEVICE_P2P_ATTRIBUTE_PERFORMANCE_RANK: A relative value indicating the
+ *   performance of the link between two devices.
+ * - ::CU_DEVICE_P2P_ATTRIBUTE_ACCESS_SUPPORTED P2P: 1 if P2P Access is enable.
+ * - ::CU_DEVICE_P2P_ATTRIBUTE_NATIVE_ATOMIC_SUPPORTED: 1 if Atomic operations over
+ *   the link are supported.
+ * - ::CU_DEVICE_P2P_ATTRIBUTE_CUDA_ARRAY_ACCESS_SUPPORTED: 1 if cudaArray can
+ *   be accessed over the link.
+ *
+ * Returns ::CUDA_ERROR_INVALID_DEVICE if \p srcDevice or \p dstDevice are not valid
+ * or if they represent the same device.
+ *
+ * Returns ::CUDA_ERROR_INVALID_VALUE if \p attrib is not valid or if \p value is
+ * a null pointer.
+ *
+ * \param value         - Returned value of the requested attribute
+ * \param attrib        - The requested attribute of the link between \p srcDevice and \p dstDevice.
+ * \param srcDevice     - The source device of the target link.
+ * \param dstDevice     - The destination device of the target link.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa
+ * ::cuCtxEnablePeerAccess,
+ * ::cuCtxDisablePeerAccess,
+ * ::cuDeviceCanAccessPeer,
+ * ::cudaDeviceGetP2PAttribute
+ */
+CUresult CUDAAPI cuDeviceGetP2PAttribute(int* value, CUdevice_P2PAttribute attrib, CUdevice srcDevice, CUdevice dstDevice);
+
+/** @} */ /* END CUDA_PEER_ACCESS */
+
+/**
+ * \defgroup CUDA_GRAPHICS Graphics Interoperability
+ *
+ * ___MANBRIEF___ graphics interoperability functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the graphics interoperability functions of the
+ * low-level CUDA driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Unregisters a graphics resource for access by CUDA
+ *
+ * Unregisters the graphics resource \p resource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p resource is invalid then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned.
+ *
+ * \param resource - Resource to unregister
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsD3D9RegisterResource,
+ * ::cuGraphicsD3D10RegisterResource,
+ * ::cuGraphicsD3D11RegisterResource,
+ * ::cuGraphicsGLRegisterBuffer,
+ * ::cuGraphicsGLRegisterImage,
+ * ::cudaGraphicsUnregisterResource
+ */
+CUresult CUDAAPI cuGraphicsUnregisterResource(CUgraphicsResource resource);
+
+/**
+ * \brief Get an array through which to access a subresource of a mapped graphics resource.
+ *
+ * Returns in \p *pArray an array through which the subresource of the mapped
+ * graphics resource \p resource which corresponds to array index \p arrayIndex
+ * and mipmap level \p mipLevel may be accessed.  The value set in \p *pArray may
+ * change every time that \p resource is mapped.
+ *
+ * If \p resource is not a texture then it cannot be accessed via an array and
+ * ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY is returned.
+ * If \p arrayIndex is not a valid array index for \p resource then
+ * ::CUDA_ERROR_INVALID_VALUE is returned.
+ * If \p mipLevel is not a valid mipmap level for \p resource then
+ * ::CUDA_ERROR_INVALID_VALUE is returned.
+ * If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * \param pArray      - Returned array through which a subresource of \p resource may be accessed
+ * \param resource    - Mapped resource to access
+ * \param arrayIndex  - Array index for array textures or cubemap face
+ *                      index as defined by ::CUarray_cubemap_face for
+ *                      cubemap textures for the subresource to access
+ * \param mipLevel    - Mipmap level for the subresource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsSubResourceGetMappedArray
+ */
+CUresult CUDAAPI cuGraphicsSubResourceGetMappedArray(CUarray *pArray, CUgraphicsResource resource, unsigned int arrayIndex, unsigned int mipLevel);
+
+/**
+ * \brief Get a mipmapped array through which to access a mapped graphics resource.
+ *
+ * Returns in \p *pMipmappedArray a mipmapped array through which the mapped graphics
+ * resource \p resource. The value set in \p *pMipmappedArray may change every time
+ * that \p resource is mapped.
+ *
+ * If \p resource is not a texture then it cannot be accessed via a mipmapped array and
+ * ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY is returned.
+ * If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * \param pMipmappedArray - Returned mipmapped array through which \p resource may be accessed
+ * \param resource        - Mapped resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_NOT_MAPPED_AS_ARRAY
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsResourceGetMappedMipmappedArray
+ */
+CUresult CUDAAPI cuGraphicsResourceGetMappedMipmappedArray(CUmipmappedArray *pMipmappedArray, CUgraphicsResource resource);
+
+/**
+ * \brief Get a device pointer through which to access a mapped graphics resource.
+ *
+ * Returns in \p *pDevPtr a pointer through which the mapped graphics resource
+ * \p resource may be accessed.
+ * Returns in \p pSize the size of the memory in bytes which may be accessed from that pointer.
+ * The value set in \p pPointer may change every time that \p resource is mapped.
+ *
+ * If \p resource is not a buffer then it cannot be accessed via a pointer and
+ * ::CUDA_ERROR_NOT_MAPPED_AS_POINTER is returned.
+ * If \p resource is not mapped then ::CUDA_ERROR_NOT_MAPPED is returned.
+ * *
+ * \param pDevPtr    - Returned pointer through which \p resource may be accessed
+ * \param pSize      - Returned size of the buffer accessible starting at \p *pPointer
+ * \param resource   - Mapped resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_NOT_MAPPED_AS_POINTER
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cudaGraphicsResourceGetMappedPointer
+ */
+CUresult CUDAAPI cuGraphicsResourceGetMappedPointer(CUdeviceptr *pDevPtr, size_t *pSize, CUgraphicsResource resource);
+
+/**
+ * \brief Set usage flags for mapping a graphics resource
+ *
+ * Set \p flags for mapping the graphics resource \p resource.
+ *
+ * Changes to \p flags will take effect the next time \p resource is mapped.
+ * The \p flags argument may be any of the following:
+
+ * - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA kernels.  This is the default value.
+ * - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_READONLY: Specifies that CUDA kernels which
+ *   access this resource will not write to this resource.
+ * - ::CU_GRAPHICS_MAP_RESOURCE_FLAGS_WRITEDISCARD: Specifies that CUDA kernels
+ *   which access this resource will not read from this resource and will
+ *   write over the entire contents of the resource, so none of the data
+ *   previously stored in the resource will be preserved.
+ *
+ * If \p resource is presently mapped for access by CUDA then
+ * ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ * If \p flags is not one of the above values then ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * \param resource - Registered resource to set flags for
+ * \param flags    - Parameters for resource mapping
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsMapResources,
+ * ::cudaGraphicsResourceSetMapFlags
+ */
+CUresult CUDAAPI cuGraphicsResourceSetMapFlags(CUgraphicsResource resource, unsigned int flags);
+
+/**
+ * \brief Map graphics resources for access by CUDA
+ *
+ * Maps the \p count graphics resources in \p resources for access by CUDA.
+ *
+ * The resources in \p resources may be accessed by CUDA until they
+ * are unmapped. The graphics API from which \p resources were registered
+ * should not access any resources while they are mapped by CUDA. If an
+ * application does so, the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any graphics calls
+ * issued before ::cuGraphicsMapResources() will complete before any subsequent CUDA
+ * work issued in \p stream begins.
+ *
+ * If \p resources includes any duplicate entries then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If any of \p resources are presently mapped for access by CUDA then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ *
+ * \param count      - Number of resources to map
+ * \param resources  - Resources to map for CUDA usage
+ * \param hStream    - Stream with which to synchronize
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsUnmapResources,
+ * ::cudaGraphicsMapResources
+ */
+CUresult CUDAAPI cuGraphicsMapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+
+/**
+ * \brief Unmap graphics resources.
+ *
+ * Unmaps the \p count graphics resources in \p resources.
+ *
+ * Once unmapped, the resources in \p resources may not be accessed by CUDA
+ * until they are mapped again.
+ *
+ * This function provides the synchronization guarantee that any CUDA work issued
+ * in \p stream before ::cuGraphicsUnmapResources() will complete before any
+ * subsequently issued graphics work begins.
+ *
+ *
+ * If \p resources includes any duplicate entries then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If any of \p resources are not presently mapped for access by CUDA then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * \param count      - Number of resources to unmap
+ * \param resources  - Resources to unmap
+ * \param hStream    - Stream with which to synchronize
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \note_null_stream
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsMapResources,
+ * ::cudaGraphicsUnmapResources
+ */
+CUresult CUDAAPI cuGraphicsUnmapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+
+/** @} */ /* END CUDA_GRAPHICS */
+
+/**
+ * \defgroup CUDA_DRIVER_ENTRY_POINT Driver Entry Point Access 
+ *
+ * ___MANBRIEF___ driver entry point access functions of the low-level CUDA driver API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the driver entry point access functions of the low-level CUDA
+ * driver application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the requested driver API function pointer
+ *
+ * Returns in \p **pfn the address of the CUDA driver function for the requested
+ * CUDA version and flags.
+ *
+ * The CUDA version is specified as (1000 * major + 10 * minor), so CUDA 11.2
+ * should be specified as 11020. For a requested driver symbol, if the specified
+ * CUDA version is greater than or equal to the CUDA version in which the driver symbol
+ * was introduced, this API will return the function pointer to the corresponding
+ * versioned function.
+ *
+ * The pointer returned by the API should be cast to a function pointer matching the
+ * requested driver function's definition in the API header file. The function pointer
+ * typedef can be picked up from the corresponding typedefs header file. For example,
+ * cudaTypedefs.h consists of function pointer typedefs for driver APIs defined in cuda.h.
+ *
+ * The API will return ::CUDA_ERROR_NOT_FOUND if the requested driver function is not
+ * supported on the platform, no ABI compatible driver function exists for the specified
+ * \p cudaVersion or if the driver symbol is invalid.
+ *
+ * The requested flags can be:
+ * - ::CU_GET_PROC_ADDRESS_DEFAULT: This is the default mode. This is equivalent to
+ *   ::CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM if the code is compiled with
+ *   --default-stream per-thread compilation flag or the macro CUDA_API_PER_THREAD_DEFAULT_STREAM
+ *   is defined; ::CU_GET_PROC_ADDRESS_LEGACY_STREAM otherwise.
+ * - ::CU_GET_PROC_ADDRESS_LEGACY_STREAM: This will enable the search for all driver symbols
+ *   that match the requested driver symbol name except the corresponding per-thread versions.
+ * - ::CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM: This will enable the search for all
+ *   driver symbols that match the requested driver symbol name including the per-thread
+ *   versions. If a per-thread version is not found, the API will return the legacy version
+ *   of the driver function.
+ *
+ * \param symbol - The base name of the driver API function to look for. As an example,
+ *                 for the driver API ::cuMemAlloc_v2, \p symbol would be cuMemAlloc and
+ *                 \p cudaVersion would be the ABI compatible CUDA version for the _v2 variant. 
+ * \param pfn - Location to return the function pointer to the requested driver function
+ * \param cudaVersion - The CUDA version to look for the requested driver symbol 
+ * \param flags -  Flags to specify search options.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_SUPPORTED,
+ * ::CUDA_ERROR_NOT_FOUND
+ * \note_version_mixing
+ *
+ * \sa
+ * ::cudaGetDriverEntryPoint
+ */
+CUresult CUDAAPI cuGetProcAddress(const char *symbol, void **pfn, int cudaVersion, cuuint64_t flags);
+
+/** @} */ /* END CUDA_DRIVER_ENTRY_POINT */
+
+CUresult CUDAAPI cuGetExportTable(const void **ppExportTable, const CUuuid *pExportTableId);
+
+/**
+ * CUDA API versioning support
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cuMemHostRegister
+    #undef cuGraphicsResourceSetMapFlags
+    #undef cuLinkCreate
+    #undef cuLinkAddData
+    #undef cuLinkAddFile
+    #undef cuDeviceTotalMem
+    #undef cuCtxCreate
+    #undef cuModuleGetGlobal
+    #undef cuMemGetInfo
+    #undef cuMemAlloc
+    #undef cuMemAllocPitch
+    #undef cuMemFree
+    #undef cuMemGetAddressRange
+    #undef cuMemAllocHost
+    #undef cuMemHostGetDevicePointer
+    #undef cuMemcpyHtoD
+    #undef cuMemcpyDtoH
+    #undef cuMemcpyDtoD
+    #undef cuMemcpyDtoA
+    #undef cuMemcpyAtoD
+    #undef cuMemcpyHtoA
+    #undef cuMemcpyAtoH
+    #undef cuMemcpyAtoA
+    #undef cuMemcpyHtoAAsync
+    #undef cuMemcpyAtoHAsync
+    #undef cuMemcpy2D
+    #undef cuMemcpy2DUnaligned
+    #undef cuMemcpy3D
+    #undef cuMemcpyHtoDAsync
+    #undef cuMemcpyDtoHAsync
+    #undef cuMemcpyDtoDAsync
+    #undef cuMemcpy2DAsync
+    #undef cuMemcpy3DAsync
+    #undef cuMemsetD8
+    #undef cuMemsetD16
+    #undef cuMemsetD32
+    #undef cuMemsetD2D8
+    #undef cuMemsetD2D16
+    #undef cuMemsetD2D32
+    #undef cuArrayCreate
+    #undef cuArrayGetDescriptor
+    #undef cuArray3DCreate
+    #undef cuArray3DGetDescriptor
+    #undef cuTexRefSetAddress
+    #undef cuTexRefSetAddress2D
+    #undef cuTexRefGetAddress
+    #undef cuGraphicsResourceGetMappedPointer
+    #undef cuCtxDestroy
+    #undef cuCtxPopCurrent
+    #undef cuCtxPushCurrent
+    #undef cuStreamDestroy
+    #undef cuEventDestroy
+    #undef cuMemcpy
+    #undef cuMemcpyAsync
+    #undef cuMemcpyPeer
+    #undef cuMemcpyPeerAsync
+    #undef cuMemcpy3DPeer
+    #undef cuMemcpy3DPeerAsync
+    #undef cuMemsetD8Async
+    #undef cuMemsetD16Async
+    #undef cuMemsetD32Async
+    #undef cuMemsetD2D8Async
+    #undef cuMemsetD2D16Async
+    #undef cuMemsetD2D32Async
+    #undef cuStreamGetPriority
+    #undef cuStreamGetFlags
+    #undef cuStreamGetCtx
+    #undef cuStreamWaitEvent
+    #undef cuStreamAddCallback
+    #undef cuStreamAttachMemAsync
+    #undef cuStreamQuery
+    #undef cuStreamSynchronize
+    #undef cuEventRecord
+    #undef cuEventRecordWithFlags
+    #undef cuLaunchKernel
+    #undef cuLaunchKernelEx
+    #undef cuLaunchHostFunc
+    #undef cuGraphicsMapResources
+    #undef cuGraphicsUnmapResources
+    #undef cuStreamWriteValue32
+    #undef cuStreamWaitValue32
+    #undef cuStreamWriteValue64
+    #undef cuStreamWaitValue64
+    #undef cuStreamBatchMemOp
+    #undef cuStreamWriteValue32_v2
+    #undef cuStreamWaitValue32_v2
+    #undef cuStreamWriteValue64_v2
+    #undef cuStreamWaitValue64_v2
+    #undef cuStreamBatchMemOp_v2
+    #undef cuMemPrefetchAsync
+    #undef cuLaunchCooperativeKernel
+    #undef cuSignalExternalSemaphoresAsync
+    #undef cuWaitExternalSemaphoresAsync
+    #undef cuStreamBeginCapture
+    #undef cuStreamEndCapture
+    #undef cuStreamIsCapturing
+    #undef cuStreamGetCaptureInfo
+    #undef cuStreamGetCaptureInfo_v2
+    #undef cuGraphUpload
+    #undef cuGraphLaunch
+    #undef cuDevicePrimaryCtxRelease
+    #undef cuDevicePrimaryCtxReset
+    #undef cuDevicePrimaryCtxSetFlags
+    #undef cuIpcOpenMemHandle
+    #undef cuStreamCopyAttributes
+    #undef cuStreamSetAttribute
+    #undef cuStreamGetAttribute
+    #undef cuGraphInstantiate
+    #undef cuMemMapArrayAsync
+    #undef cuMemFreeAsync 
+    #undef cuMemAllocAsync 
+    #undef cuMemAllocFromPoolAsync 
+    #undef cuStreamUpdateCaptureDependencies
+
+    CUresult CUDAAPI cuMemHostRegister(void *p, size_t bytesize, unsigned int Flags);
+    CUresult CUDAAPI cuGraphicsResourceSetMapFlags(CUgraphicsResource resource, unsigned int flags);
+    CUresult CUDAAPI cuLinkCreate(unsigned int numOptions, CUjit_option *options, void **optionValues, CUlinkState *stateOut);
+    CUresult CUDAAPI cuLinkAddData(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name,
+        unsigned int numOptions, CUjit_option *options, void **optionValues);
+    CUresult CUDAAPI cuLinkAddFile(CUlinkState state, CUjitInputType type, const char *path,
+        unsigned int numOptions, CUjit_option *options, void **optionValues);
+    CUresult CUDAAPI cuTexRefSetAddress2D_v2(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR *desc, CUdeviceptr dptr, size_t Pitch);
+
+    typedef unsigned int CUdeviceptr_v1;
+
+    typedef struct CUDA_MEMCPY2D_v1_st
+    {
+        unsigned int srcXInBytes;   /**< Source X in bytes */
+        unsigned int srcY;          /**< Source Y */
+        CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
+        const void *srcHost;        /**< Source host pointer */
+        CUdeviceptr_v1 srcDevice;   /**< Source device pointer */
+        CUarray srcArray;           /**< Source array reference */
+        unsigned int srcPitch;      /**< Source pitch (ignored when src is array) */
+
+        unsigned int dstXInBytes;   /**< Destination X in bytes */
+        unsigned int dstY;          /**< Destination Y */
+        CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
+        void *dstHost;              /**< Destination host pointer */
+        CUdeviceptr_v1 dstDevice;   /**< Destination device pointer */
+        CUarray dstArray;           /**< Destination array reference */
+        unsigned int dstPitch;      /**< Destination pitch (ignored when dst is array) */
+
+        unsigned int WidthInBytes;  /**< Width of 2D memory copy in bytes */
+        unsigned int Height;        /**< Height of 2D memory copy */
+    } CUDA_MEMCPY2D_v1;
+
+    typedef struct CUDA_MEMCPY3D_v1_st
+    {
+        unsigned int srcXInBytes;   /**< Source X in bytes */
+        unsigned int srcY;          /**< Source Y */
+        unsigned int srcZ;          /**< Source Z */
+        unsigned int srcLOD;        /**< Source LOD */
+        CUmemorytype srcMemoryType; /**< Source memory type (host, device, array) */
+        const void *srcHost;        /**< Source host pointer */
+        CUdeviceptr_v1 srcDevice;   /**< Source device pointer */
+        CUarray srcArray;           /**< Source array reference */
+        void *reserved0;            /**< Must be NULL */
+        unsigned int srcPitch;      /**< Source pitch (ignored when src is array) */
+        unsigned int srcHeight;     /**< Source height (ignored when src is array; may be 0 if Depth==1) */
+
+        unsigned int dstXInBytes;   /**< Destination X in bytes */
+        unsigned int dstY;          /**< Destination Y */
+        unsigned int dstZ;          /**< Destination Z */
+        unsigned int dstLOD;        /**< Destination LOD */
+        CUmemorytype dstMemoryType; /**< Destination memory type (host, device, array) */
+        void *dstHost;              /**< Destination host pointer */
+        CUdeviceptr_v1 dstDevice;   /**< Destination device pointer */
+        CUarray dstArray;           /**< Destination array reference */
+        void *reserved1;            /**< Must be NULL */
+        unsigned int dstPitch;      /**< Destination pitch (ignored when dst is array) */
+        unsigned int dstHeight;     /**< Destination height (ignored when dst is array; may be 0 if Depth==1) */
+
+        unsigned int WidthInBytes;  /**< Width of 3D memory copy in bytes */
+        unsigned int Height;        /**< Height of 3D memory copy */
+        unsigned int Depth;         /**< Depth of 3D memory copy */
+    } CUDA_MEMCPY3D_v1;
+
+    typedef struct CUDA_ARRAY_DESCRIPTOR_v1_st
+    {
+        unsigned int Width;         /**< Width of array */
+        unsigned int Height;        /**< Height of array */
+
+        CUarray_format Format;      /**< Array format */
+        unsigned int NumChannels;   /**< Channels per array element */
+    } CUDA_ARRAY_DESCRIPTOR_v1;
+
+    typedef struct CUDA_ARRAY3D_DESCRIPTOR_v1_st
+    {
+        unsigned int Width;         /**< Width of 3D array */
+        unsigned int Height;        /**< Height of 3D array */
+        unsigned int Depth;         /**< Depth of 3D array */
+
+        CUarray_format Format;      /**< Array format */
+        unsigned int NumChannels;   /**< Channels per array element */
+        unsigned int Flags;         /**< Flags */
+    } CUDA_ARRAY3D_DESCRIPTOR_v1;
+
+    CUresult CUDAAPI cuDeviceTotalMem(unsigned int *bytes, CUdevice dev);
+    CUresult CUDAAPI cuCtxCreate(CUcontext *pctx, unsigned int flags, CUdevice dev);
+    CUresult CUDAAPI cuModuleGetGlobal(CUdeviceptr_v1 *dptr, unsigned int *bytes, CUmodule hmod, const char *name);
+    CUresult CUDAAPI cuMemGetInfo(unsigned int *free, unsigned int *total);
+    CUresult CUDAAPI cuMemAlloc(CUdeviceptr_v1 *dptr, unsigned int bytesize);
+    CUresult CUDAAPI cuMemAllocPitch(CUdeviceptr_v1 *dptr, unsigned int *pPitch, unsigned int WidthInBytes, unsigned int Height, unsigned int ElementSizeBytes);
+    CUresult CUDAAPI cuMemFree(CUdeviceptr_v1 dptr);
+    CUresult CUDAAPI cuMemGetAddressRange(CUdeviceptr_v1 *pbase, unsigned int *psize, CUdeviceptr_v1 dptr);
+    CUresult CUDAAPI cuMemAllocHost(void **pp, unsigned int bytesize);
+    CUresult CUDAAPI cuMemHostGetDevicePointer(CUdeviceptr_v1 *pdptr, void *p, unsigned int Flags);
+    CUresult CUDAAPI cuMemcpyHtoD(CUdeviceptr_v1 dstDevice, const void *srcHost, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoH(void *dstHost, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoD(CUdeviceptr_v1 dstDevice, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoA(CUarray dstArray, unsigned int dstOffset, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoD(CUdeviceptr_v1 dstDevice, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyHtoA(CUarray dstArray, unsigned int dstOffset, const void *srcHost, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoH(void *dstHost, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoA(CUarray dstArray, unsigned int dstOffset, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    CUresult CUDAAPI cuMemcpyHtoAAsync(CUarray dstArray, unsigned int dstOffset, const void *srcHost, unsigned int ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyAtoHAsync(void *dstHost, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy2D(const CUDA_MEMCPY2D_v1 *pCopy);
+    CUresult CUDAAPI cuMemcpy2DUnaligned(const CUDA_MEMCPY2D_v1 *pCopy);
+    CUresult CUDAAPI cuMemcpy3D(const CUDA_MEMCPY3D_v1 *pCopy);
+    CUresult CUDAAPI cuMemcpyHtoDAsync(CUdeviceptr_v1 dstDevice, const void *srcHost, unsigned int ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyDtoHAsync(void *dstHost, CUdeviceptr_v1 srcDevice, unsigned int ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyDtoDAsync(CUdeviceptr_v1 dstDevice, CUdeviceptr_v1 srcDevice, unsigned int ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy2DAsync(const CUDA_MEMCPY2D_v1 *pCopy, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy3DAsync(const CUDA_MEMCPY3D_v1 *pCopy, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD8(CUdeviceptr_v1 dstDevice, unsigned char uc, unsigned int N);
+    CUresult CUDAAPI cuMemsetD16(CUdeviceptr_v1 dstDevice, unsigned short us, unsigned int N);
+    CUresult CUDAAPI cuMemsetD32(CUdeviceptr_v1 dstDevice, unsigned int ui, unsigned int N);
+    CUresult CUDAAPI cuMemsetD2D8(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned char uc, unsigned int Width, unsigned int Height);
+    CUresult CUDAAPI cuMemsetD2D16(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned short us, unsigned int Width, unsigned int Height);
+    CUresult CUDAAPI cuMemsetD2D32(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned int ui, unsigned int Width, unsigned int Height);
+    CUresult CUDAAPI cuArrayCreate(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR_v1 *pAllocateArray);
+    CUresult CUDAAPI cuArrayGetDescriptor(CUDA_ARRAY_DESCRIPTOR_v1 *pArrayDescriptor, CUarray hArray);
+    CUresult CUDAAPI cuArray3DCreate(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR_v1 *pAllocateArray);
+    CUresult CUDAAPI cuArray3DGetDescriptor(CUDA_ARRAY3D_DESCRIPTOR_v1 *pArrayDescriptor, CUarray hArray);
+    CUresult CUDAAPI cuTexRefSetAddress(unsigned int *ByteOffset, CUtexref hTexRef, CUdeviceptr_v1 dptr, unsigned int bytes);
+    CUresult CUDAAPI cuTexRefSetAddress2D(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR_v1 *desc, CUdeviceptr_v1 dptr, unsigned int Pitch);
+    CUresult CUDAAPI cuTexRefGetAddress(CUdeviceptr_v1 *pdptr, CUtexref hTexRef);
+    CUresult CUDAAPI cuGraphicsResourceGetMappedPointer(CUdeviceptr_v1 *pDevPtr, unsigned int *pSize, CUgraphicsResource resource);
+
+    CUresult CUDAAPI cuCtxDestroy(CUcontext ctx);
+    CUresult CUDAAPI cuCtxPopCurrent(CUcontext *pctx);
+    CUresult CUDAAPI cuCtxPushCurrent(CUcontext ctx);
+    CUresult CUDAAPI cuStreamDestroy(CUstream hStream);
+    CUresult CUDAAPI cuEventDestroy(CUevent hEvent);
+    CUresult CUDAAPI cuDevicePrimaryCtxRelease(CUdevice dev);
+    CUresult CUDAAPI cuDevicePrimaryCtxReset(CUdevice dev);
+    CUresult CUDAAPI cuDevicePrimaryCtxSetFlags(CUdevice dev, unsigned int flags);
+
+    CUresult CUDAAPI cuMemcpyHtoD_v2(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoH_v2(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoD_v2(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyDtoA_v2(CUarray dstArray, size_t dstOffset, CUdeviceptr srcDevice, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoD_v2(CUdeviceptr dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyHtoA_v2(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoH_v2(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyAtoA_v2(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyHtoAAsync_v2(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyAtoHAsync_v2(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy2D_v2(const CUDA_MEMCPY2D *pCopy);
+    CUresult CUDAAPI cuMemcpy2DUnaligned_v2(const CUDA_MEMCPY2D *pCopy);
+    CUresult CUDAAPI cuMemcpy3D_v2(const CUDA_MEMCPY3D *pCopy);
+    CUresult CUDAAPI cuMemcpyHtoDAsync_v2(CUdeviceptr dstDevice, const void *srcHost, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyDtoHAsync_v2(void *dstHost, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyDtoDAsync_v2(CUdeviceptr dstDevice, CUdeviceptr srcDevice, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy2DAsync_v2(const CUDA_MEMCPY2D *pCopy, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy3DAsync_v2(const CUDA_MEMCPY3D *pCopy, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD8_v2(CUdeviceptr dstDevice, unsigned char uc, size_t N);
+    CUresult CUDAAPI cuMemsetD16_v2(CUdeviceptr dstDevice, unsigned short us, size_t N);
+    CUresult CUDAAPI cuMemsetD32_v2(CUdeviceptr dstDevice, unsigned int ui, size_t N);
+    CUresult CUDAAPI cuMemsetD2D8_v2(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height);
+    CUresult CUDAAPI cuMemsetD2D16_v2(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height);
+    CUresult CUDAAPI cuMemsetD2D32_v2(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height);
+    CUresult CUDAAPI cuMemcpy(CUdeviceptr dst, CUdeviceptr src, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyAsync(CUdeviceptr dst, CUdeviceptr src, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpyPeer(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, size_t ByteCount);
+    CUresult CUDAAPI cuMemcpyPeerAsync(CUdeviceptr dstDevice, CUcontext dstContext, CUdeviceptr srcDevice, CUcontext srcContext, size_t ByteCount, CUstream hStream);
+    CUresult CUDAAPI cuMemcpy3DPeer(const CUDA_MEMCPY3D_PEER *pCopy);
+    CUresult CUDAAPI cuMemcpy3DPeerAsync(const CUDA_MEMCPY3D_PEER *pCopy, CUstream hStream);
+
+    CUresult CUDAAPI cuMemsetD8Async(CUdeviceptr dstDevice, unsigned char uc, size_t N, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD16Async(CUdeviceptr dstDevice, unsigned short us, size_t N, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD32Async(CUdeviceptr dstDevice, unsigned int ui, size_t N, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD2D8Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD2D16Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height, CUstream hStream);
+    CUresult CUDAAPI cuMemsetD2D32Async(CUdeviceptr dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height, CUstream hStream);
+
+    CUresult CUDAAPI cuStreamGetPriority(CUstream hStream, int *priority);
+    CUresult CUDAAPI cuStreamGetFlags(CUstream hStream, unsigned int *flags);
+    CUresult CUDAAPI cuStreamGetCtx(CUstream hStream, CUcontext *pctx);
+    CUresult CUDAAPI cuStreamWaitEvent(CUstream hStream, CUevent hEvent, unsigned int Flags);
+    CUresult CUDAAPI cuStreamAddCallback(CUstream hStream, CUstreamCallback callback, void *userData, unsigned int flags);
+    CUresult CUDAAPI cuStreamAttachMemAsync(CUstream hStream, CUdeviceptr dptr, size_t length, unsigned int flags);
+    CUresult CUDAAPI cuStreamQuery(CUstream hStream);
+    CUresult CUDAAPI cuStreamSynchronize(CUstream hStream);
+    CUresult CUDAAPI cuEventRecord(CUevent hEvent, CUstream hStream);
+    CUresult CUDAAPI cuEventRecordWithFlags(CUevent hEvent, CUstream hStream, unsigned int flags);
+    CUresult CUDAAPI cuLaunchKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, void **extra);
+    CUresult CUDAAPI cuLaunchKernelEx(const CUlaunchConfig *config, CUfunction f, void **kernelParams, void **extra);
+    CUresult CUDAAPI cuLaunchHostFunc(CUstream hStream, CUhostFn fn, void *userData);
+    CUresult CUDAAPI cuGraphicsMapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+    CUresult CUDAAPI cuGraphicsUnmapResources(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+    CUresult CUDAAPI cuStreamWriteValue32(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWaitValue32(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWriteValue64(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWaitValue64(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamBatchMemOp(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+    CUresult CUDAAPI cuStreamWriteValue32_v2(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWaitValue32_v2(CUstream stream, CUdeviceptr addr, cuuint32_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWriteValue64_v2(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamWaitValue64_v2(CUstream stream, CUdeviceptr addr, cuuint64_t value, unsigned int flags);
+    CUresult CUDAAPI cuStreamBatchMemOp_v2(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+    CUresult CUDAAPI cuMemPrefetchAsync(CUdeviceptr devPtr, size_t count, CUdevice dstDevice, CUstream hStream);
+    CUresult CUDAAPI cuLaunchCooperativeKernel(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams);
+    CUresult CUDAAPI cuSignalExternalSemaphoresAsync(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS *paramsArray, unsigned int numExtSems, CUstream stream);
+    CUresult CUDAAPI cuWaitExternalSemaphoresAsync(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS *paramsArray, unsigned int numExtSems, CUstream stream);
+    CUresult CUDAAPI cuStreamBeginCapture(CUstream hStream);
+    CUresult CUDAAPI cuStreamBeginCapture_ptsz(CUstream hStream);
+    CUresult CUDAAPI cuStreamBeginCapture_v2(CUstream hStream, CUstreamCaptureMode mode);
+    CUresult CUDAAPI cuStreamEndCapture(CUstream hStream, CUgraph *phGraph);
+    CUresult CUDAAPI cuStreamIsCapturing(CUstream hStream, CUstreamCaptureStatus *captureStatus);
+    CUresult CUDAAPI cuStreamGetCaptureInfo(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out);
+    CUresult CUDAAPI cuStreamGetCaptureInfo_v2(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
+    
+    CUresult CUDAAPI cuGraphUpload(CUgraphExec hGraph, CUstream hStream);
+    CUresult CUDAAPI cuGraphLaunch(CUgraphExec hGraph, CUstream hStream);
+    CUresult CUDAAPI cuStreamCopyAttributes(CUstream dstStream, CUstream srcStream);
+    CUresult CUDAAPI cuStreamGetAttribute(CUstream hStream, CUstreamAttrID attr, CUstreamAttrValue *value);
+    CUresult CUDAAPI cuStreamSetAttribute(CUstream hStream, CUstreamAttrID attr, const CUstreamAttrValue *param);
+
+    CUresult CUDAAPI cuIpcOpenMemHandle(CUdeviceptr *pdptr, CUipcMemHandle handle, unsigned int Flags);
+    CUresult CUDAAPI cuGraphInstantiate(CUgraphExec *phGraphExec, CUgraph hGraph, CUgraphNode *phErrorNode, char *logBuffer, size_t bufferSize);
+    CUresult CUDAAPI cuMemMapArrayAsync(CUarrayMapInfo *mapInfoList, unsigned int count, CUstream hStream);
+
+    CUresult CUDAAPI cuMemFreeAsync(CUdeviceptr dptr, CUstream hStream);
+    CUresult CUDAAPI cuMemAllocAsync(CUdeviceptr *dptr, size_t bytesize, CUstream hStream);
+    CUresult CUDAAPI cuMemAllocFromPoolAsync(CUdeviceptr *dptr, size_t bytesize, CUmemoryPool pool, CUstream hStream);
+
+    CUresult CUDAAPI cuStreamUpdateCaptureDependencies(CUstream hStream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
+#elif defined(__CUDA_API_PER_THREAD_DEFAULT_STREAM)
+static inline CUresult cuGetProcAddress_ptsz(const char *symbol, void **funcPtr, int driverVersion, cuuint64_t flags) {
+    const int procAddressMask = (CU_GET_PROC_ADDRESS_LEGACY_STREAM|
+                                 CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM);
+    if ((flags & procAddressMask) == 0) {
+        flags |= CU_GET_PROC_ADDRESS_PER_THREAD_DEFAULT_STREAM;
+    }
+    return cuGetProcAddress(symbol, funcPtr, driverVersion, flags); 
+}
+#define cuGetProcAddress cuGetProcAddress_ptsz
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#if defined(__GNUC__)
+  #if defined(__CUDA_API_PUSH_VISIBILITY_DEFAULT)
+    #pragma GCC visibility pop
+  #endif
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif /* __cuda_cuda_h__ */
diff --git a/ext/cudart/include/cudaD3D10.h b/ext/cudart/include/cudaD3D10.h
new file mode 100644
index 00000000..9342cd78
--- /dev/null
+++ b/ext/cudart/include/cudaD3D10.h
@@ -0,0 +1,805 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D10_H
+#define CUDAD3D10_H
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+
+#ifdef CUDA_FORCE_API_VERSION
+#error "CUDA_FORCE_API_VERSION is no longer supported."
+#endif
+
+#define cuD3D10CtxCreate                    cuD3D10CtxCreate_v2
+#define cuD3D10ResourceGetSurfaceDimensions cuD3D10ResourceGetSurfaceDimensions_v2
+#define cuD3D10ResourceGetMappedPointer     cuD3D10ResourceGetMappedPointer_v2
+#define cuD3D10ResourceGetMappedSize        cuD3D10ResourceGetMappedSize_v2
+#define cuD3D10ResourceGetMappedPitch       cuD3D10ResourceGetMappedPitch_v2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup CUDA_D3D10 Direct3D 10 Interoperability
+ * \ingroup CUDA_DRIVER
+ *
+ * ___MANBRIEF___ Direct3D 10 interoperability functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the Direct3D 10 interoperability functions of the
+ * low-level CUDA driver application programming interface. Note that mapping 
+ * of Direct3D 10 resources is performed with the graphics API agnostic, resource 
+ * mapping interface described in \ref CUDA_GRAPHICS "Graphics Interoperability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D10 device
+ */
+typedef enum CUd3d10DeviceList_enum {
+    CU_D3D10_DEVICE_LIST_ALL            = 0x01, /**< The CUDA devices for all GPUs used by a D3D10 device */
+    CU_D3D10_DEVICE_LIST_CURRENT_FRAME  = 0x02, /**< The CUDA devices for the GPUs used by a D3D10 device in its currently rendering frame */
+    CU_D3D10_DEVICE_LIST_NEXT_FRAME     = 0x03, /**< The CUDA devices for the GPUs to be used by a D3D10 device in the next frame */
+} CUd3d10DeviceList;
+
+/**
+ * \brief Gets the CUDA device corresponding to a display adapter.
+ *
+ * Returns in \p *pCudaDevice the CUDA-compatible device corresponding to the
+ * adapter \p pAdapter obtained from ::IDXGIFactory::EnumAdapters.
+ *
+ * If no device on \p pAdapter is CUDA-compatible then the call will fail.
+ *
+ * \param pCudaDevice - Returned CUDA device corresponding to \p pAdapter
+ * \param pAdapter    - Adapter to query for CUDA device
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D10GetDevices,
+ * ::cudaD3D10GetDevice
+ */
+CUresult CUDAAPI cuD3D10GetDevice(CUdevice *pCudaDevice, IDXGIAdapter *pAdapter);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 10 device
+ *
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible device corresponding
+ * to the Direct3D 10 device \p pD3D10Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the CUDA-compatible devices
+ * corresponding to the Direct3D 10 device \p pD3D10Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::CUDA_ERROR_NO_DEVICE.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D10Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D10Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D10Device     - Direct3D 10 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::CU_D3D10_DEVICE_LIST_ALL for all devices,
+ *                           ::CU_D3D10_DEVICE_LIST_CURRENT_FRAME for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::CU_D3D10_DEVICE_LIST_NEXT_FRAME for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NO_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D10GetDevice,
+ * ::cudaD3D10GetDevices
+ */
+CUresult CUDAAPI cuD3D10GetDevices(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, unsigned int cudaDeviceCount, ID3D10Device *pD3D10Device, CUd3d10DeviceList deviceList);
+
+/**
+ * \brief Register a Direct3D 10 resource for access by CUDA
+ *
+ * Registers the Direct3D 10 resource \p pD3DResource for access by CUDA and
+ * returns a CUDA handle to \p pD3Dresource in \p pCudaResource.
+ * The handle returned in \p pCudaResource may be used to map and unmap this
+ * resource until it is unregistered.
+ * On success this call will increase the internal reference count on
+ * \p pD3DResource. This reference count will be decremented when this
+ * resource is unregistered through ::cuGraphicsUnregisterResource().
+ *
+ * This call is potentially high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ * - ::ID3D10Buffer: may be accessed through a device pointer.
+ * - ::ID3D10Texture1D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D10Texture2D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D10Texture3D: individual subresources of the texture may be accessed via arrays
+ *
+ * The \p Flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported DXGI formats is as follows. For compactness the
+ * notation A_{B,C,D} represents A_B, A_C, and A_D.
+ * - DXGI_FORMAT_A8_UNORM
+ * - DXGI_FORMAT_B8G8R8A8_UNORM
+ * - DXGI_FORMAT_B8G8R8X8_UNORM
+ * - DXGI_FORMAT_R16_FLOAT
+ * - DXGI_FORMAT_R16G16B16A16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16G16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R32_FLOAT
+ * - DXGI_FORMAT_R32G32B32A32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32G32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32_{SINT,UINT}
+ * - DXGI_FORMAT_R8G8B8A8_{SINT,SNORM,UINT,UNORM,UNORM_SRGB}
+ * - DXGI_FORMAT_R8G8_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R8_{SINT,SNORM,UINT,UNORM}
+ *
+ * If \p pD3DResource is of incorrect type or is already registered then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If \p pD3DResource cannot be registered then ::CUDA_ERROR_UNKNOWN is returned.
+ * If \p Flags is not one of the above specified value then ::CUDA_ERROR_INVALID_VALUE
+ * is returned.
+ *
+ * \param pCudaResource - Returned graphics resource handle
+ * \param pD3DResource  - Direct3D resource to register
+ * \param Flags         - Parameters for resource registration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsUnregisterResource,
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsD3D10RegisterResource
+ */
+CUresult CUDAAPI cuGraphicsD3D10RegisterResource(CUgraphicsResource *pCudaResource, ID3D10Resource *pD3DResource, unsigned int Flags);
+
+/**
+ * \defgroup CUDA_D3D10_DEPRECATED Direct3D 10 Interoperability [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated Direct3D 10 interoperability functions of the 
+ * low-level CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated Direct3D 10 interoperability functionality.
+ * @{
+ */
+
+/** Flags to register a resource */
+typedef enum CUD3D10register_flags_enum {
+    CU_D3D10_REGISTER_FLAGS_NONE  = 0x00,
+    CU_D3D10_REGISTER_FLAGS_ARRAY = 0x01,
+} CUD3D10register_flags;
+
+/** Flags to map or unmap a resource */
+typedef enum CUD3D10map_flags_enum {
+    CU_D3D10_MAPRESOURCE_FLAGS_NONE         = 0x00,
+    CU_D3D10_MAPRESOURCE_FLAGS_READONLY     = 0x01,
+    CU_D3D10_MAPRESOURCE_FLAGS_WRITEDISCARD = 0x02,
+} CUD3D10map_flags;
+
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 10
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D10
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param pCudaDevice - Returned pointer to the device on which the context was created
+ * \param Flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D10GetDevice,
+ * ::cuGraphicsD3D10RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, ID3D10Device *pD3DDevice);
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 10
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D10
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ * \param cudaDevice  - The CUDA device on which to create the context.  This device
+ *                      must be among the devices returned when querying
+ *                      ::CU_D3D10_DEVICES_ALL from  ::cuD3D10GetDevices.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D10GetDevices,
+ * ::cuGraphicsD3D10RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10CtxCreateOnDevice(CUcontext *pCtx, unsigned int flags, ID3D10Device *pD3DDevice, CUdevice cudaDevice);
+
+/**
+ * \brief Get the Direct3D 10 device against which the current CUDA context was
+ * created
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D10
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param ppD3DDevice - Returned Direct3D device corresponding to CUDA context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D10GetDevice
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10GetDirect3DDevice(ID3D10Device **ppD3DDevice);
+
+/**
+ * \brief Register a Direct3D resource for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Registers the Direct3D resource \p pResource for access by CUDA.
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cuD3D10UnregisterResource(). Also on success, this call will increase the
+ * internal reference count on \p pResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cuD3D10UnregisterResource().
+ *
+ * This call is potentially high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pResource must be one of the following.
+ *
+ * - ::ID3D10Buffer: Cannot be used with \p Flags set to
+ *   ::CU_D3D10_REGISTER_FLAGS_ARRAY.
+ * - ::ID3D10Texture1D: No restrictions.
+ * - ::ID3D10Texture2D: No restrictions.
+ * - ::ID3D10Texture3D: No restrictions.
+ *
+ * The \p Flags argument specifies the mechanism through which CUDA will
+ * access the Direct3D resource.  The following values are allowed.
+ *
+ * - ::CU_D3D10_REGISTER_FLAGS_NONE: Specifies that CUDA will access this
+ *   resource through a ::CUdeviceptr. The pointer, size, and (for textures),
+ *   pitch for each subresource of this allocation may be queried through
+ *   ::cuD3D10ResourceGetMappedPointer(), ::cuD3D10ResourceGetMappedSize(),
+ *   and ::cuD3D10ResourceGetMappedPitch() respectively. This option is valid
+ *   for all resource types.
+ * - ::CU_D3D10_REGISTER_FLAGS_ARRAY: Specifies that CUDA will access this
+ *   resource through a ::CUarray queried on a sub-resource basis through
+ *   ::cuD3D10ResourceGetMappedArray(). This option is only valid for
+ *   resources of type ::ID3D10Texture1D, ::ID3D10Texture2D, and
+ *   ::ID3D10Texture3D.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * If Direct3D interoperability is not initialized on this context then
+ * ::CUDA_ERROR_INVALID_CONTEXT is returned. If \p pResource is of incorrect
+ * type or is already registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource cannot be registered, then ::CUDA_ERROR_UNKNOWN
+ * is returned.
+ *
+ * \param pResource - Resource to register
+ * \param Flags     - Parameters for resource registration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsD3D10RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10RegisterResource(ID3D10Resource *pResource, unsigned int Flags);
+
+/**
+ * \brief Unregister a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Unregisters the Direct3D resource \p pResource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p pResource is not registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned.
+ *
+ * \param pResource - Resources to unregister
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsUnregisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10UnregisterResource(ID3D10Resource *pResource);
+
+/**
+ * \brief Map Direct3D resources for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Maps the \p count Direct3D resources in \p ppResources for access by CUDA.
+ *
+ * The resources in \p ppResources may be accessed in CUDA kernels until they
+ * are unmapped. Direct3D should not access any resources while they are mapped
+ * by CUDA. If an application does so, the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any Direct3D calls
+ * issued before ::cuD3D10MapResources() will complete before any CUDA kernels
+ * issued after ::cuD3D10MapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If any of \p ppResources are
+ * presently mapped for access by CUDA, then ::CUDA_ERROR_ALREADY_MAPPED is
+ * returned.
+ *
+ * \param count       - Number of resources to map for CUDA
+ * \param ppResources - Resources to map for CUDA
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsMapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10MapResources(unsigned int count, ID3D10Resource **ppResources);
+
+/**
+ * \brief Unmap Direct3D resources
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Unmaps the \p count Direct3D resources in \p ppResources.
+ *
+ * This function provides the synchronization guarantee that any CUDA kernels
+ * issued before ::cuD3D10UnmapResources() will complete before any Direct3D
+ * calls issued after ::cuD3D10UnmapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If any of \p ppResources are not
+ * presently mapped for access by CUDA, then ::CUDA_ERROR_NOT_MAPPED is
+ * returned.
+ *
+ * \param count       - Number of resources to unmap for CUDA
+ * \param ppResources - Resources to unmap for CUDA
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsUnmapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10UnmapResources(unsigned int count, ID3D10Resource **ppResources);
+
+/**
+ * \brief Set usage flags for mapping a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Set flags for mapping the Direct3D resource \p pResource.
+ *
+ * Changes to flags will take effect the next time \p pResource is mapped. The
+ * \p Flags argument may be any of the following.
+ *
+ * - ::CU_D3D10_MAPRESOURCE_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA kernels. This is the default value.
+ * - ::CU_D3D10_MAPRESOURCE_FLAGS_READONLY: Specifies that CUDA kernels which
+ *   access this resource will not write to this resource.
+ * - ::CU_D3D10_MAPRESOURCE_FLAGS_WRITEDISCARD: Specifies that CUDA kernels
+ *   which access this resource will not read from this resource and will
+ *   write over the entire contents of the resource, so none of the data
+ *   previously stored in the resource will be preserved.
+ *
+ * If \p pResource has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is presently
+ * mapped for access by CUDA then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ *
+ * \param pResource - Registered resource to set flags for
+ * \param Flags     - Parameters for resource mapping
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceSetMapFlags
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceSetMapFlags(ID3D10Resource *pResource, unsigned int Flags);
+
+/**
+ * \brief Get an array through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pArray an array through which the subresource of the mapped
+ * Direct3D resource \p pResource, which corresponds to \p SubResource may be
+ * accessed. The value set in \p pArray may change every time that \p pResource
+ * is mapped.
+ *
+ * If \p pResource is not registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource was not registered with usage flags
+ * ::CU_D3D10_REGISTER_FLAGS_ARRAY, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource is not mapped, then ::CUDA_ERROR_NOT_MAPPED is
+ * returned.
+ *
+ * For usage requirements of the \p SubResource parameter, see
+ * ::cuD3D10ResourceGetMappedPointer().
+ *
+ * \param pArray       - Returned array corresponding to subresource
+ * \param pResource    - Mapped resource to access
+ * \param SubResource  - Subresource of pResource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceGetMappedArray(CUarray *pArray, ID3D10Resource *pResource, unsigned int SubResource);
+
+/**
+ * \brief Get a pointer through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pDevPtr the base pointer of the subresource of the mapped
+ * Direct3D resource \p pResource, which corresponds to \p SubResource. The
+ * value set in \p pDevPtr may change every time that \p pResource is mapped.
+ *
+ * If \p pResource is not registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource was not registered with usage flags
+ * ::CU_D3D10_REGISTER_FLAGS_NONE, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource is not mapped, then ::CUDA_ERROR_NOT_MAPPED is
+ * returned.
+ *
+ * If \p pResource is of type ::ID3D10Buffer, then \p SubResource must be 0.
+ * If \p pResource is of any other type, then the value of \p SubResource must
+ * come from the subresource calculation in ::D3D10CalcSubResource().
+ *
+ * \param pDevPtr      - Returned pointer corresponding to subresource
+ * \param pResource    - Mapped resource to access
+ * \param SubResource  - Subresource of pResource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceGetMappedPointer
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceGetMappedPointer(CUdeviceptr *pDevPtr, ID3D10Resource *pResource, unsigned int SubResource);
+
+/**
+ * \brief Get the size of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pSize the size of the subresource of the mapped Direct3D
+ * resource \p pResource, which corresponds to \p SubResource. The value set
+ * in \p pSize may change every time that \p pResource is mapped.
+ *
+ * If \p pResource has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource was not registered
+ * with usage flags ::CU_D3D10_REGISTER_FLAGS_NONE, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is not mapped for
+ * access by CUDA, then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * For usage requirements of the \p SubResource parameter, see
+ * ::cuD3D10ResourceGetMappedPointer().
+ *
+ * \param pSize        - Returned size of subresource
+ * \param pResource    - Mapped resource to access
+ * \param SubResource  - Subresource of pResource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceGetMappedPointer
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceGetMappedSize(size_t *pSize, ID3D10Resource *pResource, unsigned int SubResource);
+
+/**
+ * \brief Get the pitch of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pPitch and \p *pPitchSlice the pitch and Z-slice pitch of the
+ * subresource of the mapped Direct3D resource \p pResource, which corresponds
+ * to \p SubResource. The values set in \p pPitch and \p pPitchSlice may
+ * change every time that \p pResource is mapped.
+ *
+ * The pitch and Z-slice pitch values may be used to compute the location of a
+ * sample on a surface as follows.
+ *
+ * For a 2D surface, the byte offset of the sample at position \b x, \b y from
+ * the base pointer of the surface is:
+ *
+ * \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * For a 3D surface, the byte offset of the sample at position \b x, \b y,
+ * \b z from the base pointer of the surface is:
+ *
+ * \b z* \b slicePitch + \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * Both parameters \p pPitch and \p pPitchSlice are optional and may be set to
+ * NULL.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture10 or one of its
+ * sub-types or if \p pResource has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource was not registered
+ * with usage flags ::CU_D3D10_REGISTER_FLAGS_NONE, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is not mapped for
+ * access by CUDA, then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * For usage requirements of the \p SubResource parameter, see
+ * ::cuD3D10ResourceGetMappedPointer().
+ *
+ * \param pPitch       - Returned pitch of subresource
+ * \param pPitchSlice  - Returned Z-slice pitch of subresource
+ * \param pResource    - Mapped resource to access
+ * \param SubResource  - Subresource of pResource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceGetMappedPitch(size_t *pPitch, size_t *pPitchSlice, ID3D10Resource *pResource, unsigned int SubResource);
+
+/**
+ * \brief Get the dimensions of a registered surface
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pWidth, \p *pHeight, and \p *pDepth the dimensions of the
+ * subresource of the mapped Direct3D resource \p pResource, which corresponds
+ * to \p SubResource.
+ *
+ * Because anti-aliased surfaces may have multiple samples per pixel, it is
+ * possible that the dimensions of a resource will be an integer factor larger
+ * than the dimensions reported by the Direct3D runtime.
+ *
+ * The parameters \p pWidth, \p pHeight, and \p pDepth are optional. For 2D
+ * surfaces, the value returned in \p *pDepth will be 0.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture10 or
+ * ::IDirect3DSurface10 or if \p pResource has not been registered for use
+ * with CUDA, then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ *
+ * For usage requirements of the \p SubResource parameter, see
+ * ::cuD3D10ResourceGetMappedPointer().
+ *
+ * \param pWidth       - Returned width of surface
+ * \param pHeight      - Returned height of surface
+ * \param pDepth       - Returned depth of surface
+ * \param pResource    - Registered resource to access
+ * \param SubResource  - Subresource of pResource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D10ResourceGetSurfaceDimensions(size_t *pWidth, size_t *pHeight, size_t *pDepth, ID3D10Resource *pResource, unsigned int SubResource);
+
+/** @} */ /* END CUDA_D3D10_DEPRECATED */
+/** @} */ /* END CUDA_D3D10 */
+
+
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cuD3D10CtxCreate
+    #undef cuD3D10ResourceGetSurfaceDimensions
+    #undef cuD3D10ResourceGetMappedPointer
+    #undef cuD3D10ResourceGetMappedSize
+    #undef cuD3D10ResourceGetMappedPitch
+
+    CUresult CUDAAPI cuD3D10CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, ID3D10Device *pD3DDevice);
+    CUresult CUDAAPI cuD3D10ResourceGetMappedPitch(unsigned int *pPitch, unsigned int *pPitchSlice, ID3D10Resource *pResource, unsigned int SubResource);
+    CUresult CUDAAPI cuD3D10ResourceGetMappedPointer(CUdeviceptr_v1 *pDevPtr, ID3D10Resource *pResource, unsigned int SubResource);
+    CUresult CUDAAPI cuD3D10ResourceGetMappedSize(unsigned int *pSize, ID3D10Resource *pResource, unsigned int SubResource);
+    CUresult CUDAAPI cuD3D10ResourceGetSurfaceDimensions(unsigned int *pWidth, unsigned int *pHeight, unsigned int *pDepth, ID3D10Resource *pResource, unsigned int SubResource);
+#endif /* __CUDA_API_VERSION_INTERNAL */
+
+#ifdef __cplusplus
+};
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif
+
diff --git a/ext/cudart/include/cudaD3D10Typedefs.h b/ext/cudart/include/cudaD3D10Typedefs.h
new file mode 100644
index 00000000..d84885dc
--- /dev/null
+++ b/ext/cudart/include/cudaD3D10Typedefs.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D10TYPEDEFS_H
+#define CUDAD3D10TYPEDEFS_H
+
+// Dependent includes for cudaD3D10.h
+#include <rpcsal.h>
+#include <D3D10_1.h>
+
+#include <cudaD3D10.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cudaD3D10.h
+ */
+#define PFN_cuD3D10GetDevice  PFN_cuD3D10GetDevice_v2010
+#define PFN_cuD3D10GetDevices  PFN_cuD3D10GetDevices_v3020
+#define PFN_cuGraphicsD3D10RegisterResource  PFN_cuGraphicsD3D10RegisterResource_v3000
+#define PFN_cuD3D10CtxCreate  PFN_cuD3D10CtxCreate_v3020
+#define PFN_cuD3D10CtxCreateOnDevice  PFN_cuD3D10CtxCreateOnDevice_v3020
+#define PFN_cuD3D10GetDirect3DDevice  PFN_cuD3D10GetDirect3DDevice_v3020
+#define PFN_cuD3D10RegisterResource  PFN_cuD3D10RegisterResource_v2010
+#define PFN_cuD3D10UnregisterResource  PFN_cuD3D10UnregisterResource_v2010
+#define PFN_cuD3D10MapResources  PFN_cuD3D10MapResources_v2010
+#define PFN_cuD3D10UnmapResources  PFN_cuD3D10UnmapResources_v2010
+#define PFN_cuD3D10ResourceSetMapFlags  PFN_cuD3D10ResourceSetMapFlags_v2010
+#define PFN_cuD3D10ResourceGetMappedArray  PFN_cuD3D10ResourceGetMappedArray_v2010
+#define PFN_cuD3D10ResourceGetMappedPointer  PFN_cuD3D10ResourceGetMappedPointer_v3020
+#define PFN_cuD3D10ResourceGetMappedSize  PFN_cuD3D10ResourceGetMappedSize_v3020
+#define PFN_cuD3D10ResourceGetMappedPitch  PFN_cuD3D10ResourceGetMappedPitch_v3020
+#define PFN_cuD3D10ResourceGetSurfaceDimensions  PFN_cuD3D10ResourceGetSurfaceDimensions_v3020
+
+
+/**
+ * Type definitions for functions defined in cudaD3D10.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuD3D10GetDevice_v2010)(CUdevice_v1 *pCudaDevice, IDXGIAdapter *pAdapter);
+typedef CUresult (CUDAAPI *PFN_cuD3D10GetDevices_v3020)(unsigned int *pCudaDeviceCount, CUdevice_v1 *pCudaDevices, unsigned int cudaDeviceCount, ID3D10Device *pD3D10Device, CUd3d10DeviceList deviceList);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsD3D10RegisterResource_v3000)(CUgraphicsResource *pCudaResource, ID3D10Resource *pD3DResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D10CtxCreate_v3020)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, ID3D10Device *pD3DDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D10CtxCreateOnDevice_v3020)(CUcontext *pCtx, unsigned int flags, ID3D10Device *pD3DDevice, CUdevice_v1 cudaDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D10GetDirect3DDevice_v3020)(ID3D10Device **ppD3DDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D10RegisterResource_v2010)(ID3D10Resource *pResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D10UnregisterResource_v2010)(ID3D10Resource *pResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D10MapResources_v2010)(unsigned int count, ID3D10Resource **ppResources);
+typedef CUresult (CUDAAPI *PFN_cuD3D10UnmapResources_v2010)(unsigned int count, ID3D10Resource **ppResources);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceSetMapFlags_v2010)(ID3D10Resource *pResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedArray_v2010)(CUarray *pArray, ID3D10Resource *pResource, unsigned int SubResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedPointer_v3020)(CUdeviceptr_v2 *pDevPtr, ID3D10Resource *pResource, unsigned int SubResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedSize_v3020)(size_t *pSize, ID3D10Resource *pResource, unsigned int SubResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedPitch_v3020)(size_t *pPitch, size_t *pPitchSlice, ID3D10Resource *pResource, unsigned int SubResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetSurfaceDimensions_v3020)(size_t *pWidth, size_t *pHeight, size_t *pDepth, ID3D10Resource *pResource, unsigned int SubResource);
+
+/*
+ * Type definitions for older versioned functions in cudaD3D10.h
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    typedef CUresult (CUDAAPI *PFN_cuD3D10CtxCreate_v2010)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, ID3D10Device *pD3DDevice);
+    typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedPitch_v2010)(unsigned int *pPitch, unsigned int *pPitchSlice, ID3D10Resource *pResource, unsigned int SubResource);
+    typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedPointer_v2010)(CUdeviceptr_v1 *pDevPtr, ID3D10Resource *pResource, unsigned int SubResource);
+    typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetMappedSize_v2010)(unsigned int *pSize, ID3D10Resource *pResource, unsigned int SubResource);
+    typedef CUresult (CUDAAPI *PFN_cuD3D10ResourceGetSurfaceDimensions_v2010)(unsigned int *pWidth, unsigned int *pHeight, unsigned int *pDepth, ID3D10Resource *pResource, unsigned int SubResource);
+#endif
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cudaD3D11.h b/ext/cudart/include/cudaD3D11.h
new file mode 100644
index 00000000..302d297b
--- /dev/null
+++ b/ext/cudart/include/cudaD3D11.h
@@ -0,0 +1,357 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D11_H
+#define CUDAD3D11_H
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+
+#ifdef CUDA_FORCE_API_VERSION
+#error "CUDA_FORCE_API_VERSION is no longer supported."
+#endif
+
+#define cuD3D11CtxCreate cuD3D11CtxCreate_v2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \defgroup CUDA_D3D11 Direct3D 11 Interoperability
+ * \ingroup CUDA_DRIVER
+ *
+ * ___MANBRIEF___ Direct3D 11 interoperability functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the Direct3D 11 interoperability functions of the
+ * low-level CUDA driver application programming interface. Note that mapping 
+ * of Direct3D 11 resources is performed with the graphics API agnostic, resource 
+ * mapping interface described in \ref CUDA_GRAPHICS "Graphics Interoperability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D11 device
+ */
+typedef enum CUd3d11DeviceList_enum {
+    CU_D3D11_DEVICE_LIST_ALL            = 0x01, /**< The CUDA devices for all GPUs used by a D3D11 device */
+    CU_D3D11_DEVICE_LIST_CURRENT_FRAME  = 0x02, /**< The CUDA devices for the GPUs used by a D3D11 device in its currently rendering frame */
+    CU_D3D11_DEVICE_LIST_NEXT_FRAME     = 0x03, /**< The CUDA devices for the GPUs to be used by a D3D11 device in the next frame */
+} CUd3d11DeviceList;
+
+/**
+ * \brief Gets the CUDA device corresponding to a display adapter.
+ *
+ * Returns in \p *pCudaDevice the CUDA-compatible device corresponding to the
+ * adapter \p pAdapter obtained from ::IDXGIFactory::EnumAdapters.
+ *
+ * If no device on \p pAdapter is CUDA-compatible the call will return
+ * ::CUDA_ERROR_NO_DEVICE.
+ *
+ * \param pCudaDevice - Returned CUDA device corresponding to \p pAdapter
+ * \param pAdapter    - Adapter to query for CUDA device
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NO_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D11GetDevices,
+ * ::cudaD3D11GetDevice
+ */
+CUresult CUDAAPI cuD3D11GetDevice(CUdevice *pCudaDevice, IDXGIAdapter *pAdapter);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 11 device
+ *
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible device corresponding
+ * to the Direct3D 11 device \p pD3D11Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the CUDA-compatible devices
+ * corresponding to the Direct3D 11 device \p pD3D11Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::CUDA_ERROR_NO_DEVICE.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D11Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D11Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D11Device     - Direct3D 11 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::CU_D3D11_DEVICE_LIST_ALL for all devices,
+ *                           ::CU_D3D11_DEVICE_LIST_CURRENT_FRAME for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::CU_D3D11_DEVICE_LIST_NEXT_FRAME for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NO_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D11GetDevice,
+ * ::cudaD3D11GetDevices
+ */
+CUresult CUDAAPI cuD3D11GetDevices(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, unsigned int cudaDeviceCount, ID3D11Device *pD3D11Device, CUd3d11DeviceList deviceList);
+
+/**
+ * \brief Register a Direct3D 11 resource for access by CUDA
+ *
+ * Registers the Direct3D 11 resource \p pD3DResource for access by CUDA and
+ * returns a CUDA handle to \p pD3Dresource in \p pCudaResource.
+ * The handle returned in \p pCudaResource may be used to map and unmap this
+ * resource until it is unregistered.
+ * On success this call will increase the internal reference count on
+ * \p pD3DResource. This reference count will be decremented when this
+ * resource is unregistered through ::cuGraphicsUnregisterResource().
+ *
+ * This call is potentially high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ * - ::ID3D11Buffer: may be accessed through a device pointer.
+ * - ::ID3D11Texture1D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D11Texture2D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D11Texture3D: individual subresources of the texture may be accessed via arrays
+ *
+ * The \p Flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported DXGI formats is as follows. For compactness the
+ * notation A_{B,C,D} represents A_B, A_C, and A_D.
+ * - DXGI_FORMAT_A8_UNORM
+ * - DXGI_FORMAT_B8G8R8A8_UNORM
+ * - DXGI_FORMAT_B8G8R8X8_UNORM
+ * - DXGI_FORMAT_R16_FLOAT
+ * - DXGI_FORMAT_R16G16B16A16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16G16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R32_FLOAT
+ * - DXGI_FORMAT_R32G32B32A32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32G32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32_{SINT,UINT}
+ * - DXGI_FORMAT_R8G8B8A8_{SINT,SNORM,UINT,UNORM,UNORM_SRGB}
+ * - DXGI_FORMAT_R8G8_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R8_{SINT,SNORM,UINT,UNORM}
+ *
+ * If \p pD3DResource is of incorrect type or is already registered then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If \p pD3DResource cannot be registered then ::CUDA_ERROR_UNKNOWN is returned.
+ * If \p Flags is not one of the above specified value then ::CUDA_ERROR_INVALID_VALUE
+ * is returned.
+ *
+ * \param pCudaResource - Returned graphics resource handle
+ * \param pD3DResource  - Direct3D resource to register
+ * \param Flags         - Parameters for resource registration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsUnregisterResource,
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsD3D11RegisterResource
+ */
+CUresult CUDAAPI cuGraphicsD3D11RegisterResource(CUgraphicsResource *pCudaResource, ID3D11Resource *pD3DResource, unsigned int Flags);
+
+/**
+ * \defgroup CUDA_D3D11_DEPRECATED Direct3D 11 Interoperability [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated Direct3D 11 interoperability functions of the
+ * low-level CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated Direct3D 11 interoperability functionality.
+ * @{
+ */
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 11
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D11
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param pCudaDevice - Returned pointer to the device on which the context was created
+ * \param Flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D11GetDevice,
+ * ::cuGraphicsD3D11RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D11CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, ID3D11Device *pD3DDevice);
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 11
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D11
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ * \param cudaDevice  - The CUDA device on which to create the context.  This device
+ *                      must be among the devices returned when querying
+ *                      ::CU_D3D11_DEVICES_ALL from  ::cuD3D11GetDevices.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D11GetDevices,
+ * ::cuGraphicsD3D11RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D11CtxCreateOnDevice(CUcontext *pCtx, unsigned int flags, ID3D11Device *pD3DDevice, CUdevice cudaDevice);
+
+/**
+ * \brief Get the Direct3D 11 device against which the current CUDA context was
+ * created
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with a D3D11
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param ppD3DDevice - Returned Direct3D device corresponding to CUDA context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D11GetDevice
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D11GetDirect3DDevice(ID3D11Device **ppD3DDevice);
+
+/** @} */ /* END CUDA_D3D11_DEPRECATED */
+/** @} */ /* END CUDA_D3D11 */
+
+
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cuD3D11CtxCreate
+
+    CUresult CUDAAPI cuD3D11CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, ID3D11Device *pD3DDevice);
+#endif /* __CUDA_API_VERSION_INTERNAL */
+
+#ifdef __cplusplus
+};
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif
+
diff --git a/ext/cudart/include/cudaD3D11Typedefs.h b/ext/cudart/include/cudaD3D11Typedefs.h
new file mode 100644
index 00000000..f517c3d4
--- /dev/null
+++ b/ext/cudart/include/cudaD3D11Typedefs.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D11TYPEDEFS_H
+#define CUDAD3D11TYPEDEFS_H
+
+// Dependent includes for cudaD3D11.h
+#include <rpcsal.h>
+#include <D3D11_1.h>
+
+#include <cudaD3D11.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cudaD3D11.h
+ */
+#define PFN_cuD3D11GetDevice  PFN_cuD3D11GetDevice_v3000
+#define PFN_cuD3D11GetDevices  PFN_cuD3D11GetDevices_v3020
+#define PFN_cuGraphicsD3D11RegisterResource  PFN_cuGraphicsD3D11RegisterResource_v3000
+#define PFN_cuD3D11CtxCreate  PFN_cuD3D11CtxCreate_v3020
+#define PFN_cuD3D11CtxCreateOnDevice  PFN_cuD3D11CtxCreateOnDevice_v3020
+#define PFN_cuD3D11GetDirect3DDevice  PFN_cuD3D11GetDirect3DDevice_v3020
+
+
+/**
+ * Type definitions for functions defined in cudaD3D11.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuD3D11GetDevice_v3000)(CUdevice_v1 *pCudaDevice, IDXGIAdapter *pAdapter);
+typedef CUresult (CUDAAPI *PFN_cuD3D11GetDevices_v3020)(unsigned int *pCudaDeviceCount, CUdevice_v1 *pCudaDevices, unsigned int cudaDeviceCount, ID3D11Device *pD3D11Device, CUd3d11DeviceList deviceList);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsD3D11RegisterResource_v3000)(CUgraphicsResource *pCudaResource, ID3D11Resource *pD3DResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D11CtxCreate_v3020)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, ID3D11Device *pD3DDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D11CtxCreateOnDevice_v3020)(CUcontext *pCtx, unsigned int flags, ID3D11Device *pD3DDevice, CUdevice_v1 cudaDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D11GetDirect3DDevice_v3020)(ID3D11Device **ppD3DDevice);
+
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    typedef CUresult (CUDAAPI *PFN_cuD3D11CtxCreate_v3000)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, ID3D11Device *pD3DDevice);
+#endif
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cudaD3D9.h b/ext/cudart/include/cudaD3D9.h
new file mode 100644
index 00000000..d615e353
--- /dev/null
+++ b/ext/cudart/include/cudaD3D9.h
@@ -0,0 +1,886 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D9_H
+#define CUDAD3D9_H
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+
+#ifdef CUDA_FORCE_API_VERSION
+#error "CUDA_FORCE_API_VERSION is no longer supported."
+#endif
+
+#define cuD3D9CtxCreate                    cuD3D9CtxCreate_v2
+#define cuD3D9ResourceGetSurfaceDimensions cuD3D9ResourceGetSurfaceDimensions_v2
+#define cuD3D9ResourceGetMappedPointer     cuD3D9ResourceGetMappedPointer_v2
+#define cuD3D9ResourceGetMappedSize        cuD3D9ResourceGetMappedSize_v2
+#define cuD3D9ResourceGetMappedPitch       cuD3D9ResourceGetMappedPitch_v2
+#define cuD3D9MapVertexBuffer              cuD3D9MapVertexBuffer_v2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \file cudaD3D9.h
+ * \brief Header file for the Direct3D 9 interoperability functions of the
+ * low-level CUDA driver application programming interface.
+ */
+
+/**
+ * \defgroup CUDA_D3D9 Direct3D 9 Interoperability
+ * \ingroup CUDA_DRIVER
+ *
+ * ___MANBRIEF___ Direct3D 9 interoperability functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the Direct3D 9 interoperability functions of the
+ * low-level CUDA driver application programming interface. Note that mapping 
+ * of Direct3D 9 resources is performed with the graphics API agnostic, resource 
+ * mapping interface described in \ref CUDA_GRAPHICS "Graphics Interoperability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D9 device
+ */
+typedef enum CUd3d9DeviceList_enum {
+    CU_D3D9_DEVICE_LIST_ALL            = 0x01, /**< The CUDA devices for all GPUs used by a D3D9 device */
+    CU_D3D9_DEVICE_LIST_CURRENT_FRAME  = 0x02, /**< The CUDA devices for the GPUs used by a D3D9 device in its currently rendering frame */
+    CU_D3D9_DEVICE_LIST_NEXT_FRAME     = 0x03, /**< The CUDA devices for the GPUs to be used by a D3D9 device in the next frame */
+} CUd3d9DeviceList;
+
+/**
+ * \brief Gets the CUDA device corresponding to a display adapter.
+ *
+ * Returns in \p *pCudaDevice the CUDA-compatible device corresponding to the
+ * adapter name \p pszAdapterName obtained from ::EnumDisplayDevices() or
+ * ::IDirect3D9::GetAdapterIdentifier().
+ *
+ * If no device on the adapter with name \p pszAdapterName is CUDA-compatible,
+ * then the call will fail.
+ *
+ * \param pCudaDevice    - Returned CUDA device corresponding to pszAdapterName
+ * \param pszAdapterName - Adapter name to query for device
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9CtxCreate,
+ * ::cudaD3D9GetDevice
+ */
+CUresult CUDAAPI cuD3D9GetDevice(CUdevice *pCudaDevice, const char *pszAdapterName);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 9 device
+ *
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible device corresponding
+ * to the Direct3D 9 device \p pD3D9Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the CUDA-compatible devices
+ * corresponding to the Direct3D 9 device \p pD3D9Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::CUDA_ERROR_NO_DEVICE.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D9Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D9Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D9Device      - Direct3D 9 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::CU_D3D9_DEVICE_LIST_ALL for all devices,
+ *                           ::CU_D3D9_DEVICE_LIST_CURRENT_FRAME for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::CU_D3D9_DEVICE_LIST_NEXT_FRAME for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_NO_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_FOUND,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9CtxCreate,
+ * ::cudaD3D9GetDevices
+ */
+CUresult CUDAAPI cuD3D9GetDevices(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, unsigned int cudaDeviceCount, IDirect3DDevice9 *pD3D9Device, CUd3d9DeviceList deviceList);
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 9
+ *
+ * Creates a new CUDA context, enables interoperability for that context with
+ * the Direct3D device \p pD3DDevice, and associates the created CUDA context
+ * with the calling thread.
+ * The created ::CUcontext will be returned in \p *pCtx.
+ * Direct3D resources from this device may be registered and mapped through the
+ * lifetime of this CUDA context.
+ * If \p pCudaDevice is non-NULL then the ::CUdevice on which this CUDA context was
+ * created will be returned in \p *pCudaDevice.
+ *
+ * On success, this call will increase the internal reference count on
+ * \p pD3DDevice. This reference count will be decremented upon destruction of
+ * this context through ::cuCtxDestroy().
+ * This context will cease to function if \p pD3DDevice is destroyed or encounters
+ * an error.
+ *
+ * Note that this function is never required for correct functionality.  Use of 
+ * this function will result in accelerated interoperability only when the
+ * operating system is Windows Vista or Windows 7, and the device \p pD3DDdevice 
+ * is not an IDirect3DDevice9Ex.  In all other circumstances, this function is 
+ * not necessary.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param pCudaDevice - Returned pointer to the device on which the context was created
+ * \param Flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9GetDevice,
+ * ::cuGraphicsD3D9RegisterResource
+ */
+CUresult CUDAAPI cuD3D9CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, IDirect3DDevice9 *pD3DDevice);
+
+/**
+ * \brief Create a CUDA context for interoperability with Direct3D 9
+ *
+ * Creates a new CUDA context, enables interoperability for that context with
+ * the Direct3D device \p pD3DDevice, and associates the created CUDA context
+ * with the calling thread.
+ * The created ::CUcontext will be returned in \p *pCtx.
+ * Direct3D resources from this device may be registered and mapped through the
+ * lifetime of this CUDA context.
+ *
+ * On success, this call will increase the internal reference count on
+ * \p pD3DDevice. This reference count will be decremented upon destruction of
+ * this context through ::cuCtxDestroy().
+ * This context will cease to function if \p pD3DDevice is destroyed or encounters
+ * an error.
+ *
+ * Note that this function is never required for correct functionality.  Use of 
+ * this function will result in accelerated interoperability only when the
+ * operating system is Windows Vista or Windows 7, and the device \p pD3DDdevice 
+ * is not an IDirect3DDevice9Ex.  In all other circumstances, this function is 
+ * not necessary.
+ *
+ * \param pCtx        - Returned newly created CUDA context
+ * \param flags       - Context creation flags (see ::cuCtxCreate() for details)
+ * \param pD3DDevice  - Direct3D device to create interoperability context with
+ * \param cudaDevice  - The CUDA device on which to create the context.  This device
+ *                      must be among the devices returned when querying
+ *                      ::CU_D3D9_DEVICES_ALL from  ::cuD3D9GetDevices.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9GetDevices,
+ * ::cuGraphicsD3D9RegisterResource
+ */
+CUresult CUDAAPI cuD3D9CtxCreateOnDevice(CUcontext *pCtx, unsigned int flags, IDirect3DDevice9 *pD3DDevice, CUdevice cudaDevice);
+
+/**
+ * \brief Get the Direct3D 9 device against which the current CUDA context was
+ * created
+ *
+ * Returns in \p *ppD3DDevice the Direct3D device against which this CUDA context
+ * was created in ::cuD3D9CtxCreate().
+ *
+ * \param ppD3DDevice - Returned Direct3D device corresponding to CUDA context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT
+ * ::CUDA_ERROR_INVALID_GRAPHICS_CONTEXT
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9GetDevice,
+ * ::cudaD3D9GetDirect3DDevice
+ */
+CUresult CUDAAPI cuD3D9GetDirect3DDevice(IDirect3DDevice9 **ppD3DDevice);
+
+/**
+ * \brief Register a Direct3D 9 resource for access by CUDA
+ *
+ * Registers the Direct3D 9 resource \p pD3DResource for access by CUDA and
+ * returns a CUDA handle to \p pD3Dresource in \p pCudaResource.
+ * The handle returned in \p pCudaResource may be used to map and unmap this
+ * resource until it is unregistered.
+ * On success this call will increase the internal reference count on
+ * \p pD3DResource. This reference count will be decremented when this
+ * resource is unregistered through ::cuGraphicsUnregisterResource().
+ *
+ * This call is potentially high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ * - ::IDirect3DVertexBuffer9: may be accessed through a device pointer
+ * - ::IDirect3DIndexBuffer9: may be accessed through a device pointer
+ * - ::IDirect3DSurface9: may be accessed through an array.
+ *     Only stand-alone objects of type ::IDirect3DSurface9
+ *     may be explicitly shared. In particular, individual mipmap levels and faces
+ *     of cube maps may not be registered directly. To access individual surfaces
+ *     associated with a texture, one must register the base texture object.
+ * - ::IDirect3DBaseTexture9: individual surfaces on this texture may be accessed
+ *     through an array.
+ *
+ * The \p Flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported formats is as follows:
+ * - D3DFMT_L8
+ * - D3DFMT_L16
+ * - D3DFMT_A8R8G8B8
+ * - D3DFMT_X8R8G8B8
+ * - D3DFMT_G16R16
+ * - D3DFMT_A8B8G8R8
+ * - D3DFMT_A8
+ * - D3DFMT_A8L8
+ * - D3DFMT_Q8W8V8U8
+ * - D3DFMT_V16U16
+ * - D3DFMT_A16B16G16R16F
+ * - D3DFMT_A16B16G16R16
+ * - D3DFMT_R32F
+ * - D3DFMT_G16R16F
+ * - D3DFMT_A32B32G32R32F
+ * - D3DFMT_G32R32F
+ * - D3DFMT_R16F
+ *
+ * If Direct3D interoperability is not initialized for this context using
+ * ::cuD3D9CtxCreate then ::CUDA_ERROR_INVALID_CONTEXT is returned.
+ * If \p pD3DResource is of incorrect type or is already registered then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If \p pD3DResource cannot be registered then ::CUDA_ERROR_UNKNOWN is returned.
+ * If \p Flags is not one of the above specified value then ::CUDA_ERROR_INVALID_VALUE
+ * is returned.
+ *
+ * \param pCudaResource - Returned graphics resource handle
+ * \param pD3DResource  - Direct3D resource to register
+ * \param Flags         - Parameters for resource registration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuD3D9CtxCreate,
+ * ::cuGraphicsUnregisterResource,
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsD3D9RegisterResource
+ */
+CUresult CUDAAPI cuGraphicsD3D9RegisterResource(CUgraphicsResource *pCudaResource, IDirect3DResource9 *pD3DResource, unsigned int Flags);
+
+/**
+ * \defgroup CUDA_D3D9_DEPRECATED Direct3D 9 Interoperability [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated Direct3D 9 interoperability functions of the
+ * low-level CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated Direct3D 9 interoperability functionality.
+ * @{
+ */
+
+/** Flags to register a resource */
+typedef enum CUd3d9register_flags_enum {
+    CU_D3D9_REGISTER_FLAGS_NONE  = 0x00,
+    CU_D3D9_REGISTER_FLAGS_ARRAY = 0x01,
+} CUd3d9register_flags;
+
+/** Flags to map or unmap a resource */
+typedef enum CUd3d9map_flags_enum {
+    CU_D3D9_MAPRESOURCE_FLAGS_NONE         = 0x00,
+    CU_D3D9_MAPRESOURCE_FLAGS_READONLY     = 0x01,
+    CU_D3D9_MAPRESOURCE_FLAGS_WRITEDISCARD = 0x02,
+} CUd3d9map_flags;
+
+/**
+ * \brief Register a Direct3D resource for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Registers the Direct3D resource \p pResource for access by CUDA.
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cuD3D9UnregisterResource(). Also on success, this call will increase the
+ * internal reference count on \p pResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cuD3D9UnregisterResource().
+ *
+ * This call is potentially high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pResource must be one of the following.
+ *
+ * - ::IDirect3DVertexBuffer9: Cannot be used with \p Flags set to
+ *   ::CU_D3D9_REGISTER_FLAGS_ARRAY.
+ * - ::IDirect3DIndexBuffer9: Cannot be used with \p Flags set to
+ *   ::CU_D3D9_REGISTER_FLAGS_ARRAY.
+ * - ::IDirect3DSurface9: Only stand-alone objects of type ::IDirect3DSurface9
+ *   may be explicitly shared. In particular, individual mipmap levels and
+ *   faces of cube maps may not be registered directly. To access individual
+ *   surfaces associated with a texture, one must register the base texture
+ *   object. For restrictions on the \p Flags parameter, see type
+ *   ::IDirect3DBaseTexture9.
+ * - ::IDirect3DBaseTexture9: When a texture is registered, all surfaces
+ *   associated with the all mipmap levels of all faces of the texture will be
+ *   accessible to CUDA.
+ *
+ * The \p Flags argument specifies the mechanism through which CUDA will access
+ * the Direct3D resource. The following values are allowed.
+ *
+ * - CU_D3D9_REGISTER_FLAGS_NONE: Specifies that CUDA will access this resource
+ *   through a ::CUdeviceptr. The pointer, size, and (for textures), pitch for
+ *   each subresource of this allocation may be queried through
+ *   ::cuD3D9ResourceGetMappedPointer(), ::cuD3D9ResourceGetMappedSize(), and
+ *   ::cuD3D9ResourceGetMappedPitch() respectively. This option is valid for
+ *   all resource types.
+ * - ::CU_D3D9_REGISTER_FLAGS_ARRAY: Specifies that CUDA will access this
+ *   resource through a ::CUarray queried on a sub-resource basis through
+ *   ::cuD3D9ResourceGetMappedArray(). This option is only valid for resources
+ *   of type ::IDirect3DSurface9 and subtypes of ::IDirect3DBaseTexture9.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA. The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Any resources allocated in ::D3DPOOL_SYSTEMMEM or ::D3DPOOL_MANAGED may
+ *   not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * If Direct3D interoperability is not initialized on this context, then
+ * ::CUDA_ERROR_INVALID_CONTEXT is returned. If \p pResource is of incorrect
+ * type (e.g. is a non-stand-alone ::IDirect3DSurface9) or is already
+ * registered, then ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource
+ * cannot be registered then ::CUDA_ERROR_UNKNOWN is returned.
+ *
+ * \param pResource - Resource to register for CUDA access
+ * \param Flags     - Flags for resource registration
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsD3D9RegisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9RegisterResource(IDirect3DResource9 *pResource, unsigned int Flags);
+
+/**
+ * \brief Unregister a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Unregisters the Direct3D resource \p pResource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p pResource is not registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned.
+ *
+ * \param pResource - Resource to unregister
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsUnregisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9UnregisterResource(IDirect3DResource9 *pResource);
+
+/**
+ * \brief Map Direct3D resources for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Maps the \p count Direct3D resources in \p ppResource for access by CUDA.
+ *
+ * The resources in \p ppResource may be accessed in CUDA kernels until they
+ * are unmapped. Direct3D should not access any resources while they are mapped
+ * by CUDA. If an application does so the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any Direct3D calls
+ * issued before ::cuD3D9MapResources() will complete before any CUDA kernels
+ * issued after ::cuD3D9MapResources() begin.
+ *
+ * If any of \p ppResource have not been registered for use with CUDA or if
+ * \p ppResource contains any duplicate entries, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned.  If any of \p ppResource are
+ * presently mapped for access by CUDA, then ::CUDA_ERROR_ALREADY_MAPPED is
+ * returned.
+ *
+ * \param count      - Number of resources in ppResource
+ * \param ppResource - Resources to map for CUDA usage
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsMapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9MapResources(unsigned int count, IDirect3DResource9 **ppResource);
+
+/**
+ * \brief Unmaps Direct3D resources
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Unmaps the \p count Direct3D resources in \p ppResource.
+ *
+ * This function provides the synchronization guarantee that any CUDA kernels
+ * issued before ::cuD3D9UnmapResources() will complete before any Direct3D
+ * calls issued after ::cuD3D9UnmapResources() begin.
+ *
+ * If any of \p ppResource have not been registered for use with CUDA or if
+ * \p ppResource contains any duplicate entries, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If any of \p ppResource are not
+ * presently mapped for access by CUDA, then ::CUDA_ERROR_NOT_MAPPED is
+ * returned.
+ *
+ * \param count      - Number of resources to unmap for CUDA
+ * \param ppResource - Resources to unmap for CUDA
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa
+ * ::cuGraphicsUnmapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9UnmapResources(unsigned int count, IDirect3DResource9 **ppResource);
+
+/**
+ * \brief Set usage flags for mapping a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0.
+ *
+ * Set \p Flags for mapping the Direct3D resource \p pResource.
+ *
+ * Changes to \p Flags will take effect the next time \p pResource is mapped.
+ * The \p Flags argument may be any of the following:
+ * - ::CU_D3D9_MAPRESOURCE_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA kernels. This is the default value.
+ * - ::CU_D3D9_MAPRESOURCE_FLAGS_READONLY: Specifies that CUDA kernels which
+ *   access this resource will not write to this resource.
+ * - ::CU_D3D9_MAPRESOURCE_FLAGS_WRITEDISCARD: Specifies that CUDA kernels
+ *   which access this resource will not read from this resource and will
+ *   write over the entire contents of the resource, so none of the data
+ *   previously stored in the resource will be preserved.
+ *
+ * If \p pResource has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is presently
+ * mapped for access by CUDA, then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ *
+ * \param pResource - Registered resource to set flags for
+ * \param Flags     - Parameters for resource mapping
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceSetMapFlags
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceSetMapFlags(IDirect3DResource9 *pResource, unsigned int Flags);
+
+/**
+ * \brief Get the dimensions of a registered surface
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pWidth, \p *pHeight, and \p *pDepth the dimensions of the
+ * subresource of the mapped Direct3D resource \p pResource, which corresponds
+ * to \p Face and \p Level.
+ *
+ * Because anti-aliased surfaces may have multiple samples per pixel, it is
+ * possible that the dimensions of a resource will be an integer factor larger
+ * than the dimensions reported by the Direct3D runtime.
+ *
+ * The parameters \p pWidth, \p pHeight, and \p pDepth are optional. For 2D
+ * surfaces, the value returned in \p *pDepth will be 0.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture9 or
+ * ::IDirect3DSurface9 or if \p pResource has not been registered for use with
+ * CUDA, then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ *
+ * For usage requirements of \p Face and \p Level parameters, see
+ * ::cuD3D9ResourceGetMappedPointer().
+ *
+ * \param pWidth    - Returned width of surface
+ * \param pHeight   - Returned height of surface
+ * \param pDepth    - Returned depth of surface
+ * \param pResource - Registered resource to access
+ * \param Face      - Face of resource to access
+ * \param Level     - Level of resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceGetSurfaceDimensions(size_t *pWidth, size_t *pHeight, size_t *pDepth, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+
+/**
+ * \brief Get an array through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pArray an array through which the subresource of the mapped
+ * Direct3D resource \p pResource which corresponds to \p Face and \p Level may
+ * be accessed. The value set in \p pArray may change every time that
+ * \p pResource is mapped.
+ *
+ * If \p pResource is not registered then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource was not registered with usage flags
+ * ::CU_D3D9_REGISTER_FLAGS_ARRAY then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource is not mapped then ::CUDA_ERROR_NOT_MAPPED is
+ * returned.
+ *
+ * For usage requirements of \p Face and \p Level parameters, see
+ * ::cuD3D9ResourceGetMappedPointer().
+ *
+ * \param pArray    - Returned array corresponding to subresource
+ * \param pResource - Mapped resource to access
+ * \param Face      - Face of resource to access
+ * \param Level     - Level of resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceGetMappedArray(CUarray *pArray, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+
+/**
+ * \brief Get the pointer through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pDevPtr the base pointer of the subresource of the mapped
+ * Direct3D resource \p pResource, which corresponds to \p Face and \p Level.
+ * The value set in \p pDevPtr may change every time that \p pResource is
+ * mapped.
+ *
+ * If \p pResource is not registered, then ::CUDA_ERROR_INVALID_HANDLE is
+ * returned. If \p pResource was not registered with usage flags
+ * ::CU_D3D9_REGISTER_FLAGS_NONE, then ::CUDA_ERROR_INVALID_HANDLE is returned.
+ * If \p pResource is not mapped, then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * If \p pResource is of type ::IDirect3DCubeTexture9, then \p Face must one
+ * of the values enumerated by type ::D3DCUBEMAP_FACES.  For all other types
+ * \p Face must be 0. If \p Face is invalid, then ::CUDA_ERROR_INVALID_VALUE
+ * is returned.
+ *
+ * If \p pResource is of type ::IDirect3DBaseTexture9, then \p Level must
+ * correspond to a valid mipmap level. At present only mipmap level 0 is
+ * supported. For all other types \p Level must be 0. If \p Level is invalid,
+ * then ::CUDA_ERROR_INVALID_VALUE is returned.
+ *
+ * \param pDevPtr     - Returned pointer corresponding to subresource
+ * \param pResource   - Mapped resource to access
+ * \param Face        - Face of resource to access
+ * \param Level       - Level of resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceGetMappedPointer
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceGetMappedPointer(CUdeviceptr *pDevPtr, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+
+/**
+ * \brief Get the size of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pSize the size of the subresource of the mapped Direct3D
+ * resource \p pResource, which corresponds to \p Face and \p Level. The value
+ * set in \p pSize may change every time that \p pResource is mapped.
+ *
+ * If \p pResource has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource was not registered
+ * with usage flags ::CU_D3D9_REGISTER_FLAGS_NONE, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is not mapped for
+ * access by CUDA, then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * For usage requirements of \p Face and \p Level parameters, see
+ * ::cuD3D9ResourceGetMappedPointer.
+ *
+ * \param pSize       - Returned size of subresource
+ * \param pResource   - Mapped resource to access
+ * \param Face        - Face of resource to access
+ * \param Level       - Level of resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceGetMappedPointer
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceGetMappedSize(size_t *pSize, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+
+/**
+ * \brief Get the pitch of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pPitch and \p *pPitchSlice the pitch and Z-slice pitch of
+ * the subresource of the mapped Direct3D resource \p pResource, which
+ * corresponds to \p Face and \p Level. The values set in \p pPitch and
+ * \p pPitchSlice may change every time that \p pResource is mapped.
+ *
+ * The pitch and Z-slice pitch values may be used to compute the location of a
+ * sample on a surface as follows.
+ *
+ * For a 2D surface, the byte offset of the sample at position \b x, \b y from
+ * the base pointer of the surface is:
+ *
+ * \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * For a 3D surface, the byte offset of the sample at position \b x, \b y,
+ * \b z from the base pointer of the surface is:
+ *
+ * \b z* \b slicePitch + \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * Both parameters \p pPitch and \p pPitchSlice are optional and may be set to
+ * NULL.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture9 or one of its
+ * sub-types or if \p pResource has not been registered for use with CUDA,
+ * then ::cudaErrorInvalidResourceHandle is returned. If \p pResource was not
+ * registered with usage flags ::CU_D3D9_REGISTER_FLAGS_NONE, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p pResource is not mapped
+ * for access by CUDA then ::CUDA_ERROR_NOT_MAPPED is returned.
+ *
+ * For usage requirements of \p Face and \p Level parameters, see
+ * ::cuD3D9ResourceGetMappedPointer().
+ *
+ * \param pPitch      - Returned pitch of subresource
+ * \param pPitchSlice - Returned Z-slice pitch of subresource
+ * \param pResource   - Mapped resource to access
+ * \param Face        - Face of resource to access
+ * \param Level       - Level of resource to access
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_NOT_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsSubResourceGetMappedArray
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9ResourceGetMappedPitch(size_t *pPitch, size_t *pPitchSlice, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+
+/* CUDA 1.x compatibility API. These functions are deprecated, please use the ones above. */
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9Begin(IDirect3DDevice9 *pDevice);
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9End(void);
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9RegisterVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9MapVertexBuffer(CUdeviceptr *pDevPtr, size_t *pSize, IDirect3DVertexBuffer9 *pVB);
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9UnmapVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+__CUDA_DEPRECATED CUresult CUDAAPI cuD3D9UnregisterVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+
+/** @} */ /* END CUDA_D3D9_DEPRECATED */
+/** @} */ /* END CUDA_D3D9 */
+
+
+/**
+ * CUDA API versioning support
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cuD3D9CtxCreate
+    #undef cuD3D9ResourceGetSurfaceDimensions
+    #undef cuD3D9ResourceGetMappedPointer
+    #undef cuD3D9ResourceGetMappedSize
+    #undef cuD3D9ResourceGetMappedPitch
+    #undef cuD3D9MapVertexBuffer
+
+    CUresult CUDAAPI cuD3D9CtxCreate(CUcontext *pCtx, CUdevice *pCudaDevice, unsigned int Flags, IDirect3DDevice9 *pD3DDevice);
+    CUresult CUDAAPI cuD3D9ResourceGetSurfaceDimensions(unsigned int *pWidth, unsigned int *pHeight, unsigned int *pDepth, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    CUresult CUDAAPI cuD3D9ResourceGetMappedPointer(CUdeviceptr_v1 *pDevPtr, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    CUresult CUDAAPI cuD3D9ResourceGetMappedSize(unsigned int *pSize, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    CUresult CUDAAPI cuD3D9ResourceGetMappedPitch(unsigned int *pPitch, unsigned int *pPitchSlice, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    CUresult CUDAAPI cuD3D9MapVertexBuffer(CUdeviceptr_v1 *pDevPtr, unsigned int *pSize, IDirect3DVertexBuffer9 *pVB);
+#endif /* __CUDA_API_VERSION_INTERNAL */
+
+#ifdef __cplusplus
+};
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif
+
diff --git a/ext/cudart/include/cudaD3D9Typedefs.h b/ext/cudart/include/cudaD3D9Typedefs.h
new file mode 100644
index 00000000..40bcdc60
--- /dev/null
+++ b/ext/cudart/include/cudaD3D9Typedefs.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAD3D9TYPEDEFS_H
+#define CUDAD3D9TYPEDEFS_H
+
+// Dependent includes for cudaD3D11.h
+#include <d3d9.h>
+
+#include <cudaD3D9.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cudaD3D9.h
+ */
+#define PFN_cuD3D9GetDevice  PFN_cuD3D9GetDevice_v2000
+#define PFN_cuD3D9GetDevices  PFN_cuD3D9GetDevices_v3020
+#define PFN_cuD3D9CtxCreate  PFN_cuD3D9CtxCreate_v3020
+#define PFN_cuD3D9CtxCreateOnDevice  PFN_cuD3D9CtxCreateOnDevice_v3020
+#define PFN_cuD3D9GetDirect3DDevice  PFN_cuD3D9GetDirect3DDevice_v2000
+#define PFN_cuGraphicsD3D9RegisterResource  PFN_cuGraphicsD3D9RegisterResource_v3000
+#define PFN_cuD3D9RegisterResource  PFN_cuD3D9RegisterResource_v2000
+#define PFN_cuD3D9UnregisterResource  PFN_cuD3D9UnregisterResource_v2000
+#define PFN_cuD3D9MapResources  PFN_cuD3D9MapResources_v2000
+#define PFN_cuD3D9UnmapResources  PFN_cuD3D9UnmapResources_v2000
+#define PFN_cuD3D9ResourceSetMapFlags  PFN_cuD3D9ResourceSetMapFlags_v2000
+#define PFN_cuD3D9ResourceGetSurfaceDimensions  PFN_cuD3D9ResourceGetSurfaceDimensions_v3020
+#define PFN_cuD3D9ResourceGetMappedArray  PFN_cuD3D9ResourceGetMappedArray_v2010
+#define PFN_cuD3D9ResourceGetMappedPointer  PFN_cuD3D9ResourceGetMappedPointer_v3020
+#define PFN_cuD3D9ResourceGetMappedSize  PFN_cuD3D9ResourceGetMappedSize_v3020
+#define PFN_cuD3D9ResourceGetMappedPitch  PFN_cuD3D9ResourceGetMappedPitch_v3020
+#define PFN_cuD3D9Begin  PFN_cuD3D9Begin_v2000
+#define PFN_cuD3D9End  PFN_cuD3D9End_v2000
+#define PFN_cuD3D9RegisterVertexBuffer  PFN_cuD3D9RegisterVertexBuffer_v2000
+#define PFN_cuD3D9MapVertexBuffer  PFN_cuD3D9MapVertexBuffer_v3020
+#define PFN_cuD3D9UnmapVertexBuffer  PFN_cuD3D9UnmapVertexBuffer_v2000
+#define PFN_cuD3D9UnregisterVertexBuffer  PFN_cuD3D9UnregisterVertexBuffer_v2000
+
+
+/**
+ * Type definitions for functions defined in cudaD3D9.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuD3D9GetDevice_v2000)(CUdevice_v1 *pCudaDevice, const char *pszAdapterName);
+typedef CUresult (CUDAAPI *PFN_cuD3D9GetDevices_v3020)(unsigned int *pCudaDeviceCount, CUdevice_v1 *pCudaDevices, unsigned int cudaDeviceCount, IDirect3DDevice9 *pD3D9Device, CUd3d9DeviceList deviceList);
+typedef CUresult (CUDAAPI *PFN_cuD3D9CtxCreate_v3020)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, IDirect3DDevice9 *pD3DDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D9CtxCreateOnDevice_v3020)(CUcontext *pCtx, unsigned int flags, IDirect3DDevice9 *pD3DDevice, CUdevice_v1 cudaDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D9GetDirect3DDevice_v2000)(IDirect3DDevice9 **ppD3DDevice);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsD3D9RegisterResource_v3000)(CUgraphicsResource *pCudaResource, IDirect3DResource9 *pD3DResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D9RegisterResource_v2000)(IDirect3DResource9 *pResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D9UnregisterResource_v2000)(IDirect3DResource9 *pResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D9MapResources_v2000)(unsigned int count, IDirect3DResource9 **ppResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D9UnmapResources_v2000)(unsigned int count, IDirect3DResource9 **ppResource);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceSetMapFlags_v2000)(IDirect3DResource9 *pResource, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetSurfaceDimensions_v3020)(size_t *pWidth, size_t *pHeight, size_t *pDepth, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedArray_v2010)(CUarray *pArray, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedPointer_v3020)(CUdeviceptr_v2 *pDevPtr, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedSize_v3020)(size_t *pSize, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedPitch_v3020)(size_t *pPitch, size_t *pPitchSlice, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+typedef CUresult (CUDAAPI *PFN_cuD3D9Begin_v2000)(IDirect3DDevice9 *pDevice);
+typedef CUresult (CUDAAPI *PFN_cuD3D9End_v2000)(void);
+typedef CUresult (CUDAAPI *PFN_cuD3D9RegisterVertexBuffer_v2000)(IDirect3DVertexBuffer9 *pVB);
+typedef CUresult (CUDAAPI *PFN_cuD3D9MapVertexBuffer_v3020)(CUdeviceptr_v2 *pDevPtr, size_t *pSize, IDirect3DVertexBuffer9 *pVB);
+typedef CUresult (CUDAAPI *PFN_cuD3D9UnmapVertexBuffer_v2000)(IDirect3DVertexBuffer9 *pVB);
+typedef CUresult (CUDAAPI *PFN_cuD3D9UnregisterVertexBuffer_v2000)(IDirect3DVertexBuffer9 *pVB);
+
+/*
+ * Type definitions for older versioned functions in cudaD3D9.h
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    typedef CUresult (CUDAAPI *PFN_cuD3D9CtxCreate_v2000)(CUcontext *pCtx, CUdevice_v1 *pCudaDevice, unsigned int Flags, IDirect3DDevice9 *pD3DDevice);
+    typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetSurfaceDimensions_v2000)(unsigned int *pWidth, unsigned int *pHeight, unsigned int *pDepth, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedPointer_v2000)(CUdeviceptr_v1 *pDevPtr, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedSize_v2000)(unsigned int *pSize, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    typedef CUresult (CUDAAPI *PFN_cuD3D9ResourceGetMappedPitch_v2000)(unsigned int *pPitch, unsigned int *pPitchSlice, IDirect3DResource9 *pResource, unsigned int Face, unsigned int Level);
+    typedef CUresult (CUDAAPI *PFN_cuD3D9MapVertexBuffer_v2000)(CUdeviceptr_v1 *pDevPtr, unsigned int *pSize, IDirect3DVertexBuffer9 *pVB);
+#endif
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cudaGL.h b/ext/cudart/include/cudaGL.h
new file mode 100644
index 00000000..21e972ae
--- /dev/null
+++ b/ext/cudart/include/cudaGL.h
@@ -0,0 +1,605 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAGL_H
+#define CUDAGL_H
+
+#include <cuda.h>
+#include <GL/gl.h>
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+
+#ifdef CUDA_FORCE_API_VERSION
+#error "CUDA_FORCE_API_VERSION is no longer supported."
+#endif
+
+#if defined(__CUDA_API_VERSION_INTERNAL) || defined(CUDA_API_PER_THREAD_DEFAULT_STREAM)
+    #define __CUDA_API_PER_THREAD_DEFAULT_STREAM
+    #define __CUDA_API_PTDS(api) api ## _ptds
+    #define __CUDA_API_PTSZ(api) api ## _ptsz
+#else
+    #define __CUDA_API_PTDS(api) api
+    #define __CUDA_API_PTSZ(api) api
+#endif
+
+#define cuGLCtxCreate            cuGLCtxCreate_v2
+#define cuGLMapBufferObject      __CUDA_API_PTDS(cuGLMapBufferObject_v2)
+#define cuGLMapBufferObjectAsync __CUDA_API_PTSZ(cuGLMapBufferObjectAsync_v2)
+#define cuGLGetDevices           cuGLGetDevices_v2
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * \file cudaGL.h
+ * \brief Header file for the OpenGL interoperability functions of the
+ * low-level CUDA driver application programming interface.
+ */
+
+/**
+ * \defgroup CUDA_GL OpenGL Interoperability
+ * \ingroup CUDA_DRIVER
+ *
+ * ___MANBRIEF___ OpenGL interoperability functions of the low-level CUDA
+ * driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the OpenGL interoperability functions of the
+ * low-level CUDA driver application programming interface. Note that mapping 
+ * of OpenGL resources is performed with the graphics API agnostic, resource 
+ * mapping interface described in \ref CUDA_GRAPHICS "Graphics Interoperability".
+ *
+ * @{
+ */
+
+#if defined(_WIN32)
+#if !defined(WGL_NV_gpu_affinity)
+typedef void* HGPUNV;
+#endif
+#endif /* _WIN32 */
+
+/**
+ * \brief Registers an OpenGL buffer object
+ *
+ * Registers the buffer object specified by \p buffer for access by
+ * CUDA.  A handle to the registered object is returned as \p
+ * pCudaResource.  The register flags \p Flags specify the intended usage,
+ * as follows:
+ *
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA. This is the default value.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY: Specifies that CUDA
+ *   will not write to this resource.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD: Specifies that
+ *   CUDA will not read from this resource and will write over the
+ *   entire contents of the resource, so none of the data previously
+ *   stored in the resource will be preserved.
+ *
+ * \param pCudaResource - Pointer to the returned object handle
+ * \param buffer - name of buffer object to be registered
+ * \param Flags - Register flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * \notefnerr
+ *
+ * \sa 
+ * ::cuGraphicsUnregisterResource,
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsGLRegisterBuffer
+ */
+CUresult CUDAAPI cuGraphicsGLRegisterBuffer(CUgraphicsResource *pCudaResource, GLuint buffer, unsigned int Flags);
+
+/**
+ * \brief Register an OpenGL texture or renderbuffer object
+ *
+ * Registers the texture or renderbuffer object specified by \p image for access by CUDA.  
+ * A handle to the registered object is returned as \p pCudaResource.  
+ *
+ * \p target must match the type of the object, and must be one of ::GL_TEXTURE_2D, 
+ * ::GL_TEXTURE_RECTANGLE, ::GL_TEXTURE_CUBE_MAP, ::GL_TEXTURE_3D, ::GL_TEXTURE_2D_ARRAY, 
+ * or ::GL_RENDERBUFFER.
+ *
+ * The register flags \p Flags specify the intended usage, as follows:
+ *
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA. This is the default value.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_READ_ONLY: Specifies that CUDA
+ *   will not write to this resource.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_WRITE_DISCARD: Specifies that
+ *   CUDA will not read from this resource and will write over the
+ *   entire contents of the resource, so none of the data previously
+ *   stored in the resource will be preserved.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_SURFACE_LDST: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::CU_GRAPHICS_REGISTER_FLAGS_TEXTURE_GATHER: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * The following image formats are supported. For brevity's sake, the list is abbreviated.
+ * For ex., {GL_R, GL_RG} X {8, 16} would expand to the following 4 formats 
+ * {GL_R8, GL_R16, GL_RG8, GL_RG16} :
+ * - GL_RED, GL_RG, GL_RGBA, GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY
+ * - {GL_R, GL_RG, GL_RGBA} X {8, 16, 16F, 32F, 8UI, 16UI, 32UI, 8I, 16I, 32I}
+ * - {GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY} X
+ * {8, 16, 16F_ARB, 32F_ARB, 8UI_EXT, 16UI_EXT, 32UI_EXT, 8I_EXT, 16I_EXT, 32I_EXT}
+ *
+ * The following image classes are currently disallowed:
+ * - Textures with borders
+ * - Multisampled renderbuffers
+ *
+ * \param pCudaResource - Pointer to the returned object handle
+ * \param image - name of texture or renderbuffer object to be registered
+ * \param target - Identifies the type of object specified by \p image
+ * \param Flags - Register flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * \notefnerr
+ *
+ * \sa 
+ * ::cuGraphicsUnregisterResource,
+ * ::cuGraphicsMapResources,
+ * ::cuGraphicsSubResourceGetMappedArray,
+ * ::cudaGraphicsGLRegisterImage
+ */
+CUresult CUDAAPI cuGraphicsGLRegisterImage(CUgraphicsResource *pCudaResource, GLuint image, GLenum target, unsigned int Flags);
+
+#ifdef _WIN32
+/**
+ * \brief Gets the CUDA device associated with hGpu
+ *
+ * Returns in \p *pDevice the CUDA device associated with a \p hGpu, if
+ * applicable.
+ *
+ * \param pDevice - Device associated with hGpu
+ * \param hGpu    - Handle to a GPU, as queried via ::WGL_NV_gpu_affinity()
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuGLMapBufferObject,
+ * ::cuGLRegisterBufferObject, ::cuGLUnmapBufferObject,
+ * ::cuGLUnregisterBufferObject, ::cuGLUnmapBufferObjectAsync,
+ * ::cuGLSetBufferObjectMapFlags,
+ * ::cudaWGLGetDevice
+ */
+CUresult CUDAAPI cuWGLGetDevice(CUdevice *pDevice, HGPUNV hGpu);
+#endif /* _WIN32 */
+
+/**
+ * CUDA devices corresponding to an OpenGL device
+ */
+typedef enum CUGLDeviceList_enum {
+    CU_GL_DEVICE_LIST_ALL            = 0x01, /**< The CUDA devices for all GPUs used by the current OpenGL context */
+    CU_GL_DEVICE_LIST_CURRENT_FRAME  = 0x02, /**< The CUDA devices for the GPUs used by the current OpenGL context in its currently rendering frame */
+    CU_GL_DEVICE_LIST_NEXT_FRAME     = 0x03, /**< The CUDA devices for the GPUs to be used by the current OpenGL context in the next frame */
+} CUGLDeviceList;
+
+/**
+ * \brief Gets the CUDA devices associated with the current OpenGL context
+ *
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices 
+ * corresponding to the current OpenGL context. Also returns in \p *pCudaDevices 
+ * at most cudaDeviceCount of the CUDA-compatible devices corresponding to 
+ * the current OpenGL context. If any of the GPUs being used by the current OpenGL
+ * context are not CUDA capable then the call will return CUDA_ERROR_NO_DEVICE.
+ *
+ * The \p deviceList argument may be any of the following:
+ * - ::CU_GL_DEVICE_LIST_ALL: Query all devices used by the current OpenGL context.
+ * - ::CU_GL_DEVICE_LIST_CURRENT_FRAME: Query the devices used by the current OpenGL context to
+ *   render the current frame (in SLI).
+ * - ::CU_GL_DEVICE_LIST_NEXT_FRAME: Query the devices used by the current OpenGL context to
+ *   render the next frame (in SLI). Note that this is a prediction, it can't be guaranteed that
+ *   this is correct in all cases.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices.
+ * \param pCudaDevices     - Returned CUDA devices.
+ * \param cudaDeviceCount  - The size of the output device array pCudaDevices.
+ * \param deviceList       - The set of devices to return.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NO_DEVICE,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_GRAPHICS_CONTEXT
+ *
+ * \notefnerr
+ *
+ * \sa
+ * ::cuWGLGetDevice,
+ * ::cudaGLGetDevices
+ */
+CUresult CUDAAPI cuGLGetDevices(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, unsigned int cudaDeviceCount, CUGLDeviceList deviceList);
+
+/**
+ * \defgroup CUDA_GL_DEPRECATED OpenGL Interoperability [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated OpenGL interoperability functions of the low-level
+ * CUDA driver API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated OpenGL interoperability functionality.
+ *
+ * @{
+ */
+
+/** Flags to map or unmap a resource */
+typedef enum CUGLmap_flags_enum {
+    CU_GL_MAP_RESOURCE_FLAGS_NONE          = 0x00,
+    CU_GL_MAP_RESOURCE_FLAGS_READ_ONLY     = 0x01,
+    CU_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD = 0x02,    
+} CUGLmap_flags;
+
+/**
+ * \brief Create a CUDA context for interoperability with OpenGL
+ *
+ * \deprecated This function is deprecated as of Cuda 5.0. 
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA context with an OpenGL
+ * context in order to achieve maximum interoperability performance.
+ *
+ * \param pCtx   - Returned CUDA context
+ * \param Flags  - Options for CUDA context creation
+ * \param device - Device on which to create the context
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ * \notefnerr
+ *
+ * \sa ::cuCtxCreate, ::cuGLInit, ::cuGLMapBufferObject,
+ * ::cuGLRegisterBufferObject, ::cuGLUnmapBufferObject,
+ * ::cuGLUnregisterBufferObject, ::cuGLMapBufferObjectAsync,
+ * ::cuGLUnmapBufferObjectAsync, ::cuGLSetBufferObjectMapFlags,
+ * ::cuWGLGetDevice
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLCtxCreate(CUcontext *pCtx, unsigned int Flags, CUdevice device );
+
+/**
+ * \brief Initializes OpenGL interoperability
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Initializes OpenGL interoperability. This function is deprecated
+ * and calling it is no longer required. It may fail if the needed
+ * OpenGL driver facilities are not available.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_UNKNOWN
+ * \notefnerr
+ *
+ * \sa ::cuGLMapBufferObject,
+ * ::cuGLRegisterBufferObject, ::cuGLUnmapBufferObject,
+ * ::cuGLUnregisterBufferObject, ::cuGLMapBufferObjectAsync,
+ * ::cuGLUnmapBufferObjectAsync, ::cuGLSetBufferObjectMapFlags,
+ * ::cuWGLGetDevice
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLInit(void);
+
+/**
+ * \brief Registers an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Registers the buffer object specified by \p buffer for access by
+ * CUDA. This function must be called before CUDA can map the buffer
+ * object.  There must be a valid OpenGL context bound to the current
+ * thread when this function is called, and the buffer name is
+ * resolved by that context.
+ *
+ * \param buffer - The name of the buffer object to register.
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_ALREADY_MAPPED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsGLRegisterBuffer
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLRegisterBufferObject(GLuint buffer);
+
+/**
+ * \brief Maps an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Maps the buffer object specified by \p buffer into the address space of the
+ * current CUDA context and returns in \p *dptr and \p *size the base pointer
+ * and size of the resulting mapping.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * All streams in the current CUDA context are synchronized with the
+ * current GL context.
+ *
+ * \param dptr   - Returned mapped base pointer
+ * \param size   - Returned size of mapping
+ * \param buffer - The name of the buffer object to map
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_MAP_FAILED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsMapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLMapBufferObject(CUdeviceptr *dptr, size_t *size,  GLuint buffer);  
+
+/**
+ * \brief Unmaps an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Unmaps the buffer object specified by \p buffer for access by CUDA.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * All streams in the current CUDA context are synchronized with the
+ * current GL context.
+ *
+ * \param buffer - Buffer object to unmap
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsUnmapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLUnmapBufferObject(GLuint buffer);
+
+/**
+ * \brief Unregister an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Unregisters the buffer object specified by \p buffer.  This
+ * releases any resources associated with the registered buffer.
+ * After this call, the buffer may no longer be mapped for access by
+ * CUDA.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * \param buffer - Name of the buffer object to unregister
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsUnregisterResource
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLUnregisterBufferObject(GLuint buffer);
+
+/**
+ * \brief Set the map flags for an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Sets the map flags for the buffer object specified by \p buffer.
+ *
+ * Changes to \p Flags will take effect the next time \p buffer is mapped.
+ * The \p Flags argument may be any of the following:
+ * - ::CU_GL_MAP_RESOURCE_FLAGS_NONE: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA kernels. This is the default value.
+ * - ::CU_GL_MAP_RESOURCE_FLAGS_READ_ONLY: Specifies that CUDA kernels which
+ *   access this resource will not write to this resource.
+ * - ::CU_GL_MAP_RESOURCE_FLAGS_WRITE_DISCARD: Specifies that CUDA kernels
+ *   which access this resource will not read from this resource and will
+ *   write over the entire contents of the resource, so none of the data
+ *   previously stored in the resource will be preserved.
+ *
+ * If \p buffer has not been registered for use with CUDA, then
+ * ::CUDA_ERROR_INVALID_HANDLE is returned. If \p buffer is presently
+ * mapped for access by CUDA, then ::CUDA_ERROR_ALREADY_MAPPED is returned.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * \param buffer - Buffer object to unmap
+ * \param Flags  - Map flags
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_HANDLE,
+ * ::CUDA_ERROR_ALREADY_MAPPED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsResourceSetMapFlags
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLSetBufferObjectMapFlags(GLuint buffer, unsigned int Flags);
+
+/**
+ * \brief Maps an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Maps the buffer object specified by \p buffer into the address space of the
+ * current CUDA context and returns in \p *dptr and \p *size the base pointer
+ * and size of the resulting mapping.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * Stream \p hStream in the current CUDA context is synchronized with
+ * the current GL context.
+ *
+ * \param dptr    - Returned mapped base pointer
+ * \param size    - Returned size of mapping
+ * \param buffer  - The name of the buffer object to map
+ * \param hStream - Stream to synchronize
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_MAP_FAILED
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsMapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLMapBufferObjectAsync(CUdeviceptr *dptr, size_t *size,  GLuint buffer, CUstream hStream);
+
+/**
+ * \brief Unmaps an OpenGL buffer object
+ *
+ * \deprecated This function is deprecated as of Cuda 3.0. 
+ *
+ * Unmaps the buffer object specified by \p buffer for access by CUDA.
+ *
+ * There must be a valid OpenGL context bound to the current thread
+ * when this function is called.  This must be the same context, or a
+ * member of the same shareGroup, as the context that was bound when
+ * the buffer was registered.
+ *
+ * Stream \p hStream in the current CUDA context is synchronized with
+ * the current GL context.
+ *
+ * \param buffer  - Name of the buffer object to unmap
+ * \param hStream - Stream to synchronize
+ *
+ * \return
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_DEINITIALIZED,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_INVALID_CONTEXT,
+ * ::CUDA_ERROR_INVALID_VALUE
+ * \notefnerr
+ *
+ * \sa ::cuGraphicsUnmapResources
+ */
+__CUDA_DEPRECATED CUresult CUDAAPI cuGLUnmapBufferObjectAsync(GLuint buffer, CUstream hStream);
+
+/** @} */ /* END CUDA_GL_DEPRECATED */
+/** @} */ /* END CUDA_GL */
+
+
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cuGLCtxCreate
+    #undef cuGLMapBufferObject
+    #undef cuGLMapBufferObjectAsync
+    #undef cuGLGetDevices
+
+    CUresult CUDAAPI cuGLGetDevices(unsigned int *pCudaDeviceCount, CUdevice *pCudaDevices, unsigned int cudaDeviceCount, CUGLDeviceList deviceList);
+    CUresult CUDAAPI cuGLMapBufferObject_v2(CUdeviceptr *dptr, size_t *size,  GLuint buffer);
+    CUresult CUDAAPI cuGLMapBufferObjectAsync_v2(CUdeviceptr *dptr, size_t *size,  GLuint buffer, CUstream hStream);
+    CUresult CUDAAPI cuGLCtxCreate(CUcontext *pCtx, unsigned int Flags, CUdevice device );
+    CUresult CUDAAPI cuGLMapBufferObject(CUdeviceptr_v1 *dptr, unsigned int *size,  GLuint buffer);
+    CUresult CUDAAPI cuGLMapBufferObjectAsync(CUdeviceptr_v1 *dptr, unsigned int *size,  GLuint buffer, CUstream hStream);
+#endif /* __CUDA_API_VERSION_INTERNAL */
+
+#ifdef __cplusplus
+};
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif
diff --git a/ext/cudart/include/cudaGLTypedefs.h b/ext/cudart/include/cudaGLTypedefs.h
new file mode 100644
index 00000000..81f0d534
--- /dev/null
+++ b/ext/cudart/include/cudaGLTypedefs.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAGLTYPEDEFS_H
+#define CUDAGLTYPEDEFS_H
+
+// Dependent includes for cudagl.h
+#include <GL/gl.h>
+
+#include <cudaGL.h>
+
+#if defined(CUDA_API_PER_THREAD_DEFAULT_STREAM)
+    #define __API_TYPEDEF_PTDS(api, default_version, ptds_version) api ## _v ## ptds_version ## _ptds
+    #define __API_TYPEDEF_PTSZ(api, default_version, ptds_version) api ## _v ## ptds_version ## _ptsz
+#else
+    #define __API_TYPEDEF_PTDS(api, default_version, ptds_version) api ## _v ## default_version
+    #define __API_TYPEDEF_PTSZ(api, default_version, ptds_version) api ## _v ## default_version
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cudaGL.h
+ */
+#define PFN_cuGraphicsGLRegisterBuffer  PFN_cuGraphicsGLRegisterBuffer_v3000
+#define PFN_cuGraphicsGLRegisterImage  PFN_cuGraphicsGLRegisterImage_v3000
+#define PFN_cuWGLGetDevice  PFN_cuWGLGetDevice_v2020
+#define PFN_cuGLGetDevices  PFN_cuGLGetDevices_v6050
+#define PFN_cuGLCtxCreate  PFN_cuGLCtxCreate_v3020
+#define PFN_cuGLInit  PFN_cuGLInit_v2000
+#define PFN_cuGLRegisterBufferObject  PFN_cuGLRegisterBufferObject_v2000
+#define PFN_cuGLMapBufferObject  __API_TYPEDEF_PTDS(PFN_cuGLMapBufferObject, 3020, 7000)
+#define PFN_cuGLUnmapBufferObject  PFN_cuGLUnmapBufferObject_v2000
+#define PFN_cuGLUnregisterBufferObject  PFN_cuGLUnregisterBufferObject_v2000
+#define PFN_cuGLSetBufferObjectMapFlags  PFN_cuGLSetBufferObjectMapFlags_v2030
+#define PFN_cuGLMapBufferObjectAsync  __API_TYPEDEF_PTSZ(PFN_cuGLMapBufferObjectAsync, 3020, 7000)
+#define PFN_cuGLUnmapBufferObjectAsync  PFN_cuGLUnmapBufferObjectAsync_v2030
+
+
+/**
+ * Type definitions for functions defined in cudaGL.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuGraphicsGLRegisterBuffer_v3000)(CUgraphicsResource *pCudaResource, GLuint buffer, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsGLRegisterImage_v3000)(CUgraphicsResource *pCudaResource, GLuint image, GLenum target, unsigned int Flags);
+#ifdef _WIN32
+typedef CUresult (CUDAAPI *PFN_cuWGLGetDevice_v2020)(CUdevice_v1 *pDevice, HGPUNV hGpu);
+#endif
+typedef CUresult (CUDAAPI *PFN_cuGLGetDevices_v6050)(unsigned int *pCudaDeviceCount, CUdevice_v1 *pCudaDevices, unsigned int cudaDeviceCount, CUGLDeviceList deviceList);
+typedef CUresult (CUDAAPI *PFN_cuGLCtxCreate_v3020)(CUcontext *pCtx, unsigned int Flags, CUdevice_v1 device);
+typedef CUresult (CUDAAPI *PFN_cuGLInit_v2000)(void);
+typedef CUresult (CUDAAPI *PFN_cuGLRegisterBufferObject_v2000)(GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObject_v7000_ptds)(CUdeviceptr_v2 *dptr, size_t *size, GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLUnmapBufferObject_v2000)(GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLUnregisterBufferObject_v2000)(GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLSetBufferObjectMapFlags_v2030)(GLuint buffer, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObjectAsync_v7000_ptsz)(CUdeviceptr_v2 *dptr, size_t *size, GLuint buffer, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGLUnmapBufferObjectAsync_v2030)(GLuint buffer, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObject_v3020)(CUdeviceptr_v2 *dptr, size_t *size, GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObjectAsync_v3020)(CUdeviceptr_v2 *dptr, size_t *size, GLuint buffer, CUstream hStream);
+
+/*
+ * Type definitions for older versioned functions in cuda.h
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+typedef CUresult (CUDAAPI *PFN_cuGLGetDevices_v4010)(unsigned int *pCudaDeviceCount, CUdevice_v1 *pCudaDevices, unsigned int cudaDeviceCount, CUGLDeviceList deviceList);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObject_v2000)(CUdeviceptr_v1 *dptr, unsigned int *size, GLuint buffer);
+typedef CUresult (CUDAAPI *PFN_cuGLMapBufferObjectAsync_v2030)(CUdeviceptr_v1 *dptr, unsigned int *size, GLuint buffer, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGLCtxCreate_v2000)(CUcontext *pCtx, unsigned int Flags, CUdevice_v1 device);
+#endif
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cudaProfilerTypedefs.h b/ext/cudart/include/cudaProfilerTypedefs.h
new file mode 100644
index 00000000..bea7df45
--- /dev/null
+++ b/ext/cudart/include/cudaProfilerTypedefs.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDAPROFILERTYPEDEFS_H
+#define CUDAPROFILERTYPEDEFS_H
+
+#include <cudaProfiler.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cudaProfiler.h
+ */
+#define PFN_cuProfilerInitialize  PFN_cuProfilerInitialize_v4000
+#define PFN_cuProfilerStart  PFN_cuProfilerStart_v4000
+#define PFN_cuProfilerStop  PFN_cuProfilerStop_v4000
+
+
+/**
+ * Type definitions for functions defined in cudaProfiler.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuProfilerInitialize_v4000)(const char *configFile, const char *outputFile, CUoutput_mode outputMode);
+typedef CUresult (CUDAAPI *PFN_cuProfilerStart_v4000)(void);
+typedef CUresult (CUDAAPI *PFN_cuProfilerStop_v4000)(void);
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cudaTypedefs.h b/ext/cudart/include/cudaTypedefs.h
new file mode 100644
index 00000000..3ab767ef
--- /dev/null
+++ b/ext/cudart/include/cudaTypedefs.h
@@ -0,0 +1,959 @@
+/*
+ * Copyright 2020-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef CUDATYPEDEFS_H
+#define CUDATYPEDEFS_H
+
+#include <cuda.h>
+
+#if defined(CUDA_API_PER_THREAD_DEFAULT_STREAM)
+    #define __API_TYPEDEF_PTDS(api, default_version, ptds_version) api ## _v ## ptds_version ## _ptds
+    #define __API_TYPEDEF_PTSZ(api, default_version, ptds_version) api ## _v ## ptds_version ## _ptsz
+#else
+    #define __API_TYPEDEF_PTDS(api, default_version, ptds_version) api ## _v ## default_version
+    #define __API_TYPEDEF_PTSZ(api, default_version, ptds_version) api ## _v ## default_version
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+/*
+ * Macros for the latest version for each driver function in cuda.h
+ */
+#define PFN_cuGetErrorString  PFN_cuGetErrorString_v6000
+#define PFN_cuGetErrorName  PFN_cuGetErrorName_v6000
+#define PFN_cuInit  PFN_cuInit_v2000
+#define PFN_cuDriverGetVersion  PFN_cuDriverGetVersion_v2020
+#define PFN_cuDeviceGet  PFN_cuDeviceGet_v2000
+#define PFN_cuDeviceGetCount  PFN_cuDeviceGetCount_v2000
+#define PFN_cuDeviceGetName  PFN_cuDeviceGetName_v2000
+#define PFN_cuDeviceGetUuid  PFN_cuDeviceGetUuid_v11040
+#define PFN_cuDeviceGetLuid  PFN_cuDeviceGetLuid_v10000
+#define PFN_cuDeviceTotalMem  PFN_cuDeviceTotalMem_v3020
+#define PFN_cuDeviceGetTexture1DLinearMaxWidth  PFN_cuDeviceGetTexture1DLinearMaxWidth_v11010
+#define PFN_cuDeviceGetAttribute  PFN_cuDeviceGetAttribute_v2000
+#define PFN_cuDeviceGetNvSciSyncAttributes  PFN_cuDeviceGetNvSciSyncAttributes_v10020
+#define PFN_cuDeviceSetMemPool  PFN_cuDeviceSetMemPool_v11020
+#define PFN_cuDeviceGetMemPool  PFN_cuDeviceGetMemPool_v11020
+#define PFN_cuDeviceGetDefaultMemPool  PFN_cuDeviceGetDefaultMemPool_v11020
+#define PFN_cuDeviceGetProperties  PFN_cuDeviceGetProperties_v2000
+#define PFN_cuDeviceComputeCapability  PFN_cuDeviceComputeCapability_v2000
+#define PFN_cuDevicePrimaryCtxRetain  PFN_cuDevicePrimaryCtxRetain_v7000
+#define PFN_cuDevicePrimaryCtxRelease  PFN_cuDevicePrimaryCtxRelease_v11000
+#define PFN_cuDevicePrimaryCtxSetFlags  PFN_cuDevicePrimaryCtxSetFlags_v11000
+#define PFN_cuDevicePrimaryCtxGetState  PFN_cuDevicePrimaryCtxGetState_v7000
+#define PFN_cuDevicePrimaryCtxReset  PFN_cuDevicePrimaryCtxReset_v11000
+#define PFN_cuDeviceGetExecAffinitySupport  PFN_cuDeviceGetExecAffinitySupport_v11040
+#define PFN_cuCtxCreate  PFN_cuCtxCreate_v11040
+#define PFN_cuCtxDestroy  PFN_cuCtxDestroy_v4000
+#define PFN_cuCtxPushCurrent  PFN_cuCtxPushCurrent_v4000
+#define PFN_cuCtxPopCurrent  PFN_cuCtxPopCurrent_v4000
+#define PFN_cuCtxSetCurrent  PFN_cuCtxSetCurrent_v4000
+#define PFN_cuCtxGetCurrent  PFN_cuCtxGetCurrent_v4000
+#define PFN_cuCtxGetDevice  PFN_cuCtxGetDevice_v2000
+#define PFN_cuCtxGetFlags  PFN_cuCtxGetFlags_v7000
+#define PFN_cuCtxSynchronize  PFN_cuCtxSynchronize_v2000
+#define PFN_cuCtxSetLimit  PFN_cuCtxSetLimit_v3010
+#define PFN_cuCtxGetLimit  PFN_cuCtxGetLimit_v3010
+#define PFN_cuCtxGetCacheConfig  PFN_cuCtxGetCacheConfig_v3020
+#define PFN_cuCtxSetCacheConfig  PFN_cuCtxSetCacheConfig_v3020
+#define PFN_cuCtxGetSharedMemConfig  PFN_cuCtxGetSharedMemConfig_v4020
+#define PFN_cuCtxSetSharedMemConfig  PFN_cuCtxSetSharedMemConfig_v4020
+#define PFN_cuCtxGetApiVersion  PFN_cuCtxGetApiVersion_v3020
+#define PFN_cuCtxGetStreamPriorityRange  PFN_cuCtxGetStreamPriorityRange_v5050
+#define PFN_cuCtxResetPersistingL2Cache  PFN_cuCtxResetPersistingL2Cache_v11000
+#define PFN_cuCtxAttach  PFN_cuCtxAttach_v2000
+#define PFN_cuCtxDetach  PFN_cuCtxDetach_v2000
+#define PFN_cuCtxGetExecAffinity  PFN_cuCtxGetExecAffinity_v11040
+#define PFN_cuModuleLoad  PFN_cuModuleLoad_v2000
+#define PFN_cuModuleLoadData  PFN_cuModuleLoadData_v2000
+#define PFN_cuModuleLoadDataEx  PFN_cuModuleLoadDataEx_v2010
+#define PFN_cuModuleLoadFatBinary  PFN_cuModuleLoadFatBinary_v2000
+#define PFN_cuModuleUnload  PFN_cuModuleUnload_v2000
+#define PFN_cuModuleGetFunction  PFN_cuModuleGetFunction_v2000
+#define PFN_cuModuleGetGlobal  PFN_cuModuleGetGlobal_v3020
+#define PFN_cuModuleGetTexRef  PFN_cuModuleGetTexRef_v2000
+#define PFN_cuModuleGetSurfRef  PFN_cuModuleGetSurfRef_v3000
+#define PFN_cuLinkCreate  PFN_cuLinkCreate_v6050
+#define PFN_cuLinkAddData  PFN_cuLinkAddData_v6050
+#define PFN_cuLinkAddFile  PFN_cuLinkAddFile_v6050
+#define PFN_cuLinkComplete  PFN_cuLinkComplete_v5050
+#define PFN_cuLinkDestroy  PFN_cuLinkDestroy_v5050
+#define PFN_cuMemGetInfo  PFN_cuMemGetInfo_v3020
+#define PFN_cuMemAlloc  PFN_cuMemAlloc_v3020
+#define PFN_cuMemAllocPitch  PFN_cuMemAllocPitch_v3020
+#define PFN_cuMemFree  PFN_cuMemFree_v3020
+#define PFN_cuMemGetAddressRange  PFN_cuMemGetAddressRange_v3020
+#define PFN_cuMemAllocHost  PFN_cuMemAllocHost_v3020
+#define PFN_cuMemFreeHost  PFN_cuMemFreeHost_v2000
+#define PFN_cuMemHostAlloc  PFN_cuMemHostAlloc_v2020
+#define PFN_cuMemHostGetDevicePointer  PFN_cuMemHostGetDevicePointer_v3020
+#define PFN_cuMemHostGetFlags  PFN_cuMemHostGetFlags_v2030
+#define PFN_cuMemAllocManaged  PFN_cuMemAllocManaged_v6000
+#define PFN_cuDeviceGetByPCIBusId  PFN_cuDeviceGetByPCIBusId_v4010
+#define PFN_cuDeviceGetPCIBusId  PFN_cuDeviceGetPCIBusId_v4010
+#define PFN_cuIpcGetEventHandle  PFN_cuIpcGetEventHandle_v4010
+#define PFN_cuIpcOpenEventHandle  PFN_cuIpcOpenEventHandle_v4010
+#define PFN_cuIpcGetMemHandle  PFN_cuIpcGetMemHandle_v4010
+#define PFN_cuIpcOpenMemHandle  PFN_cuIpcOpenMemHandle_v11000
+#define PFN_cuIpcCloseMemHandle  PFN_cuIpcCloseMemHandle_v4010
+#define PFN_cuMemHostRegister  PFN_cuMemHostRegister_v6050
+#define PFN_cuMemHostUnregister  PFN_cuMemHostUnregister_v4000
+#define PFN_cuMemcpy  __API_TYPEDEF_PTDS(PFN_cuMemcpy, 4000, 7000)
+#define PFN_cuMemcpyPeer  __API_TYPEDEF_PTDS(PFN_cuMemcpyPeer, 4000, 7000)
+#define PFN_cuMemcpyHtoD  __API_TYPEDEF_PTDS(PFN_cuMemcpyHtoD, 3020, 7000)
+#define PFN_cuMemcpyDtoH  __API_TYPEDEF_PTDS(PFN_cuMemcpyDtoH, 3020, 7000)
+#define PFN_cuMemcpyDtoD  __API_TYPEDEF_PTDS(PFN_cuMemcpyDtoD, 3020, 7000)
+#define PFN_cuMemcpyDtoA  __API_TYPEDEF_PTDS(PFN_cuMemcpyDtoA, 3020, 7000)
+#define PFN_cuMemcpyAtoD  __API_TYPEDEF_PTDS(PFN_cuMemcpyAtoD, 3020, 7000)
+#define PFN_cuMemcpyHtoA  __API_TYPEDEF_PTDS(PFN_cuMemcpyHtoA, 3020, 7000)
+#define PFN_cuMemcpyAtoH  __API_TYPEDEF_PTDS(PFN_cuMemcpyAtoH, 3020, 7000)
+#define PFN_cuMemcpyAtoA  __API_TYPEDEF_PTDS(PFN_cuMemcpyAtoA, 3020, 7000)
+#define PFN_cuMemcpy2D  __API_TYPEDEF_PTDS(PFN_cuMemcpy2D, 3020, 7000)
+#define PFN_cuMemcpy2DUnaligned  __API_TYPEDEF_PTDS(PFN_cuMemcpy2DUnaligned, 3020, 7000)
+#define PFN_cuMemcpy3D  __API_TYPEDEF_PTDS(PFN_cuMemcpy3D, 3020, 7000)
+#define PFN_cuMemcpy3DPeer  __API_TYPEDEF_PTDS(PFN_cuMemcpy3DPeer, 4000, 7000)
+#define PFN_cuMemcpyAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyAsync, 4000, 7000)
+#define PFN_cuMemcpyPeerAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyPeerAsync, 4000, 7000)
+#define PFN_cuMemcpyHtoDAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyHtoDAsync, 3020, 7000)
+#define PFN_cuMemcpyDtoHAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyDtoHAsync, 3020, 7000)
+#define PFN_cuMemcpyDtoDAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyDtoDAsync, 3020, 7000)
+#define PFN_cuMemcpyHtoAAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyHtoAAsync, 3020, 7000)
+#define PFN_cuMemcpyAtoHAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpyAtoHAsync, 3020, 7000)
+#define PFN_cuMemcpy2DAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpy2DAsync, 3020, 7000)
+#define PFN_cuMemcpy3DAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpy3DAsync, 3020, 7000)
+#define PFN_cuMemcpy3DPeerAsync  __API_TYPEDEF_PTSZ(PFN_cuMemcpy3DPeerAsync, 4000, 7000)
+#define PFN_cuMemsetD8  __API_TYPEDEF_PTDS(PFN_cuMemsetD8, 3020, 7000)
+#define PFN_cuMemsetD16  __API_TYPEDEF_PTDS(PFN_cuMemsetD16, 3020, 7000)
+#define PFN_cuMemsetD32  __API_TYPEDEF_PTDS(PFN_cuMemsetD32, 3020, 7000)
+#define PFN_cuMemsetD2D8  __API_TYPEDEF_PTDS(PFN_cuMemsetD2D8, 3020, 7000)
+#define PFN_cuMemsetD2D16  __API_TYPEDEF_PTDS(PFN_cuMemsetD2D16, 3020, 7000)
+#define PFN_cuMemsetD2D32  __API_TYPEDEF_PTDS(PFN_cuMemsetD2D32, 3020, 7000)
+#define PFN_cuMemsetD8Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD8Async, 3020, 7000)
+#define PFN_cuMemsetD16Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD16Async, 3020, 7000)
+#define PFN_cuMemsetD32Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD32Async, 3020, 7000)
+#define PFN_cuMemsetD2D8Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD2D8Async, 3020, 7000)
+#define PFN_cuMemsetD2D16Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD2D16Async, 3020, 7000)
+#define PFN_cuMemsetD2D32Async  __API_TYPEDEF_PTSZ(PFN_cuMemsetD2D32Async, 3020, 7000)
+#define PFN_cuArrayCreate  PFN_cuArrayCreate_v3020
+#define PFN_cuArrayGetDescriptor  PFN_cuArrayGetDescriptor_v3020
+#define PFN_cuArrayGetSparseProperties  PFN_cuArrayGetSparseProperties_v11010
+#define PFN_cuMipmappedArrayGetSparseProperties  PFN_cuMipmappedArrayGetSparseProperties_v11010
+#define PFN_cuArrayGetMemoryRequirements  PFN_cuArrayGetMemoryRequirements_v11060
+#define PFN_cuMipmappedArrayGetMemoryRequirements  PFN_cuMipmappedArrayGetMemoryRequirements_v11060
+#define PFN_cuArrayGetPlane  PFN_cuArrayGetPlane_v11020
+#define PFN_cuArrayDestroy  PFN_cuArrayDestroy_v2000
+#define PFN_cuArray3DCreate  PFN_cuArray3DCreate_v3020
+#define PFN_cuArray3DGetDescriptor  PFN_cuArray3DGetDescriptor_v3020
+#define PFN_cuMipmappedArrayCreate  PFN_cuMipmappedArrayCreate_v5000
+#define PFN_cuMipmappedArrayGetLevel  PFN_cuMipmappedArrayGetLevel_v5000
+#define PFN_cuMipmappedArrayDestroy  PFN_cuMipmappedArrayDestroy_v5000
+#define PFN_cuMemAddressReserve  PFN_cuMemAddressReserve_v10020
+#define PFN_cuMemAddressFree  PFN_cuMemAddressFree_v10020
+#define PFN_cuMemCreate  PFN_cuMemCreate_v10020
+#define PFN_cuMemRelease  PFN_cuMemRelease_v10020
+#define PFN_cuMemMap  PFN_cuMemMap_v10020
+#define PFN_cuMemMapArrayAsync  __API_TYPEDEF_PTSZ(PFN_cuMemMapArrayAsync, 11010, 11010)
+#define PFN_cuMemUnmap  PFN_cuMemUnmap_v10020
+#define PFN_cuMemSetAccess  PFN_cuMemSetAccess_v10020
+#define PFN_cuMemGetAccess  PFN_cuMemGetAccess_v10020
+#define PFN_cuMemExportToShareableHandle  PFN_cuMemExportToShareableHandle_v10020
+#define PFN_cuMemImportFromShareableHandle  PFN_cuMemImportFromShareableHandle_v10020
+#define PFN_cuMemGetAllocationGranularity  PFN_cuMemGetAllocationGranularity_v10020
+#define PFN_cuMemGetAllocationPropertiesFromHandle  PFN_cuMemGetAllocationPropertiesFromHandle_v10020
+#define PFN_cuMemRetainAllocationHandle  PFN_cuMemRetainAllocationHandle_v11000
+#define PFN_cuMemFreeAsync  __API_TYPEDEF_PTSZ(PFN_cuMemFreeAsync, 11020, 11020)
+#define PFN_cuMemAllocAsync  __API_TYPEDEF_PTSZ(PFN_cuMemAllocAsync, 11020, 11020)
+#define PFN_cuMemPoolTrimTo  PFN_cuMemPoolTrimTo_v11020
+#define PFN_cuMemPoolSetAttribute  PFN_cuMemPoolSetAttribute_v11020
+#define PFN_cuMemPoolGetAttribute  PFN_cuMemPoolGetAttribute_v11020
+#define PFN_cuMemPoolSetAccess  PFN_cuMemPoolSetAccess_v11020
+#define PFN_cuMemPoolGetAccess  PFN_cuMemPoolGetAccess_v11020
+#define PFN_cuMemPoolCreate  PFN_cuMemPoolCreate_v11020
+#define PFN_cuMemPoolDestroy  PFN_cuMemPoolDestroy_v11020
+#define PFN_cuMemAllocFromPoolAsync  __API_TYPEDEF_PTSZ(PFN_cuMemAllocFromPoolAsync, 11020, 11020)
+#define PFN_cuMemPoolExportToShareableHandle  PFN_cuMemPoolExportToShareableHandle_v11020
+#define PFN_cuMemPoolImportFromShareableHandle  PFN_cuMemPoolImportFromShareableHandle_v11020
+#define PFN_cuMemPoolExportPointer  PFN_cuMemPoolExportPointer_v11020
+#define PFN_cuMemPoolImportPointer  PFN_cuMemPoolImportPointer_v11020
+#define PFN_cuPointerGetAttribute  PFN_cuPointerGetAttribute_v4000
+#define PFN_cuMemPrefetchAsync  __API_TYPEDEF_PTSZ(PFN_cuMemPrefetchAsync, 8000, 8000)
+#define PFN_cuMemAdvise  PFN_cuMemAdvise_v8000
+#define PFN_cuMemRangeGetAttribute  PFN_cuMemRangeGetAttribute_v8000
+#define PFN_cuMemRangeGetAttributes  PFN_cuMemRangeGetAttributes_v8000
+#define PFN_cuPointerSetAttribute  PFN_cuPointerSetAttribute_v6000
+#define PFN_cuPointerGetAttributes  PFN_cuPointerGetAttributes_v7000
+#define PFN_cuStreamCreate  PFN_cuStreamCreate_v2000
+#define PFN_cuStreamCreateWithPriority  PFN_cuStreamCreateWithPriority_v5050
+#define PFN_cuStreamGetPriority  __API_TYPEDEF_PTSZ(PFN_cuStreamGetPriority, 5050, 7000)
+#define PFN_cuStreamGetFlags  __API_TYPEDEF_PTSZ(PFN_cuStreamGetFlags, 5050, 7000)
+#define PFN_cuStreamGetCtx  __API_TYPEDEF_PTSZ(PFN_cuStreamGetCtx, 9020, 9020)
+#define PFN_cuStreamWaitEvent  __API_TYPEDEF_PTSZ(PFN_cuStreamWaitEvent, 3020, 7000)
+#define PFN_cuStreamAddCallback  __API_TYPEDEF_PTSZ(PFN_cuStreamAddCallback, 5000, 7000)
+#define PFN_cuStreamBeginCapture  __API_TYPEDEF_PTSZ(PFN_cuStreamBeginCapture, 10010, 10010)
+#define PFN_cuThreadExchangeStreamCaptureMode  PFN_cuThreadExchangeStreamCaptureMode_v10010
+#define PFN_cuStreamEndCapture  __API_TYPEDEF_PTSZ(PFN_cuStreamEndCapture, 10000, 10000)
+#define PFN_cuStreamIsCapturing  __API_TYPEDEF_PTSZ(PFN_cuStreamIsCapturing, 10000, 10000)
+#define PFN_cuStreamGetCaptureInfo  __API_TYPEDEF_PTSZ(PFN_cuStreamGetCaptureInfo, 10010, 10010)
+#define PFN_cuStreamGetCaptureInfo_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamGetCaptureInfo, 11030, 11030)
+#define PFN_cuStreamUpdateCaptureDependencies  __API_TYPEDEF_PTSZ(PFN_cuStreamUpdateCaptureDependencies, 11030, 11030)
+#define PFN_cuStreamAttachMemAsync  __API_TYPEDEF_PTSZ(PFN_cuStreamAttachMemAsync, 6000, 7000)
+#define PFN_cuStreamQuery  __API_TYPEDEF_PTSZ(PFN_cuStreamQuery, 2000, 7000)
+#define PFN_cuStreamSynchronize  __API_TYPEDEF_PTSZ(PFN_cuStreamSynchronize, 2000, 7000)
+#define PFN_cuStreamDestroy  PFN_cuStreamDestroy_v4000
+#define PFN_cuStreamCopyAttributes  __API_TYPEDEF_PTSZ(PFN_cuStreamCopyAttributes, 11000, 11000)
+#define PFN_cuStreamGetAttribute  __API_TYPEDEF_PTSZ(PFN_cuStreamGetAttribute, 11000, 11000)
+#define PFN_cuStreamSetAttribute  __API_TYPEDEF_PTSZ(PFN_cuStreamSetAttribute, 11000, 11000)
+#define PFN_cuEventCreate  PFN_cuEventCreate_v2000
+#define PFN_cuEventRecord  __API_TYPEDEF_PTSZ(PFN_cuEventRecord, 2000, 7000)
+#define PFN_cuEventRecordWithFlags  __API_TYPEDEF_PTSZ(PFN_cuEventRecordWithFlags, 11010, 11010)
+#define PFN_cuEventQuery  PFN_cuEventQuery_v2000
+#define PFN_cuEventSynchronize  PFN_cuEventSynchronize_v2000
+#define PFN_cuEventDestroy  PFN_cuEventDestroy_v4000
+#define PFN_cuEventElapsedTime  PFN_cuEventElapsedTime_v2000
+#define PFN_cuImportExternalMemory  PFN_cuImportExternalMemory_v10000
+#define PFN_cuExternalMemoryGetMappedBuffer  PFN_cuExternalMemoryGetMappedBuffer_v10000
+#define PFN_cuExternalMemoryGetMappedMipmappedArray  PFN_cuExternalMemoryGetMappedMipmappedArray_v10000
+#define PFN_cuDestroyExternalMemory  PFN_cuDestroyExternalMemory_v10000
+#define PFN_cuImportExternalSemaphore  PFN_cuImportExternalSemaphore_v10000
+#define PFN_cuSignalExternalSemaphoresAsync  __API_TYPEDEF_PTSZ(PFN_cuSignalExternalSemaphoresAsync, 10000, 10000)
+#define PFN_cuWaitExternalSemaphoresAsync  __API_TYPEDEF_PTSZ(PFN_cuWaitExternalSemaphoresAsync, 10000, 10000)
+#define PFN_cuDestroyExternalSemaphore  PFN_cuDestroyExternalSemaphore_v10000
+#define PFN_cuStreamWaitValue32  __API_TYPEDEF_PTSZ(PFN_cuStreamWaitValue32, 8000, 8000)
+#define PFN_cuStreamWaitValue64  __API_TYPEDEF_PTSZ(PFN_cuStreamWaitValue64, 9000, 9000)
+#define PFN_cuStreamWriteValue32  __API_TYPEDEF_PTSZ(PFN_cuStreamWriteValue32, 8000, 8000)
+#define PFN_cuStreamWriteValue64  __API_TYPEDEF_PTSZ(PFN_cuStreamWriteValue64, 9000, 9000)
+#define PFN_cuStreamBatchMemOp  __API_TYPEDEF_PTSZ(PFN_cuStreamBatchMemOp, 8000, 8000)
+#define PFN_cuStreamWaitValue32_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamWaitValue32, 11070, 11070)
+#define PFN_cuStreamWaitValue64_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamWaitValue64, 11070, 11070)
+#define PFN_cuStreamWriteValue32_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamWriteValue32, 11070, 11070)
+#define PFN_cuStreamWriteValue64_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamWriteValue64, 11070, 11070)
+#define PFN_cuStreamBatchMemOp_v2  __API_TYPEDEF_PTSZ(PFN_cuStreamBatchMemOp, 11070, 11070)
+#define PFN_cuFuncGetAttribute  PFN_cuFuncGetAttribute_v2020
+#define PFN_cuFuncSetAttribute  PFN_cuFuncSetAttribute_v9000
+#define PFN_cuFuncSetCacheConfig  PFN_cuFuncSetCacheConfig_v3000
+#define PFN_cuFuncSetSharedMemConfig  PFN_cuFuncSetSharedMemConfig_v4020
+#define PFN_cuLaunchKernel  __API_TYPEDEF_PTSZ(PFN_cuLaunchKernel, 4000, 7000)
+#define PFN_cuLaunchKernelEx __API_TYPEDEF_PTSZ(PFN_cuLaunchKernelEx, 11060, 11060)
+#define PFN_cuLaunchCooperativeKernel  __API_TYPEDEF_PTSZ(PFN_cuLaunchCooperativeKernel, 9000, 9000)
+#define PFN_cuLaunchCooperativeKernelMultiDevice  PFN_cuLaunchCooperativeKernelMultiDevice_v9000
+#define PFN_cuLaunchHostFunc  __API_TYPEDEF_PTSZ(PFN_cuLaunchHostFunc, 10000, 10000)
+#define PFN_cuFuncSetBlockShape  PFN_cuFuncSetBlockShape_v2000
+#define PFN_cuFuncSetSharedSize  PFN_cuFuncSetSharedSize_v2000
+#define PFN_cuParamSetSize  PFN_cuParamSetSize_v2000
+#define PFN_cuParamSeti  PFN_cuParamSeti_v2000
+#define PFN_cuParamSetf  PFN_cuParamSetf_v2000
+#define PFN_cuParamSetv  PFN_cuParamSetv_v2000
+#define PFN_cuLaunch  PFN_cuLaunch_v2000
+#define PFN_cuLaunchGrid  PFN_cuLaunchGrid_v2000
+#define PFN_cuLaunchGridAsync  PFN_cuLaunchGridAsync_v2000
+#define PFN_cuParamSetTexRef  PFN_cuParamSetTexRef_v2000
+#define PFN_cuGraphCreate  PFN_cuGraphCreate_v10000
+#define PFN_cuGraphAddKernelNode  PFN_cuGraphAddKernelNode_v10000
+#define PFN_cuGraphKernelNodeGetParams  PFN_cuGraphKernelNodeGetParams_v10000
+#define PFN_cuGraphKernelNodeSetParams  PFN_cuGraphKernelNodeSetParams_v10000
+#define PFN_cuGraphAddMemcpyNode  PFN_cuGraphAddMemcpyNode_v10000
+#define PFN_cuGraphMemcpyNodeGetParams  PFN_cuGraphMemcpyNodeGetParams_v10000
+#define PFN_cuGraphMemcpyNodeSetParams  PFN_cuGraphMemcpyNodeSetParams_v10000
+#define PFN_cuGraphAddMemsetNode  PFN_cuGraphAddMemsetNode_v10000
+#define PFN_cuGraphMemsetNodeGetParams  PFN_cuGraphMemsetNodeGetParams_v10000
+#define PFN_cuGraphMemsetNodeSetParams  PFN_cuGraphMemsetNodeSetParams_v10000
+#define PFN_cuGraphAddHostNode  PFN_cuGraphAddHostNode_v10000
+#define PFN_cuGraphHostNodeGetParams  PFN_cuGraphHostNodeGetParams_v10000
+#define PFN_cuGraphHostNodeSetParams  PFN_cuGraphHostNodeSetParams_v10000
+#define PFN_cuGraphAddChildGraphNode  PFN_cuGraphAddChildGraphNode_v10000
+#define PFN_cuGraphChildGraphNodeGetGraph  PFN_cuGraphChildGraphNodeGetGraph_v10000
+#define PFN_cuGraphAddEmptyNode  PFN_cuGraphAddEmptyNode_v10000
+#define PFN_cuGraphAddEventRecordNode  PFN_cuGraphAddEventRecordNode_v11010
+#define PFN_cuGraphEventRecordNodeGetEvent  PFN_cuGraphEventRecordNodeGetEvent_v11010
+#define PFN_cuGraphEventRecordNodeSetEvent  PFN_cuGraphEventRecordNodeSetEvent_v11010
+#define PFN_cuGraphAddEventWaitNode  PFN_cuGraphAddEventWaitNode_v11010
+#define PFN_cuGraphEventWaitNodeGetEvent  PFN_cuGraphEventWaitNodeGetEvent_v11010
+#define PFN_cuGraphEventWaitNodeSetEvent  PFN_cuGraphEventWaitNodeSetEvent_v11010
+#define PFN_cuGraphAddExternalSemaphoresSignalNode  PFN_cuGraphAddExternalSemaphoresSignalNode_v11020
+#define PFN_cuGraphExternalSemaphoresSignalNodeGetParams  PFN_cuGraphExternalSemaphoresSignalNodeGetParams_v11020
+#define PFN_cuGraphExternalSemaphoresSignalNodeSetParams  PFN_cuGraphExternalSemaphoresSignalNodeSetParams_v11020
+#define PFN_cuGraphAddExternalSemaphoresWaitNode  PFN_cuGraphAddExternalSemaphoresWaitNode_v11020
+#define PFN_cuGraphExternalSemaphoresWaitNodeGetParams  PFN_cuGraphExternalSemaphoresWaitNodeGetParams_v11020
+#define PFN_cuGraphExternalSemaphoresWaitNodeSetParams  PFN_cuGraphExternalSemaphoresWaitNodeSetParams_v11020
+#define PFN_cuGraphAddBatchMemOpNode PFN_cuGraphAddBatchMemOpNode_v11070
+#define PFN_cuGraphBatchMemOpNodeGetParams PFN_cuGraphBatchMemOpNodeGetParams_v11070
+#define PFN_cuGraphBatchMemOpNodeSetParams PFN_cuGraphBatchMemOpNodeSetParams _v11070
+#define PFN_cuGraphExecBatchMemOpNodeSetParams PFN_cuGraphExecBatchMemOpNodeSetParams_v11070
+#define PFN_cuGraphClone  PFN_cuGraphClone_v10000
+#define PFN_cuGraphNodeFindInClone  PFN_cuGraphNodeFindInClone_v10000
+#define PFN_cuGraphNodeGetType  PFN_cuGraphNodeGetType_v10000
+#define PFN_cuGraphGetNodes  PFN_cuGraphGetNodes_v10000
+#define PFN_cuGraphGetRootNodes  PFN_cuGraphGetRootNodes_v10000
+#define PFN_cuGraphGetEdges  PFN_cuGraphGetEdges_v10000
+#define PFN_cuGraphNodeGetDependencies  PFN_cuGraphNodeGetDependencies_v10000
+#define PFN_cuGraphNodeGetDependentNodes  PFN_cuGraphNodeGetDependentNodes_v10000
+#define PFN_cuGraphAddDependencies  PFN_cuGraphAddDependencies_v10000
+#define PFN_cuGraphRemoveDependencies  PFN_cuGraphRemoveDependencies_v10000
+#define PFN_cuGraphDestroyNode  PFN_cuGraphDestroyNode_v10000
+#define PFN_cuGraphInstantiate  PFN_cuGraphInstantiate_v11000
+#define PFN_cuGraphInstantiateWithFlags  PFN_cuGraphInstantiateWithFlags_v11040
+#define PFN_cuGraphExecKernelNodeSetParams  PFN_cuGraphExecKernelNodeSetParams_v10010
+#define PFN_cuGraphExecMemcpyNodeSetParams  PFN_cuGraphExecMemcpyNodeSetParams_v10020
+#define PFN_cuGraphExecMemsetNodeSetParams  PFN_cuGraphExecMemsetNodeSetParams_v10020
+#define PFN_cuGraphExecHostNodeSetParams  PFN_cuGraphExecHostNodeSetParams_v10020
+#define PFN_cuGraphExecChildGraphNodeSetParams  PFN_cuGraphExecChildGraphNodeSetParams_v11010
+#define PFN_cuGraphExecEventRecordNodeSetEvent  PFN_cuGraphExecEventRecordNodeSetEvent_v11010
+#define PFN_cuGraphExecEventWaitNodeSetEvent  PFN_cuGraphExecEventWaitNodeSetEvent_v11010
+#define PFN_cuGraphExecExternalSemaphoresSignalNodeSetParams  PFN_cuGraphExecExternalSemaphoresSignalNodeSetParams_v11020
+#define PFN_cuGraphExecExternalSemaphoresWaitNodeSetParams  PFN_cuGraphExecExternalSemaphoresWaitNodeSetParams_v11020
+#define PFN_cuGraphUpload  __API_TYPEDEF_PTSZ(PFN_cuGraphUpload, 11010, 11010)
+#define PFN_cuGraphLaunch  __API_TYPEDEF_PTSZ(PFN_cuGraphLaunch, 10000, 10000)
+#define PFN_cuGraphExecDestroy  PFN_cuGraphExecDestroy_v10000
+#define PFN_cuGraphDestroy  PFN_cuGraphDestroy_v10000
+#define PFN_cuGraphExecUpdate  PFN_cuGraphExecUpdate_v10020
+#define PFN_cuGraphKernelNodeCopyAttributes  PFN_cuGraphKernelNodeCopyAttributes_v11000
+#define PFN_cuGraphKernelNodeGetAttribute  PFN_cuGraphKernelNodeGetAttribute_v11000
+#define PFN_cuGraphKernelNodeSetAttribute  PFN_cuGraphKernelNodeSetAttribute_v11000
+#define PFN_cuGraphDebugDotPrint  PFN_cuGraphDebugDotPrint_v11030
+#define PFN_cuGraphAddMemAllocNode  PFN_cuGraphAddMemAllocNode_v11040
+#define PFN_cuGraphMemAllocNodeGetParams PFN_cuGraphMemAllocNodeGetParams_v11040
+#define PFN_cuGraphAddMemFreeNode  PFN_cuGraphAddMemFreeNode_v11040
+#define PFN_cuGraphMemFreeNodeGetParams PFN_cuGraphMemFreeNodeGetParams_v11040
+#define PFN_cuGraphNodeSetEnabled PFN_cuGraphNodeSetEnabled_v11060
+#define PFN_cuGraphNodeGetEnabled PFN_cuGraphNodeGetEnabled_v11060
+#define PFN_cuDeviceGraphMemTrim  PFN_cuDeviceGraphMemTrim_v11040
+#define PFN_cuDeviceGetGraphMemAttribute  PFN_cuDeviceGetGraphMemAttribute_v11040
+#define PFN_cuDeviceSetGraphMemAttribute  PFN_cuDeviceSetGraphMemAttribute_v11040
+#define PFN_cuOccupancyMaxActiveBlocksPerMultiprocessor  PFN_cuOccupancyMaxActiveBlocksPerMultiprocessor_v6050
+#define PFN_cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags  PFN_cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags_v7000
+#define PFN_cuOccupancyMaxPotentialBlockSize  PFN_cuOccupancyMaxPotentialBlockSize_v6050
+#define PFN_cuOccupancyMaxPotentialBlockSizeWithFlags  PFN_cuOccupancyMaxPotentialBlockSizeWithFlags_v7000
+#define PFN_cuOccupancyAvailableDynamicSMemPerBlock  PFN_cuOccupancyAvailableDynamicSMemPerBlock_v10020
+#define PFN_cuOccupancyMaxPotentialClusterSize  PFN_cuOccupancyMaxPotentialClusterSize_v11070
+#define PFN_cuOccupancyMaxActiveClusters  PFN_cuOccupancyMaxActiveClusters_v11070
+#define PFN_cuTexRefSetArray  PFN_cuTexRefSetArray_v2000
+#define PFN_cuTexRefSetMipmappedArray  PFN_cuTexRefSetMipmappedArray_v5000
+#define PFN_cuTexRefSetAddress  PFN_cuTexRefSetAddress_v3020
+#define PFN_cuTexRefSetAddress2D  PFN_cuTexRefSetAddress2D_v4010
+#define PFN_cuTexRefSetFormat  PFN_cuTexRefSetFormat_v2000
+#define PFN_cuTexRefSetAddressMode  PFN_cuTexRefSetAddressMode_v2000
+#define PFN_cuTexRefSetFilterMode  PFN_cuTexRefSetFilterMode_v2000
+#define PFN_cuTexRefSetMipmapFilterMode  PFN_cuTexRefSetMipmapFilterMode_v5000
+#define PFN_cuTexRefSetMipmapLevelBias  PFN_cuTexRefSetMipmapLevelBias_v5000
+#define PFN_cuTexRefSetMipmapLevelClamp  PFN_cuTexRefSetMipmapLevelClamp_v5000
+#define PFN_cuTexRefSetMaxAnisotropy  PFN_cuTexRefSetMaxAnisotropy_v5000
+#define PFN_cuTexRefSetBorderColor  PFN_cuTexRefSetBorderColor_v8000
+#define PFN_cuTexRefSetFlags  PFN_cuTexRefSetFlags_v2000
+#define PFN_cuTexRefGetAddress  PFN_cuTexRefGetAddress_v3020
+#define PFN_cuTexRefGetArray  PFN_cuTexRefGetArray_v2000
+#define PFN_cuTexRefGetMipmappedArray  PFN_cuTexRefGetMipmappedArray_v5000
+#define PFN_cuTexRefGetAddressMode  PFN_cuTexRefGetAddressMode_v2000
+#define PFN_cuTexRefGetFilterMode  PFN_cuTexRefGetFilterMode_v2000
+#define PFN_cuTexRefGetFormat  PFN_cuTexRefGetFormat_v2000
+#define PFN_cuTexRefGetMipmapFilterMode  PFN_cuTexRefGetMipmapFilterMode_v5000
+#define PFN_cuTexRefGetMipmapLevelBias  PFN_cuTexRefGetMipmapLevelBias_v5000
+#define PFN_cuTexRefGetMipmapLevelClamp  PFN_cuTexRefGetMipmapLevelClamp_v5000
+#define PFN_cuTexRefGetMaxAnisotropy  PFN_cuTexRefGetMaxAnisotropy_v5000
+#define PFN_cuTexRefGetBorderColor  PFN_cuTexRefGetBorderColor_v8000
+#define PFN_cuTexRefGetFlags  PFN_cuTexRefGetFlags_v2000
+#define PFN_cuTexRefCreate  PFN_cuTexRefCreate_v2000
+#define PFN_cuTexRefDestroy  PFN_cuTexRefDestroy_v2000
+#define PFN_cuSurfRefSetArray  PFN_cuSurfRefSetArray_v3000
+#define PFN_cuSurfRefGetArray  PFN_cuSurfRefGetArray_v3000
+#define PFN_cuTexObjectCreate  PFN_cuTexObjectCreate_v5000
+#define PFN_cuTexObjectDestroy  PFN_cuTexObjectDestroy_v5000
+#define PFN_cuTexObjectGetResourceDesc  PFN_cuTexObjectGetResourceDesc_v5000
+#define PFN_cuTexObjectGetTextureDesc  PFN_cuTexObjectGetTextureDesc_v5000
+#define PFN_cuTexObjectGetResourceViewDesc  PFN_cuTexObjectGetResourceViewDesc_v5000
+#define PFN_cuSurfObjectCreate  PFN_cuSurfObjectCreate_v5000
+#define PFN_cuSurfObjectDestroy  PFN_cuSurfObjectDestroy_v5000
+#define PFN_cuSurfObjectGetResourceDesc  PFN_cuSurfObjectGetResourceDesc_v5000
+#define PFN_cuDeviceCanAccessPeer  PFN_cuDeviceCanAccessPeer_v4000
+#define PFN_cuCtxEnablePeerAccess  PFN_cuCtxEnablePeerAccess_v4000
+#define PFN_cuCtxDisablePeerAccess  PFN_cuCtxDisablePeerAccess_v4000
+#define PFN_cuDeviceGetP2PAttribute  PFN_cuDeviceGetP2PAttribute_v8000
+#define PFN_cuGraphicsUnregisterResource  PFN_cuGraphicsUnregisterResource_v3000
+#define PFN_cuGraphicsSubResourceGetMappedArray  PFN_cuGraphicsSubResourceGetMappedArray_v3000
+#define PFN_cuGraphicsResourceGetMappedMipmappedArray  PFN_cuGraphicsResourceGetMappedMipmappedArray_v5000
+#define PFN_cuGraphicsResourceGetMappedPointer  PFN_cuGraphicsResourceGetMappedPointer_v3020
+#define PFN_cuGraphicsResourceSetMapFlags  PFN_cuGraphicsResourceSetMapFlags_v6050
+#define PFN_cuGraphicsMapResources  __API_TYPEDEF_PTSZ(PFN_cuGraphicsMapResources, 3000, 7000)
+#define PFN_cuGraphicsUnmapResources  __API_TYPEDEF_PTSZ(PFN_cuGraphicsUnmapResources, 3000, 7000)
+#define PFN_cuGetExportTable  PFN_cuGetExportTable_v3000
+#define PFN_cuFuncGetModule  PFN_cuFuncGetModule_v11000
+#define PFN_cuFlushGPUDirectRDMAWrites PFN_cuFlushGPUDirectRDMAWrites_v11030
+#define PFN_cuGetProcAddress  PFN_cuGetProcAddress_v11030
+#define PFN_cuUserObjectCreate  PFN_cuUserObjectCreate_v11030
+#define PFN_cuUserObjectRetain  PFN_cuUserObjectRetain_v11030
+#define PFN_cuUserObjectRelease  PFN_cuUserObjectRelease_v11030
+#define PFN_cuGraphRetainUserObject  PFN_cuGraphRetainUserObject_v11030
+#define PFN_cuGraphReleaseUserObject  PFN_cuGraphReleaseUserObject_v11030
+#define PFN_cuModuleGetLoadingMode  PFN_cuModuleGetLoadingMode_v11070
+#define PFN_cuMemGetHandleForAddressRange  PFN_cuMemGetHandleForAddressRange_v11070
+
+/*
+ * Type definitions for functions defined in cuda.h
+ */
+typedef CUresult (CUDAAPI *PFN_cuGetErrorString_v6000)(CUresult error, const char **pStr);
+typedef CUresult (CUDAAPI *PFN_cuGetErrorName_v6000)(CUresult error, const char **pStr);
+typedef CUresult (CUDAAPI *PFN_cuInit_v2000)(unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuDriverGetVersion_v2020)(int *driverVersion);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGet_v2000)(CUdevice_v1 *device, int ordinal);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetCount_v2000)(int *count);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetName_v2000)(char *name, int len, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetUuid_v9020)(CUuuid *uuid, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetUuid_v11040)(CUuuid *uuid, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetLuid_v10000)(char *luid, unsigned int *deviceNodeMask, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceTotalMem_v3020)(size_t *bytes, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetTexture1DLinearMaxWidth_v11010)(size_t *maxWidthInElements, CUarray_format format, unsigned numChannels, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetAttribute_v2000)(int *pi, CUdevice_attribute attrib, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetNvSciSyncAttributes_v10020)(void *nvSciSyncAttrList, CUdevice_v1 dev, int flags);
+typedef CUresult (CUDAAPI *PFN_cuDeviceSetMemPool_v11020)(CUdevice_v1 dev, CUmemoryPool pool);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetMemPool_v11020)(CUmemoryPool *pool, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetDefaultMemPool_v11020)(CUmemoryPool *pool_out, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetProperties_v2000)(CUdevprop_v1 *prop, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceComputeCapability_v2000)(int *major, int *minor, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxRetain_v7000)(CUcontext *pctx, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxRelease_v11000)(CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxSetFlags_v11000)(CUdevice_v1 dev, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxGetState_v7000)(CUdevice_v1 dev, unsigned int *flags, int *active);
+typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxReset_v11000)(CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetExecAffinitySupport_v11040)(int *pi, CUexecAffinityType type, CUdevice dev);
+typedef CUresult (CUDAAPI *PFN_cuCtxCreate_v3020)(CUcontext *pctx, unsigned int flags, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuCtxCreate_v11040)(CUcontext *pctx, CUexecAffinityParam *paramsArray, int numParams, unsigned int flags, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuCtxDestroy_v4000)(CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxPushCurrent_v4000)(CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxPopCurrent_v4000)(CUcontext *pctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxSetCurrent_v4000)(CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetCurrent_v4000)(CUcontext *pctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetDevice_v2000)(CUdevice_v1 *device);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetFlags_v7000)(unsigned int *flags);
+typedef CUresult (CUDAAPI *PFN_cuCtxSynchronize_v2000)(void);
+typedef CUresult (CUDAAPI *PFN_cuCtxSetLimit_v3010)(CUlimit limit, size_t value);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetLimit_v3010)(size_t *pvalue, CUlimit limit);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetCacheConfig_v3020)(CUfunc_cache *pconfig);
+typedef CUresult (CUDAAPI *PFN_cuCtxSetCacheConfig_v3020)(CUfunc_cache config);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetSharedMemConfig_v4020)(CUsharedconfig *pConfig);
+typedef CUresult (CUDAAPI *PFN_cuCtxSetSharedMemConfig_v4020)(CUsharedconfig config);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetApiVersion_v3020)(CUcontext ctx, unsigned int *version);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetStreamPriorityRange_v5050)(int *leastPriority, int *greatestPriority);
+typedef CUresult (CUDAAPI *PFN_cuCtxResetPersistingL2Cache_v11000)(void);
+typedef CUresult (CUDAAPI *PFN_cuCtxAttach_v2000)(CUcontext *pctx, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuCtxDetach_v2000)(CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuCtxGetExecAffinity_v11040)(CUexecAffinityParam *pExecAffinity, CUexecAffinityType type);
+typedef CUresult (CUDAAPI *PFN_cuModuleLoad_v2000)(CUmodule *module, const char *fname);
+typedef CUresult (CUDAAPI *PFN_cuModuleLoadData_v2000)(CUmodule *module, const void *image);
+typedef CUresult (CUDAAPI *PFN_cuModuleLoadDataEx_v2010)(CUmodule *module, const void *image, unsigned int numOptions, CUjit_option *options, void **optionValues);
+typedef CUresult (CUDAAPI *PFN_cuModuleLoadFatBinary_v2000)(CUmodule *module, const void *fatCubin);
+typedef CUresult (CUDAAPI *PFN_cuModuleUnload_v2000)(CUmodule hmod);
+typedef CUresult (CUDAAPI *PFN_cuModuleGetFunction_v2000)(CUfunction *hfunc, CUmodule hmod, const char *name);
+typedef CUresult (CUDAAPI *PFN_cuModuleGetGlobal_v3020)(CUdeviceptr_v2 *dptr, size_t *bytes, CUmodule hmod, const char *name);
+typedef CUresult (CUDAAPI *PFN_cuModuleGetTexRef_v2000)(CUtexref *pTexRef, CUmodule hmod, const char *name);
+typedef CUresult (CUDAAPI *PFN_cuModuleGetSurfRef_v3000)(CUsurfref *pSurfRef, CUmodule hmod, const char *name);
+typedef CUresult (CUDAAPI *PFN_cuLinkCreate_v6050)(unsigned int numOptions, CUjit_option *options, void **optionValues, CUlinkState *stateOut);
+typedef CUresult (CUDAAPI *PFN_cuLinkAddData_v6050)(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name, unsigned int numOptions, CUjit_option *options, void **optionValues);
+typedef CUresult (CUDAAPI *PFN_cuLinkAddFile_v6050)(CUlinkState state, CUjitInputType type, const char *path, unsigned int numOptions, CUjit_option *options, void **optionValues);
+typedef CUresult (CUDAAPI *PFN_cuLinkComplete_v5050)(CUlinkState state, void **cubinOut, size_t *sizeOut);
+typedef CUresult (CUDAAPI *PFN_cuLinkDestroy_v5050)(CUlinkState state);
+typedef CUresult (CUDAAPI *PFN_cuMemGetInfo_v3020)(size_t *free, size_t *total);
+typedef CUresult (CUDAAPI *PFN_cuMemAlloc_v3020)(CUdeviceptr_v2 *dptr, size_t bytesize);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocPitch_v3020)(CUdeviceptr_v2 *dptr, size_t *pPitch, size_t WidthInBytes, size_t Height, unsigned int ElementSizeBytes);
+typedef CUresult (CUDAAPI *PFN_cuMemFree_v3020)(CUdeviceptr_v2 dptr);
+typedef CUresult (CUDAAPI *PFN_cuMemGetAddressRange_v3020)(CUdeviceptr_v2 *pbase, size_t *psize, CUdeviceptr_v2 dptr);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocHost_v3020)(void **pp, size_t bytesize);
+typedef CUresult (CUDAAPI *PFN_cuMemFreeHost_v2000)(void *p);
+typedef CUresult (CUDAAPI *PFN_cuMemHostAlloc_v2020)(void **pp, size_t bytesize, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuMemHostGetDevicePointer_v3020)(CUdeviceptr_v2 *pdptr, void *p, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuMemHostGetFlags_v2030)(unsigned int *pFlags, void *p);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocManaged_v6000)(CUdeviceptr_v2 *dptr, size_t bytesize, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetByPCIBusId_v4010)(CUdevice_v1 *dev, const char *pciBusId);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetPCIBusId_v4010)(char *pciBusId, int len, CUdevice_v1 dev);
+typedef CUresult (CUDAAPI *PFN_cuIpcGetEventHandle_v4010)(CUipcEventHandle_v1 *pHandle, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuIpcOpenEventHandle_v4010)(CUevent *phEvent, CUipcEventHandle_v1 handle);
+typedef CUresult (CUDAAPI *PFN_cuIpcGetMemHandle_v4010)(CUipcMemHandle_v1 *pHandle, CUdeviceptr_v2 dptr);
+typedef CUresult (CUDAAPI *PFN_cuIpcOpenMemHandle_v11000)(CUdeviceptr_v2 *pdptr, CUipcMemHandle_v1 handle, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuIpcCloseMemHandle_v4010)(CUdeviceptr_v2 dptr);
+typedef CUresult (CUDAAPI *PFN_cuMemHostRegister_v6050)(void *p, size_t bytesize, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuMemHostUnregister_v4000)(void *p);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy_v7000_ptds)(CUdeviceptr_v2 dst, CUdeviceptr_v2 src, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyPeer_v7000_ptds)(CUdeviceptr_v2 dstDevice, CUcontext dstContext, CUdeviceptr_v2 srcDevice, CUcontext srcContext, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoD_v7000_ptds)(CUdeviceptr_v2 dstDevice, const void *srcHost, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoH_v7000_ptds)(void *dstHost, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoD_v7000_ptds)(CUdeviceptr_v2 dstDevice, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoA_v7000_ptds)(CUarray dstArray, size_t dstOffset, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoD_v7000_ptds)(CUdeviceptr_v2 dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoA_v7000_ptds)(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoH_v7000_ptds)(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoA_v7000_ptds)(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2D_v7000_ptds)(const CUDA_MEMCPY2D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2DUnaligned_v7000_ptds)(const CUDA_MEMCPY2D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3D_v7000_ptds)(const CUDA_MEMCPY3D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DPeer_v7000_ptds)(const CUDA_MEMCPY3D_PEER_v1 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAsync_v7000_ptsz)(CUdeviceptr_v2 dst, CUdeviceptr_v2 src, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyPeerAsync_v7000_ptsz)(CUdeviceptr_v2 dstDevice, CUcontext dstContext, CUdeviceptr_v2 srcDevice, CUcontext srcContext, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoDAsync_v7000_ptsz)(CUdeviceptr_v2 dstDevice, const void *srcHost, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoHAsync_v7000_ptsz)(void *dstHost, CUdeviceptr_v2 srcDevice, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoDAsync_v7000_ptsz)(CUdeviceptr_v2 dstDevice, CUdeviceptr_v2 srcDevice, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoAAsync_v7000_ptsz)(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoHAsync_v7000_ptsz)(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2DAsync_v7000_ptsz)(const CUDA_MEMCPY2D_v2 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DAsync_v7000_ptsz)(const CUDA_MEMCPY3D_v2 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DPeerAsync_v7000_ptsz)(const CUDA_MEMCPY3D_PEER_v1 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD8_v7000_ptds)(CUdeviceptr_v2 dstDevice, unsigned char uc, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD16_v7000_ptds)(CUdeviceptr_v2 dstDevice, unsigned short us, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD32_v7000_ptds)(CUdeviceptr_v2 dstDevice, unsigned int ui, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D8_v7000_ptds)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D16_v7000_ptds)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D32_v7000_ptds)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD8Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, unsigned char uc, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD16Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, unsigned short us, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD32Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, unsigned int ui, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D8Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D16Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D32Async_v7000_ptsz)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuArrayCreate_v3020)(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR_v2 *pAllocateArray);
+typedef CUresult (CUDAAPI *PFN_cuArrayGetDescriptor_v3020)(CUDA_ARRAY_DESCRIPTOR_v2 *pArrayDescriptor, CUarray hArray);
+typedef CUresult (CUDAAPI *PFN_cuArrayGetSparseProperties_v11010)(CUDA_ARRAY_SPARSE_PROPERTIES_v1 *sparseProperties, CUarray array);
+typedef CUresult (CUDAAPI *PFN_cuMipmappedArrayGetSparseProperties_v11010)(CUDA_ARRAY_SPARSE_PROPERTIES_v1 *sparseProperties, CUmipmappedArray mipmap);
+typedef CUresult (CUDAAPI *PFN_cuArrayGetMemoryRequirements_v11060)(CUDA_ARRAY_MEMORY_REQUIREMENTS_v1 *memoryRequirements, CUarray array, CUdevice device);
+typedef CUresult (CUDAAPI *PFN_cuMipmappedArrayGetMemoryRequirements_v11060)(CUDA_ARRAY_MEMORY_REQUIREMENTS_v1 *memoryRequirements, CUmipmappedArray mipmap, CUdevice device);
+typedef CUresult (CUDAAPI *PFN_cuArrayGetPlane_v11020)(CUarray *pPlaneArray, CUarray hArray, unsigned int planeIdx);
+typedef CUresult (CUDAAPI *PFN_cuArrayDestroy_v2000)(CUarray hArray);
+typedef CUresult (CUDAAPI *PFN_cuArray3DCreate_v3020)(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR_v2 *pAllocateArray);
+typedef CUresult (CUDAAPI *PFN_cuArray3DGetDescriptor_v3020)(CUDA_ARRAY3D_DESCRIPTOR_v2 *pArrayDescriptor, CUarray hArray);
+typedef CUresult (CUDAAPI *PFN_cuMipmappedArrayCreate_v5000)(CUmipmappedArray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR_v2 *pMipmappedArrayDesc, unsigned int numMipmapLevels);
+typedef CUresult (CUDAAPI *PFN_cuMipmappedArrayGetLevel_v5000)(CUarray *pLevelArray, CUmipmappedArray hMipmappedArray, unsigned int level);
+typedef CUresult (CUDAAPI *PFN_cuMipmappedArrayDestroy_v5000)(CUmipmappedArray hMipmappedArray);
+typedef CUresult (CUDAAPI *PFN_cuMemAddressReserve_v10020)(CUdeviceptr_v2 *ptr, size_t size, size_t alignment, CUdeviceptr_v2 addr, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemAddressFree_v10020)(CUdeviceptr_v2 ptr, size_t size);
+typedef CUresult (CUDAAPI *PFN_cuMemCreate_v10020)(CUmemGenericAllocationHandle_v1 *handle, size_t size, const CUmemAllocationProp_v1 *prop, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemRelease_v10020)(CUmemGenericAllocationHandle_v1 handle);
+typedef CUresult (CUDAAPI *PFN_cuMemMap_v10020)(CUdeviceptr_v2 ptr, size_t size, size_t offset, CUmemGenericAllocationHandle_v1 handle, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemMapArrayAsync_v11010_ptsz)(CUarrayMapInfo_v1 *mapInfoList, unsigned int count, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemUnmap_v10020)(CUdeviceptr_v2 ptr, size_t size);
+typedef CUresult (CUDAAPI *PFN_cuMemSetAccess_v10020)(CUdeviceptr_v2 ptr, size_t size, const CUmemAccessDesc_v1 *desc, size_t count);
+typedef CUresult (CUDAAPI *PFN_cuMemGetAccess_v10020)(unsigned long long *flags, const CUmemLocation_v1 *location, CUdeviceptr_v2 ptr);
+typedef CUresult (CUDAAPI *PFN_cuMemExportToShareableHandle_v10020)(void *shareableHandle, CUmemGenericAllocationHandle_v1 handle, CUmemAllocationHandleType handleType, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemImportFromShareableHandle_v10020)(CUmemGenericAllocationHandle_v1 *handle, void *osHandle, CUmemAllocationHandleType shHandleType);
+typedef CUresult (CUDAAPI *PFN_cuMemGetAllocationGranularity_v10020)(size_t *granularity, const CUmemAllocationProp_v1 *prop, CUmemAllocationGranularity_flags option);
+typedef CUresult (CUDAAPI *PFN_cuMemGetAllocationPropertiesFromHandle_v10020)(CUmemAllocationProp_v1 *prop, CUmemGenericAllocationHandle_v1 handle);
+typedef CUresult (CUDAAPI *PFN_cuMemRetainAllocationHandle_v11000)(CUmemGenericAllocationHandle_v1 *handle, void *addr);
+typedef CUresult (CUDAAPI *PFN_cuMemFreeAsync_v11020_ptsz)(CUdeviceptr_v2 dptr, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocAsync_v11020_ptsz)(CUdeviceptr_v2 *dptr, size_t bytesize, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolTrimTo_v11020)(CUmemoryPool pool, size_t minBytesToKeep);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolSetAttribute_v11020)(CUmemoryPool pool, CUmemPool_attribute attr, void *value);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolGetAttribute_v11020)(CUmemoryPool pool, CUmemPool_attribute attr, void *value);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolSetAccess_v11020)(CUmemoryPool pool, const CUmemAccessDesc_v1 *map, size_t count);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolGetAccess_v11020)(CUmemAccess_flags *flags, CUmemoryPool memPool, CUmemLocation_v1 *location);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolCreate_v11020)(CUmemoryPool *pool, const CUmemPoolProps_v1 *poolProps);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolDestroy_v11020)(CUmemoryPool pool);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocFromPoolAsync_v11020_ptsz)(CUdeviceptr_v2 *dptr, size_t bytesize, CUmemoryPool pool, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolExportToShareableHandle_v11020)(void *handle_out, CUmemoryPool pool, CUmemAllocationHandleType handleType, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolImportFromShareableHandle_v11020)(CUmemoryPool *pool_out, void *handle, CUmemAllocationHandleType handleType, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolExportPointer_v11020)(CUmemPoolPtrExportData_v1 *shareData_out, CUdeviceptr_v2 ptr);
+typedef CUresult (CUDAAPI *PFN_cuMemPoolImportPointer_v11020)(CUdeviceptr_v2 *ptr_out, CUmemoryPool pool, CUmemPoolPtrExportData_v1 *shareData);
+typedef CUresult (CUDAAPI *PFN_cuPointerGetAttribute_v4000)(void *data, CUpointer_attribute attribute, CUdeviceptr_v2 ptr);
+typedef CUresult (CUDAAPI *PFN_cuMemPrefetchAsync_v8000_ptsz)(CUdeviceptr_v2 devPtr, size_t count, CUdevice_v1 dstDevice, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemAdvise_v8000)(CUdeviceptr_v2 devPtr, size_t count, CUmem_advise advice, CUdevice_v1 device);
+typedef CUresult (CUDAAPI *PFN_cuMemRangeGetAttribute_v8000)(void *data, size_t dataSize, CUmem_range_attribute attribute, CUdeviceptr_v2 devPtr, size_t count);
+typedef CUresult (CUDAAPI *PFN_cuMemRangeGetAttributes_v8000)(void **data, size_t *dataSizes, CUmem_range_attribute *attributes, size_t numAttributes, CUdeviceptr_v2 devPtr, size_t count);
+typedef CUresult (CUDAAPI *PFN_cuPointerSetAttribute_v6000)(const void *value, CUpointer_attribute attribute, CUdeviceptr_v2 ptr);
+typedef CUresult (CUDAAPI *PFN_cuPointerGetAttributes_v7000)(unsigned int numAttributes, CUpointer_attribute *attributes, void **data, CUdeviceptr_v2 ptr);
+typedef CUresult (CUDAAPI *PFN_cuStreamCreate_v2000)(CUstream *phStream, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamCreateWithPriority_v5050)(CUstream *phStream, unsigned int flags, int priority);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetPriority_v7000_ptsz)(CUstream hStream, int *priority);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetFlags_v7000_ptsz)(CUstream hStream, unsigned int *flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCtx_v9020_ptsz)(CUstream hStream, CUcontext *pctx);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitEvent_v7000_ptsz)(CUstream hStream, CUevent hEvent, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamAddCallback_v7000_ptsz)(CUstream hStream, CUstreamCallback callback, void *userData, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamBeginCapture_v10010_ptsz)(CUstream hStream, CUstreamCaptureMode mode);
+typedef CUresult (CUDAAPI *PFN_cuThreadExchangeStreamCaptureMode_v10010)(CUstreamCaptureMode *mode);
+typedef CUresult (CUDAAPI *PFN_cuStreamEndCapture_v10000_ptsz)(CUstream hStream, CUgraph *phGraph);
+typedef CUresult (CUDAAPI *PFN_cuStreamIsCapturing_v10000_ptsz)(CUstream hStream, CUstreamCaptureStatus *captureStatus);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCaptureInfo_v10010_ptsz)(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCaptureInfo_v11030_ptsz)(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
+typedef CUresult (CUDAAPI *PFN_cuStreamUpdateCaptureDependencies_v11030_ptsz)(CUstream hStream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamAttachMemAsync_v7000_ptsz)(CUstream hStream, CUdeviceptr_v2 dptr, size_t length, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamQuery_v7000_ptsz)(CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamSynchronize_v7000_ptsz)(CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamDestroy_v4000)(CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamCopyAttributes_v11000_ptsz)(CUstream dst, CUstream src);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetAttribute_v11000_ptsz)(CUstream hStream, CUstreamAttrID attr, CUstreamAttrValue_v1 *value_out);
+typedef CUresult (CUDAAPI *PFN_cuStreamSetAttribute_v11000_ptsz)(CUstream hStream, CUstreamAttrID attr, const CUstreamAttrValue_v1 *value);
+typedef CUresult (CUDAAPI *PFN_cuEventCreate_v2000)(CUevent *phEvent, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuEventRecord_v7000_ptsz)(CUevent hEvent, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuEventRecordWithFlags_v11010_ptsz)(CUevent hEvent, CUstream hStream, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuEventQuery_v2000)(CUevent hEvent);
+typedef CUresult (CUDAAPI *PFN_cuEventSynchronize_v2000)(CUevent hEvent);
+typedef CUresult (CUDAAPI *PFN_cuEventDestroy_v4000)(CUevent hEvent);
+typedef CUresult (CUDAAPI *PFN_cuEventElapsedTime_v2000)(float *pMilliseconds, CUevent hStart, CUevent hEnd);
+typedef CUresult (CUDAAPI *PFN_cuImportExternalMemory_v10000)(CUexternalMemory *extMem_out, const CUDA_EXTERNAL_MEMORY_HANDLE_DESC_v1 *memHandleDesc);
+typedef CUresult (CUDAAPI *PFN_cuExternalMemoryGetMappedBuffer_v10000)(CUdeviceptr_v2 *devPtr, CUexternalMemory extMem, const CUDA_EXTERNAL_MEMORY_BUFFER_DESC_v1 *bufferDesc);
+typedef CUresult (CUDAAPI *PFN_cuExternalMemoryGetMappedMipmappedArray_v10000)(CUmipmappedArray *mipmap, CUexternalMemory extMem, const CUDA_EXTERNAL_MEMORY_MIPMAPPED_ARRAY_DESC_v1 *mipmapDesc);
+typedef CUresult (CUDAAPI *PFN_cuDestroyExternalMemory_v10000)(CUexternalMemory extMem);
+typedef CUresult (CUDAAPI *PFN_cuImportExternalSemaphore_v10000)(CUexternalSemaphore *extSem_out, const CUDA_EXTERNAL_SEMAPHORE_HANDLE_DESC_v1 *semHandleDesc);
+typedef CUresult (CUDAAPI *PFN_cuSignalExternalSemaphoresAsync_v10000_ptsz)(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1 *paramsArray, unsigned int numExtSems, CUstream stream);
+typedef CUresult (CUDAAPI *PFN_cuWaitExternalSemaphoresAsync_v10000_ptsz)(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1 *paramsArray, unsigned int numExtSems, CUstream stream);
+typedef CUresult (CUDAAPI *PFN_cuDestroyExternalSemaphore_v10000)(CUexternalSemaphore extSem);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue32_v8000_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue64_v9000_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue32_v8000_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue64_v9000_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamBatchMemOp_v8000_ptsz)(CUstream stream, unsigned int count, CUstreamBatchMemOpParams_v1 *paramArray, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue32_v11070_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue64_v11070_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue32_v11070_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue64_v11070_ptsz)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamBatchMemOp_v11070_ptsz)(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuFuncGetAttribute_v2020)(int *pi, CUfunction_attribute attrib, CUfunction hfunc);
+typedef CUresult (CUDAAPI *PFN_cuFuncSetAttribute_v9000)(CUfunction hfunc, CUfunction_attribute attrib, int value);
+typedef CUresult (CUDAAPI *PFN_cuFuncSetCacheConfig_v3000)(CUfunction hfunc, CUfunc_cache config);
+typedef CUresult (CUDAAPI *PFN_cuFuncSetSharedMemConfig_v4020)(CUfunction hfunc, CUsharedconfig config);
+typedef CUresult (CUDAAPI *PFN_cuLaunchKernel_v7000_ptsz)(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, void **extra);
+typedef CUresult (CUDAAPI *PFN_cuLaunchKernelEx_v11060_ptsz)(const CUlaunchConfig *config, CUfunction f, void **kernelParams, void **extra);
+typedef CUresult (CUDAAPI *PFN_cuLaunchCooperativeKernel_v9000_ptsz)(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams);
+typedef CUresult (CUDAAPI *PFN_cuLaunchCooperativeKernelMultiDevice_v9000)(CUDA_LAUNCH_PARAMS_v1 *launchParamsList, unsigned int numDevices, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuLaunchHostFunc_v10000_ptsz)(CUstream hStream, CUhostFn fn, void *userData);
+typedef CUresult (CUDAAPI *PFN_cuFuncSetBlockShape_v2000)(CUfunction hfunc, int x, int y, int z);
+typedef CUresult (CUDAAPI *PFN_cuFuncSetSharedSize_v2000)(CUfunction hfunc, unsigned int bytes);
+typedef CUresult (CUDAAPI *PFN_cuParamSetSize_v2000)(CUfunction hfunc, unsigned int numbytes);
+typedef CUresult (CUDAAPI *PFN_cuParamSeti_v2000)(CUfunction hfunc, int offset, unsigned int value);
+typedef CUresult (CUDAAPI *PFN_cuParamSetf_v2000)(CUfunction hfunc, int offset, float value);
+typedef CUresult (CUDAAPI *PFN_cuParamSetv_v2000)(CUfunction hfunc, int offset, void *ptr, unsigned int numbytes);
+typedef CUresult (CUDAAPI *PFN_cuLaunch_v2000)(CUfunction f);
+typedef CUresult (CUDAAPI *PFN_cuLaunchGrid_v2000)(CUfunction f, int grid_width, int grid_height);
+typedef CUresult (CUDAAPI *PFN_cuLaunchGridAsync_v2000)(CUfunction f, int grid_width, int grid_height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuParamSetTexRef_v2000)(CUfunction hfunc, int texunit, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuGraphCreate_v10000)(CUgraph *phGraph, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddKernelNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_KERNEL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphKernelNodeGetParams_v10000)(CUgraphNode hNode, CUDA_KERNEL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphKernelNodeSetParams_v10000)(CUgraphNode hNode, const CUDA_KERNEL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddMemcpyNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_MEMCPY3D_v2 *copyParams, CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemcpyNodeGetParams_v10000)(CUgraphNode hNode, CUDA_MEMCPY3D_v2 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemcpyNodeSetParams_v10000)(CUgraphNode hNode, const CUDA_MEMCPY3D_v2 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddMemsetNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_MEMSET_NODE_PARAMS_v1 *memsetParams, CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemsetNodeGetParams_v10000)(CUgraphNode hNode, CUDA_MEMSET_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemsetNodeSetParams_v10000)(CUgraphNode hNode, const CUDA_MEMSET_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddHostNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_HOST_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphHostNodeGetParams_v10000)(CUgraphNode hNode, CUDA_HOST_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphHostNodeSetParams_v10000)(CUgraphNode hNode, const CUDA_HOST_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddChildGraphNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUgraph childGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphChildGraphNodeGetGraph_v10000)(CUgraphNode hNode, CUgraph *phGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddEmptyNode_v10000)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddEventRecordNode_v11010)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphEventRecordNodeGetEvent_v11010)(CUgraphNode hNode, CUevent *event_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphEventRecordNodeSetEvent_v11010)(CUgraphNode hNode, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddEventWaitNode_v11010)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphEventWaitNodeGetEvent_v11010)(CUgraphNode hNode, CUevent *event_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphEventWaitNodeSetEvent_v11010)(CUgraphNode hNode, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddExternalSemaphoresSignalNode_v11020)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExternalSemaphoresSignalNodeGetParams_v11020)(CUgraphNode hNode, CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 *params_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphExternalSemaphoresSignalNodeSetParams_v11020)(CUgraphNode hNode, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddExternalSemaphoresWaitNode_v11020)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExternalSemaphoresWaitNodeGetParams_v11020)(CUgraphNode hNode, CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 *params_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphExternalSemaphoresWaitNodeSetParams_v11020)(CUgraphNode hNode, const CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddBatchMemOpNode_v11070)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphBatchMemOpNodeGetParams_v11070)(CUgraphNode hNode, CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphBatchMemOpNodeSetParams_v11070)(CUgraphNode hNode, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecBatchMemOpNodeSetParams_v11070)(CUgraphExec graphExec, CUgraphNode node, const CUDA_BATCH_MEM_OP_NODE_PARAMS *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphClone_v10000)(CUgraph *phGraphClone, CUgraph originalGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeFindInClone_v10000)(CUgraphNode *phNode, CUgraphNode hOriginalNode, CUgraph hClonedGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeGetType_v10000)(CUgraphNode hNode, CUgraphNodeType *type);
+typedef CUresult (CUDAAPI *PFN_cuGraphGetNodes_v10000)(CUgraph hGraph, CUgraphNode *nodes, size_t *numNodes);
+typedef CUresult (CUDAAPI *PFN_cuGraphGetRootNodes_v10000)(CUgraph hGraph, CUgraphNode *rootNodes, size_t *numRootNodes);
+typedef CUresult (CUDAAPI *PFN_cuGraphGetEdges_v10000)(CUgraph hGraph, CUgraphNode *from, CUgraphNode *to, size_t *numEdges);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeGetDependencies_v10000)(CUgraphNode hNode, CUgraphNode *dependencies, size_t *numDependencies);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeGetDependentNodes_v10000)(CUgraphNode hNode, CUgraphNode *dependentNodes, size_t *numDependentNodes);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddDependencies_v10000)(CUgraph hGraph, const CUgraphNode *from, const CUgraphNode *to, size_t numDependencies);
+typedef CUresult (CUDAAPI *PFN_cuGraphRemoveDependencies_v10000)(CUgraph hGraph, const CUgraphNode *from, const CUgraphNode *to, size_t numDependencies);
+typedef CUresult (CUDAAPI *PFN_cuGraphDestroyNode_v10000)(CUgraphNode hNode);
+typedef CUresult (CUDAAPI *PFN_cuGraphInstantiate_v11000)(CUgraphExec *phGraphExec, CUgraph hGraph, CUgraphNode *phErrorNode, char *logBuffer, size_t bufferSize);
+typedef CUresult (CUDAAPI *PFN_cuGraphInstantiateWithFlags_v11040)(CUgraphExec *phGraphExec, CUgraph hGraph, unsigned long long flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecKernelNodeSetParams_v10010)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_KERNEL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecMemcpyNodeSetParams_v10020)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_MEMCPY3D_v2 *copyParams, CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecMemsetNodeSetParams_v10020)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_MEMSET_NODE_PARAMS_v1 *memsetParams, CUcontext ctx);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecHostNodeSetParams_v10020)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_HOST_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecChildGraphNodeSetParams_v11010)(CUgraphExec hGraphExec, CUgraphNode hNode, CUgraph childGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecEventRecordNodeSetEvent_v11010)(CUgraphExec hGraphExec, CUgraphNode hNode, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecEventWaitNodeSetEvent_v11010)(CUgraphExec hGraphExec, CUgraphNode hNode, CUevent event);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecExternalSemaphoresSignalNodeSetParams_v11020)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_EXT_SEM_SIGNAL_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecExternalSemaphoresWaitNodeSetParams_v11020)(CUgraphExec hGraphExec, CUgraphNode hNode, const CUDA_EXT_SEM_WAIT_NODE_PARAMS_v1 *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphUpload_v11010_ptsz)(CUgraphExec hGraphExec, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGraphLaunch_v10000_ptsz)(CUgraphExec hGraphExec, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecDestroy_v10000)(CUgraphExec hGraphExec);
+typedef CUresult (CUDAAPI *PFN_cuGraphDestroy_v10000)(CUgraph hGraph);
+typedef CUresult (CUDAAPI *PFN_cuGraphExecUpdate_v10020)(CUgraphExec hGraphExec, CUgraph hGraph, CUgraphNode *hErrorNode_out, CUgraphExecUpdateResult *updateResult_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphKernelNodeCopyAttributes_v11000)(CUgraphNode dst, CUgraphNode src);
+typedef CUresult (CUDAAPI *PFN_cuGraphKernelNodeGetAttribute_v11000)(CUgraphNode hNode, CUkernelNodeAttrID attr, CUkernelNodeAttrValue_v1 *value_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphKernelNodeSetAttribute_v11000)(CUgraphNode hNode, CUkernelNodeAttrID attr, const CUkernelNodeAttrValue_v1 *value);
+typedef CUresult (CUDAAPI *PFN_cuGraphDebugDotPrint_v11030)(CUgraph hGraph, const char *path, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddMemAllocNode_v11040)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUDA_MEM_ALLOC_NODE_PARAMS *nodeParams);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemAllocNodeGetParams_v11040)(CUgraphNode hNode, CUDA_MEM_ALLOC_NODE_PARAMS *params_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphAddMemFreeNode_v11040)(CUgraphNode *phGraphNode, CUgraph hGraph, const CUgraphNode *dependencies, size_t numDependencies, CUdeviceptr dptr);
+typedef CUresult (CUDAAPI *PFN_cuGraphMemFreeNodeGetParams_v11040)(CUgraphNode hNode, CUdeviceptr *dptr_out);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeSetEnabled_v11060)(CUgraphExec hGraphExec, CUgraphNode hNode, unsigned int isEnabled);
+typedef CUresult (CUDAAPI *PFN_cuGraphNodeGetEnabled_v11060)(CUgraphExec hGraphExec, CUgraphNode hNode, unsigned int *isEnabled);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGraphMemTrim_v11040)(CUdevice device);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetGraphMemAttribute_v11040)(CUdevice device, CUgraphMem_attribute attr, void* value);
+typedef CUresult (CUDAAPI *PFN_cuDeviceSetGraphMemAttribute_v11040)(CUdevice device, CUgraphMem_attribute attr, void* value);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxActiveBlocksPerMultiprocessor_v6050)(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags_v7000)(int *numBlocks, CUfunction func, int blockSize, size_t dynamicSMemSize, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxPotentialBlockSize_v6050)(int *minGridSize, int *blockSize, CUfunction func, CUoccupancyB2DSize blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxPotentialBlockSizeWithFlags_v7000)(int *minGridSize, int *blockSize, CUfunction func, CUoccupancyB2DSize blockSizeToDynamicSMemSize, size_t dynamicSMemSize, int blockSizeLimit, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyAvailableDynamicSMemPerBlock_v10020)(size_t *dynamicSmemSize, CUfunction func, int numBlocks, int blockSize);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxPotentialClusterSize_v11070)(int *clusterSize, CUfunction func, const CUlaunchConfig *config);
+typedef CUresult (CUDAAPI *PFN_cuOccupancyMaxActiveClusters_v11070)(int *numClusters, CUfunction func, const CUlaunchConfig *config);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetArray_v2000)(CUtexref hTexRef, CUarray hArray, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetMipmappedArray_v5000)(CUtexref hTexRef, CUmipmappedArray hMipmappedArray, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddress_v3020)(size_t *ByteOffset, CUtexref hTexRef, CUdeviceptr_v2 dptr, size_t bytes);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddress2D_v4010)(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR_v2 *desc, CUdeviceptr_v2 dptr, size_t Pitch);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetFormat_v2000)(CUtexref hTexRef, CUarray_format fmt, int NumPackedComponents);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddressMode_v2000)(CUtexref hTexRef, int dim, CUaddress_mode am);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetFilterMode_v2000)(CUtexref hTexRef, CUfilter_mode fm);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetMipmapFilterMode_v5000)(CUtexref hTexRef, CUfilter_mode fm);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetMipmapLevelBias_v5000)(CUtexref hTexRef, float bias);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetMipmapLevelClamp_v5000)(CUtexref hTexRef, float minMipmapLevelClamp, float maxMipmapLevelClamp);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetMaxAnisotropy_v5000)(CUtexref hTexRef, unsigned int maxAniso);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetBorderColor_v8000)(CUtexref hTexRef, float *pBorderColor);
+typedef CUresult (CUDAAPI *PFN_cuTexRefSetFlags_v2000)(CUtexref hTexRef, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetAddress_v3020)(CUdeviceptr_v2 *pdptr, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetArray_v2000)(CUarray *phArray, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetMipmappedArray_v5000)(CUmipmappedArray *phMipmappedArray, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetAddressMode_v2000)(CUaddress_mode *pam, CUtexref hTexRef, int dim);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetFilterMode_v2000)(CUfilter_mode *pfm, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetFormat_v2000)(CUarray_format *pFormat, int *pNumChannels, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetMipmapFilterMode_v5000)(CUfilter_mode *pfm, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetMipmapLevelBias_v5000)(float *pbias, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetMipmapLevelClamp_v5000)(float *pminMipmapLevelClamp, float *pmaxMipmapLevelClamp, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetMaxAnisotropy_v5000)(int *pmaxAniso, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetBorderColor_v8000)(float *pBorderColor, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefGetFlags_v2000)(unsigned int *pFlags, CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefCreate_v2000)(CUtexref *pTexRef);
+typedef CUresult (CUDAAPI *PFN_cuTexRefDestroy_v2000)(CUtexref hTexRef);
+typedef CUresult (CUDAAPI *PFN_cuSurfRefSetArray_v3000)(CUsurfref hSurfRef, CUarray hArray, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuSurfRefGetArray_v3000)(CUarray *phArray, CUsurfref hSurfRef);
+typedef CUresult (CUDAAPI *PFN_cuTexObjectCreate_v5000)(CUtexObject_v1 *pTexObject, const CUDA_RESOURCE_DESC_v1 *pResDesc, const CUDA_TEXTURE_DESC_v1 *pTexDesc, const CUDA_RESOURCE_VIEW_DESC_v1 *pResViewDesc);
+typedef CUresult (CUDAAPI *PFN_cuTexObjectDestroy_v5000)(CUtexObject_v1 texObject);
+typedef CUresult (CUDAAPI *PFN_cuTexObjectGetResourceDesc_v5000)(CUDA_RESOURCE_DESC_v1 *pResDesc, CUtexObject_v1 texObject);
+typedef CUresult (CUDAAPI *PFN_cuTexObjectGetTextureDesc_v5000)(CUDA_TEXTURE_DESC_v1 *pTexDesc, CUtexObject_v1 texObject);
+typedef CUresult (CUDAAPI *PFN_cuTexObjectGetResourceViewDesc_v5000)(CUDA_RESOURCE_VIEW_DESC_v1 *pResViewDesc, CUtexObject_v1 texObject);
+typedef CUresult (CUDAAPI *PFN_cuSurfObjectCreate_v5000)(CUsurfObject_v1 *pSurfObject, const CUDA_RESOURCE_DESC_v1 *pResDesc);
+typedef CUresult (CUDAAPI *PFN_cuSurfObjectDestroy_v5000)(CUsurfObject_v1 surfObject);
+typedef CUresult (CUDAAPI *PFN_cuSurfObjectGetResourceDesc_v5000)(CUDA_RESOURCE_DESC_v1 *pResDesc, CUsurfObject_v1 surfObject);
+typedef CUresult (CUDAAPI *PFN_cuDeviceCanAccessPeer_v4000)(int *canAccessPeer, CUdevice_v1 dev, CUdevice_v1 peerDev);
+typedef CUresult (CUDAAPI *PFN_cuCtxEnablePeerAccess_v4000)(CUcontext peerContext, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuCtxDisablePeerAccess_v4000)(CUcontext peerContext);
+typedef CUresult (CUDAAPI *PFN_cuDeviceGetP2PAttribute_v8000)(int *value, CUdevice_P2PAttribute attrib, CUdevice_v1 srcDevice, CUdevice_v1 dstDevice);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsUnregisterResource_v3000)(CUgraphicsResource resource);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsSubResourceGetMappedArray_v3000)(CUarray *pArray, CUgraphicsResource resource, unsigned int arrayIndex, unsigned int mipLevel);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsResourceGetMappedMipmappedArray_v5000)(CUmipmappedArray *pMipmappedArray, CUgraphicsResource resource);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsResourceGetMappedPointer_v3020)(CUdeviceptr_v2 *pDevPtr, size_t *pSize, CUgraphicsResource resource);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsResourceSetMapFlags_v6050)(CUgraphicsResource resource, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsMapResources_v7000_ptsz)(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsUnmapResources_v7000_ptsz)(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGetExportTable_v3000)(const void **ppExportTable, const CUuuid *pExportTableId);
+typedef CUresult (CUDAAPI *PFN_cuFuncGetModule_v11000)(CUmodule *hmod, CUfunction hfunc);
+typedef CUresult (CUDAAPI *PFN_cuGetProcAddress_v11030)(const char *symbol, void **pfn, int driverVersion, cuuint64_t flags);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoD_v3020)(CUdeviceptr_v2 dstDevice, const void *srcHost, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoH_v3020)(void *dstHost, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoD_v3020)(CUdeviceptr_v2 dstDevice, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoA_v3020)(CUarray dstArray, size_t dstOffset, CUdeviceptr_v2 srcDevice, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoD_v3020)(CUdeviceptr_v2 dstDevice, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoA_v3020)(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoH_v3020)(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoA_v3020)(CUarray dstArray, size_t dstOffset, CUarray srcArray, size_t srcOffset, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoAAsync_v3020)(CUarray dstArray, size_t dstOffset, const void *srcHost, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoHAsync_v3020)(void *dstHost, CUarray srcArray, size_t srcOffset, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2D_v3020)(const CUDA_MEMCPY2D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2DUnaligned_v3020)(const CUDA_MEMCPY2D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3D_v3020)(const CUDA_MEMCPY3D_v2 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoDAsync_v3020)(CUdeviceptr_v2 dstDevice, const void *srcHost, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoHAsync_v3020)(void *dstHost, CUdeviceptr_v2 srcDevice, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoDAsync_v3020)(CUdeviceptr_v2 dstDevice, CUdeviceptr_v2 srcDevice, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy2DAsync_v3020)(const CUDA_MEMCPY2D_v2 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DAsync_v3020)(const CUDA_MEMCPY3D_v2 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD8_v3020)(CUdeviceptr_v2 dstDevice, unsigned char uc, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD16_v3020)(CUdeviceptr_v2 dstDevice, unsigned short us, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD32_v3020)(CUdeviceptr_v2 dstDevice, unsigned int ui, size_t N);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D8_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D16_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D32_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy_v4000)(CUdeviceptr_v2 dst, CUdeviceptr_v2 src, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyAsync_v4000)(CUdeviceptr_v2 dst, CUdeviceptr_v2 src, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyPeer_v4000)(CUdeviceptr_v2 dstDevice, CUcontext dstContext, CUdeviceptr_v2 srcDevice, CUcontext srcContext, size_t ByteCount);
+typedef CUresult (CUDAAPI *PFN_cuMemcpyPeerAsync_v4000)(CUdeviceptr_v2 dstDevice, CUcontext dstContext, CUdeviceptr_v2 srcDevice, CUcontext srcContext, size_t ByteCount, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DPeer_v4000)(const CUDA_MEMCPY3D_PEER_v1 *pCopy);
+typedef CUresult (CUDAAPI *PFN_cuMemcpy3DPeerAsync_v4000)(const CUDA_MEMCPY3D_PEER_v1 *pCopy, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD8Async_v3020)(CUdeviceptr_v2 dstDevice, unsigned char uc, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD16Async_v3020)(CUdeviceptr_v2 dstDevice, unsigned short us, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD32Async_v3020)(CUdeviceptr_v2 dstDevice, unsigned int ui, size_t N, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D8Async_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned char uc, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D16Async_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned short us, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemsetD2D32Async_v3020)(CUdeviceptr_v2 dstDevice, size_t dstPitch, unsigned int ui, size_t Width, size_t Height, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetPriority_v5050)(CUstream hStream, int *priority);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetFlags_v5050)(CUstream hStream, unsigned int *flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCtx_v9020)(CUstream hStream, CUcontext *pctx);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitEvent_v3020)(CUstream hStream, CUevent hEvent, unsigned int Flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamAddCallback_v5000)(CUstream hStream, CUstreamCallback callback, void *userData, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamAttachMemAsync_v6000)(CUstream hStream, CUdeviceptr_v2 dptr, size_t length, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamQuery_v2000)(CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamSynchronize_v2000)(CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuEventRecord_v2000)(CUevent hEvent, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuEventRecordWithFlags_v11010)(CUevent hEvent, CUstream hStream, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuLaunchKernel_v4000)(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams, void **extra);
+typedef CUresult (CUDAAPI *PFN_cuLaunchKernelEx_v11060)(const CUlaunchConfig *config, CUfunction f, void **kernelParams, void **extra);
+typedef CUresult (CUDAAPI *PFN_cuLaunchHostFunc_v10000)(CUstream hStream, CUhostFn fn, void *userData);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsMapResources_v3000)(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGraphicsUnmapResources_v3000)(unsigned int count, CUgraphicsResource *resources, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue32_v8000)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue32_v8000)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue64_v9000)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue64_v9000)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamBatchMemOp_v8000)(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue32_v11070)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue32_v11070)(CUstream stream, CUdeviceptr_v2 addr, cuuint32_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWriteValue64_v11070)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamWaitValue64_v11070)(CUstream stream, CUdeviceptr_v2 addr, cuuint64_t value, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuStreamBatchMemOp_v11070)(CUstream stream, unsigned int count, CUstreamBatchMemOpParams *paramArray, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuMemPrefetchAsync_v8000)(CUdeviceptr_v2 devPtr, size_t count, CUdevice_v1 dstDevice, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuLaunchCooperativeKernel_v9000)(CUfunction f, unsigned int gridDimX, unsigned int gridDimY, unsigned int gridDimZ, unsigned int blockDimX, unsigned int blockDimY, unsigned int blockDimZ, unsigned int sharedMemBytes, CUstream hStream, void **kernelParams);
+typedef CUresult (CUDAAPI *PFN_cuSignalExternalSemaphoresAsync_v10000)(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_SIGNAL_PARAMS_v1 *paramsArray, unsigned int numExtSems, CUstream stream);
+typedef CUresult (CUDAAPI *PFN_cuWaitExternalSemaphoresAsync_v10000)(const CUexternalSemaphore *extSemArray, const CUDA_EXTERNAL_SEMAPHORE_WAIT_PARAMS_v1 *paramsArray, unsigned int numExtSems, CUstream stream);
+typedef CUresult (CUDAAPI *PFN_cuStreamBeginCapture_v10010)(CUstream hStream, CUstreamCaptureMode mode);
+typedef CUresult (CUDAAPI *PFN_cuStreamEndCapture_v10000)(CUstream hStream, CUgraph *phGraph);
+typedef CUresult (CUDAAPI *PFN_cuStreamIsCapturing_v10000)(CUstream hStream, CUstreamCaptureStatus *captureStatus);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCaptureInfo_v10010)(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetCaptureInfo_v11030)(CUstream hStream, CUstreamCaptureStatus *captureStatus_out, cuuint64_t *id_out, CUgraph *graph_out, const CUgraphNode **dependencies_out, size_t *numDependencies_out);
+typedef CUresult (CUDAAPI *PFN_cuStreamUpdateCaptureDependencies_v11030)(CUstream hStream, CUgraphNode *dependencies, size_t numDependencies, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphUpload_v11010)(CUgraphExec hGraph, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuGraphLaunch_v10000)(CUgraphExec hGraph, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamCopyAttributes_v11000)(CUstream dstStream, CUstream srcStream);
+typedef CUresult (CUDAAPI *PFN_cuStreamGetAttribute_v11000)(CUstream hStream, CUstreamAttrID attr, CUstreamAttrValue_v1 *value);
+typedef CUresult (CUDAAPI *PFN_cuStreamSetAttribute_v11000)(CUstream hStream, CUstreamAttrID attr, const CUstreamAttrValue_v1 *param);
+typedef CUresult (CUDAAPI *PFN_cuMemMapArrayAsync_v11010)(CUarrayMapInfo_v1 *mapInfoList, unsigned int count, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemFreeAsync_v11020)(CUdeviceptr_v2 dptr, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocAsync_v11020)(CUdeviceptr_v2 *dptr, size_t bytesize, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuMemAllocFromPoolAsync_v11020)(CUdeviceptr_v2 *dptr, size_t bytesize, CUmemoryPool pool, CUstream hStream);
+typedef CUresult (CUDAAPI *PFN_cuFlushGPUDirectRDMAWrites_v11030)(CUflushGPUDirectRDMAWritesTarget target, CUflushGPUDirectRDMAWritesScope scope);
+typedef CUresult (CUDAAPI *PFN_cuUserObjectCreate_v11030)(CUuserObject *object_out, void *ptr, CUhostFn destroy, unsigned int initialRefcount, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuUserObjectRetain_v11030)(CUuserObject object, unsigned int count);
+typedef CUresult (CUDAAPI *PFN_cuUserObjectRelease_v11030)(CUuserObject object, unsigned int count);
+typedef CUresult (CUDAAPI *PFN_cuGraphRetainUserObject_v11030)(CUgraph graph, CUuserObject object, unsigned int count, unsigned int flags);
+typedef CUresult (CUDAAPI *PFN_cuGraphReleaseUserObject_v11030)(CUgraph graph, CUuserObject object, unsigned int count);
+typedef CUresult (CUDAAPI *PFN_cuModuleGetLoadingMode_v11070)(CUmoduleLoadingMode *mode);
+typedef CUresult (CUDAAPI *PFN_cuMemGetHandleForAddressRange_v11070)(void *handle, CUdeviceptr dptr, size_t size, CUmemRangeHandleType handleType, unsigned long long flags);
+
+/*
+ * Type definitions for older versioned functions in cuda.h
+ */
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    typedef CUresult (CUDAAPI *PFN_cuMemHostRegister_v4000)(void *p, size_t bytesize, unsigned int Flags);
+    typedef CUresult (CUDAAPI *PFN_cuGraphicsResourceSetMapFlags_v3000)(CUgraphicsResource resource, unsigned int flags);
+    typedef CUresult (CUDAAPI *PFN_cuLinkCreate_v5050)(unsigned int numOptions, CUjit_option *options, void **optionValues, CUlinkState *stateOut);
+    typedef CUresult (CUDAAPI *PFN_cuLinkAddData_v5050)(CUlinkState state, CUjitInputType type, void *data, size_t size, const char *name, unsigned int numOptions, CUjit_option *options, void **optionValues);
+    typedef CUresult (CUDAAPI *PFN_cuLinkAddFile_v5050)(CUlinkState state, CUjitInputType type, const char *path, unsigned int numOptions, CUjit_option *options, void **optionValues);
+    typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddress2D_v3020)(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR_v2 *desc, CUdeviceptr_v2 dptr, size_t Pitch);
+    typedef CUresult (CUDAAPI *PFN_cuDeviceTotalMem_v2000)(unsigned int *bytes, CUdevice_v1 dev);
+    typedef CUresult (CUDAAPI *PFN_cuCtxCreate_v2000)(CUcontext *pctx, unsigned int flags, CUdevice_v1 dev);
+    typedef CUresult (CUDAAPI *PFN_cuModuleGetGlobal_v2000)(CUdeviceptr_v1 *dptr, unsigned int *bytes, CUmodule hmod, const char *name);
+    typedef CUresult (CUDAAPI *PFN_cuMemGetInfo_v2000)(unsigned int *free, unsigned int *total);
+    typedef CUresult (CUDAAPI *PFN_cuMemAlloc_v2000)(CUdeviceptr_v1 *dptr, unsigned int bytesize);
+    typedef CUresult (CUDAAPI *PFN_cuMemAllocPitch_v2000)(CUdeviceptr_v1 *dptr, unsigned int *pPitch, unsigned int WidthInBytes, unsigned int Height, unsigned int ElementSizeBytes);
+    typedef CUresult (CUDAAPI *PFN_cuMemFree_v2000)(CUdeviceptr_v1 dptr);
+    typedef CUresult (CUDAAPI *PFN_cuMemGetAddressRange_v2000)(CUdeviceptr_v1 *pbase, unsigned int *psize, CUdeviceptr_v1 dptr);
+    typedef CUresult (CUDAAPI *PFN_cuMemAllocHost_v2000)(void **pp, unsigned int bytesize);
+    typedef CUresult (CUDAAPI *PFN_cuMemHostGetDevicePointer_v2020)(CUdeviceptr_v1 *pdptr, void *p, unsigned int Flags);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoD_v2000)(CUdeviceptr_v1 dstDevice, const void *srcHost, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoH_v2000)(void *dstHost, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoD_v2000)(CUdeviceptr_v1 dstDevice, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoA_v2000)(CUarray dstArray, unsigned int dstOffset, CUdeviceptr_v1 srcDevice, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoD_v2000)(CUdeviceptr_v1 dstDevice, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoA_v2000)(CUarray dstArray, unsigned int dstOffset, const void *srcHost, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoH_v2000)(void *dstHost, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoA_v2000)(CUarray dstArray, unsigned int dstOffset, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoAAsync_v2000)(CUarray dstArray, unsigned int dstOffset, const void *srcHost, unsigned int ByteCount, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyAtoHAsync_v2000)(void *dstHost, CUarray srcArray, unsigned int srcOffset, unsigned int ByteCount, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpy2D_v2000)(const CUDA_MEMCPY2D_v1 *pCopy);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpy2DUnaligned_v2000)(const CUDA_MEMCPY2D_v1 *pCopy);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpy3D_v2000)(const CUDA_MEMCPY3D_v1 *pCopy);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyHtoDAsync_v2000)(CUdeviceptr_v1 dstDevice, const void *srcHost, unsigned int ByteCount, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoHAsync_v2000)(void *dstHost, CUdeviceptr_v1 srcDevice, unsigned int ByteCount, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpyDtoDAsync_v3000)(CUdeviceptr_v1 dstDevice, CUdeviceptr_v1 srcDevice, unsigned int ByteCount, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpy2DAsync_v2000)(const CUDA_MEMCPY2D_v1 *pCopy, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemcpy3DAsync_v2000)(const CUDA_MEMCPY3D_v1 *pCopy, CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD8_v2000)(CUdeviceptr_v1 dstDevice, unsigned char uc, unsigned int N);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD16_v2000)(CUdeviceptr_v1 dstDevice, unsigned short us, unsigned int N);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD32_v2000)(CUdeviceptr_v1 dstDevice, unsigned int ui, unsigned int N);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD2D8_v2000)(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned char uc, unsigned int Width, unsigned int Height);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD2D16_v2000)(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned short us, unsigned int Width, unsigned int Height);
+    typedef CUresult (CUDAAPI *PFN_cuMemsetD2D32_v2000)(CUdeviceptr_v1 dstDevice, unsigned int dstPitch, unsigned int ui, unsigned int Width, unsigned int Height);
+    typedef CUresult (CUDAAPI *PFN_cuArrayCreate_v2000)(CUarray *pHandle, const CUDA_ARRAY_DESCRIPTOR_v1 *pAllocateArray);
+    typedef CUresult (CUDAAPI *PFN_cuArrayGetDescriptor_v2000)(CUDA_ARRAY_DESCRIPTOR_v1 *pArrayDescriptor, CUarray hArray);
+    typedef CUresult (CUDAAPI *PFN_cuArray3DCreate_v2000)(CUarray *pHandle, const CUDA_ARRAY3D_DESCRIPTOR_v1 *pAllocateArray);
+    typedef CUresult (CUDAAPI *PFN_cuArray3DGetDescriptor_v2000)(CUDA_ARRAY3D_DESCRIPTOR_v1 *pArrayDescriptor, CUarray hArray);
+    typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddress_v2000)(unsigned int *ByteOffset, CUtexref hTexRef, CUdeviceptr_v1 dptr, unsigned int bytes);
+    typedef CUresult (CUDAAPI *PFN_cuTexRefSetAddress2D_v2020)(CUtexref hTexRef, const CUDA_ARRAY_DESCRIPTOR_v1 *desc, CUdeviceptr_v1 dptr, unsigned int Pitch);
+    typedef CUresult (CUDAAPI *PFN_cuTexRefGetAddress_v2000)(CUdeviceptr_v1 *pdptr, CUtexref hTexRef);
+    typedef CUresult (CUDAAPI *PFN_cuGraphicsResourceGetMappedPointer_v3000)(CUdeviceptr_v1 *pDevPtr, unsigned int *pSize, CUgraphicsResource resource);
+    typedef CUresult (CUDAAPI *PFN_cuCtxDestroy_v2000)(CUcontext ctx);
+    typedef CUresult (CUDAAPI *PFN_cuCtxPopCurrent_v2000)(CUcontext *pctx);
+    typedef CUresult (CUDAAPI *PFN_cuCtxPushCurrent_v2000)(CUcontext ctx);
+    typedef CUresult (CUDAAPI *PFN_cuStreamDestroy_v2000)(CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuEventDestroy_v2000)(CUevent hEvent);
+    typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxRelease_v7000)(CUdevice_v1 dev);
+    typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxReset_v7000)(CUdevice_v1 dev);
+    typedef CUresult (CUDAAPI *PFN_cuDevicePrimaryCtxSetFlags_v7000)(CUdevice_v1 dev, unsigned int flags);
+    typedef CUresult (CUDAAPI *PFN_cuStreamBeginCapture_v10000)(CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuStreamBeginCapture_v10000_ptsz)(CUstream hStream);
+    typedef CUresult (CUDAAPI *PFN_cuIpcOpenMemHandle_v4010)(CUdeviceptr_v2 *pdptr, CUipcMemHandle_v1 handle, unsigned int Flags);
+    typedef CUresult (CUDAAPI *PFN_cuGraphInstantiate_v10000)(CUgraphExec *phGraphExec, CUgraph hGraph, CUgraphNode *phErrorNode, char *logBuffer, size_t bufferSize);
+#endif
+
+#ifdef __cplusplus
+}
+#endif // __cplusplus
+
+#endif // file guard
diff --git a/ext/cudart/include/cuda_awbarrier.h b/ext/cudart/include/cuda_awbarrier.h
new file mode 100644
index 00000000..3a7fe8a3
--- /dev/null
+++ b/ext/cudart/include/cuda_awbarrier.h
@@ -0,0 +1,227 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_AWBARRIER_H_
+# define _CUDA_AWBARRIER_H_
+
+# include "cuda_awbarrier_primitives.h"
+
+# if !defined(_CUDA_AWBARRIER_SM_TARGET)
+#  error This file requires compute capability 7.0 or greater.
+# endif
+
+# if !defined(_CUDA_AWBARRIER_CPLUSPLUS_11_OR_LATER)
+#  error This file requires compiler support for the ISO C++ 2011 standard. This support must be enabled with the \
+             -std=c++11 compiler option.
+# endif
+
+_CUDA_AWBARRIER_BEGIN_NAMESPACE
+
+class awbarrier {
+public:
+    class arrival_token {
+    public:
+        arrival_token() = default;
+        ~arrival_token() = default;
+        _CUDA_AWBARRIER_QUALIFIER uint32_t pending_count() const;
+    private:
+        _CUDA_AWBARRIER_QUALIFIER arrival_token(uint64_t token);
+        uint64_t token;
+        friend awbarrier;
+    };
+    awbarrier() = default;
+    awbarrier(const awbarrier&) = delete;
+    awbarrier& operator=(const awbarrier&) = delete;
+    ~awbarrier() = default;
+
+    _CUDA_AWBARRIER_QUALIFIER arrival_token arrive();
+    _CUDA_AWBARRIER_QUALIFIER arrival_token arrive_and_drop();
+    _CUDA_AWBARRIER_QUALIFIER bool timed_wait(arrival_token token, uint32_t hint_cycles);
+    _CUDA_AWBARRIER_QUALIFIER void wait(arrival_token token);
+    _CUDA_AWBARRIER_QUALIFIER void arrive_and_wait();
+    _CUDA_AWBARRIER_STATIC_QUALIFIER __host__ constexpr uint32_t max();
+private:
+    uint64_t barrier;
+    friend _CUDA_AWBARRIER_QUALIFIER void init(awbarrier* barrier, uint32_t expected_count);
+    friend _CUDA_AWBARRIER_QUALIFIER void inval(awbarrier* barrier);
+    friend class pipeline;
+};
+
+_CUDA_AWBARRIER_QUALIFIER
+uint32_t awbarrier::arrival_token::pending_count() const
+{
+    const uint32_t pending_count = _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_token_pending_count(this->token);
+#if (__CUDA_ARCH__ >= 900)
+    return pending_count;
+#else
+    return (pending_count >> 15);
+#endif
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+awbarrier::arrival_token::arrival_token(uint64_t token)
+    : token(token)
+{
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+void init(awbarrier* barrier, uint32_t expected_count)
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+    _CUDA_AWBARRIER_ASSERT(expected_count > 0 && expected_count <= _CUDA_AWBARRIER_MAX_COUNT);
+
+#if (__CUDA_ARCH__ >= 900)
+    const uint32_t init_count = expected_count;
+#else
+    const uint32_t init_count = (expected_count << 15) + expected_count;
+#endif
+
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_init(&barrier->barrier, init_count);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+void inval(awbarrier* barrier)
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_inval(&barrier->barrier);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+awbarrier::arrival_token awbarrier::arrive()
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(&this->barrier));
+
+ #if (__CUDA_ARCH__ < 900)
+    const uint32_t arrive_count = 1 << 15;
+    const uint64_t token = _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop_no_complete<false>(&this->barrier, arrive_count);
+    (void)
+#else
+    const uint64_t token =
+ #endif
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop<false>(&this->barrier);
+
+    return arrival_token(token);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+awbarrier::arrival_token awbarrier::arrive_and_drop()
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(&this->barrier));
+
+ #if (__CUDA_ARCH__ < 900)
+    const uint32_t arrive_count = 1 << 15;
+    const uint64_t token = _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop_no_complete<true>(&this->barrier, arrive_count);
+    (void)
+#else
+    const uint64_t token =
+ #endif
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop<true>(&this->barrier);
+
+    return arrival_token(token);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+bool awbarrier::timed_wait(arrival_token token, uint32_t hint_cycles)
+{
+    constexpr uint64_t max_busy_wait_cycles = 1024;
+    constexpr uint32_t max_sleep_ns = 1 << 20;
+
+    _CUDA_AWBARRIER_ASSERT(__isShared(&this->barrier));
+
+    if (_CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_test_wait(&this->barrier, token.token)) {
+        return true;
+    }
+
+    uint64_t start_cycles = clock64();
+    uint64_t elapsed_cycles = 0;
+    uint32_t sleep_ns = 32;
+    while (elapsed_cycles < hint_cycles) {
+        if (_CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_test_wait(&this->barrier, token.token)) {
+            return true;
+        }
+
+        if (elapsed_cycles > max_busy_wait_cycles) {
+            __nanosleep(sleep_ns);
+            if (sleep_ns < max_sleep_ns) {
+                sleep_ns *= 2;
+            }
+        }
+
+        elapsed_cycles = clock64() - start_cycles;
+    }
+
+    return false;
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+void awbarrier::wait(arrival_token token)
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(&this->barrier));
+
+    while (!timed_wait(token, ~0u));
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+void awbarrier::arrive_and_wait()
+{
+    _CUDA_AWBARRIER_ASSERT(__isShared(&this->barrier));
+
+    this->wait(this->arrive());
+}
+
+_CUDA_AWBARRIER_QUALIFIER __host__
+constexpr uint32_t awbarrier::max()
+{
+    return _CUDA_AWBARRIER_MAX_COUNT;
+}
+
+_CUDA_AWBARRIER_END_NAMESPACE
+
+#endif /* !_CUDA_AWBARRIER_H_ */
diff --git a/ext/cudart/include/cuda_awbarrier_helpers.h b/ext/cudart/include/cuda_awbarrier_helpers.h
new file mode 100644
index 00000000..a112fea7
--- /dev/null
+++ b/ext/cudart/include/cuda_awbarrier_helpers.h
@@ -0,0 +1,350 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_AWBARRIER_HELPERS_H_
+#define _CUDA_AWBARRIER_HELPERS_H_
+
+#define _CUDA_AWBARRIER_NAMESPACE       nvcuda::experimental
+#define _CUDA_AWBARRIER_BEGIN_NAMESPACE namespace nvcuda { namespace experimental {
+#define _CUDA_AWBARRIER_END_NAMESPACE   } }
+
+#define _CUDA_AWBARRIER_INTERNAL_NAMESPACE       _CUDA_AWBARRIER_NAMESPACE::__awbarrier_internal
+#define _CUDA_AWBARRIER_BEGIN_INTERNAL_NAMESPACE _CUDA_AWBARRIER_BEGIN_NAMESPACE namespace __awbarrier_internal {
+#define _CUDA_AWBARRIER_END_INTERNAL_NAMESPACE   } _CUDA_AWBARRIER_END_NAMESPACE
+
+# if !defined(_CUDA_AWBARRIER_QUALIFIER)
+#  define _CUDA_AWBARRIER_QUALIFIER inline __device__
+# endif
+# if !defined(_CUDA_AWBARRIER_STATIC_QUALIFIER)
+#  define _CUDA_AWBARRIER_STATIC_QUALIFIER static inline __device__
+#endif
+
+#if defined(__CUDA_ARCH__)
+#if  (__CUDA_ARCH__ >= 800)
+# define _CUDA_AWBARRIER_SM_TARGET _CUDA_AWBARRIER_SM_80
+#elif (__CUDA_ARCH__ >= 700)
+# define _CUDA_AWBARRIER_SM_TARGET _CUDA_AWBARRIER_SM_70
+#endif // No support < 700
+#else // !defined(__CUDA_ARCH__)
+# define _CUDA_AWBARRIER_SM_TARGET _CUDA_AWBARRIER_SM_70
+#endif // defined(__CUDA_ARCH__)
+
+#define _CUDA_AWBARRIER_MAX_COUNT ((1 << 14) - 1)
+
+#if defined(__cplusplus) && ((__cplusplus >= 201103L) || (defined(_MSC_VER) && (_MSC_VER >= 1900)))
+# define _CUDA_AWBARRIER_CPLUSPLUS_11_OR_LATER
+#endif
+
+#if !defined(_CUDA_AWBARRIER_DEBUG)
+# if defined(__CUDACC_DEBUG__)
+#  define _CUDA_AWBARRIER_DEBUG 1
+# else
+#  define _CUDA_AWBARRIER_DEBUG 0
+# endif
+#endif
+
+#if defined(_CUDA_AWBARRIER_DEBUG) && (_CUDA_AWBARRIER_DEBUG == 1) && !defined(NDEBUG)
+# if !defined(__CUDACC_RTC__)
+#  include <cassert>
+# endif
+# define _CUDA_AWBARRIER_ASSERT(x) assert((x));
+# define _CUDA_AWBARRIER_ABORT() assert(0);
+#else
+# define _CUDA_AWBARRIER_ASSERT(x)
+# define _CUDA_AWBARRIER_ABORT() __trap();
+#endif
+
+#if defined(__CUDACC_RTC__)
+typedef unsigned short     uint16_t;
+typedef unsigned int       uint32_t;
+typedef unsigned long long uint64_t;
+typedef uint64_t           uintptr_t;
+#else
+# include <stdint.h>
+#endif
+
+#if defined(_CUDA_AWBARRIER_SM_TARGET)
+
+typedef uint64_t __mbarrier_t;
+typedef uint64_t __mbarrier_token_t;
+
+_CUDA_AWBARRIER_BEGIN_INTERNAL_NAMESPACE
+
+extern "C" __device__ uint32_t __nvvm_get_smem_pointer(void *);
+
+namespace _CUDA_AWBARRIER_SM_70 {
+    union AWBarrier {
+        struct {
+            uint32_t expected;
+            uint32_t pending;
+        } split;
+        uint64_t raw;
+    };
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    void __awbarrier_init(uint64_t* barrier, uint32_t expected_count) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+        _CUDA_AWBARRIER_ASSERT(expected_count > 0 && expected_count < (1 << 29));
+
+        AWBarrier* awbarrier = reinterpret_cast<AWBarrier*>(barrier);
+
+        awbarrier->split.expected = 0x40000000 - expected_count;
+        awbarrier->split.pending = 0x80000000 - expected_count;
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    void __awbarrier_inval(uint64_t* barrier) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint32_t __awbarrier_token_pending_count(uint64_t token) {
+        const uint32_t pending = token >> 32;
+        return 0x80000000 - (pending & 0x7fffffff);
+    }
+
+    template<bool _Drop>
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint64_t __awbarrier_arrive_drop(uint64_t* barrier) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+        AWBarrier* awbarrier = reinterpret_cast<AWBarrier*>(barrier);
+
+        while ((*reinterpret_cast<volatile uint32_t*>(&awbarrier->split.pending) & 0x7fffffff) == 0);
+
+        if (_Drop) {
+            (void)atomicAdd_block(&awbarrier->split.expected, 1);
+        }
+
+        __threadfence_block();
+
+        const uint32_t old_pending = atomicAdd_block(&awbarrier->split.pending, 1);
+        const uint32_t new_pending = old_pending + 1;
+        const bool reset = (old_pending ^ new_pending) & 0x80000000;
+
+        if (reset) {
+            __threadfence_block();
+
+            uint32_t new_expected = *reinterpret_cast<volatile uint32_t*>(&awbarrier->split.expected);
+            new_expected &= ~0x40000000;
+            if (new_expected & 0x20000000) {
+                new_expected |= 0x40000000;
+            }
+            atomicAdd_block(&awbarrier->split.pending, new_expected);
+        }
+
+        return static_cast<uint64_t>(old_pending) << 32;
+    }
+
+    template<bool _Drop>
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint64_t __awbarrier_arrive_drop_no_complete(uint64_t* barrier, uint32_t count) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+        _CUDA_AWBARRIER_ASSERT(count > 0 && count < (1 << 29));
+
+        AWBarrier* awbarrier = reinterpret_cast<AWBarrier*>(barrier);
+
+        while ((*reinterpret_cast<volatile uint32_t*>(&awbarrier->split.pending) & 0x7fffffff) == 0);
+
+        if (_Drop) {
+            (void)atomicAdd_block(&awbarrier->split.expected, count);
+        }
+
+        return static_cast<uint64_t>(atomicAdd_block(&awbarrier->split.pending, count)) << 32;
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    bool __awbarrier_test_wait(uint64_t* barrier, uint64_t token) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+        volatile AWBarrier* awbarrier = reinterpret_cast<volatile AWBarrier*>(barrier);
+
+        return ((token >> 32) ^ awbarrier->split.pending) & 0x80000000;
+    }
+}; // namespace _CUDA_AWBARRIER_SM_70
+
+namespace _CUDA_AWBARRIER_SM_80 {
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    void __awbarrier_init(uint64_t* barrier, uint32_t expected_count) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+        _CUDA_AWBARRIER_ASSERT(expected_count > 0 && expected_count < (1 << 29));
+
+        asm volatile ("mbarrier.init.shared.b64 [%0], %1;"
+                :
+                : "r"(__nvvm_get_smem_pointer(barrier)), "r"(expected_count)
+                : "memory");
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    void __awbarrier_inval(uint64_t* barrier) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+        asm volatile ("mbarrier.inval.shared.b64 [%0];"
+                :
+                : "r"(__nvvm_get_smem_pointer(barrier))
+                : "memory");
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint32_t __awbarrier_token_pending_count(uint64_t token) {
+        uint32_t __pending_count;
+
+        asm ("mbarrier.pending_count.b64 %0, %1;"
+                : "=r"(__pending_count)
+                : "l"(token));
+        return __pending_count;
+    }
+
+    template<bool _Drop>
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint64_t __awbarrier_arrive_drop(uint64_t* barrier) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+        uint64_t token;
+
+        if (_Drop) {
+            asm volatile ("mbarrier.arrive_drop.shared.b64 %0, [%1];"
+                    : "=l"(token)
+                    : "r"(__nvvm_get_smem_pointer(barrier))
+                    : "memory");
+        } else {
+            asm volatile ("mbarrier.arrive.shared.b64 %0, [%1];"
+                    : "=l"(token)
+                    : "r"(__nvvm_get_smem_pointer(barrier))
+                    : "memory");
+        }
+
+        return token;
+    }
+
+    template<bool _Drop>
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    uint64_t __awbarrier_arrive_drop_no_complete(uint64_t* barrier, uint32_t count) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+        _CUDA_AWBARRIER_ASSERT(count > 0 && count < (1 << 29));
+
+        uint64_t token;
+
+        if (_Drop) {
+            asm volatile ("mbarrier.arrive_drop.noComplete.shared.b64 %0, [%1], %2;"
+                    : "=l"(token)
+                    : "r"(__nvvm_get_smem_pointer(barrier)), "r"(count)
+                    : "memory");
+        } else {
+            asm volatile ("mbarrier.arrive.noComplete.shared.b64 %0, [%1], %2;"
+                    : "=l"(token)
+                    : "r"(__nvvm_get_smem_pointer(barrier)), "r"(count)
+                    : "memory");
+        }
+
+        return token;
+    }
+
+    _CUDA_AWBARRIER_STATIC_QUALIFIER
+    bool __awbarrier_test_wait(uint64_t* barrier, uint64_t token) {
+        _CUDA_AWBARRIER_ASSERT(__isShared(barrier));
+
+        uint16_t __wait_complete;
+
+        asm volatile ("{"
+                "    .reg .pred %%p;"
+                "    mbarrier.test_wait.shared.b64 %%p, [%1], %2;"
+                "    selp.u16 %0, 1, 0, %%p;"
+                "}"
+                : "=h"(__wait_complete)
+                : "r"(__nvvm_get_smem_pointer(barrier)), "l"(token)
+                : "memory");
+        return bool(__wait_complete);
+    }
+
+}; // namespace _CUDA_AWBARRIER_SM_80
+
+_CUDA_AWBARRIER_QUALIFIER
+void awbarrier_init(uint64_t* barrier, uint32_t expected_count)
+{
+    _CUDA_AWBARRIER_SM_TARGET::__awbarrier_init(barrier, expected_count);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+void awbarrier_inval(uint64_t* barrier)
+{
+    _CUDA_AWBARRIER_SM_TARGET::__awbarrier_inval(barrier);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+uint32_t awbarrier_token_pending_count(uint64_t token)
+{
+    return _CUDA_AWBARRIER_SM_TARGET::__awbarrier_token_pending_count(token);
+}
+
+template<bool _Drop>
+_CUDA_AWBARRIER_QUALIFIER
+uint64_t awbarrier_arrive_drop_no_complete(uint64_t* barrier, uint32_t arrive_count)
+{
+    return _CUDA_AWBARRIER_SM_TARGET::__awbarrier_arrive_drop_no_complete<_Drop>(barrier, arrive_count);
+}
+
+template<bool _Drop>
+_CUDA_AWBARRIER_QUALIFIER
+uint64_t awbarrier_arrive_drop(uint64_t* barrier)
+{
+    return _CUDA_AWBARRIER_SM_TARGET::__awbarrier_arrive_drop<_Drop>(barrier);
+}
+
+_CUDA_AWBARRIER_QUALIFIER
+bool awbarrier_test_wait(uint64_t* barrier, uint64_t token)
+{
+    return _CUDA_AWBARRIER_SM_TARGET::__awbarrier_test_wait(barrier, token);
+}
+
+_CUDA_AWBARRIER_END_INTERNAL_NAMESPACE
+
+#endif /* defined(_CUDA_AWBARRIER_SM_TARGET) */
+
+#endif /* !_CUDA_AWBARRIER_HELPERS_H_ */
diff --git a/ext/cudart/include/cuda_awbarrier_primitives.h b/ext/cudart/include/cuda_awbarrier_primitives.h
new file mode 100644
index 00000000..647110a3
--- /dev/null
+++ b/ext/cudart/include/cuda_awbarrier_primitives.h
@@ -0,0 +1,94 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_AWBARRIER_PRIMITIVES_H_
+#define _CUDA_AWBARRIER_PRIMITIVES_H_
+
+#include "cuda_awbarrier_helpers.h"
+
+#if !defined(_CUDA_AWBARRIER_SM_TARGET)
+# error This file requires compute capability 7.0 or greater.
+#endif
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER __host__
+uint32_t __mbarrier_maximum_count() {
+    return _CUDA_AWBARRIER_MAX_COUNT;
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+void __mbarrier_init(__mbarrier_t* barrier, uint32_t expected_count) {
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_init(barrier, expected_count);
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+void __mbarrier_inval(__mbarrier_t* barrier) {
+    _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_inval(barrier);
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+__mbarrier_token_t __mbarrier_arrive(__mbarrier_t* barrier) {
+    return _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop<false>(barrier);
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+__mbarrier_token_t __mbarrier_arrive_and_drop(__mbarrier_t* barrier) {
+    return _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_arrive_drop<true>(barrier);
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+bool __mbarrier_test_wait(__mbarrier_t* barrier, __mbarrier_token_t token) {
+    return _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_test_wait(barrier, token);
+}
+
+_CUDA_AWBARRIER_STATIC_QUALIFIER
+uint32_t __mbarrier_token_pending_count(__mbarrier_token_t token) {
+    return _CUDA_AWBARRIER_INTERNAL_NAMESPACE::awbarrier_token_pending_count(token);
+}
+
+#endif /* !_CUDA_AWBARRIER_PRIMITIVES_H_ */
diff --git a/ext/cudart/include/cuda_bf16.h b/ext/cudart/include/cuda_bf16.h
new file mode 100644
index 00000000..695863c5
--- /dev/null
+++ b/ext/cudart/include/cuda_bf16.h
@@ -0,0 +1,3749 @@
+/*
+* Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+*
+* NOTICE TO LICENSEE:
+*
+* This source code and/or documentation ("Licensed Deliverables") are
+* subject to NVIDIA intellectual property rights under U.S. and
+* international Copyright laws.
+*
+* These Licensed Deliverables contained herein is PROPRIETARY and
+* CONFIDENTIAL to NVIDIA and is being provided under the terms and
+* conditions of a form of NVIDIA software license agreement by and
+* between NVIDIA and Licensee ("License Agreement") or electronically
+* accepted by Licensee.  Notwithstanding any terms or conditions to
+* the contrary in the License Agreement, reproduction or disclosure
+* of the Licensed Deliverables to any third party without the express
+* written consent of NVIDIA is prohibited.
+*
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THESE LICENSED DELIVERABLES.
+*
+* U.S. Government End Users.  These Licensed Deliverables are a
+* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+* 1995), consisting of "commercial computer software" and "commercial
+* computer software documentation" as such terms are used in 48
+* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+* only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+* U.S. Government End Users acquire the Licensed Deliverables with
+* only those rights set forth herein.
+*
+* Any use of the Licensed Deliverables in individual and commercial
+* software must include, in the user documentation and internal
+* comments to the code, the above Disclaimer and U.S. Government End
+* Users Notice.
+*/
+
+/**
+* \defgroup CUDA_MATH_INTRINSIC_BFLOAT16 Bfloat16 Precision Intrinsics
+* This section describes nv_bfloat16 precision intrinsic functions that are
+* only supported in device code.
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT16_ARITHMETIC Bfloat16 Arithmetic Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT162_ARITHMETIC Bfloat162 Arithmetic Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT16_COMPARISON Bfloat16 Comparison Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT162_COMPARISON Bfloat162 Comparison Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT16_MISC Bfloat16 Precision Conversion and Data Movement
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT16_FUNCTIONS Bfloat16 Math Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__BFLOAT162_FUNCTIONS Bfloat162 Math Functions
+* \ingroup CUDA_MATH_INTRINSIC_BFLOAT16
+* To use these functions, include the header file \p cuda_bf16.h in your program.
+*/
+
+#ifndef __CUDA_BF16_H__
+#define __CUDA_BF16_H__
+
+#define ___CUDA_BF16_STRINGIFY_INNERMOST(x) #x
+#define __CUDA_BF16_STRINGIFY(x) ___CUDA_BF16_STRINGIFY_INNERMOST(x)
+
+#if defined(__cplusplus)
+#if defined(__CUDACC__)
+#define __CUDA_BF16_DECL__ static __device__ __inline__
+#define __CUDA_HOSTDEVICE_BF16_DECL__ static __host__ __device__ __inline__
+#else
+#define __CUDA_HOSTDEVICE_BF16_DECL__ static
+#endif /* defined(__CUDACC__) */
+
+#define __CUDA_BF16_TYPES_EXIST__
+
+/* Forward-declaration of structures defined in "cuda_bf16.hpp" */
+
+/**
+ * \brief nv_bfloat16 datatype 
+ * 
+ * \details This structure implements the datatype for storing 
+ * nv_bfloat16 floating-point numbers. The structure implements 
+ * assignment operators and type conversions. 16 bits are being 
+ * used in total: 1 sign bit, 8 bits for the exponent, and 
+ * the significand is being stored in 7 bits. The total 
+ * precision is 8 bits.
+ * 
+ */
+struct __nv_bfloat16;
+
+/**
+ * \brief nv_bfloat162 datatype
+ * 
+ * \details This structure implements the datatype for storing two 
+ * nv_bfloat16 floating-point numbers. 
+ * The structure implements assignment operators and type conversions. 
+ * 
+ */
+struct __nv_bfloat162;
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts double number to nv_bfloat16 precision in round-to-nearest-even mode
+* and returns \p nv_bfloat16 with converted value.
+*
+* \details Converts double number \p a to nv_bfloat16 precision in round-to-nearest-even mode.
+* \param[in] a - double. Is only being read.
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __double2bfloat16(const double a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts float number to nv_bfloat16 precision in round-to-nearest-even mode
+* and returns \p nv_bfloat16 with converted value. 
+* 
+* \details Converts float number \p a to nv_bfloat16 precision in round-to-nearest-even mode. 
+* \param[in] a - float. Is only being read. 
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts float number to nv_bfloat16 precision in round-to-nearest-even mode
+* and returns \p nv_bfloat16 with converted value.
+*
+* \details Converts float number \p a to nv_bfloat16 precision in round-to-nearest-even mode.
+* \param[in] a - float. Is only being read. 
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rn(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts float number to nv_bfloat16 precision in round-towards-zero mode
+* and returns \p nv_bfloat16 with converted value.
+* 
+* \details Converts float number \p a to nv_bfloat16 precision in round-towards-zero mode.
+* \param[in] a - float. Is only being read. 
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rz(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts float number to nv_bfloat16 precision in round-down mode
+* and returns \p nv_bfloat16 with converted value.
+* 
+* \details Converts float number \p a to nv_bfloat16 precision in round-down mode.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rd(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts float number to nv_bfloat16 precision in round-up mode
+* and returns \p nv_bfloat16 with converted value.
+* 
+* \details Converts float number \p a to nv_bfloat16 precision in round-up mode.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p a converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_ru(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts \p nv_bfloat16 number to float.
+* 
+* \details Converts nv_bfloat16 number \p a to float.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns float
+* - \p a converted to float. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ float __bfloat162float(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts input to nv_bfloat16 precision in round-to-nearest-even mode and
+* populates both halves of \p nv_bfloat162 with converted value.
+*
+* \details Converts input \p a to nv_bfloat16 precision in round-to-nearest-even mode and
+* populates both halves of \p nv_bfloat162 with converted value.
+* \param[in] a - float. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 value with both halves equal to the converted nv_bfloat16
+* precision number.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __float2bfloat162_rn(const float a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts both input floats to nv_bfloat16 precision in round-to-nearest-even
+* mode and returns \p nv_bfloat162 with converted values.
+*
+* \details Converts both input floats to nv_bfloat16 precision in round-to-nearest-even mode
+* and combines the results into one \p nv_bfloat162 number. Low 16 bits of the return
+* value correspond to the input \p a, high 16 bits correspond to the input \p
+* b.
+* \param[in] a - float. Is only being read. 
+* \param[in] b - float. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 value with corresponding halves equal to the
+* converted input floats.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __floats2bfloat162_rn(const float a, const float b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts low 16 bits of \p nv_bfloat162 to float and returns the result
+* 
+* \details Converts low 16 bits of \p nv_bfloat162 input \p a to 32-bit floating-point number
+* and returns the result.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns float
+* - The low 16 bits of \p a converted to float.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ float __low2float(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts high 16 bits of \p nv_bfloat162 to float and returns the result
+* 
+* \details Converts high 16 bits of \p nv_bfloat162 input \p a to 32-bit floating-point number
+* and returns the result.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns float
+* - The high 16 bits of \p a converted to float.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ float __high2float(const __nv_bfloat162 a);
+
+#if defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__))
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts both components of float2 number to nv_bfloat16 precision in
+* round-to-nearest-even mode and returns \p nv_bfloat162 with converted values.
+* 
+* \details Converts both components of float2 to nv_bfloat16 precision in round-to-nearest
+* mode and combines the results into one \p nv_bfloat162 number. Low 16 bits of the
+* return value correspond to \p a.x and high 16 bits of the return value
+* correspond to \p a.y.
+* \param[in] a - float2. Is only being read. 
+*  
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 which has corresponding halves equal to the
+* converted float2 components.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __float22bfloat162_rn(const float2 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Converts both halves of \p nv_bfloat162 to float2 and returns the result.
+* 
+* \details Converts both halves of \p nv_bfloat162 input \p a to float2 and returns the
+* result.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns float2
+* - \p a converted to float2.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ float2 __bfloat1622float2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed integer in round-to-nearest-even mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed integer in
+* round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ int __bfloat162int_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed integer in round-towards-zero mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed integer in
+* round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ int __bfloat162int_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed integer in round-down mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed integer in
+* round-down mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ int __bfloat162int_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed integer in round-up mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed integer in
+* round-up mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ int __bfloat162int_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed integer to a nv_bfloat16 in round-to-nearest-even mode.
+* 
+* \details Convert the signed integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rn(const int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed integer to a nv_bfloat16 in round-towards-zero mode.
+* 
+* \details Convert the signed integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rz(const int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the signed integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rd(const int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the signed integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_ru(const int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed short integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed short
+* integer in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ short int __bfloat162short_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed short integer in round-towards-zero mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed short
+* integer in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ short int __bfloat162short_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed short integer in round-down mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed short
+* integer in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ short int __bfloat162short_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed short integer in round-up mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed short
+* integer in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ short int __bfloat162short_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed short integer to a nv_bfloat16 in round-to-nearest-even
+* mode.
+* 
+* \details Convert the signed short integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rn(const short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed short integer to a nv_bfloat16 in round-towards-zero mode.
+* 
+* \details Convert the signed short integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rz(const short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed short integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the signed short integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rd(const short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed short integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the signed short integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_ru(const short int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned integer in round-to-nearest-even mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned integer
+* in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned integer in round-towards-zero mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned integer
+* in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned int __bfloat162uint_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned integer in round-down mode.
+*
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned integer
+* in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+*
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned integer in round-up mode.
+*
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned integer
+* in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+*
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned integer to a nv_bfloat16 in round-to-nearest-even mode.
+* 
+* \details Convert the unsigned integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rn(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned integer to a nv_bfloat16 in round-towards-zero mode.
+* 
+* \details Convert the unsigned integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16.  
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rz(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the unsigned integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rd(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the unsigned integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_ru(const unsigned int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned short integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned short
+* integer in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned short integer in round-towards-zero
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned short
+* integer in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned short int __bfloat162ushort_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned short integer in round-down mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned short
+* integer in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+*/
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned short integer in round-up mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned short
+* integer in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+*/
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned short integer to a nv_bfloat16 in round-to-nearest-even
+* mode.
+* 
+* \details Convert the unsigned short integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rn(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned short integer to a nv_bfloat16 in round-towards-zero
+* mode.
+* 
+* \details Convert the unsigned short integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rz(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned short integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the unsigned short integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rd(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned short integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the unsigned short integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_ru(const unsigned short int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned 64-bit integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned 64-bit
+* integer in round-to-nearest-even mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned 64-bit integer in round-towards-zero
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned 64-bit
+* integer in round-towards-zero mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned long long int __bfloat162ull_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned 64-bit integer in round-down mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned 64-bit
+* integer in round-down mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to an unsigned 64-bit integer in round-up mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to an unsigned 64-bit
+* integer in round-up mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned 64-bit integer to a nv_bfloat16 in round-to-nearest-even
+* mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rn(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned 64-bit integer to a nv_bfloat16 in round-towards-zero
+* mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rz(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned 64-bit integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16.  
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rd(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert an unsigned 64-bit integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_ru(const unsigned long long int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed 64-bit integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed 64-bit
+* integer in round-to-nearest-even mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ long long int __bfloat162ll_rn(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed 64-bit integer in round-towards-zero mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed 64-bit
+* integer in round-towards-zero mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ long long int __bfloat162ll_rz(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed 64-bit integer in round-down mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed 64-bit
+* integer in round-down mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ long long int __bfloat162ll_rd(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a nv_bfloat16 to a signed 64-bit integer in round-up mode.
+* 
+* \details Convert the nv_bfloat16 floating-point value \p h to a signed 64-bit
+* integer in round-up mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ long long int __bfloat162ll_ru(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed 64-bit integer to a nv_bfloat16 in round-to-nearest-even
+* mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rn(const long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed 64-bit integer to a nv_bfloat16 in round-towards-zero mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-towards-zero mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rz(const long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed 64-bit integer to a nv_bfloat16 in round-down mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-down mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rd(const long long int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Convert a signed 64-bit integer to a nv_bfloat16 in round-up mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a nv_bfloat16 floating-point
+* value in round-up mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - \p i converted to nv_bfloat16. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_ru(const long long int i);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Truncate input argument to the integral part.
+* 
+* \details Round \p h to the nearest integer value that does not exceed \p h in
+* magnitude.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The truncated integer value. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 htrunc(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculate ceiling of the input argument.
+* 
+* \details Compute the smallest integer value not less than \p h.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The smallest integer value not less than \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hceil(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculate the largest integer less than or equal to \p h.
+* 
+* \details Calculate the largest integer value which is less than or equal to \p h.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The largest integer value which is less than or equal to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hfloor(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Round input to nearest integer value in nv_bfloat16 floating-point
+* number.
+* 
+* \details Round \p h to the nearest integer value in nv_bfloat16 floating-point
+* format, with bfloat16way cases rounded to the nearest even integer value.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The nearest integer to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hrint(const __nv_bfloat16 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Truncate \p nv_bfloat162 vector input argument to the integral part.
+* 
+* \details Round each component of vector \p h to the nearest integer value that does
+* not exceed \p h in magnitude.
+* \param[in] h - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The truncated \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2trunc(const __nv_bfloat162 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculate \p nv_bfloat162 vector ceiling of the input argument.
+* 
+* \details For each component of vector \p h compute the smallest integer value not less
+* than \p h.
+* \param[in] h - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector of smallest integers not less than \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2ceil(const __nv_bfloat162 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculate the largest integer less than or equal to \p h.
+* 
+* \details For each component of vector \p h calculate the largest integer value which
+* is less than or equal to \p h.
+* \param[in] h - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector of largest integers which is less than or equal to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2floor(const __nv_bfloat162 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Round input to nearest integer value in nv_bfloat16 floating-point
+* number.
+* 
+* \details Round each component of \p nv_bfloat162 vector \p h to the nearest integer value in
+* nv_bfloat16 floating-point format, with bfloat16way cases rounded to the
+* nearest even integer value.
+* \param[in] h - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector of rounded integer values. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rint(const __nv_bfloat162 h);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Returns \p nv_bfloat162 with both halves equal to the input value.
+* 
+* \details Returns \p nv_bfloat162 number with both halves equal to the input \p a \p nv_bfloat16
+* number.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector which has both its halves equal to the input \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __bfloat162bfloat162(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Swaps both halves of the \p nv_bfloat162 input.
+* 
+* \details Swaps both halves of the \p nv_bfloat162 input and returns a new \p nv_bfloat162 number
+* with swapped halves.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - \p a with its halves being swapped. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __lowhigh2highlow(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Extracts low 16 bits from each of the two \p nv_bfloat162 inputs and combines
+* into one \p nv_bfloat162 number. 
+* 
+* \details Extracts low 16 bits from each of the two \p nv_bfloat162 inputs and combines into
+* one \p nv_bfloat162 number. Low 16 bits from input \p a is stored in low 16 bits of
+* the return value, low 16 bits from input \p b is stored in high 16 bits of
+* the return value. 
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The low 16 bits of \p a and of \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __lows2bfloat162(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Extracts high 16 bits from each of the two \p nv_bfloat162 inputs and
+* combines into one \p nv_bfloat162 number.
+* 
+* \details Extracts high 16 bits from each of the two \p nv_bfloat162 inputs and combines into
+* one \p nv_bfloat162 number. High 16 bits from input \p a is stored in low 16 bits of
+* the return value, high 16 bits from input \p b is stored in high 16 bits of
+* the return value.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The high 16 bits of \p a and of \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __highs2bfloat162(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Returns high 16 bits of \p nv_bfloat162 input.
+*
+* \details Returns high 16 bits of \p nv_bfloat162 input \p a.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The high 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __high2bfloat16(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Returns low 16 bits of \p nv_bfloat162 input.
+*
+* \details Returns low 16 bits of \p nv_bfloat162 input \p a.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat16
+* - Returns \p nv_bfloat16 which contains low 16 bits of the input \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __low2bfloat16(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Checks if the input \p nv_bfloat16 number is infinite.
+* 
+* \details Checks if the input \p nv_bfloat16 number \p a is infinite. 
+* \param[in] a - nv_bfloat16. Is only being read. 
+* 
+* \returns int 
+* - -1 iff \p a is equal to negative infinity, 
+* - 1 iff \p a is equal to positive infinity, 
+* - 0 otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ int __hisinf(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Combines two \p nv_bfloat16 numbers into one \p nv_bfloat162 number.
+* 
+* \details Combines two input \p nv_bfloat16 number \p a and \p b into one \p nv_bfloat162 number.
+* Input \p a is stored in low 16 bits of the return value, input \p b is stored
+* in high 16 bits of the return value.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The nv_bfloat162 with one nv_bfloat16 equal to \p a and the other to \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __halves2bfloat162(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Extracts low 16 bits from \p nv_bfloat162 input.
+* 
+* \details Extracts low 16 bits from \p nv_bfloat162 input \p a and returns a new \p nv_bfloat162
+* number which has both halves equal to the extracted bits.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The nv_bfloat162 with both halves equal to the low 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __low2bfloat162(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Extracts high 16 bits from \p nv_bfloat162 input.
+* 
+* \details Extracts high 16 bits from \p nv_bfloat162 input \p a and returns a new \p nv_bfloat162
+* number which has both halves equal to the extracted bits.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The nv_bfloat162 with both halves equal to the high 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __high2bfloat162(const __nv_bfloat162 a);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Reinterprets bits in a \p nv_bfloat16 as a signed short integer.
+* 
+* \details Reinterprets the bits in the nv_bfloat16 floating-point number \p h
+* as a signed short integer. 
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns short int
+* - The reinterpreted value. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ short int __bfloat16_as_short(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Reinterprets bits in a \p nv_bfloat16 as an unsigned short integer.
+* 
+* \details Reinterprets the bits in the nv_bfloat16 floating-point \p h
+* as an unsigned short number.
+* \param[in] h - nv_bfloat16. Is only being read. 
+* 
+* \returns unsigned short int
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ unsigned short int __bfloat16_as_ushort(const __nv_bfloat16 h);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Reinterprets bits in a signed short integer as a \p nv_bfloat16.
+* 
+* \details Reinterprets the bits in the signed short integer \p i as a
+* nv_bfloat16 floating-point number.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __short_as_bfloat16(const short int i);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Reinterprets bits in an unsigned short integer as a \p nv_bfloat16.
+* 
+* \details Reinterprets the bits in the unsigned short integer \p i as a
+* nv_bfloat16 floating-point number.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort_as_bfloat16(const unsigned short int i);
+
+#if !defined warpSize && !defined __local_warpSize
+#define warpSize    32
+#define __local_warpSize
+#endif
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Direct copy from indexed thread. 
+* 
+* \details Returns the value of var held by the thread whose ID is given by delta. 
+* If width is less than warpSize then each subsection of the warp behaves as a separate 
+* entity with a starting logical thread ID of 0. If delta is outside the range [0:width-1], 
+* the value returned corresponds to the value of var held by the delta modulo width (i.e. 
+* within the same subsection). width must have a value which is a power of 2; 
+* results are undefined if width is not a power of 2, or is a number greater than 
+* warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat162. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as nv_bfloat162. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_sync(const unsigned mask, const __nv_bfloat162 var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with lower ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by subtracting delta from the caller's lane ID. 
+* The value of var held by the resulting lane ID is returned: in effect, var is shifted up 
+* the warp by delta threads. If width is less than warpSize then each subsection of the warp 
+* behaves as a separate entity with a starting logical thread ID of 0. The source thread index 
+* will not wrap around the value of width, so effectively the lower delta threads will be unchanged. 
+* width must have a value which is a power of 2; results are undefined if width is not a power of 2, 
+* or is a number greater than warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat162. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as nv_bfloat162. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_up_sync(const unsigned mask, const __nv_bfloat162 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with higher ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by adding delta to the caller's thread ID. 
+* The value of var held by the resulting thread ID is returned: this has the effect 
+* of shifting var down the warp by delta threads. If width is less than warpSize then 
+* each subsection of the warp behaves as a separate entity with a starting logical 
+* thread ID of 0. As for __shfl_up_sync(), the ID number of the source thread 
+* will not wrap around the value of width and so the upper delta threads 
+* will remain unchanged. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat162. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as nv_bfloat162. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_down_sync(const unsigned mask, const __nv_bfloat162 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread based on bitwise XOR of own thread ID. 
+* 
+* \details Calculates a source thread ID by performing a bitwise XOR of the caller's thread ID with mask: 
+* the value of var held by the resulting thread ID is returned. If width is less than warpSize then each 
+* group of width consecutive threads are able to access elements from earlier groups of threads, 
+* however if they attempt to access elements from later groups of threads their own value of var 
+* will be returned. This mode implements a butterfly addressing pattern such as is used in tree 
+* reduction and broadcast. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat162. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as nv_bfloat162. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_xor_sync(const unsigned mask, const __nv_bfloat162 var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Direct copy from indexed thread. 
+* 
+* \details Returns the value of var held by the thread whose ID is given by delta. 
+* If width is less than warpSize then each subsection of the warp behaves as a separate 
+* entity with a starting logical thread ID of 0. If delta is outside the range [0:width-1], 
+* the value returned corresponds to the value of var held by the delta modulo width (i.e. 
+* within the same subsection). width must have a value which is a power of 2; 
+* results are undefined if width is not a power of 2, or is a number greater than 
+* warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat16. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as nv_bfloat16. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_sync(const unsigned mask, const __nv_bfloat16 var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with lower ID relative to the caller. 
+* \details Calculates a source thread ID by subtracting delta from the caller's lane ID. 
+* The value of var held by the resulting lane ID is returned: in effect, var is shifted up 
+* the warp by delta threads. If width is less than warpSize then each subsection of the warp 
+* behaves as a separate entity with a starting logical thread ID of 0. The source thread index 
+* will not wrap around the value of width, so effectively the lower delta threads will be unchanged. 
+* width must have a value which is a power of 2; results are undefined if width is not a power of 2, 
+* or is a number greater than warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat16. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as nv_bfloat16. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_up_sync(const unsigned mask, const __nv_bfloat16 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with higher ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by adding delta to the caller's thread ID. 
+* The value of var held by the resulting thread ID is returned: this has the effect 
+* of shifting var down the warp by delta threads. If width is less than warpSize then 
+* each subsection of the warp behaves as a separate entity with a starting logical 
+* thread ID of 0. As for __shfl_up_sync(), the ID number of the source thread 
+* will not wrap around the value of width and so the upper delta threads 
+* will remain unchanged. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat16. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as nv_bfloat16. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_down_sync(const unsigned mask, const __nv_bfloat16 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread based on bitwise XOR of own thread ID. 
+* 
+* \details Calculates a source thread ID by performing a bitwise XOR of the caller's thread ID with mask: 
+* the value of var held by the resulting thread ID is returned. If width is less than warpSize then each 
+* group of width consecutive threads are able to access elements from earlier groups of threads, 
+* however if they attempt to access elements from later groups of threads their own value of var 
+* will be returned. This mode implements a butterfly addressing pattern such as is used in tree 
+* reduction and broadcast. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - nv_bfloat16. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as nv_bfloat16. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_xor_sync(const unsigned mask, const __nv_bfloat16 var, const int delta, const int width = warpSize);
+
+#if defined(__local_warpSize)
+#undef warpSize
+#undef __local_warpSize
+#endif
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.nc` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldg(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.nc` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldg(const __nv_bfloat16 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cg` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcg(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cg` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcg(const __nv_bfloat16 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.ca` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldca(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.ca` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldca(const __nv_bfloat16 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cs` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcs(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cs` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcs(const __nv_bfloat16 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.lu` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldlu(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.lu` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldlu(const __nv_bfloat16 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cv` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcv(const  __nv_bfloat162 *const ptr);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `ld.global.cv` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcv(const __nv_bfloat16 *const ptr);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.wb` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stwb(__nv_bfloat162 *const ptr, const __nv_bfloat162 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.wb` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stwb(__nv_bfloat16 *const ptr, const __nv_bfloat16 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.cg` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stcg(__nv_bfloat162 *const ptr, const __nv_bfloat162 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.cg` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stcg(__nv_bfloat16 *const ptr, const __nv_bfloat16 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.cs` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stcs(__nv_bfloat162 *const ptr, const __nv_bfloat162 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.cs` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stcs(__nv_bfloat16 *const ptr, const __nv_bfloat16 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.wt` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stwt(__nv_bfloat162 *const ptr, const __nv_bfloat162 value);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_MISC
+* \brief Generates a `st.global.wt` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_BF16_DECL__ void __stwt(__nv_bfloat16 *const ptr, const __nv_bfloat16 value);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs nv_bfloat162 vector if-equal comparison.
+* 
+* \details Performs \p nv_bfloat162 vector if-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector result of if-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __heq2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector not-equal comparison.
+* 
+* \details Performs \p nv_bfloat162 vector not-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector result of not-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hne2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector less-equal comparison.
+*
+* \details Performs \p nv_bfloat162 vector less-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 result of less-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hle2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector greater-equal comparison.
+*
+* \details Performs \p nv_bfloat162 vector greater-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The vector result of greater-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hge2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector less-than comparison.
+*
+* \details Performs \p nv_bfloat162 vector less-than comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The nv_bfloat162 vector result of less-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hlt2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector greater-than comparison.
+* 
+* \details Performs \p nv_bfloat162 vector greater-than comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector result of greater-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgt2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered if-equal comparison.
+* 
+* \details Performs \p nv_bfloat162 vector if-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The vector result of unordered if-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hequ2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered not-equal comparison.
+*
+* \details Performs \p nv_bfloat162 vector not-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The vector result of unordered not-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hneu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered less-equal comparison.
+*
+* Performs \p nv_bfloat162 vector less-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The vector result of unordered less-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hleu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered greater-equal comparison.
+*
+* \details Performs \p nv_bfloat162 vector greater-equal comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 vector result of unordered greater-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgeu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered less-than comparison.
+*
+* \details Performs \p nv_bfloat162 vector less-than comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The vector result of unordered less-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hltu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered greater-than comparison.
+*
+* \details Performs \p nv_bfloat162 vector greater-than comparison of inputs \p a and \p b.
+* The corresponding \p nv_bfloat16 results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The \p nv_bfloat162 vector result of unordered greater-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgtu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Determine whether \p nv_bfloat162 argument is a NaN.
+*
+* \details Determine whether each nv_bfloat16 of input \p nv_bfloat162 number \p a is a NaN.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The nv_bfloat162 with the corresponding \p nv_bfloat16 results set to
+* 1.0 for NaN, 0.0 otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hisnan2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector addition in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat162 vector add of inputs \p a and \p b, in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-95
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The sum of vectors \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p nv_bfloat162 input vector \p b from input vector \p a in
+* round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-104
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The subtraction of vector \p b from \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat162 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-102
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The result of elementwise multiplying the vectors \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector addition in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat162 vector add of inputs \p a and \p b, in round-to-nearest
+* mode. Prevents floating-point contractions of mul+add into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-95
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The sum of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p nv_bfloat162 input vector \p b from input vector \p a in
+* round-to-nearest-even mode. Prevents floating-point contractions of mul+sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-104
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The subtraction of vector \p b from \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat162 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode. Prevents floating-point contractions of mul+add
+* or sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-102
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise multiplying the vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector division in round-to-nearest-even mode.
+*
+* \details Divides \p nv_bfloat162 input vector \p a by input vector \p b in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-103
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise division of \p a with \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __h2div(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Calculates the absolute value of both halves of the input \p nv_bfloat162 number and
+* returns the result.
+*
+* \details Calculates the absolute value of both halves of the input \p nv_bfloat162 number and
+* returns the result.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns bfloat2
+* - Returns \p a with the absolute value of both halves. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __habs2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector addition in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat162 vector add of inputs \p a and \p b, in round-to-nearest
+* mode, and clamps the results to range [0.0, 1.0]. NaN results are flushed to
+* +0.0.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The sum of \p a and \p b, with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector subtraction in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Subtracts \p nv_bfloat162 input vector \p b from input vector \p a in
+* round-to-nearest-even mode, and clamps the results to range [0.0, 1.0]. NaN
+* results are flushed to +0.0.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The subtraction of vector \p b from \p a, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector multiplication in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat162 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode, and clamps the results to range [0.0, 1.0]. NaN
+* results are flushed to +0.0.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The result of elementwise multiplication of vectors \p a and \p b, 
+* with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector fused multiply-add in round-to-nearest-even
+* mode.
+*
+* \details Performs \p nv_bfloat162 vector multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat162 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-105
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* \param[in] c - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector fused multiply-add in round-to-nearest-even
+* mode, with saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat162 vector multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat162 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode, and clamps the
+* results to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* \param[in] c - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c, 
+* with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Negates both halves of the input \p nv_bfloat162 number and returns the
+* result.
+*
+* \details Negates both halves of the input \p nv_bfloat162 number \p a and returns the result.
+* \internal
+* \req DEEPLEARN-SRM_REQ-101
+* \endinternal
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - Returns \p a with both halves negated. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hneg2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Calculates the absolute value of input \p nv_bfloat16 number and returns the result.
+*
+* \details Calculates the absolute value of input \p nv_bfloat16 number and returns the result.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The absolute value of a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __habs(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 addition in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat16 addition of inputs \p a and \p b, in round-to-nearest-even
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-94
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The sum of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p nv_bfloat16 input \p b from input \p a in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-97
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of subtracting \p b from \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat16 multiplication of inputs \p a and \p b, in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-99
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of multiplying \p a and \p b. 
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 addition in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat16 addition of inputs \p a and \p b, in round-to-nearest-even
+* mode. Prevents floating-point contractions of mul+add into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-94
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* - The sum of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd_rn(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p nv_bfloat16 input \p b from input \p a in round-to-nearest
+* mode. Prevents floating-point contractions of mul+sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-97
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* - The result of subtracting \p b from \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub_rn(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat16 multiplication of inputs \p a and \p b, in round-to-nearest
+* mode. Prevents floating-point contractions of mul+add or sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-99
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* - The result of multiplying \p a and \p b.
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul_rn(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 division in round-to-nearest-even mode.
+* 
+* \details Divides \p nv_bfloat16 input \p a by input \p b in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-98
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+* 
+* \returns nv_bfloat16
+* - The result of dividing \p a by \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__  __nv_bfloat16 __hdiv(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 addition in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat16 add of inputs \p a and \p b, in round-to-nearest-even mode,
+* and clamps the result to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The sum of \p a and \p b, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd_sat(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 subtraction in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Subtracts \p nv_bfloat16 input \p b from input \p a in round-to-nearest
+* mode,
+* and clamps the result to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of subtraction of \p b from \p a, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub_sat(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 multiplication in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat16 multiplication of inputs \p a and \p b, in round-to-nearest
+* mode, and clamps the result to range [0.0, 1.0]. NaN results are flushed to
+* +0.0.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of multiplying \p a and \p b, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul_sat(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 fused multiply-add in round-to-nearest-even mode.
+*
+* \details Performs \p nv_bfloat16 multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat16 add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-96
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+* \param[in] c - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 fused multiply-add in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Performs \p nv_bfloat16 multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat16 add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode, and clamps the result
+* to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+* \param[in] c - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c, with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma_sat(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Negates input \p nv_bfloat16 number and returns the result.
+*
+* \details Negates input \p nv_bfloat16 number and returns the result.
+* \internal
+* \req DEEPLEARN-SRM_REQ-100
+* \endinternal
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - minus a
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hneg(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector if-equal comparison and returns boolean true
+* iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector if-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 if-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of if-equal comparison
+* of vectors \p a and \p b are true;
+* - false otherwise.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbeq2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector not-equal comparison and returns boolean
+* true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector not-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 not-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of not-equal comparison
+* of vectors \p a and \p b are true, 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbne2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector less-equal comparison and returns boolean
+* true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector less-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 less-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of less-equal comparison
+* of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hble2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector greater-equal comparison and returns boolean
+* true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector greater-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 greater-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of greater-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbge2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector less-than comparison and returns boolean
+* true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector less-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 less-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of less-than comparison
+* of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hblt2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector greater-than comparison and returns boolean
+* true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector greater-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 greater-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+* 
+* \returns bool 
+* - true if both \p nv_bfloat16 results of greater-than
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbgt2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered if-equal comparison and returns
+* boolean true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector if-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 if-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered if-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbequ2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered not-equal comparison and returns
+* boolean true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector not-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 not-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered not-equal
+* comparison of vectors \p a and \p b are true;
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbneu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered less-equal comparison and returns
+* boolean true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector less-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 less-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered less-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbleu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered greater-equal comparison and
+* returns boolean true iff both \p nv_bfloat16 results are true, boolean false
+* otherwise.
+*
+* \details Performs \p nv_bfloat162 vector greater-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 greater-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered
+* greater-equal comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbgeu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered less-than comparison and returns
+* boolean true iff both \p nv_bfloat16 results are true, boolean false otherwise.
+*
+* \details Performs \p nv_bfloat162 vector less-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 less-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered less-than comparison of 
+* vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbltu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Performs \p nv_bfloat162 vector unordered greater-than comparison and
+* returns boolean true iff both \p nv_bfloat16 results are true, boolean false
+* otherwise.
+*
+* \details Performs \p nv_bfloat162 vector greater-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p nv_bfloat16 greater-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* \param[in] b - nv_bfloat162. Is only being read. 
+*
+* \returns bool
+* - true if both \p nv_bfloat16 results of unordered
+* greater-than comparison of vectors \p a and \p b are true;
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hbgtu2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 if-equal comparison.
+*
+* \details Performs \p nv_bfloat16 if-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of if-equal comparison of \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __heq(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 not-equal comparison.
+*
+* \details Performs \p nv_bfloat16 not-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of not-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hne(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 less-equal comparison.
+*
+* \details Performs \p nv_bfloat16 less-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of less-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hle(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 greater-equal comparison.
+*
+* \details Performs \p nv_bfloat16 greater-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of greater-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hge(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 less-than comparison.
+*
+* \details Performs \p nv_bfloat16 less-than comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of less-than comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hlt(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 greater-than comparison.
+*
+* \details Performs \p nv_bfloat16 greater-than comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of greater-than comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hgt(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered if-equal comparison.
+*
+* \details Performs \p nv_bfloat16 if-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered if-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hequ(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered not-equal comparison.
+*
+* \details Performs \p nv_bfloat16 not-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered not-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hneu(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered less-equal comparison.
+*
+* \details Performs \p nv_bfloat16 less-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered less-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hleu(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered greater-equal comparison.
+*
+* \details Performs \p nv_bfloat16 greater-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered greater-equal comparison of \p a
+* and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hgeu(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered less-than comparison.
+*
+* \details Performs \p nv_bfloat16 less-than comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered less-than comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hltu(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Performs \p nv_bfloat16 unordered greater-than comparison.
+*
+* \details Performs \p nv_bfloat16 greater-than comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - nv_bfloat16. Is only being read. 
+* \param[in] b - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered greater-than comparison of \p a
+* and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hgtu(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Determine whether \p nv_bfloat16 argument is a NaN.
+*
+* \details Determine whether \p nv_bfloat16 value \p a is a NaN.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns bool
+* - true iff argument is NaN. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ bool __hisnan(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Calculates \p nv_bfloat16 maximum of two input values.
+*
+* \details Calculates \p nv_bfloat16 max(\p a, \p b)
+* defined as (\p a > \p b) ? \p a : \p b. 
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmax(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Calculates \p nv_bfloat16 minimum of two input values.
+*
+* \details Calculates \p nv_bfloat16 min(\p a, \p b)
+* defined as (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmin(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Calculates \p nv_bfloat16 maximum of two input values, NaNs pass through.
+*
+* \details Calculates \p nv_bfloat16 max(\p a, \p b)
+* defined as (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmax_nan(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_COMPARISON
+* \brief Calculates \p nv_bfloat16 minimum of two input values, NaNs pass through.
+*
+* \details Calculates \p nv_bfloat16 min(\p a, \p b)
+* defined as (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmin_nan(const __nv_bfloat16 a, const __nv_bfloat16 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Performs \p nv_bfloat16 fused multiply-add in round-to-nearest-even mode with relu saturation.
+*
+* \details Performs \p nv_bfloat16 multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat16 add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* Then negative result is clamped to 0.
+* NaN result is converted to canonical NaN.
+* \param[in] a - nv_bfloat16. Is only being read.
+* \param[in] b - nv_bfloat16. Is only being read.
+* \param[in] c - nv_bfloat16. Is only being read.
+*
+* \returns nv_bfloat16
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c with relu saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma_relu(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Calculates \p nv_bfloat162 vector maximum of two inputs.
+*
+* \details Calculates \p nv_bfloat162 vector max(\p a, \p b).
+* Elementwise \p nv_bfloat16 operation is defined as
+* (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise maximum of vectors \p a  and \p b
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmax2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Calculates \p nv_bfloat162 vector minimum of two inputs.
+*
+* \details Calculates \p nv_bfloat162 vector min(\p a, \p b).
+* Elementwise \p nv_bfloat16 operation is defined as
+* (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise minimum of vectors \p a  and \p b
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmin2(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Calculates \p nv_bfloat162 vector maximum of two inputs, NaNs pass through.
+*
+* \details Calculates \p nv_bfloat162 vector max(\p a, \p b).
+* Elementwise \p nv_bfloat16 operation is defined as
+* (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise maximum of vectors \p a  and \p b, with NaNs pass through
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmax2_nan(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_COMPARISON
+* \brief Calculates \p nv_bfloat162 vector minimum of two inputs, NaNs pass through.
+*
+* \details Calculates \p nv_bfloat162 vector min(\p a, \p b).
+* Elementwise \p nv_bfloat16 operation is defined as
+* (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise minimum of vectors \p a  and \p b, with NaNs pass through
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmin2_nan(const __nv_bfloat162 a, const __nv_bfloat162 b);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs \p nv_bfloat162 vector fused multiply-add in round-to-nearest-even
+* mode with relu saturation.
+*
+* \details Performs \p nv_bfloat162 vector multiply on inputs \p a and \p b,
+* then performs a \p nv_bfloat162 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* Then negative result is clamped to 0.
+* NaN result is converted to canonical NaN.
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+* \param[in] c - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c with relu saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2_relu(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Performs fast complex multiply-accumulate
+*
+* \details Interprets vector \p nv_bfloat162 input pairs \p a, \p b, and \p c as
+* complex numbers in \p nv_bfloat16 precision and performs
+* complex multiply-accumulate operation: a*b + c
+* \param[in] a - nv_bfloat162. Is only being read.
+* \param[in] b - nv_bfloat162. Is only being read.
+* \param[in] c - nv_bfloat162. Is only being read.
+*
+* \returns nv_bfloat162
+* - The result of complex multiply-accumulate operation on complex numbers \p a, \p b, and \p c
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hcmadd(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 square root in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 square root of input \p a in round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The square root of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hsqrt(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 reciprocal square root in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p nv_bfloat16 reciprocal square root of input \p a in round-to-nearest
+* mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The reciprocal square root of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hrsqrt(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 reciprocal in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 reciprocal of input \p a in round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The reciprocal of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hrcp(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 natural logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 natural logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The natural logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 binary logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 binary logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The binary logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog2(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 decimal logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 decimal logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The decimal logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog10(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 natural exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p nv_bfloat16 natural exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The natural exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 binary exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p nv_bfloat16 binary exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The binary exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp2(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 decimal exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p nv_bfloat16 decimal exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The decimal exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp10(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 cosine in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 cosine of input \p a in round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The cosine of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hcos(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT16_FUNCTIONS
+* \brief Calculates \p nv_bfloat16 sine in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat16 sine of input \p a in round-to-nearest-even mode.
+* \param[in] a - nv_bfloat16. Is only being read. 
+*
+* \returns nv_bfloat16
+* - The sine of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 hsin(const __nv_bfloat16 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector square root in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat162 square root of input vector \p a in round-to-nearest
+* mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise square root on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2sqrt(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector reciprocal square root in round-to-nearest
+* mode.
+*
+* \details Calculates \p nv_bfloat162 reciprocal square root of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise reciprocal square root on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rsqrt(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector reciprocal in round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat162 reciprocal of input vector \p a in round-to-nearest-even
+* mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise reciprocal on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rcp(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector natural logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p nv_bfloat162 natural logarithm of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise natural logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector binary logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p nv_bfloat162 binary logarithm of input vector \p a in round-to-nearest
+* mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise binary logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector decimal logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p nv_bfloat162 decimal logarithm of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise decimal logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log10(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p nv_bfloat162 exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector binary exponential function in
+* round-to-nearest-even mode.
+*
+* \details Calculates \p nv_bfloat162 binary exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+*
+* \returns nv_bfloat162
+* - The elementwise binary exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp2(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector decimal exponential function in
+* round-to-nearest-even mode.
+* 
+* \details Calculates \p nv_bfloat162 decimal exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The elementwise decimal exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp10(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector cosine in round-to-nearest-even mode.
+* 
+* \details Calculates \p nv_bfloat162 cosine of input vector \p a in round-to-nearest-even
+* mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The elementwise cosine on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2cos(const __nv_bfloat162 a);
+/**
+* \ingroup CUDA_MATH__BFLOAT162_FUNCTIONS
+* \brief Calculates \p nv_bfloat162 vector sine in round-to-nearest-even mode.
+* 
+* \details Calculates \p nv_bfloat162 sine of input vector \p a in round-to-nearest-even mode.
+* \param[in] a - nv_bfloat162. Is only being read. 
+* 
+* \returns nv_bfloat162
+* - The elementwise sine on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 h2sin(const __nv_bfloat162 a);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT162_ARITHMETIC
+* \brief Vector add \p val to the value stored at \p address in global or shared memory, and writes this
+* value back to \p address. The atomicity of the add operation is guaranteed separately for each of the
+* two nv_bfloat16 elements; the entire __nv_bfloat162 is not guaranteed to be atomic as a single 32-bit access.
+* 
+* \details The location of \p address must be in global or shared memory. This operation has undefined
+* behavior otherwise. This operation is only supported by devices of compute capability 8.x and higher.
+* 
+* \param[in] address - __nv_bfloat162*. An address in global or shared memory.
+* \param[in] val - __nv_bfloat162. The value to be added.
+* 
+* \returns __nv_bfloat162
+* - The old value read from \p address.
+* 
+* \note_ref_guide_atomic
+*/
+__CUDA_BF16_DECL__ __nv_bfloat162 atomicAdd(__nv_bfloat162 *const address, const __nv_bfloat162 val);
+
+/**
+* \ingroup CUDA_MATH__BFLOAT16_ARITHMETIC
+* \brief Adds \p val to the value stored at \p address in global or shared memory, and writes this value
+* back to \p address. This operation is performed in one atomic operation.
+* 
+* \details The location of \p address must be in global or shared memory. This operation has undefined
+* behavior otherwise. This operation is only supported by devices of compute capability 8.x and higher.
+* 
+* \param[in] address - __nv_bfloat16*. An address in global or shared memory.
+* \param[in] val - __nv_bfloat16. The value to be added.
+* 
+* \returns __nv_bfloat16
+* - The old value read from \p address.
+* 
+* \note_ref_guide_atomic
+*/
+__CUDA_BF16_DECL__ __nv_bfloat16 atomicAdd(__nv_bfloat16 *const address, const __nv_bfloat16 val);
+
+#endif /* defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__)) */
+
+#undef __CUDA_BF16_DECL__
+#undef __CUDA_HOSTDEVICE_BF16_DECL__
+
+#endif /* defined(__cplusplus) */
+
+/* Note the .hpp file is included even for host-side compilation, to capture the "nv_bfloat16" & "nv_bfloat162" definitions */
+#include "cuda_bf16.hpp"
+#undef ___CUDA_BF16_STRINGIFY_INNERMOST
+#undef __CUDA_BF16_STRINGIFY
+
+#endif /* end of include guard: __CUDA_BF16_H__ */
diff --git a/ext/cudart/include/cuda_bf16.hpp b/ext/cudart/include/cuda_bf16.hpp
new file mode 100644
index 00000000..1e3858dc
--- /dev/null
+++ b/ext/cudart/include/cuda_bf16.hpp
@@ -0,0 +1,2683 @@
+/*
+* Copyright 1993-2022 NVIDIA Corporation.  All rights reserved.
+*
+* NOTICE TO LICENSEE:
+*
+* This source code and/or documentation ("Licensed Deliverables") are
+* subject to NVIDIA intellectual property rights under U.S. and
+* international Copyright laws.
+*
+* These Licensed Deliverables contained herein is PROPRIETARY and
+* CONFIDENTIAL to NVIDIA and is being provided under the terms and
+* conditions of a form of NVIDIA software license agreement by and
+* between NVIDIA and Licensee ("License Agreement") or electronically
+* accepted by Licensee.  Notwithstanding any terms or conditions to
+* the contrary in the License Agreement, reproduction or disclosure
+* of the Licensed Deliverables to any third party without the express
+* written consent of NVIDIA is prohibited.
+*
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THESE LICENSED DELIVERABLES.
+*
+* U.S. Government End Users.  These Licensed Deliverables are a
+* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+* 1995), consisting of "commercial computer software" and "commercial
+* computer software documentation" as such terms are used in 48
+* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+* only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+* U.S. Government End Users acquire the Licensed Deliverables with
+* only those rights set forth herein.
+*
+* Any use of the Licensed Deliverables in individual and commercial
+* software must include, in the user documentation and internal
+* comments to the code, the above Disclaimer and U.S. Government End
+* Users Notice.
+*/
+
+#if !defined(__CUDA_BF16_HPP__)
+#define __CUDA_BF16_HPP__
+
+#if !defined(__CUDA_BF16_H__)
+#error "Do not include this file directly. Instead, include cuda_bf16.h."
+#endif
+
+#if !defined(_MSC_VER) && __cplusplus >= 201103L
+#   define __CPP_VERSION_AT_LEAST_11_BF16
+#elif _MSC_FULL_VER >= 190024210 && _MSVC_LANG >= 201103L
+#   define __CPP_VERSION_AT_LEAST_11_BF16
+#endif
+
+/* C++11 header for std::move. 
+ * In RTC mode, std::move is provided implicitly; don't include the header
+ */
+#if defined(__CPP_VERSION_AT_LEAST_11_BF16) && !defined(__CUDACC_RTC__)
+#include <utility>
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_BF16) && !defined(__CUDACC_RTC__) */
+
+/* C++ header for std::memcpy (used for type punning in host-side implementations).
+ * When compiling as a CUDA source file memcpy is provided implicitly.
+ * !defined(__CUDACC__) implies !defined(__CUDACC_RTC__).
+ */
+#if defined(__cplusplus) && !defined(__CUDACC__)
+#include <cstring>
+#endif /* defined(__cplusplus) && !defined(__CUDACC__) */
+
+
+/* Set up function decorations */
+#if defined(__CUDACC__)
+#define __CUDA_BF16_DECL__ static __device__ __inline__
+#define __CUDA_HOSTDEVICE_BF16_DECL__ static __host__ __device__ __inline__
+#define __VECTOR_FUNCTIONS_DECL__ static __inline__ __host__ __device__
+#define __CUDA_HOSTDEVICE__ __host__ __device__
+#else /* !defined(__CUDACC__) */
+#if defined(__GNUC__)
+#define __CUDA_HOSTDEVICE_BF16_DECL__ static __attribute__ ((unused))
+#else
+#define __CUDA_HOSTDEVICE_BF16_DECL__ static
+#endif /* defined(__GNUC__) */
+#define __CUDA_HOSTDEVICE__
+#endif /* defined(__CUDACC_) */
+
+/* Set up structure-alignment attribute */
+#if defined(__CUDACC__)
+#define __CUDA_ALIGN__(align) __align__(align)
+#else
+/* Define alignment macro based on compiler type (cannot assume C11 "_Alignas" is available) */
+#if defined(__CPP_VERSION_AT_LEAST_11_BF16)
+#define __CUDA_ALIGN__(n) alignas(n)    /* C++11 kindly gives us a keyword for this */
+#else /* defined(__CPP_VERSION_AT_LEAST_11_BF16)*/
+#if defined(__GNUC__)
+#define __CUDA_ALIGN__(n) __attribute__ ((aligned(n)))
+#elif defined(_MSC_VER)
+#define __CUDA_ALIGN__(n) __declspec(align(n))
+#else
+#define __CUDA_ALIGN__(n)
+#endif /* defined(__GNUC__) */
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_BF16) */
+#endif /* defined(__CUDACC__) */
+
+/* Macros to allow nv_bfloat16 & nv_bfloat162 to be used by inline assembly */
+#define __BFLOAT16_TO_US(var) *(reinterpret_cast<unsigned short *>(&(var)))
+#define __BFLOAT16_TO_CUS(var) *(reinterpret_cast<const unsigned short *>(&(var)))
+#define __BFLOAT162_TO_UI(var) *(reinterpret_cast<unsigned int *>(&(var)))
+#define __BFLOAT162_TO_CUI(var) *(reinterpret_cast<const unsigned int *>(&(var)))
+
+/**
+* Types which allow static initialization of "nv_bfloat16" and "nv_bfloat162" until
+* these become an actual builtin. Note this initialization is as a
+* bitfield representation of "nv_bfloat16", and not a conversion from short->nv_bfloat16.
+* Such a representation will be deprecated in a future version of CUDA. 
+* (Note these are visible to non-nvcc compilers, including C-only compilation)
+*/
+typedef struct __CUDA_ALIGN__(2) {
+    unsigned short x;
+} __nv_bfloat16_raw;
+
+typedef struct __CUDA_ALIGN__(4) {
+    unsigned short x;
+    unsigned short y;
+} __nv_bfloat162_raw;
+
+/* All other definitions in this file are only visible to C++ compilers */
+#if defined(__cplusplus)
+
+/* Hide GCC member initialization list warnings because of host/device in-function init requirement */
+#if defined(__GNUC__)
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#pragma GCC diagnostic ignored "-Weffc++"
+#endif /* __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) */
+#endif /* defined(__GNUC__) */
+
+/* class' : multiple assignment operators specified
+   The class has multiple assignment operators of a single type. This warning is informational */
+#if defined(_MSC_VER) && _MSC_VER >= 1500
+#pragma warning( push )
+#pragma warning( disable:4522 )
+#endif /* defined(__GNUC__) */
+
+struct __CUDA_ALIGN__(2) __nv_bfloat16 {
+protected:
+    unsigned short __x;
+
+public:
+#if defined(__CPP_VERSION_AT_LEAST_11_BF16)
+    __nv_bfloat16() = default;
+#else
+    __CUDA_HOSTDEVICE__ __nv_bfloat16() { }
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_BF16) */
+
+    /* Convert to/from __nv_bfloat16_raw */
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(const __nv_bfloat16_raw &hr) : __x(hr.x) { }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(const __nv_bfloat16_raw &hr) { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ volatile __nv_bfloat16 &operator=(const __nv_bfloat16_raw &hr) volatile { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ volatile __nv_bfloat16 &operator=(const volatile __nv_bfloat16_raw &hr) volatile { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ operator __nv_bfloat16_raw() const { __nv_bfloat16_raw ret; ret.x = __x; return ret; }
+    __CUDA_HOSTDEVICE__ operator __nv_bfloat16_raw() const volatile { __nv_bfloat16_raw ret; ret.x = __x; return ret; }
+
+#if !defined(__CUDA_NO_BFLOAT16_CONVERSIONS__)
+    /* Construct from float/double */
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(const float f) { __x = __float2bfloat16(f).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(const double f) { __x = __double2bfloat16(f).__x;  }
+
+    __CUDA_HOSTDEVICE__ operator float() const { return __bfloat162float(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(const float f) { __x = __float2bfloat16(f).__x; return *this; }
+
+    /* We omit "cast to double" operator, so as to not be ambiguous about up-cast */
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(const double f) { __x = __double2bfloat16(f).__x; return *this; }
+
+/* Member functions only available to nvcc compilation so far */
+#if defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__))
+    /* Allow automatic construction from types supported natively in hardware */
+    /* Note we do avoid constructor init-list because of special host/device compilation rules */
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(short val) { __x = __short2bfloat16_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(unsigned short val) { __x = __ushort2bfloat16_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(int val) { __x = __int2bfloat16_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(unsigned int val) { __x = __uint2bfloat16_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(long long val) { __x = __ll2bfloat16_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16(unsigned long long val) { __x = __ull2bfloat16_rn(val).__x; }
+
+    /* Allow automatic casts to supported builtin types, matching all that are permitted with float */
+    __CUDA_HOSTDEVICE__ operator short() const { return __bfloat162short_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(short val) { __x = __short2bfloat16_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned short() const { return __bfloat162ushort_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(unsigned short val) { __x = __ushort2bfloat16_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator int() const { return __bfloat162int_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(int val) { __x = __int2bfloat16_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned int() const { return __bfloat162uint_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(unsigned int val) { __x = __uint2bfloat16_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator long long() const { return __bfloat162ll_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(long long val) { __x = __ll2bfloat16_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned long long() const { return __bfloat162ull_rz(*this); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat16 &operator=(unsigned long long val) { __x = __ull2bfloat16_rn(val).__x; return *this; }
+
+    /* Boolean conversion - note both 0 and -0 must return false */
+    __CUDA_HOSTDEVICE__ operator bool() const { return (__x & 0x7FFF) != 0; }
+#endif /* defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__)) */
+#endif /* !defined(__CUDA_NO_BFLOAT16_CONVERSIONS__) */
+};
+
+/* Global-space operator functions are only available to nvcc compilation */
+#if defined(__CUDACC__)
+
+#if __CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__)
+#if !defined(__CUDA_NO_BFLOAT16_OPERATORS__)
+/* Some basic arithmetic operations expected of a builtin */
+__device__ __forceinline__ __nv_bfloat16 operator+(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hadd(lh, rh); }
+__device__ __forceinline__ __nv_bfloat16 operator-(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hsub(lh, rh); }
+__device__ __forceinline__ __nv_bfloat16 operator*(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hmul(lh, rh); }
+__device__ __forceinline__ __nv_bfloat16 operator/(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hdiv(lh, rh); }
+
+__device__ __forceinline__ __nv_bfloat16 &operator+=(__nv_bfloat16 &lh, const __nv_bfloat16 &rh) { lh = __hadd(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat16 &operator-=(__nv_bfloat16 &lh, const __nv_bfloat16 &rh) { lh = __hsub(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat16 &operator*=(__nv_bfloat16 &lh, const __nv_bfloat16 &rh) { lh = __hmul(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat16 &operator/=(__nv_bfloat16 &lh, const __nv_bfloat16 &rh) { lh = __hdiv(lh, rh); return lh; }
+
+/* Note for increment and decrement we use the raw value 0x3F80 equating to nv_bfloat16(1.0f), to avoid the extra conversion */
+__device__ __forceinline__ __nv_bfloat16 &operator++(__nv_bfloat16 &h)      { __nv_bfloat16_raw one; one.x = 0x3F80; h += one; return h; }
+__device__ __forceinline__ __nv_bfloat16 &operator--(__nv_bfloat16 &h)      { __nv_bfloat16_raw one; one.x = 0x3F80; h -= one; return h; }
+__device__ __forceinline__ __nv_bfloat16  operator++(__nv_bfloat16 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __nv_bfloat16 ret = h;
+    __nv_bfloat16_raw one;
+    one.x = 0x3F80;
+    h += one;
+    return ret;
+}
+__device__ __forceinline__ __nv_bfloat16  operator--(__nv_bfloat16 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __nv_bfloat16 ret = h;
+    __nv_bfloat16_raw one;
+    one.x = 0x3F80;
+    h -= one;
+    return ret;
+}
+/* Unary plus and inverse operators */
+__device__ __forceinline__ __nv_bfloat16 operator+(const __nv_bfloat16 &h) { return h; }
+__device__ __forceinline__ __nv_bfloat16 operator-(const __nv_bfloat16 &h) { return __hneg(h); }
+
+/* Some basic comparison operations to make it look like a builtin */
+__device__ __forceinline__ bool operator==(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __heq(lh, rh); }
+__device__ __forceinline__ bool operator!=(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hneu(lh, rh); }
+__device__ __forceinline__ bool operator> (const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hgt(lh, rh); }
+__device__ __forceinline__ bool operator< (const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hlt(lh, rh); }
+__device__ __forceinline__ bool operator>=(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hge(lh, rh); }
+__device__ __forceinline__ bool operator<=(const __nv_bfloat16 &lh, const __nv_bfloat16 &rh) { return __hle(lh, rh); }
+#endif /* !defined(__CUDA_NO_BFLOAT16_OPERATORS__) */
+#endif /* __CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__) */
+#endif /* defined(__CUDACC__) */
+
+/* __nv_bfloat162 is visible to non-nvcc host compilers */
+struct __CUDA_ALIGN__(4) __nv_bfloat162 {
+    __nv_bfloat16 x;
+    __nv_bfloat16 y;
+
+    // All construct/copy/assign/move
+public:
+#if defined(__CPP_VERSION_AT_LEAST_11_BF16)
+    __nv_bfloat162() = default;
+    __CUDA_HOSTDEVICE__ __nv_bfloat162(__nv_bfloat162 &&src) { __BFLOAT162_TO_UI(*this) = std::move(__BFLOAT162_TO_CUI(src)); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat162 &operator=(__nv_bfloat162 &&src) { __BFLOAT162_TO_UI(*this) = std::move(__BFLOAT162_TO_CUI(src)); return *this; }
+#else
+    __CUDA_HOSTDEVICE__ __nv_bfloat162() { }
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_BF16) */
+    __CUDA_HOSTDEVICE__ __nv_bfloat162(const __nv_bfloat16 &a, const __nv_bfloat16 &b) : x(a), y(b) { }
+    __CUDA_HOSTDEVICE__ __nv_bfloat162(const __nv_bfloat162 &src) { __BFLOAT162_TO_UI(*this) = __BFLOAT162_TO_CUI(src); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat162 &operator=(const __nv_bfloat162 &src) { __BFLOAT162_TO_UI(*this) = __BFLOAT162_TO_CUI(src); return *this; }
+
+    /* Convert to/from __nv_bfloat162_raw */
+    __CUDA_HOSTDEVICE__ __nv_bfloat162(const __nv_bfloat162_raw &h2r ) { __BFLOAT162_TO_UI(*this) = __BFLOAT162_TO_CUI(h2r); }
+    __CUDA_HOSTDEVICE__ __nv_bfloat162 &operator=(const __nv_bfloat162_raw &h2r) { __BFLOAT162_TO_UI(*this) = __BFLOAT162_TO_CUI(h2r); return *this; }
+    __CUDA_HOSTDEVICE__ operator __nv_bfloat162_raw() const { __nv_bfloat162_raw ret; ret.x = 0U; ret.y = 0U; __BFLOAT162_TO_UI(ret) = __BFLOAT162_TO_CUI(*this); return ret; }
+};
+
+/* Global-space operator functions are only available to nvcc compilation */
+#if defined(__CUDACC__)
+
+#if (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__)) && !defined(__CUDA_NO_BFLOAT162_OPERATORS__)
+
+__device__ __forceinline__ __nv_bfloat162 operator+(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hadd2(lh, rh); }
+__device__ __forceinline__ __nv_bfloat162 operator-(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hsub2(lh, rh); }
+__device__ __forceinline__ __nv_bfloat162 operator*(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hmul2(lh, rh); }
+__device__ __forceinline__ __nv_bfloat162 operator/(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __h2div(lh, rh); }
+
+__device__ __forceinline__ __nv_bfloat162& operator+=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh) { lh = __hadd2(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat162& operator-=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh) { lh = __hsub2(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat162& operator*=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh) { lh = __hmul2(lh, rh); return lh; }
+__device__ __forceinline__ __nv_bfloat162& operator/=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh) { lh = __h2div(lh, rh); return lh; }
+
+__device__ __forceinline__ __nv_bfloat162 &operator++(__nv_bfloat162 &h)      { __nv_bfloat162_raw one; one.x = 0x3F80; one.y = 0x3F80; h = __hadd2(h, one); return h; }
+__device__ __forceinline__ __nv_bfloat162 &operator--(__nv_bfloat162 &h)      { __nv_bfloat162_raw one; one.x = 0x3F80; one.y = 0x3F80; h = __hsub2(h, one); return h; }
+__device__ __forceinline__ __nv_bfloat162  operator++(__nv_bfloat162 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __nv_bfloat162 ret = h;
+    __nv_bfloat162_raw one;
+    one.x = 0x3F80;
+    one.y = 0x3F80;
+    h = __hadd2(h, one);
+    return ret;
+}
+__device__ __forceinline__ __nv_bfloat162  operator--(__nv_bfloat162 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __nv_bfloat162 ret = h;
+    __nv_bfloat162_raw one;
+    one.x = 0x3F80;
+    one.y = 0x3F80;
+    h = __hsub2(h, one);
+    return ret;
+}
+__device__ __forceinline__ __nv_bfloat162 operator+(const __nv_bfloat162 &h) { return h; }
+__device__ __forceinline__ __nv_bfloat162 operator-(const __nv_bfloat162 &h) { return __hneg2(h); }
+
+__device__ __forceinline__ bool operator==(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hbeq2(lh, rh); }
+__device__ __forceinline__ bool operator!=(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hbneu2(lh, rh); }
+__device__ __forceinline__ bool operator>(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hbgt2(lh, rh); }
+__device__ __forceinline__ bool operator<(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hblt2(lh, rh); }
+__device__ __forceinline__ bool operator>=(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hbge2(lh, rh); }
+__device__ __forceinline__ bool operator<=(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh) { return __hble2(lh, rh); }
+
+#endif /* __CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__) */
+#endif /* defined(__CUDACC__) */
+
+/* Restore warning for multiple assignment operators */
+#if defined(_MSC_VER) && _MSC_VER >= 1500
+#pragma warning( pop )
+#endif /* defined(_MSC_VER) && _MSC_VER >= 1500 */
+
+/* Restore -Weffc++ warnings from here on */
+#if defined(__GNUC__)
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#pragma GCC diagnostic pop
+#endif /* __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) */
+#endif /* defined(__GNUC__) */
+
+#undef __CUDA_HOSTDEVICE__
+#undef __CUDA_ALIGN__
+
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned short __internal_float2bfloat16(const float f, unsigned int &sign, unsigned int &remainder)
+{
+    unsigned int x;
+
+#if defined(__CUDA_ARCH__)
+    x = __float_as_uint(f);
+#elif defined(__CUDACC__)
+    (void)memcpy(&x, &f, sizeof(f));
+#else
+    (void)std::memcpy(&x, &f, sizeof(f));
+#endif
+
+    if ((x & 0x7fffffffU) > 0x7f800000U) {
+        sign = 0U;
+        remainder = 0U;
+        return static_cast<unsigned short>(0x7fffU);
+    }
+    sign = x >> 31U;
+    remainder = x << 16U;
+    return static_cast<unsigned short>(x >> 16U);
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __double2bfloat16(const double x)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("{  cvt.rn.bf16.f64 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "d"(x));
+    return val;
+#else
+
+    float f = static_cast<float>(x);
+    const double d = static_cast<double>(f);
+    unsigned int u;
+
+#if defined(__CUDA_ARCH__)
+    u = __float_as_uint(f);
+#elif defined(__CUDACC__)
+    (void)memcpy(&u, &f, sizeof(f));
+#else
+    (void)std::memcpy(&u, &f, sizeof(f));
+#endif
+    bool x_is_not_nan = ((u << (unsigned)1U) <= (unsigned)0xFF000000U);
+
+
+    if ((x > 0.0) && (d > x)) {
+        u--;
+    }
+    if ((x < 0.0) && (d < x)) {
+        u--;
+    }
+    if ((d != x) && x_is_not_nan) {
+        u |= 1U;
+    }
+
+#if defined(__CUDA_ARCH__)
+    f = __int_as_float(static_cast<int>(u));
+#elif defined(__CUDACC__)
+    (void)memcpy(&f, &u, sizeof(f));
+#else
+    (void)std::memcpy(&f, &u, sizeof(f));
+#endif
+
+    return __float2bfloat16(f);
+
+#endif // defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16(const float a)
+{
+    __nv_bfloat16 val;
+#if __CUDA_ARCH__ >= 800
+    asm("{  cvt.rn.bf16.f32 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "f"(a));
+#else
+    __nv_bfloat16_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2bfloat16(a, sign, remainder);
+    if ((remainder > 0x80000000U) || ((remainder == 0x80000000U) && ((r.x & 0x1U) != 0U))) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rn(const float a)
+{
+    __nv_bfloat16 val;
+#if __CUDA_ARCH__ >= 800
+    asm("{  cvt.rn.bf16.f32 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "f"(a));
+#else
+    __nv_bfloat16_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2bfloat16(a, sign, remainder);
+    if ((remainder > 0x80000000U) || ((remainder == 0x80000000U) && ((r.x & 0x1U) != 0U))) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rz(const float a)
+{
+    __nv_bfloat16 val;
+#if __CUDA_ARCH__ >= 800
+    asm("{  cvt.rz.bf16.f32 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "f"(a));
+#else
+    __nv_bfloat16_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2bfloat16(a, sign, remainder);
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_rd(const float a)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("{  cvt.rm.bf16.f32 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "f"(a));
+    return val;
+#else
+    __nv_bfloat16 val;
+    __nv_bfloat16_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2bfloat16(a, sign, remainder);
+    if ((remainder != 0U) && (sign != 0U)) {
+        r.x++;
+    }
+    val = r;
+    return val;
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __float2bfloat16_ru(const float a)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("{  cvt.rp.bf16.f32 %0, %1;}\n" : "=h"(__BFLOAT16_TO_US(val)) : "f"(a));
+    return val;
+#else
+    __nv_bfloat16 val;
+    __nv_bfloat16_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2bfloat16(a, sign, remainder);
+    if ((remainder != 0U) && (sign == 0U)) {
+        r.x++;
+    }
+    val = r;
+    return val;
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __float2bfloat162_rn(const float a)
+{
+    __nv_bfloat162 val;
+#if __CUDA_ARCH__ >= 800
+    asm("{.reg .b16 low;\n"
+        "  cvt.rn.bf16.f32 low, %1;\n"
+        "  mov.b32 %0, {low,low};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "f"(a));
+#else
+    val = __nv_bfloat162(__float2bfloat16_rn(a), __float2bfloat16_rn(a));
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __floats2bfloat162_rn(const float a, const float b)
+{
+    __nv_bfloat162 val;
+#if __CUDA_ARCH__ >= 800
+    asm("{ cvt.rn.bf16x2.f32 %0, %2, %1;}\n"
+        : "=r"(__BFLOAT162_TO_UI(val)) : "f"(a), "f"(b));
+#else
+    val = __nv_bfloat162(__float2bfloat16_rn(a), __float2bfloat16_rn(b));
+#endif
+    return val;
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ float __internal_bfloat162float(const unsigned short h)
+{
+    float f;
+#if defined(__CUDA_ARCH__)
+    #if (__CUDA_ARCH__ >= 900)
+        asm("{ cvt.f32.bf16 %0, %1;}\n" : "=f"(f) : "h"(h));
+    #else
+        asm("{ mov.b32 %0, {0,%1};}\n" : "=f"(f) : "h"(h));
+    #endif
+#else
+    unsigned int u = static_cast<unsigned int>(h) << 16;
+    #if defined(__CUDACC__)
+        (void)memcpy(&f, &u, sizeof(f));
+    #else
+        (void)std::memcpy(&f, &u, sizeof(f));
+    #endif
+#endif
+    return f;
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ float __bfloat162float(const __nv_bfloat16 a)
+{
+    return __internal_bfloat162float(static_cast<__nv_bfloat16_raw>(a).x);
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ float __low2float(const __nv_bfloat162 a)
+{
+    return __internal_bfloat162float(static_cast<__nv_bfloat162_raw>(a).x);
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ float __high2float(const __nv_bfloat162 a)
+{
+    return __internal_bfloat162float(static_cast<__nv_bfloat162_raw>(a).y);
+}
+
+#if defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__))
+
+/* CUDA vector-types compatible vector creation function (note returns __nv_bfloat162, not nv_bfloat162) */
+__VECTOR_FUNCTIONS_DECL__ __nv_bfloat162 make_bfloat162(const __nv_bfloat16 x, const __nv_bfloat16 y)
+{
+    __nv_bfloat162 t; t.x = x; t.y = y; return t;
+}
+#undef __VECTOR_FUNCTIONS_DECL__
+
+
+/* Definitions of intrinsics */
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat162 __float22bfloat162_rn(const float2 a)
+{
+    __nv_bfloat162 val = __floats2bfloat162_rn(a.x, a.y);
+    return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ float2 __bfloat1622float2(const __nv_bfloat162 a)
+{
+    float hi_float;
+    float lo_float;
+    lo_float = __internal_bfloat162float(((__nv_bfloat162_raw)a).x);
+    hi_float = __internal_bfloat162float(((__nv_bfloat162_raw)a).y);
+    return make_float2(lo_float, hi_float);
+}
+__CUDA_BF16_DECL__ int __bfloat162int_rn(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    int val;
+    asm("{  cvt.rni.s32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2int_rn(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ int __bfloat162int_rz(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    int val;
+    asm("{  cvt.rzi.s32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    const float f = __bfloat162float(h);
+    int   i;
+    i = static_cast<int>(f);
+#if !(defined __CUDA_ARCH__)
+    const int max_val = (int)0x7fffffffU;
+    const int min_val = (int)0x80000000U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        i = 0;
+    } else if (f >= static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    }
+#endif
+    return i;
+#endif // defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+}
+__CUDA_BF16_DECL__ int __bfloat162int_rd(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    int val;
+    asm("{  cvt.rmi.s32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2int_rd(__bfloat162float(h));
+#endif
+}
+__CUDA_BF16_DECL__ int __bfloat162int_ru(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    int val;
+    asm("{  cvt.rpi.s32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2int_ru(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rn(const int i)
+{
+#if (defined __CUDA_ARCH__)
+    #if (__CUDA_ARCH__ >= 900)
+        __nv_bfloat16 val;
+       asm("cvt.rn.bf16.s32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+       return val;
+    #else
+        const float ru = __int2float_ru(i);
+        const float rd = __int2float_rd(i);
+        float rz = __int2float_rz(i);
+        if (ru != rd) {
+            rz = __uint_as_float(__float_as_uint(rz) | 1U);
+        }
+        return __float2bfloat16_rn(rz);
+    #endif
+#else
+    const double d = static_cast<double>(i);
+    return __double2bfloat16(d);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rz(const int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rz.bf16.s32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_rz(__int2float_rz(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_rd(const int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rm.bf16.s32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_rd(__int2float_rd(i));
+#endif
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat16 __int2bfloat16_ru(const int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rp.bf16.s32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_ru(__int2float_ru(i));
+#endif
+}
+
+__CUDA_BF16_DECL__ short int __bfloat162short_rn(const __nv_bfloat16 h)
+{
+   short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rni.s16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rni.s16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+
+__CUDA_HOSTDEVICE_BF16_DECL__ short int __bfloat162short_rz(const __nv_bfloat16 h)
+{
+   short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rzi.s16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#elif (defined __CUDA_ARCH__)
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rzi.s16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+    const float f = __bfloat162float(h);
+    val = static_cast<short int>(f);
+    const short int max_val = (short int)0x7fffU;
+    const short int min_val = (short int)0x8000U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        val = 0;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        val = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        val = min_val;
+    }
+#endif
+   return val;
+}
+__CUDA_BF16_DECL__ short int __bfloat162short_rd(const __nv_bfloat16 h)
+{
+   short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rmi.s16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rmi.s16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+__CUDA_BF16_DECL__ short int __bfloat162short_ru(const __nv_bfloat16 h)
+{
+   short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rpi.s16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rpi.s16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rn(const short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rn.bf16.s16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    const float f = static_cast<float>(i);
+    return __float2bfloat16_rn(f);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rz(const short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rz.bf16.s16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_rz(__int2float_rz(static_cast<int>(i)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_rd(const short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rm.bf16.s16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_rd(__int2float_rd(static_cast<int>(i)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __short2bfloat16_ru(const short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rp.bf16.s16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_ru(__int2float_ru(static_cast<int>(i)));
+#endif
+}
+
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_rn(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned int val;
+    asm("{  cvt.rni.u32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2uint_rn(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned int __bfloat162uint_rz(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned int val;
+    asm("{  cvt.rzi.u32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+
+    const float f = __bfloat162float(h);
+    unsigned int i;
+    i = static_cast<unsigned int>(f);
+#if !(defined __CUDA_ARCH__)
+    const unsigned int max_val = 0xffffffffU;
+    const unsigned int min_val = 0U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        i = 0U;
+    } else if (f >= static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    }
+#endif
+    return i;
+
+#endif // defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+}
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_rd(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned int val;
+    asm("{  cvt.rmi.u32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2uint_rd(__bfloat162float(h));
+#endif
+}
+__CUDA_BF16_DECL__ unsigned int __bfloat162uint_ru(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned int val;
+    asm("{  cvt.rpi.u32.bf16 %0, %1;}\n" : "=r"(val) : "h"(__BFLOAT16_TO_CUS(h)));
+    return val;
+#else
+    return __float2uint_ru(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rn(const unsigned int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rn.bf16.u32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#elif (defined __CUDA_ARCH__)
+    const float ru = __uint2float_ru(i);
+    const float rd = __uint2float_rd(i);
+    float rz = __uint2float_rz(i);
+    if (ru != rd) {
+        rz = __uint_as_float(__float_as_uint(rz) | 1U);
+    }
+    return __float2bfloat16_rn(rz);
+#else
+    const double d = static_cast<double>(i);
+    return __double2bfloat16(d);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rz(const unsigned int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rz.bf16.u32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_rz(__uint2float_rz(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_rd(const unsigned int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rm.bf16.u32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_rd(__uint2float_rd(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __uint2bfloat16_ru(const unsigned int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+     __nv_bfloat16 val;
+    asm("cvt.rp.bf16.u32 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "r"(i));
+    return val;
+#else
+    return __float2bfloat16_ru(__uint2float_ru(i));
+#endif
+}
+
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_rn(const __nv_bfloat16 h)
+{
+   unsigned short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rni.u16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rni.u16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned short int __bfloat162ushort_rz(const __nv_bfloat16 h)
+{
+   unsigned short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rzi.u16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#elif (defined __CUDA_ARCH__)
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rzi.u16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+    const float f = __bfloat162float(h);
+    val = static_cast<unsigned short int>(f);
+    const unsigned short int max_val = 0xffffU;
+    const unsigned short int min_val = 0U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        val = 0U;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        val = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        val = min_val;
+    }
+#endif
+   return val;
+}
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_rd(const __nv_bfloat16 h)
+{
+   unsigned short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rmi.u16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rmi.u16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+__CUDA_BF16_DECL__ unsigned short int __bfloat162ushort_ru(const __nv_bfloat16 h)
+{
+   unsigned short int val;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm("cvt.rpi.u16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+   asm("{ .reg.f32 f;\n"
+       "  mov.b32 f, {0,%1};\n"
+       "  cvt.rpi.u16.f32 %0,f;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(h)));
+#endif
+   return val;
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rn(const unsigned short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rn.bf16.u16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    const float f = static_cast<float>(i);
+    return __float2bfloat16_rn(f);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rz(const unsigned short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rz.bf16.u16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_rz(__uint2float_rz(static_cast<unsigned int>(i)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_rd(const unsigned short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rm.bf16.u16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_rd(__uint2float_rd(static_cast<unsigned int>(i)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort2bfloat16_ru(const unsigned short int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 val;
+    asm("cvt.rp.bf16.u16 %0, %1;" : "=h"(__BFLOAT16_TO_US(val)) : "h"(i));
+    return val;
+#else
+    return __float2bfloat16_ru(__uint2float_ru(static_cast<unsigned int>(i)));
+#endif
+}
+
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_rn(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned long long int i;
+    asm("cvt.rni.u64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ull_rn(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ unsigned long long int __bfloat162ull_rz(const __nv_bfloat16 h)
+{
+    unsigned long long int i;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    asm("cvt.rzi.u64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    const float f = __bfloat162float(h);
+    i = static_cast<unsigned long long int>(f);
+#if !(defined __CUDA_ARCH__)
+    const unsigned long long int max_val = 0xffffffffffffffffULL;
+    const unsigned long long int min_val = 0ULL;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        i = 0x8000000000000000ULL;
+    } else if (f >= static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    }
+#endif
+#endif // defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    return i;
+}
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_rd(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned long long int i;
+    asm("cvt.rmi.u64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ull_rd(__bfloat162float(h));
+#endif
+}
+__CUDA_BF16_DECL__ unsigned long long int __bfloat162ull_ru(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned long long int i;
+    asm("cvt.rpi.u64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ull_ru(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rn(const unsigned long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rn.bf16.u64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#elif (defined __CUDA_ARCH__)
+    const float ru = __ull2float_ru(i);
+    const float rd = __ull2float_rd(i);
+    float rz = __ull2float_rz(i);
+    if (ru != rd) {
+        rz = __uint_as_float(__float_as_uint(rz) | 1U);
+    }
+    return __float2bfloat16_rn(rz);
+#else
+    float f = static_cast<float>(i);
+    const unsigned long long int uf = static_cast<unsigned long long int>(f);
+    unsigned int u;
+
+    #if defined(__CUDA_ARCH__)
+        u = __float_as_uint(f);
+    #elif defined(__CUDACC__)
+        (void)memcpy(&u, &f, sizeof(f));
+    #else
+        (void)std::memcpy(&u, &f, sizeof(f));
+    #endif
+
+    // round up happened here
+    // note: no need to handle round up to f == 0x1.p64 specially
+    if (uf > i) {
+        u--;
+    }
+    if (uf != i) {
+        u |= 1U;
+    }
+
+    #if defined(__CUDA_ARCH__)
+        f = __int_as_float(static_cast<int>(u));
+    #elif defined(__CUDACC__)
+        (void)memcpy(&f, &u, sizeof(f));
+    #else
+        (void)std::memcpy(&f, &u, sizeof(f));
+    #endif
+
+    return __float2bfloat16_rn(f);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rz(const unsigned long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rz.bf16.u64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_rz(__ull2float_rz(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_rd(const unsigned long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rm.bf16.u64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_rd(__ull2float_rd(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ull2bfloat16_ru(const unsigned long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rp.bf16.u64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_ru(__ull2float_ru(i));
+#endif
+}
+__CUDA_BF16_DECL__ long long int __bfloat162ll_rn(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    long long int i;
+    asm("cvt.rni.s64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ll_rn(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ long long int __bfloat162ll_rz(const __nv_bfloat16 h)
+{
+    long long int i;
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    asm("cvt.rzi.s64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+#else
+    const float f = __bfloat162float(h);
+    i = static_cast<long long int>(f);
+#if !(defined __CUDA_ARCH__)
+    const long long int max_val = (long long int)0x7fffffffffffffffULL;
+    const long long int min_val = (long long int)0x8000000000000000ULL;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__nv_bfloat16_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xFF00U) {
+        // NaN
+        i = min_val;
+    } else if (f >= static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    }
+#endif
+#endif // defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    return i;
+}
+__CUDA_BF16_DECL__ long long int __bfloat162ll_rd(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    long long int i;
+    asm("cvt.rmi.s64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ll_rd(__bfloat162float(h));
+#endif
+}
+__CUDA_BF16_DECL__ long long int __bfloat162ll_ru(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    long long int i;
+    asm("cvt.rpi.s64.bf16 %0, %1;" : "=l"(i) : "h"(__BFLOAT16_TO_CUS(h)));
+    return i;
+#else
+    return __float2ll_ru(__bfloat162float(h));
+#endif
+}
+__CUDA_HOSTDEVICE_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rn(const long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rn.bf16.s64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#elif (defined __CUDA_ARCH__)
+    const float ru = __ll2float_ru(i);
+    const float rd = __ll2float_rd(i);
+    float rz = __ll2float_rz(i);
+    if (ru != rd) {
+        rz = __uint_as_float(__float_as_uint(rz) | 1U);
+    }
+    return __float2bfloat16_rn(rz);
+#else
+    float f = static_cast<float>(i);
+    const long long int lf = static_cast<long long int>(f);
+    unsigned int u;
+
+    #if defined(__CUDA_ARCH__)
+        u = __float_as_uint(f);
+    #elif defined(__CUDACC__)
+        (void)memcpy(&u, &f, sizeof(f));
+    #else
+        (void)std::memcpy(&u, &f, sizeof(f));
+    #endif
+
+    if ((f > 0.0f) && (lf > i)) {
+        u--;
+    }
+    if ((f < 0.0f) && (lf < i)) {
+        u--;
+    }
+    if (lf != i) {
+        u |= 1U;
+    }
+
+    #if defined(__CUDA_ARCH__)
+        f = __int_as_float(static_cast<int>(u));
+    #elif defined(__CUDACC__)
+        (void)memcpy(&f, &u, sizeof(f));
+    #else
+        (void)std::memcpy(&f, &u, sizeof(f));
+    #endif
+
+    return __float2bfloat16_rn(f);
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rz(const long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rz.bf16.s64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_rz(__ll2float_rz(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_rd(const long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rm.bf16.s64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_rd(__ll2float_rd(i));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ll2bfloat16_ru(const long long int i)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 h;
+    asm("cvt.rp.bf16.s64 %0, %1;" : "=h"(__BFLOAT16_TO_US(h)) : "l"(i));
+    return h;
+#else
+    return __float2bfloat16_ru(__ll2float_ru(i));
+#endif
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat16 htrunc(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm("cvt.rzi.bf16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(h)));
+    return r;
+#else
+    return __float2bfloat16_rz(truncf(__bfloat162float(h)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hceil(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm("cvt.rpi.bf16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(h)));
+    return r;
+#else
+    return __float2bfloat16_ru(ceilf(__bfloat162float(h)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hfloor(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm("cvt.rmi.bf16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(h)));
+    return r;
+#else
+    return __float2bfloat16_rd(floorf(__bfloat162float(h)));
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hrint(const __nv_bfloat16 h)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm("cvt.rni.bf16.bf16 %0, %1;" : "=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(h)));
+    return r;
+#else
+    return __float2bfloat16_rn(rintf(__bfloat162float(h)));
+#endif
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat162 h2trunc(const __nv_bfloat162 h)
+{
+    const __nv_bfloat16 low = __float2bfloat16_rz(truncf(__low2float(h)));
+    const __nv_bfloat16 high = __float2bfloat16_rz(truncf(__high2float(h)));
+    return __nv_bfloat162(low, high);
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2ceil(const __nv_bfloat162 h)
+{
+    const __nv_bfloat16 low = __float2bfloat16_ru(ceilf(__low2float(h)));
+    const __nv_bfloat16 high = __float2bfloat16_ru(ceilf(__high2float(h)));
+    return __nv_bfloat162(low, high);
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2floor(const __nv_bfloat162 h)
+{
+    const __nv_bfloat16 low = __float2bfloat16_rd(floorf(__low2float(h)));
+    const __nv_bfloat16 high = __float2bfloat16_rd(floorf(__high2float(h)));
+    return __nv_bfloat162(low, high);
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rint(const __nv_bfloat162 h)
+{
+    return __halves2bfloat162(hrint(__low2bfloat16(h)), hrint(__high2bfloat16(h)));
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __lows2bfloat162(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm("{.reg .b16 alow,ahigh,blow,bhigh;\n"
+        "  mov.b32 {alow,ahigh}, %1;\n"
+        "  mov.b32 {blow,bhigh}, %2;\n"
+        "  mov.b32 %0, {alow,blow};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)), "r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __highs2bfloat162(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm("{.reg .b16 alow,ahigh,blow,bhigh;\n"
+        "  mov.b32 {alow,ahigh}, %1;\n"
+        "  mov.b32 {blow,bhigh}, %2;\n"
+        "  mov.b32 %0, {ahigh,bhigh};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)), "r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __low2bfloat16(const __nv_bfloat162 a)
+{
+    __nv_bfloat16 ret;
+    asm("{.reg .b16 low,high;\n"
+        " mov.b32 {low,high}, %1;\n"
+        " mov.b16 %0, low;}" : "=h"(__BFLOAT16_TO_US(ret)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return ret;
+}
+__CUDA_BF16_DECL__ int __hisinf(const __nv_bfloat16 a)
+{
+    int retval;
+    if (__BFLOAT16_TO_CUS(a) == 0xFF80U) {
+        retval = -1;
+    } else if (__BFLOAT16_TO_CUS(a) == 0x7F80U) {
+        retval = 1;
+    } else {
+        retval = 0;
+    }
+    return retval;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __low2bfloat162(const __nv_bfloat162 a)
+{
+    __nv_bfloat162 val;
+    asm("{.reg .b16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {low,low};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __high2bfloat162(const __nv_bfloat162 a)
+{
+    __nv_bfloat162 val;
+    asm("{.reg .b16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {high,high};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __high2bfloat16(const __nv_bfloat162 a)
+{
+    __nv_bfloat16 ret;
+    asm("{.reg .b16 low,high;\n"
+        " mov.b32 {low,high}, %1;\n"
+        " mov.b16 %0, high;}" : "=h"(__BFLOAT16_TO_US(ret)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __halves2bfloat162(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat162 val;
+    asm("{  mov.b32 %0, {%1,%2};}\n"
+        : "=r"(__BFLOAT162_TO_UI(val)) : "h"(__BFLOAT16_TO_CUS(a)), "h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __bfloat162bfloat162(const __nv_bfloat16 a)
+{
+    __nv_bfloat162 val;
+    asm("{  mov.b32 %0, {%1,%1};}\n"
+        : "=r"(__BFLOAT162_TO_UI(val)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __lowhigh2highlow(const __nv_bfloat162 a)
+{
+    __nv_bfloat162 val;
+    asm("{.reg .b16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {high,low};}\n" : "=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ short int __bfloat16_as_short(const __nv_bfloat16 h)
+{
+    return static_cast<short int>(__BFLOAT16_TO_CUS(h));
+}
+__CUDA_BF16_DECL__ unsigned short int __bfloat16_as_ushort(const __nv_bfloat16 h)
+{
+    return __BFLOAT16_TO_CUS(h);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __short_as_bfloat16(const short int i)
+{
+    __nv_bfloat16 h;
+    __BFLOAT16_TO_US(h) = static_cast<unsigned short int>(i);
+    return h;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ushort_as_bfloat16(const unsigned short int i)
+{
+    __nv_bfloat16 h;
+    __BFLOAT16_TO_US(h) = i;
+    return h;
+}
+
+/******************************************************************************
+*                           __nv_bfloat16, __nv_bfloat162 warp shuffle                     *
+******************************************************************************/
+#define __SHUFFLE_SYNC_BFLOAT162_MACRO(name) /* do */ {\
+   __nv_bfloat162 r; \
+   asm volatile ("{" __CUDA_BF16_STRINGIFY(name) " %0,%1,%2,%3,%4;\n}" \
+       :"=r"(__BFLOAT162_TO_UI(r)): "r"(__BFLOAT162_TO_CUI(var)), "r"(delta), "r"(c), "r"(mask)); \
+   return r; \
+} /* while(0) */
+
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_sync(const unsigned mask, const __nv_bfloat162 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_BFLOAT162_MACRO(shfl.sync.idx.b32)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_up_sync(const unsigned mask, const __nv_bfloat162 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = (warp_size - static_cast<unsigned>(width)) << 8U;
+    __SHUFFLE_SYNC_BFLOAT162_MACRO(shfl.sync.up.b32)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_down_sync(const unsigned mask, const __nv_bfloat162 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_BFLOAT162_MACRO(shfl.sync.down.b32)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __shfl_xor_sync(const unsigned mask, const __nv_bfloat162 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_BFLOAT162_MACRO(shfl.sync.bfly.b32)
+}
+
+#undef __SHUFFLE_SYNC_BFLOAT162_MACRO
+
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_sync(const unsigned mask, const __nv_bfloat16 var, const int delta, const int width)
+{
+    const __nv_bfloat162 temp1 = __halves2bfloat162(var, var);
+    const __nv_bfloat162 temp2 = __shfl_sync(mask, temp1, delta, width);
+    return __low2bfloat16(temp2);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_up_sync(const unsigned mask, const __nv_bfloat16 var, const unsigned int delta, const int width)
+{
+    const __nv_bfloat162 temp1 = __halves2bfloat162(var, var);
+    const __nv_bfloat162 temp2 = __shfl_up_sync(mask, temp1, delta, width);
+    return __low2bfloat16(temp2);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_down_sync(const unsigned mask, const __nv_bfloat16 var, const unsigned int delta, const int width)
+{
+    const __nv_bfloat162 temp1 = __halves2bfloat162(var, var);
+    const __nv_bfloat162 temp2 = __shfl_down_sync(mask, temp1, delta, width);
+    return __low2bfloat16(temp2);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __shfl_xor_sync(const unsigned mask, const __nv_bfloat16 var, const int delta, const int width)
+{
+    const __nv_bfloat162 temp1 = __halves2bfloat162(var, var);
+    const __nv_bfloat162 temp2 = __shfl_xor_sync(mask, temp1, delta, width);
+    return __low2bfloat16(temp2);
+}
+
+/******************************************************************************
+*               __nv_bfloat16 and __nv_bfloat162 __ldg,__ldcg,__ldca,__ldcs                *
+******************************************************************************/
+
+#if defined(__cplusplus)
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __LDG_PTR   "l"
+#else
+#define __LDG_PTR   "r"
+#endif /*(defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)*/
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldg(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.nc.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldg(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.nc.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcg(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.cg.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcg(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.cg.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldca(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.ca.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldca(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.ca.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcs(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.cs.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcs(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.cs.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldlu(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.lu.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldlu(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.lu.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __ldcv(const  __nv_bfloat162 *const ptr)
+{
+    __nv_bfloat162 ret;
+    asm ("ld.global.cv.b32 %0, [%1];"  : "=r"(__BFLOAT162_TO_UI(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __ldcv(const __nv_bfloat16 *const ptr)
+{
+    __nv_bfloat16 ret;
+    asm ("ld.global.cv.b16 %0, [%1];"  : "=h"(__BFLOAT16_TO_US(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+
+__CUDA_BF16_DECL__ void __stwb(__nv_bfloat162 *const ptr, const __nv_bfloat162 value)
+{
+    asm ("st.global.wb.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__BFLOAT162_TO_CUI(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stwb(__nv_bfloat16 *const ptr, const __nv_bfloat16 value)
+{
+    asm ("st.global.wb.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__BFLOAT16_TO_CUS(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stcg(__nv_bfloat162 *const ptr, const __nv_bfloat162 value)
+{
+    asm ("st.global.cg.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__BFLOAT162_TO_CUI(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stcg(__nv_bfloat16 *const ptr, const __nv_bfloat16 value)
+{
+    asm ("st.global.cg.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__BFLOAT16_TO_CUS(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stcs(__nv_bfloat162 *const ptr, const __nv_bfloat162 value)
+{
+    asm ("st.global.cs.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__BFLOAT162_TO_CUI(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stcs(__nv_bfloat16 *const ptr, const __nv_bfloat16 value)
+{
+    asm ("st.global.cs.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__BFLOAT16_TO_CUS(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stwt(__nv_bfloat162 *const ptr, const __nv_bfloat162 value)
+{
+    asm ("st.global.wt.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__BFLOAT162_TO_CUI(value)) : "memory");
+}
+__CUDA_BF16_DECL__ void __stwt(__nv_bfloat16 *const ptr, const __nv_bfloat16 value)
+{
+    asm ("st.global.wt.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__BFLOAT16_TO_CUS(value)) : "memory");
+}
+
+#undef __LDG_PTR
+#endif /*defined(__cplusplus) */
+/******************************************************************************
+*                             __nv_bfloat162 comparison                             *
+******************************************************************************/
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+#define __COMPARISON_OP_BFLOAT162_MACRO(name) {\
+   __nv_bfloat162 val; \
+   asm( "{ " __CUDA_BF16_STRINGIFY(name) ".bf16x2.bf16x2 %0,%1,%2;\n}" \
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val; \
+}
+#else
+#define __COMPARISON_OP_BFLOAT162_MACRO(name) {\
+   __nv_bfloat162 val; \
+   asm( "{.reg .b32 low_a,low_b,high_a,high_b,high_res,low_res;\n"\
+        "  and.b32 high_a, %1, 0xffff0000U;\n"\
+        "  and.b32 high_b, %2, 0xffff0000U;\n"\
+        "  shl.b32 low_a, %1, 16;\n"\
+        "  shl.b32 low_b, %2, 16;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32.f32 low_res, low_a, low_b;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32.f32 high_res, high_a, high_b;\n"\
+        "  shr.u32 low_res, low_res, 16;\n"\
+        "  or.b32  %0, high_res, low_res;}\n"\
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val; \
+}
+#endif
+
+__CUDA_BF16_DECL__ __nv_bfloat162 __heq2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.eq)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hne2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.ne)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hle2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.le)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hge2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.ge)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hlt2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.lt)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgt2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.gt)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hequ2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.equ)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hneu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.neu)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hleu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.leu)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgeu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.geu)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hltu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.ltu)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hgtu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __COMPARISON_OP_BFLOAT162_MACRO(set.gtu)
+}
+#undef __COMPARISON_OP_BFLOAT162_MACRO
+
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+#define __BOOL_COMPARISON_OP_BFLOAT162_MACRO(name) {\
+   __nv_bfloat162 val; \
+   bool retval; \
+   asm( "{ " __CUDA_BF16_STRINGIFY(name) ".bf16x2.bf16x2 %0,%1,%2;\n}" \
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   if (__BFLOAT162_TO_CUI(val) == 0x3F803F80U) {\
+      retval = true; \
+   } else { \
+      retval = false; \
+   }\
+   return retval;\
+}
+#else
+
+#define __BOOL_COMPARISON_OP_BFLOAT162_MACRO(name) {\
+   unsigned int val; \
+   asm( "{.reg .b32 low_a,low_b,high_a,high_b,high_res,low_res;\n"\
+        "  and.b32 high_a, %1, 0xffff0000U;\n"\
+        "  and.b32 high_b, %2, 0xffff0000U;\n"\
+        "  shl.b32 low_a, %1, 16;\n"\
+        "  shl.b32 low_b, %2, 16;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32.f32 low_res, low_a, low_b;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32.f32 high_res, high_a, high_b;\n"\
+        "  and.b32 %0, high_res, low_res;}\n"\
+        :"=r"(val) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return (val != 0U) ? true : false; \
+}
+#endif
+
+__CUDA_BF16_DECL__ bool __hbeq2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.eq)
+}
+__CUDA_BF16_DECL__ bool __hbne2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.ne)
+}
+__CUDA_BF16_DECL__ bool __hble2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.le)
+}
+__CUDA_BF16_DECL__ bool __hbge2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.ge)
+}
+__CUDA_BF16_DECL__ bool __hblt2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.lt)
+}
+__CUDA_BF16_DECL__ bool __hbgt2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.gt)
+}
+__CUDA_BF16_DECL__ bool __hbequ2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.equ)
+}
+__CUDA_BF16_DECL__ bool __hbneu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.neu)
+}
+__CUDA_BF16_DECL__ bool __hbleu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.leu)
+}
+__CUDA_BF16_DECL__ bool __hbgeu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.geu)
+}
+__CUDA_BF16_DECL__ bool __hbltu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.ltu)
+}
+__CUDA_BF16_DECL__ bool __hbgtu2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __BOOL_COMPARISON_OP_BFLOAT162_MACRO(set.gtu)
+}
+#undef __BOOL_COMPARISON_OP_BFLOAT162_MACRO
+/******************************************************************************
+*                             __nv_bfloat16 comparison                              *
+******************************************************************************/
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+#define __COMPARISON_OP_BFLOAT16_MACRO(name) {\
+   unsigned short val; \
+   asm( "{ .reg .pred __$temp3;\n" \
+        "  setp." __CUDA_BF16_STRINGIFY(name) ".bf16  __$temp3, %1, %2;\n" \
+        "  selp.u16 %0, 1, 0, __$temp3;}" \
+        : "=h"(val) : "h"(__BFLOAT16_TO_CUS(a)), "h"(__BFLOAT16_TO_CUS(b))); \
+   return (val != 0U) ? true : false; \
+}
+#else
+#define __COMPARISON_OP_BFLOAT16_MACRO(name) {\
+   unsigned int val; \
+   asm( "{.reg .b32 a,b;\n"\
+        "  mov.b32 a, {0, %1};\n"\
+        "  mov.b32 b, {0, %2};\n"\
+        "  set." __CUDA_BF16_STRINGIFY(name) ".f32.f32 %0, a, b;}\n"\
+        :"=r"(val) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return (val != 0U) ? true : false; \
+}
+#endif
+__CUDA_BF16_DECL__ bool __heq(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(eq)
+}
+__CUDA_BF16_DECL__ bool __hne(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(ne)
+}
+__CUDA_BF16_DECL__ bool __hle(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(le)
+}
+__CUDA_BF16_DECL__ bool __hge(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(ge)
+}
+__CUDA_BF16_DECL__ bool __hlt(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(lt)
+}
+__CUDA_BF16_DECL__ bool __hgt(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(gt)
+}
+__CUDA_BF16_DECL__ bool __hequ(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(equ)
+}
+__CUDA_BF16_DECL__ bool __hneu(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(neu)
+}
+__CUDA_BF16_DECL__ bool __hleu(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(leu)
+}
+__CUDA_BF16_DECL__ bool __hgeu(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(geu)
+}
+__CUDA_BF16_DECL__ bool __hltu(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(ltu)
+}
+__CUDA_BF16_DECL__ bool __hgtu(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __COMPARISON_OP_BFLOAT16_MACRO(gtu)
+}
+#undef __COMPARISON_OP_BFLOAT16_MACRO
+/******************************************************************************
+*                            __nv_bfloat162 arithmetic                             *
+******************************************************************************/
+#define __BINARY_OP_BFLOAT162_MACRO(name) /* do */ {\
+   __nv_bfloat162 val; \
+   asm( "{.reg .b32 low_a,low_b,high_a,high_b,high_res,low_res;\n"\
+        " .reg .b16 low,high;\n"\
+        "  and.b32 high_a, %1, 0xffff0000U;\n"\
+        "  and.b32 high_b, %2, 0xffff0000U;\n"\
+        "  shl.b32 low_a, %1, 16;\n"\
+        "  shl.b32 low_b, %2, 16;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32 low_res, low_a, low_b;\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32 high_res, high_a, high_b;\n"\
+        "  cvt.rn.bf16.f32 low, low_res;\n"\
+        "  cvt.rn.bf16.f32 high, high_res;\n"\
+        "  mov.b32 %0, {low,high};}\n"\
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val; \
+} /* while(0) */
+
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ add.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0x3f803f80U;\n"
+        "  fma.rn.bf16x2 %0,%1,c,%2;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ sub.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0xbf80bf80U;\n"
+        "  fma.rn.bf16x2 %0,%2,c,%1;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ mul.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0x80008000U;\n"
+        "  fma.rn.bf16x2 %0,%1,%2,c;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ add.rn.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0x3f803f80U;\n"
+        "  fma.rn.bf16x2 %0,%1,c,%2;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ sub.rn.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0xbf80bf80U;\n"
+        "  fma.rn.bf16x2 %0,%2,c,%1;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ mul.rn.bf16x2 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b32 c;\n"
+        "  mov.b32 c, 0x80008000U;\n"
+        "  fma.rn.bf16x2 %0,%1,%2,c;}\n"
+#endif
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hadd2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+   asm( "{.reg .b32 f, one, zero;\n"
+        "  mov.b32 one, 0x3f803f80U;\n"
+        "  mov.b32 zero, 0;\n"
+        "  fma.rn.bf16x2 f,%1,one,%2;\n"
+        "  max.bf16x2 f, f, zero;\n"
+        "  min.bf16x2 %0, f, one;\n}"
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hsub2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+   asm( "{.reg .b32 f, one, zero, mone;\n"
+        "  mov.b32 one, 0x3f803f80U;\n"
+        "  mov.b32 zero, 0;\n"
+        "  mov.b32 mone, 0xbf80bf80U;\n"
+        "  fma.rn.bf16x2 f,%2,mone,%1;\n"
+        "  max.bf16x2 f, f, zero;\n"
+        "  min.bf16x2 %0, f, one;\n}"
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmul2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+   __nv_bfloat162 val;
+   asm( "{.reg .b32 f, one, zero, mzero;\n"
+        "  mov.b32 one, 0x3f803f80U;\n"
+        "  mov.b32 zero, 0;\n"
+        "  mov.b32 mzero, 0x80008000U;\n"
+        "  fma.rn.bf16x2 f,%1,%2,mzero;\n"
+        "  max.bf16x2 f, f, zero;\n"
+        "  min.bf16x2 %0, f, one;\n}"
+        :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
+{
+    __nv_bfloat162 val;
+    asm( "{fma.rn.bf16x2 %0,%1,%2,%3;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)),"r"(__BFLOAT162_TO_CUI(c)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
+{
+    __nv_bfloat162 val;
+    asm( "{ .reg .b32 f, one, zero;\n"
+         "  mov.b32 one, 0x3f803f80U;\n"
+         "  mov.b32 zero, 0;\n"
+         "  fma.rn.bf16x2 f, %1, %2, %3;\n"
+         "  max.bf16x2 f, f, zero;\n"
+         "  min.bf16x2 %0, f, one;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)),"r"(__BFLOAT162_TO_CUI(c)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __h2div(const __nv_bfloat162 a, const __nv_bfloat162 b) {
+    __nv_bfloat16 ha, hb;
+
+    ha = __low2bfloat16(a);
+    hb = __low2bfloat16(b);
+
+    const __nv_bfloat16 v1 = __hdiv(ha, hb);
+
+    ha = __high2bfloat16(a);
+    hb = __high2bfloat16(b);
+
+    const __nv_bfloat16 v2 = __hdiv(ha, hb);
+
+    return __halves2bfloat162(v1, v2);
+}
+/******************************************************************************
+*                             __nv_bfloat16 arithmetic                             *
+******************************************************************************/
+#define __BINARY_OP_BFLOAT16_MACRO(name) /* do */ {\
+   __nv_bfloat16 val; \
+   asm( "{.reg .b32 a,b,res;\n"\
+        "  mov.b32 a, {0,%1};\n"\
+        "  mov.b32 b, {0,%2};\n"\
+        "  " __CUDA_BF16_STRINGIFY(name) ".f32 res, a, b;\n"\
+        "  cvt.rn.bf16.f32 %0, res;}\n"\
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val; \
+} /* while(0) */
+
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ add.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0x3f80U;\n"
+        "  fma.rn.bf16 %0,%1,c,%2;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ sub.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0xbf80U;\n"
+        "  fma.rn.bf16 %0,%2,c,%1;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ mul.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0x8000U;\n"
+        "  fma.rn.bf16 %0,%1,%2,c;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ add.rn.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0x3f80U;\n"
+        "  fma.rn.bf16 %0,%1,c,%2;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ sub.rn.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0xbf80U;\n"
+        "  fma.rn.bf16 %0,%2,c,%1;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+   asm( "{ mul.rn.bf16 %0,%1,%2; }\n"
+#else
+   asm( "{.reg .b16 c;\n"
+        "  mov.b16 c, 0x8000U;\n"
+        "  fma.rn.bf16 %0,%1,%2,c;}\n"
+#endif
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b))); \
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hadd_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ .reg .b16 f, one, zero;\n"
+         "  mov.b16 one, 0x3f80U;\n"
+         "  mov.b16 zero, 0;\n"
+         "  fma.rn.bf16 f, %1, one, %2;\n"
+         "  max.bf16 f, f, zero;\n"
+         "  min.bf16 %0, f, one;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsub_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ .reg .b16 f, one, zero, mone;\n"
+         "  mov.b16 one, 0x3f80U;\n"
+         "  mov.b16 zero, 0;\n"
+         "  mov.b16 mone, 0xbf80U;\n"
+         "  fma.rn.bf16 f, %2, mone, %1;\n"
+         "  max.bf16 f, f, zero;\n"
+         "  min.bf16 %0, f, one;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmul_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ .reg .b16 f, one, zero, mzero;\n"
+         "  mov.b16 one, 0x3f80U;\n"
+         "  mov.b16 zero, 0;\n"
+         "  mov.b16 mzero, 0x8000U;\n"
+         "  fma.rn.bf16 f, %1, %2, mzero;\n"
+         "  max.bf16 f, f, zero;\n"
+         "  min.bf16 %0, f, one;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)
+{
+    __nv_bfloat16 val;
+    asm( "{fma.rn.bf16 %0,%1,%2,%3;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)),"h"(__BFLOAT16_TO_CUS(c)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma_sat(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)
+{
+    __nv_bfloat16 val;
+    asm( "{ .reg .b16 f, one, zero;\n"
+         "  mov.b16 one, 0x3f80U;\n"
+         "  mov.b16 zero, 0;\n"
+         "  fma.rn.bf16 f, %1, %2, %3;\n"
+         "  max.bf16 f, f, zero;\n"
+         "  min.bf16 %0, f, one;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)),"h"(__BFLOAT16_TO_CUS(c)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hdiv(const __nv_bfloat16 a, const __nv_bfloat16 b) {
+    __BINARY_OP_BFLOAT16_MACRO(div.rn)
+}
+
+/******************************************************************************
+*                             __nv_bfloat162 functions                  *
+******************************************************************************/
+#define __APPROX_FCAST(fun) /* do */ {\
+   __nv_bfloat16 val;\
+   asm("{.reg.b32         f;        \n"\
+                " .reg.b16         r;        \n"\
+                "  mov.b16         r,%1;     \n"\
+                "  mov.b32         f,{0,r};  \n"\
+                "  " __CUDA_BF16_STRINGIFY(fun) ".approx.f32   f,f;  \n"\
+                "  cvt.rn.bf16.f32    r,f;  \n"\
+                "  mov.b16         %0,r;     \n"\
+                "}": "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)));\
+   return val;\
+} /* while(0) */
+#define __APPROX_FCAST2(fun) /* do */ {\
+   __nv_bfloat162 val;\
+   asm("{.reg.b16         hl, hu;         \n"\
+                " .reg.b32         fl, fu;         \n"\
+                "  mov.b32         {hl, hu}, %1;   \n"\
+                "  mov.b32         fl, {0,hl};     \n"\
+                "  mov.b32         fu, {0,hu};     \n"\
+                "  " __CUDA_BF16_STRINGIFY(fun) ".approx.f32   fl, fl;     \n"\
+                "  " __CUDA_BF16_STRINGIFY(fun) ".approx.f32   fu, fu;     \n"\
+                "  cvt.rn.bf16.f32    hl, fl;     \n"\
+                "  cvt.rn.bf16.f32    hu, fu;     \n"\
+                "  mov.b32         %0, {hl, hu};   \n"\
+                "}":"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));       \
+   return val;\
+} /* while(0) */
+__CUDA_BF16_DECL__ __nv_bfloat16 __hsin_internal(const __nv_bfloat16 a) {
+    float f = __bfloat162float(a);
+    f = sinf(f);
+    return __float2bfloat16_rn(f);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hsin(const __nv_bfloat16 a) {
+    return __hsin_internal(a);
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2sin(const __nv_bfloat162 a) {
+    const __nv_bfloat16 l = __low2bfloat16(a);
+    const __nv_bfloat16 h = __high2bfloat16(a);
+    return __halves2bfloat162(__hsin_internal(l), __hsin_internal(h));
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hcos_internal(const __nv_bfloat16 a) {
+    float f = __bfloat162float(a);
+    f = cosf(f);
+    return __float2bfloat16_rn(f);
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hcos(const __nv_bfloat16 a) {
+    return __hcos_internal(a);
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2cos(const __nv_bfloat162 a) {
+    const __nv_bfloat16 l = __low2bfloat16(a);
+    const __nv_bfloat16 h = __high2bfloat16(a);
+    return __halves2bfloat162(__hcos_internal(l), __hcos_internal(h));
+}
+
+#define __BF16_SPEC_CASE2(i,r, spc, ulp) \
+   "{.reg.b32 spc, ulp, p;\n"\
+   "  mov.b32 spc," __CUDA_BF16_STRINGIFY(spc) ";\n"\
+   "  mov.b32 ulp," __CUDA_BF16_STRINGIFY(ulp) ";\n"\
+   "  set.eq.f16x2.f16x2 p," __CUDA_BF16_STRINGIFY(i) ", spc;\n"\
+   "  fma.rn.bf16x2 " __CUDA_BF16_STRINGIFY(r) ",p,ulp," __CUDA_BF16_STRINGIFY(r) ";\n}\n"
+#define __BF16_SPEC_CASE(i,r, spc, ulp) \
+   "{.reg.b16 spc, ulp, p;\n"\
+   "  mov.b16 spc," __CUDA_BF16_STRINGIFY(spc) ";\n"\
+   "  mov.b16 ulp," __CUDA_BF16_STRINGIFY(ulp) ";\n"\
+   "  set.eq.f16.f16 p," __CUDA_BF16_STRINGIFY(i) ", spc;\n"\
+   "  fma.rn.bf16 " __CUDA_BF16_STRINGIFY(r) ",p,ulp," __CUDA_BF16_STRINGIFY(r) ";\n}\n"
+
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp(const __nv_bfloat16 a) {
+    __nv_bfloat16 val;
+    asm("{.reg.b32          f, C;           \n"
+        " .reg.b16          h,r;            \n"
+        "  mov.b16          h,%1;           \n"
+        "  mov.b32          f,{0,h};        \n"
+        "  mov.b32          C, 0x3FB8AA3CU;  \n"
+        "  mul.f32          f,f,C;          \n"
+        "  ex2.approx.f32   f,f;            \n"
+        "  cvt.rn.bf16.f32 r,f;            \n"
+        "  mov.b16          %0,r;           \n"
+        "}": "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp(const __nv_bfloat162 a) {
+    __nv_bfloat162 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         h,r,fl,fu, C;   \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  mov.b32         h, %1;          \n"
+        "  mov.b32         fl, {0,hl};     \n"
+        "  mov.b32         fu, {0,hu};     \n"
+        "  mov.b32         C, 0x3FB8AA3CU;  \n"
+        "  mul.f32         fl,fl,C;        \n"
+        "  mul.f32         fu,fu,C;        \n"
+        "  ex2.approx.f32      fl, fl;     \n"
+        "  ex2.approx.f32      fu, fu;     \n"
+        "  cvt.rn.bf16.f32    hl, fl;     \n"
+        "  cvt.rn.bf16.f32    hu, fu;     \n"
+        "  mov.b32         r, {hl, hu};    \n"
+        "  mov.b32         %0, r;  \n"
+        "}":"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp2(const __nv_bfloat16 a) {
+    __APPROX_FCAST(ex2)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp2(const __nv_bfloat162 a) {
+    __APPROX_FCAST2(ex2)
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hexp10(const __nv_bfloat16 a) {
+    __nv_bfloat16 val;
+    asm("{.reg.b16         h, r;           \n"
+        " .reg.b32         f, C;           \n"
+        "  mov.b16         h, %1;          \n"
+        "  mov.b32         f, {0,h};       \n"
+        "  mov.b32         C, 0x40549A78U;  \n"
+        "  mul.f32         f,f,C;          \n"
+        "  ex2.approx.f32      f, f;       \n"
+        "  cvt.rn.bf16.f32    r, f;       \n"
+        __BF16_SPEC_CASE(%1, r, 0xBC95U,0xBF00U)
+        "  mov.b16         %0, r;          \n"
+        "}":"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2exp10(const __nv_bfloat162 a) {
+    __nv_bfloat162 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         h,r,fl,fu, C;   \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  mov.b32         fl, {0,hl};     \n"
+        "  mov.b32         fu, {0,hu};     \n"
+        "  mov.b32         C, 0x40549A78U;  \n"
+        "  mul.f32         fl,fl,C;        \n"
+        "  mul.f32         fu,fu,C;        \n"
+        "  ex2.approx.f32      fl, fl;     \n"
+        "  ex2.approx.f32      fu, fu;     \n"
+        "  cvt.rn.bf16.f32    hl, fl;     \n"
+        "  cvt.rn.bf16.f32    hu, fu;     \n"
+        "  mov.b32         r, {hl, hu};    \n"
+        __BF16_SPEC_CASE2(%1, r, 0xBC95BC95U,0xBF00BF00U)
+        "  mov.b32         %0, r;  \n"
+        "}":"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog2(const __nv_bfloat16 a) {
+    __APPROX_FCAST(lg2)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log2(const __nv_bfloat162 a) {
+    __APPROX_FCAST2(lg2)
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog(const __nv_bfloat16 a) {
+    __nv_bfloat16 val;
+    asm("{.reg.b32         f, C;           \n"
+        " .reg.b16         r,h;            \n"
+        "  mov.b16         h,%1;           \n"
+        "  mov.b32         f,{0,h};        \n"
+        "  lg2.approx.f32      f,f;        \n"
+        "  mov.b32         C, 0x3f317218U; \n"
+        "  mul.f32         f,f,C;          \n"
+        "  cvt.rn.bf16.f32    r,f;        \n"
+        "  mov.b16         %0,r;           \n"
+        "}": "=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log(const __nv_bfloat162 a) {
+    __nv_bfloat162 val;
+    asm("{.reg.b16         hl, hu;             \n"
+        " .reg.b32         r, fl, fu, C, h;    \n"
+        "  mov.b32         {hl, hu}, %1;       \n"
+        "  mov.b32         h, %1;              \n"
+        "  mov.b32         fl, {0,hl};         \n"
+        "  mov.b32         fu, {0,hu};         \n"
+        "  lg2.approx.f32      fl, fl;         \n"
+        "  lg2.approx.f32      fu, fu;         \n"
+        "  mov.b32         C, 0x3f317218U;     \n"
+        "  mul.f32         fl,fl,C;            \n"
+        "  mul.f32         fu,fu,C;            \n"
+        "  cvt.rn.bf16.f32    hl, fl;         \n"
+        "  cvt.rn.bf16.f32    hu, fu;         \n"
+        "  mov.b32         r, {hl, hu};        \n"
+        "  mov.b32         %0, r;              \n"
+        "}":"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hlog10(const __nv_bfloat16 a) {
+    __nv_bfloat16 val;
+    asm("{.reg.b16         h, r;           \n"
+        " .reg.b32         f, C;           \n"
+        "  mov.b16         h, %1;          \n"
+        "  mov.b32         f, {0,h};           \n"
+        "  lg2.approx.f32      f, f;       \n"
+        "  mov.b32         C, 0x3E9A209BU;  \n"
+        "  mul.f32         f,f,C;          \n"
+        "  cvt.rn.bf16.f32    r, f;       \n"
+        "  mov.b16         %0, r;          \n"
+        "}":"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2log10(const __nv_bfloat162 a) {
+    __nv_bfloat162 val;
+    asm("{.reg.b16         hl, hu;             \n"
+        " .reg.b32         r, fl, fu, C, h;    \n"
+        "  mov.b32         {hl, hu}, %1;       \n"
+        "  mov.b32         h, %1;              \n"
+        "  mov.b32         fl, {0,hl};         \n"
+        "  mov.b32         fu, {0,hu};         \n"
+        "  lg2.approx.f32      fl, fl;         \n"
+        "  lg2.approx.f32      fu, fu;         \n"
+        "  mov.b32         C, 0x3E9A209BU;      \n"
+        "  mul.f32         fl,fl,C;            \n"
+        "  mul.f32         fu,fu,C;            \n"
+        "  cvt.rn.bf16.f32    hl, fl;         \n"
+        "  cvt.rn.bf16.f32    hu, fu;         \n"
+        "  mov.b32         r, {hl, hu};        \n"
+        "  mov.b32         %0, r;              \n"
+        "}":"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return val;
+}
+#undef __BF16_SPEC_CASE2
+#undef __BF16_SPEC_CASE
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rcp(const __nv_bfloat162 a) {
+    __APPROX_FCAST2(rcp)
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hrcp(const __nv_bfloat16 a) {
+    __APPROX_FCAST(rcp)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2rsqrt(const __nv_bfloat162 a) {
+    __APPROX_FCAST2(rsqrt)
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hrsqrt(const __nv_bfloat16 a) {
+    __APPROX_FCAST(rsqrt)
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 h2sqrt(const __nv_bfloat162 a) {
+    __APPROX_FCAST2(sqrt)
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 hsqrt(const __nv_bfloat16 a) {
+    __APPROX_FCAST(sqrt)
+}
+#undef __APPROX_FCAST
+#undef __APPROX_FCAST2
+__CUDA_BF16_DECL__ __nv_bfloat162 __hisnan2(const __nv_bfloat162 a)
+{
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat162 r;
+    asm("{set.nan.bf16x2.bf16x2 %0,%1,%1;\n}"
+        :"=r"(__BFLOAT162_TO_UI(r)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return r;
+#else
+    const __nv_bfloat162 b = a;
+    __BINARY_OP_BFLOAT162_MACRO(set.nan.f32)
+#endif
+}
+__CUDA_BF16_DECL__ bool __hisnan(const __nv_bfloat16 a)
+{
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm("{set.nan.bf16.bf16 %0,%1,%1;\n}"
+        :"=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return __BFLOAT16_TO_CUS(r) != 0U;
+#else
+    unsigned int r;
+    asm( "{.reg .b32 a;\n"
+         "  mov.b32 a, {0,%1};\n"
+         "  set.nan.f32.f32 %0, a, a;}\n"
+         :"=r"(r) : "h"(__BFLOAT16_TO_CUS(a)));
+    return r != 0U;
+#endif
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hneg2(const __nv_bfloat162 a)
+{
+    __nv_bfloat162 r;
+    asm("{neg.bf16x2 %0,%1;\n}"
+        :"=r"(__BFLOAT162_TO_UI(r)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return r;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hneg(const __nv_bfloat16 a)
+{
+    __nv_bfloat16 r;
+    asm("{neg.bf16 %0,%1;\n}"
+        :"=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return r;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __habs2(const __nv_bfloat162 a)
+{
+    __nv_bfloat162 r;
+    asm("{abs.bf16x2 %0,%1;\n}"
+        :"=r"(__BFLOAT162_TO_UI(r)) : "r"(__BFLOAT162_TO_CUI(a)));
+    return r;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __habs(const __nv_bfloat16 a)
+{
+    __nv_bfloat16 r;
+    asm("{abs.bf16 %0,%1;\n}"
+        :"=h"(__BFLOAT16_TO_US(r)) : "h"(__BFLOAT16_TO_CUS(a)));
+    return r;
+}
+/******************************************************************************
+*                             __nv_bfloat16 arithmetic                             *
+******************************************************************************/
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmax(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+   __nv_bfloat16 val;
+   asm( "{ max.bf16 %0,%1,%2;\n}"
+        :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+   return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmin(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ min.bf16 %0,%1,%2;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmax_nan(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ max.NaN.bf16 %0,%1,%2;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hmin_nan(const __nv_bfloat16 a, const __nv_bfloat16 b)
+{
+    __nv_bfloat16 val;
+    asm( "{ min.NaN.bf16 %0,%1,%2;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat16 __hfma_relu(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)
+{
+    __nv_bfloat16 val;
+    asm( "{ fma.rn.relu.bf16 %0,%1,%2,%3;\n}"
+         :"=h"(__BFLOAT16_TO_US(val)) : "h"(__BFLOAT16_TO_CUS(a)),"h"(__BFLOAT16_TO_CUS(b)),"h"(__BFLOAT16_TO_CUS(c)));
+    return val;
+}
+/******************************************************************************
+*                            __nv_bfloat162 arithmetic                             *
+******************************************************************************/
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmax2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm( "{ max.bf16x2 %0,%1,%2;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmin2(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm( "{ min.bf16x2 %0,%1,%2;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmax2_nan(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm( "{ max.NaN.bf16x2 %0,%1,%2;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hmin2_nan(const __nv_bfloat162 a, const __nv_bfloat162 b)
+{
+    __nv_bfloat162 val;
+    asm( "{ min.NaN.bf16x2 %0,%1,%2;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)));
+    return val;
+}
+__CUDA_BF16_DECL__ __nv_bfloat162 __hfma2_relu(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
+{
+    __nv_bfloat162 val;
+    asm( "{ fma.rn.relu.bf16x2 %0,%1,%2,%3;\n}"
+         :"=r"(__BFLOAT162_TO_UI(val)) : "r"(__BFLOAT162_TO_CUI(a)),"r"(__BFLOAT162_TO_CUI(b)),"r"(__BFLOAT162_TO_CUI(c)));
+    return val;
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat162 __hcmadd(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
+{
+    // fast version of complex multiply-accumulate
+    // (a.re, a.im) * (b.re, b.im) + (c.re, c.im)
+    // acc.re = (c.re + a.re*b.re) - a.im*b.im
+    // acc.im = (c.im + a.re*b.im) + a.im*b.re
+    __nv_bfloat16 real_tmp = __hfma(a.x, b.x, c.x);
+    __nv_bfloat16 img_tmp  = __hfma(a.x, b.y, c.y);
+    real_tmp = __hfma(__hneg(a.y), b.y, real_tmp);
+    img_tmp  = __hfma(a.y,         b.x, img_tmp);
+    return make_bfloat162(real_tmp, img_tmp);
+}
+
+
+/* Define __PTR for atomicAdd prototypes below, undef after done */
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __PTR   "l"
+#else
+#define __PTR   "r"
+#endif /*(defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)*/
+
+__CUDA_BF16_DECL__ __nv_bfloat162 atomicAdd(__nv_bfloat162 *const address, const __nv_bfloat162 val)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat162 r;
+    asm volatile ("{ atom.add.noftz.bf16x2 %0,[%1],%2; }\n"
+                  : "=r"(__BFLOAT162_TO_UI(r)) : __PTR(address), "r"(__BFLOAT162_TO_CUI(val))
+                  : "memory");
+   return r;
+#else
+    unsigned int* address_as_uint = (unsigned int*)address;
+    unsigned int old = *address_as_uint, assumed;
+    do {
+        assumed = old;
+        __nv_bfloat162 new_val = __hadd2(val, *(__nv_bfloat162*)&assumed);
+        old = atomicCAS(address_as_uint, assumed, *(unsigned int*)&new_val);
+    } while (assumed != old);
+    return *(__nv_bfloat162*)&old;
+#endif
+}
+
+__CUDA_BF16_DECL__ __nv_bfloat16 atomicAdd(__nv_bfloat16 *const address, const __nv_bfloat16 val)
+{
+#if defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    __nv_bfloat16 r;
+    asm volatile ("{ atom.add.noftz.bf16 %0,[%1],%2; }\n"
+                  : "=h"(__BFLOAT16_TO_US(r))
+                  : __PTR(address), "h"(__BFLOAT16_TO_CUS(val))
+                  : "memory");
+   return r;
+#else
+    unsigned short int* address_as_us = (unsigned short int*)address;
+    unsigned short int old = *address_as_us, assumed;
+    do {
+        assumed = old;
+        old = atomicCAS(address_as_us, assumed,
+            __bfloat16_as_ushort(__hadd(val, __ushort_as_bfloat16(assumed))));
+    } while (assumed != old);
+    return __ushort_as_bfloat16(old);
+#endif
+}
+
+#undef __PTR
+#undef __CUDA_BF16_DECL__
+#endif /* defined(__CUDACC__) && (__CUDA_ARCH__ >= 800 || !defined(__CUDA_ARCH__)) */
+#endif /* defined(__cplusplus) */
+
+#undef __BINARY_OP_BFLOAT162_MACRO
+#undef __BINARY_OP_BFLOAT16_MACRO
+
+#undef __CUDA_HOSTDEVICE_BF16_DECL__
+#undef __CUDA_BF16_DECL__
+
+/* Define first-class types "nv_bfloat16" and "nv_bfloat162", unless user specifies otherwise via "#define CUDA_NO_BFLOAT16" */
+/* C cannot ever have these types defined here, because __nv_bfloat16 and __nv_bfloat162 are C++ classes */
+#if defined(__cplusplus) && !defined(CUDA_NO_BFLOAT16)
+typedef __nv_bfloat16  nv_bfloat16;
+typedef __nv_bfloat162 nv_bfloat162;
+
+#endif /* defined(__cplusplus) && !defined(CUDA_NO_BFLOAT16) */
+ 
+#if defined(__CPP_VERSION_AT_LEAST_11_BF16)
+#undef __CPP_VERSION_AT_LEAST_11_BF16
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_BF16) */
+
+#endif /* end of include guard: __CUDA_BF16_HPP__ */
diff --git a/ext/cudart/include/cuda_d3d10_interop.h b/ext/cudart/include/cuda_d3d10_interop.h
new file mode 100644
index 00000000..8f485047
--- /dev/null
+++ b/ext/cudart/include/cuda_d3d10_interop.h
@@ -0,0 +1,724 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_D3D10_INTEROP_H__)
+#define __CUDA_D3D10_INTEROP_H__
+
+#include "cuda_runtime_api.h"
+
+/** \cond impl_private */
+#if !defined(__dv)
+
+#if defined(__cplusplus)
+
+#define __dv(v) \
+        = v
+
+#else /* __cplusplus */
+
+#define __dv(v)
+
+#endif /* __cplusplus */
+
+#endif /* !__dv */
+/** \endcond impl_private */
+
+#include <d3d10_1.h>
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup CUDART_D3D10 Direct3D 10 Interoperability
+ * This section describes the Direct3D 10 interoperability functions of the CUDA
+ * runtime application programming interface. Note that mapping of Direct3D 10
+ * resources is performed with the graphics API agnostic, resource mapping 
+ * interface described in \ref CUDART_INTEROP "Graphics Interopability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D10 device
+ */
+enum cudaD3D10DeviceList
+{
+  cudaD3D10DeviceListAll           = 1, /**< The CUDA devices for all GPUs used by a D3D10 device */
+  cudaD3D10DeviceListCurrentFrame  = 2, /**< The CUDA devices for the GPUs used by a D3D10 device in its currently rendering frame */
+  cudaD3D10DeviceListNextFrame     = 3  /**< The CUDA devices for the GPUs to be used by a D3D10 device in the next frame  */
+};
+
+/**
+ * \brief Registers a Direct3D 10 resource for access by CUDA
+ * 
+ * Registers the Direct3D 10 resource \p pD3DResource for access by CUDA.  
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cudaGraphicsUnregisterResource(). Also on success, this call will increase the
+ * internal reference count on \p pD3DResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cudaGraphicsUnregisterResource().
+ *
+ * This call potentially has a high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ *
+ * - ::ID3D10Buffer: may be accessed via a device pointer
+ * - ::ID3D10Texture1D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D10Texture2D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D10Texture3D: individual subresources of the texture may be accessed via arrays
+ *
+ * The \p flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are 
+ *
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used.
+ * - ::cudaGraphicsRegisterFlagsSurfaceLoadStore: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::cudaGraphicsRegisterFlagsTextureGather: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported DXGI formats is as follows. For compactness the
+ * notation A_{B,C,D} represents A_B, A_C, and A_D.
+ * - DXGI_FORMAT_A8_UNORM
+ * - DXGI_FORMAT_B8G8R8A8_UNORM
+ * - DXGI_FORMAT_B8G8R8X8_UNORM
+ * - DXGI_FORMAT_R16_FLOAT
+ * - DXGI_FORMAT_R16G16B16A16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16G16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R32_FLOAT
+ * - DXGI_FORMAT_R32G32B32A32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32G32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32_{SINT,UINT}
+ * - DXGI_FORMAT_R8G8B8A8_{SINT,SNORM,UINT,UNORM,UNORM_SRGB}
+ * - DXGI_FORMAT_R8G8_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R8_{SINT,SNORM,UINT,UNORM}
+ *
+ * If \p pD3DResource is of incorrect type or is already registered, then 
+ * ::cudaErrorInvalidResourceHandle is returned. 
+ * If \p pD3DResource cannot be registered, then ::cudaErrorUnknown is returned.
+ *
+ * \param resource - Pointer to returned resource handle
+ * \param pD3DResource - Direct3D resource to register
+ * \param flags        - Parameters for resource registration
+ * 
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsD3D10RegisterResource 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsD3D10RegisterResource(struct cudaGraphicsResource **resource, ID3D10Resource *pD3DResource, unsigned int flags);
+
+/**
+ * \brief Gets the device number for an adapter
+ *
+ * Returns in \p *device the CUDA-compatible device corresponding to the
+ * adapter \p pAdapter obtained from ::IDXGIFactory::EnumAdapters. This call
+ * will succeed only if a device on adapter \p pAdapter is CUDA-compatible.
+ *
+ * \param device   - Returns the device corresponding to pAdapter
+ * \param pAdapter - D3D10 adapter to get device for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsD3D10RegisterResource,
+ * ::cuD3D10GetDevice 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D10GetDevice(int *device, IDXGIAdapter *pAdapter);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 10 device
+ * 
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices corresponding 
+ * to the Direct3D 10 device \p pD3D10Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the the CUDA-compatible devices 
+ * corresponding to the Direct3D 10 device \p pD3D10Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::cudaErrorNoDevice.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D10Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D10Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D10Device     - Direct3D 10 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::cudaD3D10DeviceListAll for all devices, 
+ *                           ::cudaD3D10DeviceListCurrentFrame for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::cudaD3D10DeviceListNextFrame for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuD3D10GetDevices 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D10GetDevices(unsigned int *pCudaDeviceCount, int *pCudaDevices, unsigned int cudaDeviceCount, ID3D10Device *pD3D10Device, enum cudaD3D10DeviceList deviceList);
+
+/** @} */ /* END CUDART_D3D10 */
+
+/**
+ * \addtogroup CUDART_D3D10_DEPRECATED Direct3D 10 Interoperability [DEPRECATED]
+ * This section describes deprecated Direct3D 10 interoperability functions.
+ *
+ * @{
+ */
+
+/**
+ * CUDA D3D10 Register Flags
+ */
+enum cudaD3D10RegisterFlags
+{
+  cudaD3D10RegisterFlagsNone  = 0,  /**< Default; Resource can be accessed through a void* */
+  cudaD3D10RegisterFlagsArray = 1   /**< Resource can be accessed through a CUarray* */
+};
+
+/**
+ * CUDA D3D10 Map Flags
+ */
+enum cudaD3D10MapFlags
+{
+  cudaD3D10MapFlagsNone         = 0,  /**< Default; Assume resource can be read/written */
+  cudaD3D10MapFlagsReadOnly     = 1,  /**< CUDA kernels will not write to this resource */
+  cudaD3D10MapFlagsWriteDiscard = 2   /**< CUDA kernels will only write to and will not read from this resource */
+};
+
+/**
+ * \brief Gets the Direct3D device against which the current CUDA context was
+ * created
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA device with a D3D10
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param ppD3D10Device - Returns the Direct3D device for this thread
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D10SetDirect3DDevice
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10GetDirect3DDevice(ID3D10Device **ppD3D10Device);
+
+/**
+ * \brief Sets the Direct3D 10 device to use for interoperability with 
+ * a CUDA device
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0.
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA device with a D3D10
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pD3D10Device - Direct3D device to use for interoperability
+ * \param device       - The CUDA device to use.  This device must be among the devices
+ *                       returned when querying ::cudaD3D10DeviceListAll from ::cudaD3D10GetDevices,
+ *                       may be set to -1 to automatically select an appropriate CUDA device.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorSetOnActiveProcess
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D10GetDevice,
+ * ::cudaGraphicsD3D10RegisterResource,
+ * ::cudaDeviceReset
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10SetDirect3DDevice(ID3D10Device *pD3D10Device, int device __dv(-1));
+
+/**
+ * \brief Registers a Direct3D 10 resource for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Registers the Direct3D resource \p pResource for access by CUDA.
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cudaD3D10UnregisterResource(). Also on success, this call will increase
+ * the internal reference count on \p pResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cudaD3D10UnregisterResource().
+ *
+ * This call potentially has a high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pResource must be one of the following:
+ *
+ * - ::ID3D10Buffer: Cannot be used with \p flags set to
+ * \p cudaD3D10RegisterFlagsArray.
+ * - ::ID3D10Texture1D: No restrictions.
+ * - ::ID3D10Texture2D: No restrictions.
+ * - ::ID3D10Texture3D: No restrictions.
+ *
+ * The \p flags argument specifies the mechanism through which CUDA will
+ * access the Direct3D resource. The following values are allowed.
+ *
+ * - ::cudaD3D10RegisterFlagsNone: Specifies that CUDA will access this
+ * resource through a \p void*. The pointer, size, and pitch for each
+ * subresource of this resource may be queried through
+ * ::cudaD3D10ResourceGetMappedPointer(), ::cudaD3D10ResourceGetMappedSize(),
+ * and ::cudaD3D10ResourceGetMappedPitch() respectively. This option is valid
+ * for all resource types.
+ * - ::cudaD3D10RegisterFlagsArray: Specifies that CUDA will access this
+ * resource through a \p CUarray queried on a sub-resource basis through
+ * ::cudaD3D10ResourceGetMappedArray(). This option is only valid for resources
+ * of type ::ID3D10Texture1D, ::ID3D10Texture2D, and ::ID3D10Texture3D.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA. The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * If Direct3D interoperability is not initialized on this context then
+ * ::cudaErrorInvalidDevice is returned. If \p pResource is of incorrect type
+ * or is already registered then ::cudaErrorInvalidResourceHandle is returned.
+ * If \p pResource cannot be registered then ::cudaErrorUnknown is returned.
+ *
+ * \param pResource - Resource to register
+ * \param flags     - Parameters for resource registration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsD3D10RegisterResource
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10RegisterResource(ID3D10Resource *pResource, unsigned int flags);
+
+/**
+ * \brief Unregisters a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Unregisters the Direct3D resource \p resource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p pResource is not registered, then ::cudaErrorInvalidResourceHandle
+ * is returned.
+ *
+ * \param pResource - Resource to unregister
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsUnregisterResource
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10UnregisterResource(ID3D10Resource *pResource);
+
+/**
+ * \brief Maps Direct3D Resources for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.  
+ *
+ * Maps the \p count Direct3D resources in \p ppResources for access by CUDA.
+ *
+ * The resources in \p ppResources may be accessed in CUDA kernels until they
+ * are unmapped. Direct3D should not access any resources while they are
+ * mapped by CUDA. If an application does so, the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any Direct3D
+ * calls issued before ::cudaD3D10MapResources() will complete before any CUDA
+ * kernels issued after ::cudaD3D10MapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries then ::cudaErrorInvalidResourceHandle
+ * is returned. If any of \p ppResources are presently mapped for access by
+ * CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count       - Number of resources to map for CUDA
+ * \param ppResources - Resources to map for CUDA
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsMapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10MapResources(int count, ID3D10Resource **ppResources);
+
+/**
+ * \brief Unmaps Direct3D resources
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.   
+ *
+ * Unmaps the \p count Direct3D resource in \p ppResources.
+ *
+ * This function provides the synchronization guarantee that any CUDA kernels
+ * issued before ::cudaD3D10UnmapResources() will complete before any Direct3D
+ * calls issued after ::cudaD3D10UnmapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries, then
+ * ::cudaErrorInvalidResourceHandle is returned. If any of \p ppResources are
+ * not presently mapped for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count       - Number of resources to unmap for CUDA
+ * \param ppResources - Resources to unmap for CUDA
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsUnmapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10UnmapResources(int count, ID3D10Resource **ppResources);
+
+/**
+ * \brief Gets an array through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Returns in \p *ppArray an array through which the subresource of the mapped
+ * Direct3D resource \p pResource which corresponds to \p subResource may be
+ * accessed. The value set in \p ppArray may change every time that
+ * \p pResource is mapped.
+ *
+ * If \p pResource is not registered, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource was not registered with usage flags
+ * ::cudaD3D10RegisterFlagsArray, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource is not mapped then ::cudaErrorUnknown is returned.
+ *
+ * For usage requirements of the \p subResource parameter, see
+ * ::cudaD3D10ResourceGetMappedPointer().
+ *
+ * \param ppArray     - Returned array corresponding to subresource
+ * \param pResource   - Mapped resource to access
+ * \param subResource - Subresource of pResource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsSubResourceGetMappedArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceGetMappedArray(cudaArray **ppArray, ID3D10Resource *pResource, unsigned int subResource);
+
+/**
+ * \brief Set usage flags for mapping a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Set usage flags for mapping the Direct3D resource \p pResource.  
+ *
+ * Changes to flags will take effect the next time \p pResource is mapped.
+ * The \p flags argument may be any of the following:
+ *
+ * - ::cudaD3D10MapFlagsNone: Specifies no hints about how this resource will
+ * be used. It is therefore assumed that this resource will be read from and
+ * written to by CUDA kernels. This is the default value.
+ * - ::cudaD3D10MapFlagsReadOnly: Specifies that CUDA kernels which access
+ * this resource will not write to this resource.
+ * - ::cudaD3D10MapFlagsWriteDiscard: Specifies that CUDA kernels which access
+ * this resource will not read from this resource and will write over the
+ * entire contents of the resource, so none of the data previously stored in
+ * the resource will be preserved.
+ *
+ * If \p pResource has not been registered for use with CUDA then
+ * ::cudaErrorInvalidHandle is returned. If \p pResource is presently mapped
+ * for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param pResource - Registered resource to set flags for
+ * \param flags     - Parameters for resource mapping
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsResourceSetMapFlags
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceSetMapFlags(ID3D10Resource *pResource, unsigned int flags); 
+
+/**
+ * \brief Gets the dimensions of a registered Direct3D surface
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Returns in \p *pWidth, \p *pHeight, and \p *pDepth the dimensions of the
+ * subresource of the mapped Direct3D resource \p pResource which corresponds
+ * to \p subResource.
+ *
+ * Since anti-aliased surfaces may have multiple samples per pixel, it is
+ * possible that the dimensions of a resource will be an integer factor larger
+ * than the dimensions reported by the Direct3D runtime.
+ *
+ * The parameters \p pWidth, \p pHeight, and \p pDepth are optional. For 2D
+ * surfaces, the value returned in \p *pDepth will be 0.
+ *
+ * If \p pResource is not of type ::ID3D10Texture1D, ::ID3D10Texture2D, or
+ * ::ID3D10Texture3D, or if \p pResource has not been registered for use with
+ * CUDA, then ::cudaErrorInvalidHandle is returned.
+
+ * For usage requirements of \p subResource parameters see
+ * ::cudaD3D10ResourceGetMappedPointer().
+ *
+ * \param pWidth      - Returned width of surface
+ * \param pHeight     - Returned height of surface
+ * \param pDepth      - Returned depth of surface
+ * \param pResource   - Registered resource to access
+ * \param subResource - Subresource of pResource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsSubResourceGetMappedArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceGetSurfaceDimensions(size_t *pWidth, size_t *pHeight, size_t *pDepth, ID3D10Resource *pResource, unsigned int subResource); 
+
+/**
+ * \brief Gets a pointer through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Returns in \p *pPointer the base pointer of the subresource of the mapped
+ * Direct3D resource \p pResource which corresponds to \p subResource. The
+ * value set in \p pPointer may change every time that \p pResource is mapped.
+ *
+ * If \p pResource is not registered, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource was not registered with usage flags
+ * ::cudaD3D9RegisterFlagsNone, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource is not mapped then ::cudaErrorUnknown is returned.
+ *
+ * If \p pResource is of type ::ID3D10Buffer then \p subResource must be 0.
+ * If \p pResource is of any other type, then the value of \p subResource must
+ * come from the subresource calculation in ::D3D10CalcSubResource().
+ *
+ * \param pPointer    - Returned pointer corresponding to subresource
+ * \param pResource   - Mapped resource to access
+ * \param subResource - Subresource of pResource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsResourceGetMappedPointer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceGetMappedPointer(void **pPointer, ID3D10Resource *pResource, unsigned int subResource);
+
+/**
+ * \brief Gets the size of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Returns in \p *pSize the size of the subresource of the mapped Direct3D
+ * resource \p pResource which corresponds to \p subResource. The value set in
+ * \p pSize may change every time that \p pResource is mapped.
+ *
+ * If \p pResource has not been registered for use with CUDA then
+ * ::cudaErrorInvalidHandle is returned. If \p pResource was not registered
+ * with usage flags ::cudaD3D10RegisterFlagsNone, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource is not mapped for
+ * access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * For usage requirements of the \p subResource parameter see
+ * ::cudaD3D10ResourceGetMappedPointer().
+ *
+ * \param pSize       - Returned size of subresource
+ * \param pResource   - Mapped resource to access
+ * \param subResource - Subresource of pResource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsResourceGetMappedPointer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceGetMappedSize(size_t *pSize, ID3D10Resource *pResource, unsigned int subResource);
+
+/**
+ * \brief Gets the pitch of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Returns in \p *pPitch and \p *pPitchSlice the pitch and Z-slice pitch of
+ * the subresource of the mapped Direct3D resource \p pResource, which
+ * corresponds to \p subResource. The values set in \p pPitch and
+ * \p pPitchSlice may change every time that \p pResource is mapped.
+ *
+ * The pitch and Z-slice pitch values may be used to compute the location of a
+ * sample on a surface as follows.
+ *
+ * For a 2D surface, the byte offset of the sample at position \b x, \b y from
+ * the base pointer of the surface is:
+ *
+ * \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * For a 3D surface, the byte offset of the sample at position \b x, \b y,
+ * \b z from the base pointer of the surface is:
+ *
+ * \b z* \b slicePitch + \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * Both parameters \p pPitch and \p pPitchSlice are optional and may be set to
+ * NULL.
+ *
+ * If \p pResource is not of type ::ID3D10Texture1D, ::ID3D10Texture2D, or
+ * ::ID3D10Texture3D, or if \p pResource has not been registered for use with
+ * CUDA, then ::cudaErrorInvalidResourceHandle is returned. If \p pResource was
+ * not registered with usage flags ::cudaD3D10RegisterFlagsNone, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource is not mapped
+ * for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * For usage requirements of the \p subResource parameter see
+ * ::cudaD3D10ResourceGetMappedPointer().
+ *
+ * \param pPitch      - Returned pitch of subresource
+ * \param pPitchSlice - Returned Z-slice pitch of subresource
+ * \param pResource   - Mapped resource to access
+ * \param subResource - Subresource of pResource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsSubResourceGetMappedArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D10ResourceGetMappedPitch(size_t *pPitch, size_t *pPitchSlice, ID3D10Resource *pResource, unsigned int subResource);
+
+/** @} */ /* END CUDART_D3D10_DEPRECATED */
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#undef __dv
+#undef __CUDA_DEPRECATED
+
+#endif /* __CUDA_D3D10_INTEROP_H__ */
diff --git a/ext/cudart/include/cuda_d3d11_interop.h b/ext/cudart/include/cuda_d3d11_interop.h
new file mode 100644
index 00000000..7e0c14cf
--- /dev/null
+++ b/ext/cudart/include/cuda_d3d11_interop.h
@@ -0,0 +1,323 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_D3D11_INTEROP_H__)
+#define __CUDA_D3D11_INTEROP_H__
+
+#include "cuda_runtime_api.h"
+
+/** \cond impl_private */
+#if !defined(__dv)
+
+#if defined(__cplusplus)
+
+#define __dv(v) \
+        = v
+
+#else /* __cplusplus */
+
+#define __dv(v)
+
+#endif /* __cplusplus */
+
+#endif /* !__dv */
+/** \endcond impl_private */
+
+#include <d3d11.h>
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup CUDART_D3D11 Direct3D 11 Interoperability
+ * This section describes the Direct3D 11 interoperability functions of the CUDA
+ * runtime application programming interface. Note that mapping of Direct3D 11
+ * resources is performed with the graphics API agnostic, resource mapping 
+ * interface described in \ref CUDART_INTEROP "Graphics Interopability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D11 device
+ */
+enum cudaD3D11DeviceList
+{
+  cudaD3D11DeviceListAll           = 1, /**< The CUDA devices for all GPUs used by a D3D11 device */
+  cudaD3D11DeviceListCurrentFrame  = 2, /**< The CUDA devices for the GPUs used by a D3D11 device in its currently rendering frame */
+  cudaD3D11DeviceListNextFrame     = 3  /**< The CUDA devices for the GPUs to be used by a D3D11 device in the next frame  */
+};
+
+/**
+ * \brief Register a Direct3D 11 resource for access by CUDA
+ * 
+ * Registers the Direct3D 11 resource \p pD3DResource for access by CUDA.  
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cudaGraphicsUnregisterResource(). Also on success, this call will increase the
+ * internal reference count on \p pD3DResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cudaGraphicsUnregisterResource().
+ *
+ * This call potentially has a high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ *
+ * - ::ID3D11Buffer: may be accessed via a device pointer
+ * - ::ID3D11Texture1D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D11Texture2D: individual subresources of the texture may be accessed via arrays
+ * - ::ID3D11Texture3D: individual subresources of the texture may be accessed via arrays
+ *
+ * The \p flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are 
+ *
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used.
+ * - ::cudaGraphicsRegisterFlagsSurfaceLoadStore: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::cudaGraphicsRegisterFlagsTextureGather: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported DXGI formats is as follows. For compactness the
+ * notation A_{B,C,D} represents A_B, A_C, and A_D.
+ * - DXGI_FORMAT_A8_UNORM
+ * - DXGI_FORMAT_B8G8R8A8_UNORM
+ * - DXGI_FORMAT_B8G8R8X8_UNORM
+ * - DXGI_FORMAT_R16_FLOAT
+ * - DXGI_FORMAT_R16G16B16A16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16G16_{FLOAT,SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R16_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R32_FLOAT
+ * - DXGI_FORMAT_R32G32B32A32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32G32_{FLOAT,SINT,UINT}
+ * - DXGI_FORMAT_R32_{SINT,UINT}
+ * - DXGI_FORMAT_R8G8B8A8_{SINT,SNORM,UINT,UNORM,UNORM_SRGB}
+ * - DXGI_FORMAT_R8G8_{SINT,SNORM,UINT,UNORM}
+ * - DXGI_FORMAT_R8_{SINT,SNORM,UINT,UNORM}
+ *
+ * If \p pD3DResource is of incorrect type or is already registered, then 
+ * ::cudaErrorInvalidResourceHandle is returned. 
+ * If \p pD3DResource cannot be registered, then ::cudaErrorUnknown is returned.
+ *
+ * \param resource - Pointer to returned resource handle
+ * \param pD3DResource - Direct3D resource to register
+ * \param flags        - Parameters for resource registration
+ * 
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsD3D11RegisterResource 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsD3D11RegisterResource(struct cudaGraphicsResource **resource, ID3D11Resource *pD3DResource, unsigned int flags);
+
+/**
+ * \brief Gets the device number for an adapter
+ *
+ * Returns in \p *device the CUDA-compatible device corresponding to the
+ * adapter \p pAdapter obtained from ::IDXGIFactory::EnumAdapters. This call
+ * will succeed only if a device on adapter \p pAdapter is CUDA-compatible.
+ *
+ * \param device   - Returns the device corresponding to pAdapter
+ * \param pAdapter - D3D11 adapter to get device for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuD3D11GetDevice 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D11GetDevice(int *device, IDXGIAdapter *pAdapter);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 11 device
+ * 
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices corresponding 
+ * to the Direct3D 11 device \p pD3D11Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the the CUDA-compatible devices 
+ * corresponding to the Direct3D 11 device \p pD3D11Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::cudaErrorNoDevice.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D11Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D11Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D11Device     - Direct3D 11 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::cudaD3D11DeviceListAll for all devices, 
+ *                           ::cudaD3D11DeviceListCurrentFrame for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::cudaD3D11DeviceListNextFrame for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuD3D11GetDevices 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D11GetDevices(unsigned int *pCudaDeviceCount, int *pCudaDevices, unsigned int cudaDeviceCount, ID3D11Device *pD3D11Device, enum cudaD3D11DeviceList deviceList);
+
+/** @} */ /* END CUDART_D3D11 */
+
+/**
+ * \addtogroup CUDART_D3D11_DEPRECATED Direct3D 11 Interoperability [DEPRECATED]
+ * This section describes deprecated Direct3D 11 interoperability functions.
+ *
+ * @{
+ */
+
+/**
+ * \brief Gets the Direct3D device against which the current CUDA context was
+ * created
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0. 
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA device with a D3D11
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param ppD3D11Device - Returns the Direct3D device for this thread
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D11SetDirect3DDevice
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D11GetDirect3DDevice(ID3D11Device **ppD3D11Device);
+
+/**
+ * \brief Sets the Direct3D 11 device to use for interoperability with 
+ * a CUDA device
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0. 
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA device with a D3D11
+ * device in order to achieve maximum interoperability performance.
+ *
+ * \param pD3D11Device - Direct3D device to use for interoperability
+ * \param device       - The CUDA device to use.  This device must be among the devices
+ *                       returned when querying ::cudaD3D11DeviceListAll from ::cudaD3D11GetDevices,
+ *                       may be set to -1 to automatically select an appropriate CUDA device.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorSetOnActiveProcess
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D11GetDevice,
+ * ::cudaGraphicsD3D11RegisterResource,
+ * ::cudaDeviceReset
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D11SetDirect3DDevice(ID3D11Device *pD3D11Device, int device __dv(-1));
+
+/** @} */ /* END CUDART_D3D11_DEPRECATED */
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#undef __dv
+#undef __CUDA_DEPRECATED
+
+#endif /* __CUDA_D3D11_INTEROP_H__ */
diff --git a/ext/cudart/include/cuda_d3d9_interop.h b/ext/cudart/include/cuda_d3d9_interop.h
new file mode 100644
index 00000000..5bac47db
--- /dev/null
+++ b/ext/cudart/include/cuda_d3d9_interop.h
@@ -0,0 +1,782 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_D3D9_INTEROP_H__)
+#define __CUDA_D3D9_INTEROP_H__
+
+#include "cuda_runtime_api.h"
+
+/** \cond impl_private */
+#if !defined(__dv)
+
+#if defined(__cplusplus)
+
+#define __dv(v) \
+        = v
+
+#else /* __cplusplus */
+
+#define __dv(v)
+
+#endif /* __cplusplus */
+
+#endif /* !__dv */
+/** \endcond impl_private */
+
+#include <d3d9.h>
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup CUDART_D3D9 Direct3D 9 Interoperability
+ * This section describes the Direct3D 9 interoperability functions of the CUDA
+ * runtime application programming interface. Note that mapping of Direct3D 9
+ * resources is performed with the graphics API agnostic, resource mapping 
+ * interface described in \ref CUDART_INTEROP "Graphics Interopability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to a D3D9 device
+ */
+enum cudaD3D9DeviceList
+{
+  cudaD3D9DeviceListAll           = 1, /**< The CUDA devices for all GPUs used by a D3D9 device */
+  cudaD3D9DeviceListCurrentFrame  = 2, /**< The CUDA devices for the GPUs used by a D3D9 device in its currently rendering frame */
+  cudaD3D9DeviceListNextFrame     = 3  /**< The CUDA devices for the GPUs to be used by a D3D9 device in the next frame  */
+};
+
+/**
+ * \brief Gets the Direct3D device against which the current CUDA context was
+ * created
+ *
+ * Returns in \p *ppD3D9Device the Direct3D device against which this CUDA
+ * context was created in ::cudaD3D9SetDirect3DDevice().
+ *
+ * \param ppD3D9Device - Returns the Direct3D device for this thread
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidGraphicsContext,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D9SetDirect3DDevice,
+ * ::cuD3D9GetDirect3DDevice
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D9GetDirect3DDevice(IDirect3DDevice9 **ppD3D9Device);
+
+/**
+ * \brief Register a Direct3D 9 resource for access by CUDA
+ * 
+ * Registers the Direct3D 9 resource \p pD3DResource for access by CUDA.  
+ *
+ * If this call is successful then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cudaGraphicsUnregisterResource(). Also on success, this call will increase the
+ * internal reference count on \p pD3DResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cudaGraphicsUnregisterResource().
+ *
+ * This call potentially has a high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pD3DResource must be one of the following.
+ *
+ * - ::IDirect3DVertexBuffer9: may be accessed through a device pointer
+ * - ::IDirect3DIndexBuffer9: may be accessed through a device pointer
+ * - ::IDirect3DSurface9: may be accessed through an array.
+ *     Only stand-alone objects of type ::IDirect3DSurface9
+ *     may be explicitly shared. In particular, individual mipmap levels and faces
+ *     of cube maps may not be registered directly. To access individual surfaces
+ *     associated with a texture, one must register the base texture object.
+ * - ::IDirect3DBaseTexture9: individual surfaces on this texture may be accessed
+ *     through an array.
+ *
+ * The \p flags argument may be used to specify additional parameters at register
+ * time.  The valid values for this parameter are 
+ *
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used.
+ * - ::cudaGraphicsRegisterFlagsSurfaceLoadStore: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::cudaGraphicsRegisterFlagsTextureGather: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA.  The following are some limitations.
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * A complete list of supported formats is as follows:
+ * - D3DFMT_L8
+ * - D3DFMT_L16
+ * - D3DFMT_A8R8G8B8
+ * - D3DFMT_X8R8G8B8
+ * - D3DFMT_G16R16
+ * - D3DFMT_A8B8G8R8
+ * - D3DFMT_A8
+ * - D3DFMT_A8L8
+ * - D3DFMT_Q8W8V8U8
+ * - D3DFMT_V16U16
+ * - D3DFMT_A16B16G16R16F
+ * - D3DFMT_A16B16G16R16
+ * - D3DFMT_R32F
+ * - D3DFMT_G16R16F
+ * - D3DFMT_A32B32G32R32F
+ * - D3DFMT_G32R32F
+ * - D3DFMT_R16F
+ *
+ * If \p pD3DResource is of incorrect type or is already registered, then 
+ * ::cudaErrorInvalidResourceHandle is returned. 
+ * If \p pD3DResource cannot be registered, then ::cudaErrorUnknown is returned.
+ *
+ * \param resource - Pointer to returned resource handle
+ * \param pD3DResource - Direct3D resource to register
+ * \param flags        - Parameters for resource registration
+ * 
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D9SetDirect3DDevice,
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources,
+ * ::cudaGraphicsSubResourceGetMappedArray,
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsD3D9RegisterResource
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsD3D9RegisterResource(struct cudaGraphicsResource **resource, IDirect3DResource9 *pD3DResource, unsigned int flags);
+
+/**
+ * \brief Gets the device number for an adapter
+ *
+ * Returns in \p *device the CUDA-compatible device corresponding to the
+ * adapter name \p pszAdapterName obtained from ::EnumDisplayDevices or
+ * ::IDirect3D9::GetAdapterIdentifier(). If no device on the adapter with name
+ * \p pszAdapterName is CUDA-compatible then the call will fail.
+ *
+ * \param device         - Returns the device corresponding to pszAdapterName
+ * \param pszAdapterName - D3D9 adapter to get device for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D9SetDirect3DDevice,
+ * ::cudaGraphicsD3D9RegisterResource,
+ * ::cuD3D9GetDevice
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D9GetDevice(int *device, const char *pszAdapterName);
+
+/**
+ * \brief Gets the CUDA devices corresponding to a Direct3D 9 device
+ * 
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices corresponding 
+ * to the Direct3D 9 device \p pD3D9Device.
+ * Also returns in \p *pCudaDevices at most \p cudaDeviceCount of the the CUDA-compatible devices 
+ * corresponding to the Direct3D 9 device \p pD3D9Device.
+ *
+ * If any of the GPUs being used to render \p pDevice are not CUDA capable then the
+ * call will return ::cudaErrorNoDevice.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to \p pD3D9Device
+ * \param pCudaDevices     - Returned CUDA devices corresponding to \p pD3D9Device
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param pD3D9Device      - Direct3D 9 device to query for CUDA devices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::cudaD3D9DeviceListAll for all devices, 
+ *                           ::cudaD3D9DeviceListCurrentFrame for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::cudaD3D9DeviceListNextFrame for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuD3D9GetDevices 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D9GetDevices(unsigned int *pCudaDeviceCount, int *pCudaDevices, unsigned int cudaDeviceCount, IDirect3DDevice9 *pD3D9Device, enum cudaD3D9DeviceList deviceList);
+
+/**
+ * \brief Sets the Direct3D 9 device to use for interoperability with 
+ * a CUDA device
+ *
+ * Records \p pD3D9Device as the Direct3D 9 device to use for Direct3D 9
+ * interoperability with the CUDA device \p device and sets \p device as 
+ * the current device for the calling host thread.
+ * 
+ * If \p device has already been initialized then this call will fail with 
+ * the error ::cudaErrorSetOnActiveProcess.  In this case it is necessary 
+ * to reset \p device using ::cudaDeviceReset() before Direct3D 9 
+ * interoperability on \p device may be enabled.
+ *
+ * Successfully initializing CUDA interoperability with \p pD3D9Device 
+ * will increase the internal reference count on \p pD3D9Device.  This 
+ * reference count will be decremented when \p device is reset using 
+ * ::cudaDeviceReset().
+ *
+ * Note that this function is never required for correct functionality.  Use of 
+ * this function will result in accelerated interoperability only when the
+ * operating system is Windows Vista or Windows 7, and the device \p pD3DDdevice 
+ * is not an IDirect3DDevice9Ex.  In all other cirumstances, this function is 
+ * not necessary.
+ *
+ * \param pD3D9Device - Direct3D device to use for this thread
+ * \param device      - The CUDA device to use.  This device must be among the devices
+ *                      returned when querying ::cudaD3D9DeviceListAll from ::cudaD3D9GetDevices,
+ *                      may be set to -1 to automatically select an appropriate CUDA device.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorSetOnActiveProcess
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaD3D9GetDevice,
+ * ::cudaGraphicsD3D9RegisterResource,
+ * ::cudaDeviceReset
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D9SetDirect3DDevice(IDirect3DDevice9 *pD3D9Device, int device __dv(-1));
+
+/** @} */ /* END CUDART_D3D9 */
+
+/**
+ * \addtogroup CUDART_D3D9_DEPRECATED Direct3D 9 Interoperability [DEPRECATED]
+ * This section describes deprecated Direct3D 9 interoperability functions.
+ *
+ * @{
+ */
+
+/**
+ * CUDA D3D9 Register Flags
+ */
+enum cudaD3D9RegisterFlags
+{
+  cudaD3D9RegisterFlagsNone  = 0,  /**< Default; Resource can be accessed througa void* */
+  cudaD3D9RegisterFlagsArray = 1   /**< Resource can be accessed through a CUarray* */
+};
+
+/**
+ * CUDA D3D9 Map Flags
+ */
+enum cudaD3D9MapFlags
+{
+  cudaD3D9MapFlagsNone         = 0,  /**< Default; Assume resource can be read/written */
+  cudaD3D9MapFlagsReadOnly     = 1,  /**< CUDA kernels will not write to this resource */
+  cudaD3D9MapFlagsWriteDiscard = 2   /**< CUDA kernels will only write to and will not read from this resource */
+};
+
+/**
+ * \brief Registers a Direct3D resource for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Registers the Direct3D resource \p pResource for access by CUDA.
+ *
+ * If this call is successful, then the application will be able to map and
+ * unmap this resource until it is unregistered through
+ * ::cudaD3D9UnregisterResource(). Also on success, this call will increase
+ * the internal reference count on \p pResource. This reference count will be
+ * decremented when this resource is unregistered through
+ * ::cudaD3D9UnregisterResource().
+ *
+ * This call potentially has a high-overhead and should not be called every frame
+ * in interactive applications.
+ *
+ * The type of \p pResource must be one of the following.
+ *
+ * - ::IDirect3DVertexBuffer9: No notes.
+ * - ::IDirect3DIndexBuffer9: No notes.
+ * - ::IDirect3DSurface9: Only stand-alone objects of type ::IDirect3DSurface9
+ * may be explicitly shared. In particular, individual mipmap levels and faces
+ * of cube maps may not be registered directly. To access individual surfaces
+ * associated with a texture, one must register the base texture object.
+ * - ::IDirect3DBaseTexture9: When a texture is registered, all surfaces
+ * associated with all mipmap levels of all faces of the texture will be
+ * accessible to CUDA.
+ *
+ * The \p flags argument specifies the mechanism through which CUDA will
+ * access the Direct3D resource. The following value is allowed:
+ *
+ * - ::cudaD3D9RegisterFlagsNone: Specifies that CUDA will access this
+ * resource through a \p void*. The pointer, size, and pitch for each
+ * subresource of this resource may be queried through
+ * ::cudaD3D9ResourceGetMappedPointer(), ::cudaD3D9ResourceGetMappedSize(),
+ * and ::cudaD3D9ResourceGetMappedPitch() respectively. This option is valid
+ * for all resource types.
+ *
+ * Not all Direct3D resources of the above types may be used for
+ * interoperability with CUDA. The following are some limitations:
+ *
+ * - The primary rendertarget may not be registered with CUDA.
+ * - Resources allocated as shared may not be registered with CUDA.
+ * - Any resources allocated in ::D3DPOOL_SYSTEMMEM or ::D3DPOOL_MANAGED may
+ *   not be registered with CUDA.
+ * - Textures which are not of a format which is 1, 2, or 4 channels of 8, 16,
+ *   or 32-bit integer or floating-point data cannot be shared.
+ * - Surfaces of depth or stencil formats cannot be shared.
+ *
+ * If Direct3D interoperability is not initialized on this context, then
+ * ::cudaErrorInvalidDevice is returned. If \p pResource is of incorrect type
+ * (e.g, is a non-stand-alone ::IDirect3DSurface9) or is already registered,
+ * then ::cudaErrorInvalidResourceHandle is returned. If \p pResource cannot
+ * be registered then ::cudaErrorUnknown is returned.
+ *
+ * \param pResource - Resource to register
+ * \param flags     - Parameters for resource registration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsD3D9RegisterResource
+ */
+extern __host__ cudaError_t CUDARTAPI cudaD3D9RegisterResource(IDirect3DResource9 *pResource, unsigned int flags);
+
+/**
+ * \brief Unregisters a Direct3D resource for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Unregisters the Direct3D resource \p pResource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p pResource is not registered, then ::cudaErrorInvalidResourceHandle is
+ * returned.
+ *
+ * \param pResource - Resource to unregister
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9UnregisterResource(IDirect3DResource9 *pResource);
+
+/**
+ * \brief Map Direct3D resources for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Maps the \p count Direct3D resources in \p ppResources for access by CUDA.
+ *
+ * The resources in \p ppResources may be accessed in CUDA kernels until they
+ * are unmapped. Direct3D should not access any resources while they are
+ * mapped by CUDA. If an application does so, the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any Direct3D
+ * calls issued before ::cudaD3D9MapResources() will complete before any CUDA
+ * kernels issued after ::cudaD3D9MapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries then
+ * ::cudaErrorInvalidResourceHandle is returned. If any of \p ppResources are
+ * presently mapped for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count       - Number of resources to map for CUDA
+ * \param ppResources - Resources to map for CUDA
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsMapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9MapResources(int count, IDirect3DResource9 **ppResources);
+
+/**
+ * \brief Unmap Direct3D resources for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Unmaps the \p count Direct3D resources in \p ppResources.  
+ *
+ * This function provides the synchronization guarantee that any CUDA kernels
+ * issued before ::cudaD3D9UnmapResources() will complete before any Direct3D
+ * calls issued after ::cudaD3D9UnmapResources() begin.
+ *
+ * If any of \p ppResources have not been registered for use with CUDA or if
+ * \p ppResources contains any duplicate entries, then
+ * ::cudaErrorInvalidResourceHandle is returned. If any of \p ppResources are
+ * not presently mapped for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count       - Number of resources to unmap for CUDA
+ * \param ppResources - Resources to unmap for CUDA
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+  * ::cudaGraphicsUnmapResources
+  */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9UnmapResources(int count, IDirect3DResource9 **ppResources);
+
+/**
+ * \brief Set usage flags for mapping a Direct3D resource
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Set flags for mapping the Direct3D resource \p pResource.
+ *
+ * Changes to flags will take effect the next time \p pResource is mapped.
+ * The \p flags argument may be any of the following:
+ *
+ * - ::cudaD3D9MapFlagsNone: Specifies no hints about how this resource will
+ * be used. It is therefore assumed that this resource will be read from and
+ * written to by CUDA kernels. This is the default value.
+ * - ::cudaD3D9MapFlagsReadOnly: Specifies that CUDA kernels which access this
+ * resource will not write to this resource.
+ * - ::cudaD3D9MapFlagsWriteDiscard: Specifies that CUDA kernels which access
+ * this resource will not read from this resource and will write over the
+ * entire contents of the resource, so none of the data previously stored in
+ * the resource will be preserved.
+ *
+ * If \p pResource has not been registered for use with CUDA, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource is presently
+ * mapped for access by CUDA, then ::cudaErrorUnknown is returned.
+ *
+ * \param pResource - Registered resource to set flags for
+ * \param flags     - Parameters for resource mapping
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaInteropResourceSetMapFlags
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceSetMapFlags(IDirect3DResource9 *pResource, unsigned int flags); 
+
+/**
+ * \brief Get the dimensions of a registered Direct3D surface
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pWidth, \p *pHeight, and \p *pDepth the dimensions of the
+ * subresource of the mapped Direct3D resource \p pResource which corresponds
+ * to \p face and \p level.
+ *
+ * Since anti-aliased surfaces may have multiple samples per pixel, it is
+ * possible that the dimensions of a resource will be an integer factor larger
+ * than the dimensions reported by the Direct3D runtime.
+ *
+ * The parameters \p pWidth, \p pHeight, and \p pDepth are optional. For 2D
+ * surfaces, the value returned in \p *pDepth will be 0.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture9 or
+ * ::IDirect3DSurface9 or if \p pResource has not been registered for use with
+ * CUDA, then ::cudaErrorInvalidResourceHandle is returned.
+ *
+ * For usage requirements of \p face and \p level parameters, see
+ * ::cudaD3D9ResourceGetMappedPointer.
+ *
+ * \param pWidth    - Returned width of surface
+ * \param pHeight   - Returned height of surface
+ * \param pDepth    - Returned depth of surface
+ * \param pResource - Registered resource to access
+ * \param face      - Face of resource to access
+ * \param level     - Level of resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsSubResourceGetMappedArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceGetSurfaceDimensions(size_t *pWidth, size_t *pHeight, size_t *pDepth, IDirect3DResource9 *pResource, unsigned int face, unsigned int level); 
+
+/**
+ * \brief Get an array through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pArray an array through which the subresource of the mapped
+ * Direct3D resource \p pResource, which corresponds to \p face and \p level
+ * may be accessed. The value set in \p pArray may change every time that
+ * \p pResource is mapped.
+ *
+ * If \p pResource is not registered then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource was not registered with usage flags
+ * ::cudaD3D9RegisterFlagsArray, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource is not mapped, then ::cudaErrorUnknown is
+ * returned.
+ *
+ * For usage requirements of \p face and \p level parameters, see
+ * ::cudaD3D9ResourceGetMappedPointer().
+ *
+ * \param ppArray   - Returned array corresponding to subresource
+ * \param pResource - Mapped resource to access
+ * \param face      - Face of resource to access
+ * \param level     - Level of resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsSubResourceGetMappedArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceGetMappedArray(cudaArray **ppArray, IDirect3DResource9 *pResource, unsigned int face, unsigned int level);
+
+/**
+ * \brief Get a pointer through which to access a subresource of a Direct3D
+ * resource which has been mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pPointer the base pointer of the subresource of the mapped
+ * Direct3D resource \p pResource, which corresponds to \p face and \p level.
+ * The value set in \p pPointer may change every time that \p pResource is
+ * mapped.
+ *
+ * If \p pResource is not registered, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource was not registered with usage flags
+ * ::cudaD3D9RegisterFlagsNone, then ::cudaErrorInvalidResourceHandle is
+ * returned. If \p pResource is not mapped, then ::cudaErrorUnknown is
+ * returned.
+ *
+ * If \p pResource is of type ::IDirect3DCubeTexture9, then \p face must one
+ * of the values enumerated by type ::D3DCUBEMAP_FACES. For all other types,
+ * \p face must be 0. If \p face is invalid, then ::cudaErrorInvalidValue is
+ * returned.
+ *
+ * If \p pResource is of type ::IDirect3DBaseTexture9, then \p level must
+ * correspond to a valid mipmap level. Only mipmap level 0 is supported for
+ * now. For all other types \p level must be 0. If \p level is invalid, then
+ * ::cudaErrorInvalidValue is returned.
+ *
+ * \param pPointer  - Returned pointer corresponding to subresource
+ * \param pResource - Mapped resource to access
+ * \param face      - Face of resource to access
+ * \param level     - Level of resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsResourceGetMappedPointer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceGetMappedPointer(void **pPointer, IDirect3DResource9 *pResource, unsigned int face, unsigned int level);
+
+/**
+ * \brief Get the size of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pSize the size of the subresource of the mapped Direct3D
+ * resource \p pResource, which corresponds to \p face and \p level. The value
+ * set in \p pSize may change every time that \p pResource is mapped.
+ *
+ * If \p pResource has not been registered for use with CUDA then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource was not
+ * registered with usage flags ::cudaD3D9RegisterFlagsNone, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource is not mapped
+ * for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * For usage requirements of \p face and \p level parameters, see
+ * ::cudaD3D9ResourceGetMappedPointer().
+ *
+ * \param pSize     - Returned size of subresource
+ * \param pResource - Mapped resource to access
+ * \param face      - Face of resource to access
+ * \param level     - Level of resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsResourceGetMappedPointer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceGetMappedSize(size_t *pSize, IDirect3DResource9 *pResource, unsigned int face, unsigned int level);
+
+/**
+ * \brief Get the pitch of a subresource of a Direct3D resource which has been
+ * mapped for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0.
+ *
+ * Returns in \p *pPitch and \p *pPitchSlice the pitch and Z-slice pitch of
+ * the subresource of the mapped Direct3D resource \p pResource, which
+ * corresponds to \p face and \p level. The values set in \p pPitch and
+ * \p pPitchSlice may change every time that \p pResource is mapped.
+ *
+ * The pitch and Z-slice pitch values may be used to compute the location of a
+ * sample on a surface as follows.
+ *
+ * For a 2D surface, the byte offset of the sample at position \b x, \b y from
+ * the base pointer of the surface is:
+ *
+ * \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * For a 3D surface, the byte offset of the sample at position \b x, \b y,
+ * \b z from the base pointer of the surface is:
+ *
+ * \b z* \b slicePitch + \b y * \b pitch + (<b>bytes per pixel</b>) * \b x
+ *
+ * Both parameters \p pPitch and \p pPitchSlice are optional and may be set to
+ * NULL.
+ *
+ * If \p pResource is not of type ::IDirect3DBaseTexture9 or one of its
+ * sub-types or if \p pResource has not been registered for use with CUDA,
+ * then ::cudaErrorInvalidResourceHandle is returned. If \p pResource was not
+ * registered with usage flags ::cudaD3D9RegisterFlagsNone, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p pResource is not mapped
+ * for access by CUDA then ::cudaErrorUnknown is returned.
+ *
+ * For usage requirements of \p face and \p level parameters, see
+ * ::cudaD3D9ResourceGetMappedPointer().
+ *
+ * \param pPitch      - Returned pitch of subresource
+ * \param pPitchSlice - Returned Z-slice pitch of subresource
+ * \param pResource   - Mapped resource to access
+ * \param face        - Face of resource to access
+ * \param level       - Level of resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsResourceGetMappedPointer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9ResourceGetMappedPitch(size_t *pPitch, size_t *pPitchSlice, IDirect3DResource9 *pResource, unsigned int face, unsigned int level);
+
+/* D3D9 1.x interop interface */
+
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9Begin(IDirect3DDevice9 *pDevice);
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9End(void);
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9RegisterVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9UnregisterVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9MapVertexBuffer(void **dptr, IDirect3DVertexBuffer9 *pVB);
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaD3D9UnmapVertexBuffer(IDirect3DVertexBuffer9 *pVB);
+
+/** @} */ /* END CUDART_D3D9_DEPRECATED */
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#undef __dv
+#undef __CUDA_DEPRECATED
+
+#endif /* __CUDA_D3D9_INTEROP_H__ */
diff --git a/ext/cudart/include/cuda_device_runtime_api.h b/ext/cudart/include/cuda_device_runtime_api.h
new file mode 100644
index 00000000..e3bc812d
--- /dev/null
+++ b/ext/cudart/include/cuda_device_runtime_api.h
@@ -0,0 +1,268 @@
+/*
+ * Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_DEVICE_RUNTIME_API_H__)
+#define __CUDA_DEVICE_RUNTIME_API_H__
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined(__CUDACC_RTC__)
+
+#if !defined(__CUDACC_INTERNAL_NO_STUBS__) && !defined(__CUDACC_RDC__) && !defined(__CUDACC_EWP__) && defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 350) && !defined(__CUDADEVRT_INTERNAL__)
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+struct cudaFuncAttributes;
+
+
+inline __device__  cudaError_t CUDARTAPI cudaMalloc(void **p, size_t s) 
+{ 
+  return cudaErrorUnknown;
+}
+
+inline __device__  cudaError_t CUDARTAPI cudaFuncGetAttributes(struct cudaFuncAttributes *p, const void *c) 
+{ 
+  return cudaErrorUnknown;
+}
+
+inline __device__  cudaError_t CUDARTAPI cudaDeviceGetAttribute(int *value, enum cudaDeviceAttr attr, int device)
+{
+  return cudaErrorUnknown;
+}
+
+inline __device__  cudaError_t CUDARTAPI cudaGetDevice(int *device)
+{
+  return cudaErrorUnknown;
+}
+
+inline __device__  cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, const void *func, int blockSize, size_t dynamicSmemSize)
+{
+  return cudaErrorUnknown;
+}
+
+inline __device__  cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int *numBlocks, const void *func, int blockSize, size_t dynamicSmemSize, unsigned int flags)
+{
+  return cudaErrorUnknown;
+}
+
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* !defined(__CUDACC_INTERNAL_NO_STUBS__) && !defined(__CUDACC_RDC__) &&  !defined(__CUDACC_EWP__) && defined(__CUDA_ARCH__) && (__CUDA_ARCH__ >= 350) && !defined(__CUDADEVRT_INTERNAL__) */
+
+#endif /* !defined(__CUDACC_RTC__) */
+
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+# define __DEPRECATED__(msg)
+#elif defined(_WIN32)
+# define __DEPRECATED__(msg) __declspec(deprecated(msg))
+#elif (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5 && !defined(__clang__))))
+# define __DEPRECATED__(msg) __attribute__((deprecated))
+#else
+# define __DEPRECATED__(msg) __attribute__((deprecated(msg)))
+#endif
+
+#if defined(__CUDA_ARCH__) && !defined(__CDPRT_SUPPRESS_SYNC_DEPRECATION_WARNING)
+# define __CDPRT_DEPRECATED(func_name) __DEPRECATED__("Use of "#func_name" from device code is deprecated. Moreover, such use will cause this module to fail to load on sm_90+ devices. If calls to "#func_name" from device code cannot be removed for older devices at this time, you may guard them with __CUDA_ARCH__ macros to remove them only for sm_90+ devices, making sure to generate code for compute_90 for the macros to take effect. Note that this mitigation will no longer work when support for "#func_name" from device code is eventually dropped for all devices. Disable this warning with -D__CDPRT_SUPPRESS_SYNC_DEPRECATION_WARNING.")
+#else
+# define __CDPRT_DEPRECATED(func_name)
+#endif
+
+#if defined(__cplusplus) && defined(__CUDACC__)         /* Visible to nvcc front-end only */
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 350)   // Visible to SM>=3.5 and "__host__ __device__" only
+
+#include "driver_types.h"
+#include "crt/host_defines.h"
+
+extern "C"
+{
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetAttribute(int *value, enum cudaDeviceAttr attr, int device);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetLimit(size_t *pValue, enum cudaLimit limit);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetCacheConfig(enum cudaFuncCache *pCacheConfig);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetSharedMemConfig(enum cudaSharedMemConfig *pConfig);
+#if (__CUDA_ARCH__ < 900)
+// cudaDeviceSynchronize is removed on sm_90+
+extern __device__ __cudart_builtin__ __CDPRT_DEPRECATED(cudaDeviceSynchronize) cudaError_t CUDARTAPI cudaDeviceSynchronize(void);
+#endif
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI __cudaDeviceSynchronizeDeprecationAvoidance(void);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetLastError(void);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaPeekAtLastError(void);
+extern __device__ __cudart_builtin__ const char* CUDARTAPI cudaGetErrorString(cudaError_t error);
+extern __device__ __cudart_builtin__ const char* CUDARTAPI cudaGetErrorName(cudaError_t error);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetDeviceCount(int *count);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetDevice(int *device);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamCreateWithFlags(cudaStream_t *pStream, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamDestroy(cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamWaitEvent_ptsz(cudaStream_t stream, cudaEvent_t event, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventCreateWithFlags(cudaEvent_t *event, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecord(cudaEvent_t event, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecord_ptsz(cudaEvent_t event, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecordWithFlags_ptsz(cudaEvent_t event, cudaStream_t stream, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventDestroy(cudaEvent_t event);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFuncGetAttributes(struct cudaFuncAttributes *attr, const void *func);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFree(void *devPtr);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMalloc(void **devPtr, size_t size);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpyAsync(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpyAsync_ptsz(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy2DAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy2DAsync_ptsz(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy3DAsync(const struct cudaMemcpy3DParms *p, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy3DAsync_ptsz(const struct cudaMemcpy3DParms *p, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemsetAsync(void *devPtr, int value, size_t count, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemsetAsync_ptsz(void *devPtr, int value, size_t count, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset2DAsync(void *devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset2DAsync_ptsz(void *devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset3DAsync(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset3DAsync_ptsz(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaRuntimeGetVersion(int *runtimeVersion);
+
+/**
+ * \ingroup CUDART_EXECUTION
+ * \brief Obtains a parameter buffer
+ *
+ * Obtains a parameter buffer which can be filled with parameters for a kernel launch.
+ * Parameters passed to ::cudaLaunchDevice must be allocated via this function.
+ *
+ * This is a low level API and can only be accessed from Parallel Thread Execution (PTX).
+ * CUDA user code should use <<< >>> to launch kernels.
+ *
+ * \param alignment - Specifies alignment requirement of the parameter buffer
+ * \param size      - Specifies size requirement in bytes
+ *
+ * \return
+ * Returns pointer to the allocated parameterBuffer
+ * \notefnerr
+ *
+ * \sa cudaLaunchDevice
+ */
+extern __device__ __cudart_builtin__ void * CUDARTAPI cudaGetParameterBuffer(size_t alignment, size_t size);
+
+/**
+ * \ingroup CUDART_EXECUTION
+ * \brief Launches a specified kernel
+ *
+ * Launches a specified kernel with the specified parameter buffer. A parameter buffer can be obtained
+ * by calling ::cudaGetParameterBuffer().
+ *
+ * This is a low level API and can only be accessed from Parallel Thread Execution (PTX).
+ * CUDA user code should use <<< >>> to launch the kernels.
+ *
+ * \param func            - Pointer to the kernel to be launched
+ * \param parameterBuffer - Holds the parameters to the launched kernel. parameterBuffer can be NULL. (Optional)
+ * \param gridDimension   - Specifies grid dimensions
+ * \param blockDimension  - Specifies block dimensions
+ * \param sharedMemSize   - Specifies size of shared memory
+ * \param stream          - Specifies the stream to be used
+ *
+ * \return
+ * ::cudaSuccess, ::cudaErrorInvalidDevice, ::cudaErrorLaunchMaxDepthExceeded, ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorStartupFailure, ::cudaErrorLaunchPendingCountExceeded, ::cudaErrorLaunchOutOfResources
+ * \notefnerr
+ * \n Please refer to Execution Configuration and Parameter Buffer Layout from the CUDA Programming
+ * Guide for the detailed descriptions of launch configuration and parameter layout respectively.
+ *
+ * \sa cudaGetParameterBuffer
+ */
+extern __device__ __cudart_builtin__ void * CUDARTAPI cudaGetParameterBufferV2(void *func, dim3 gridDimension, dim3 blockDimension, unsigned int sharedMemSize);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaLaunchDevice_ptsz(void *func, void *parameterBuffer, dim3 gridDimension, dim3 blockDimension, unsigned int sharedMemSize, cudaStream_t stream);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaLaunchDeviceV2_ptsz(void *parameterBuffer, cudaStream_t stream);
+
+#if defined(CUDA_API_PER_THREAD_DEFAULT_STREAM) && defined(__CUDA_ARCH__)
+    // When compiling for the device and per thread default stream is enabled, add
+    // a static inline redirect to the per thread stream entry points.
+
+    static __inline__ __device__ __cudart_builtin__ cudaError_t CUDARTAPI
+    cudaLaunchDevice(void *func, void *parameterBuffer, dim3 gridDimension, dim3 blockDimension, unsigned int sharedMemSize, cudaStream_t stream)
+    {
+        return cudaLaunchDevice_ptsz(func, parameterBuffer, gridDimension, blockDimension, sharedMemSize, stream);
+    }
+
+    static __inline__ __device__ __cudart_builtin__ cudaError_t CUDARTAPI
+    cudaLaunchDeviceV2(void *parameterBuffer, cudaStream_t stream)
+    {
+        return cudaLaunchDeviceV2_ptsz(parameterBuffer, stream);
+    }
+#else
+    extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaLaunchDevice(void *func, void *parameterBuffer, dim3 gridDimension, dim3 blockDimension, unsigned int sharedMemSize, cudaStream_t stream);
+    extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaLaunchDeviceV2(void *parameterBuffer, cudaStream_t stream);
+#endif
+
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, const void *func, int blockSize, size_t dynamicSmemSize);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int *numBlocks, const void *func, int blockSize, size_t dynamicSmemSize, unsigned int flags);
+
+extern __device__ __cudart_builtin__ unsigned long long CUDARTAPI cudaCGGetIntrinsicHandle(enum cudaCGScope scope);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaCGSynchronize(unsigned long long handle, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaCGSynchronizeGrid(unsigned long long handle, unsigned int flags);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaCGGetSize(unsigned int *numThreads, unsigned int *numGrids, unsigned long long handle);
+extern __device__ __cudart_builtin__ cudaError_t CUDARTAPI cudaCGGetRank(unsigned int *threadRank, unsigned int *gridRank, unsigned long long handle);
+}
+
+template <typename T> static __inline__ __device__ __cudart_builtin__ cudaError_t cudaMalloc(T **devPtr, size_t size);
+template <typename T> static __inline__ __device__ __cudart_builtin__ cudaError_t cudaFuncGetAttributes(struct cudaFuncAttributes *attr, T *entry);
+template <typename T> static __inline__ __device__ __cudart_builtin__ cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, T func, int blockSize, size_t dynamicSmemSize);
+template <typename T> static __inline__ __device__ __cudart_builtin__ cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int *numBlocks, T func, int blockSize, size_t dynamicSmemSize, unsigned int flags);
+
+
+#endif // !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 350)
+#endif /* defined(__cplusplus) && defined(__CUDACC__) */
+
+#undef __DEPRECATED__
+#undef __CDPRT_DEPRECATED
+
+#endif /* !__CUDA_DEVICE_RUNTIME_API_H__ */
diff --git a/ext/cudart/include/cuda_egl_interop.h b/ext/cudart/include/cuda_egl_interop.h
new file mode 100644
index 00000000..40ab01b3
--- /dev/null
+++ b/ext/cudart/include/cuda_egl_interop.h
@@ -0,0 +1,642 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_EGL_INTEROP_H__)
+#define __CUDA_EGL_INTEROP_H__
+
+#include "cuda_runtime_api.h"
+#include "cuda_runtime.h"
+#include "cudart_platform.h"
+#include "EGL/egl.h"
+#include "EGL/eglext.h"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup CUDART_TYPES
+ * @{
+ */
+
+ /**
+ * Maximum number of planes per frame
+ */
+#define CUDA_EGL_MAX_PLANES 3
+
+/**
+ * CUDA EglFrame type - array or pointer
+ */
+typedef enum cudaEglFrameType_enum
+{
+    cudaEglFrameTypeArray = 0,  /**< Frame type CUDA array */
+    cudaEglFrameTypePitch = 1,  /**< Frame type CUDA pointer */
+} cudaEglFrameType;
+
+/**
+ * Resource location flags- sysmem or vidmem
+ *
+ * For CUDA context on iGPU, since video and system memory are equivalent -
+ * these flags will not have an effect on the execution.
+ *
+ * For CUDA context on dGPU, applications can use the flag ::cudaEglResourceLocationFlags
+ * to give a hint about the desired location.
+ *
+ * ::cudaEglResourceLocationSysmem - the frame data is made resident on the system memory
+ * to be accessed by CUDA.
+ *
+ * ::cudaEglResourceLocationVidmem - the frame data is made resident on the dedicated
+ * video memory to be accessed by CUDA.
+ *
+ * There may be an additional latency due to new allocation and data migration,
+ * if the frame is produced on a different memory.
+ */
+typedef enum cudaEglResourceLocationFlags_enum {
+    cudaEglResourceLocationSysmem   = 0x00,       /**< Resource location sysmem */
+    cudaEglResourceLocationVidmem   = 0x01,       /**< Resource location vidmem */
+} cudaEglResourceLocationFlags;
+
+/**
+ * CUDA EGL Color Format - The different planar and multiplanar formats currently supported for CUDA_EGL interops.
+ */
+typedef enum cudaEglColorFormat_enum {
+    cudaEglColorFormatYUV420Planar            = 0,  /**< Y, U, V in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYUV420SemiPlanar        = 1,  /**< Y, UV in two surfaces (UV as one surface) with VU byte ordering, width, height ratio same as YUV420Planar. */
+    cudaEglColorFormatYUV422Planar            = 2,  /**< Y, U, V  each in a separate  surface, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV422SemiPlanar        = 3,  /**< Y, UV in two surfaces with VU byte ordering, width, height ratio same as YUV422Planar. */
+    cudaEglColorFormatARGB                    = 6,  /**< R/G/B/A four channels in one surface with BGRA byte ordering. */
+    cudaEglColorFormatRGBA                    = 7,  /**< R/G/B/A four channels in one surface with ABGR byte ordering. */
+    cudaEglColorFormatL                       = 8,  /**< single luminance channel in one surface. */
+    cudaEglColorFormatR                       = 9,  /**< single color channel in one surface. */
+    cudaEglColorFormatYUV444Planar            = 10, /**< Y, U, V in three surfaces, each in a separate surface, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV444SemiPlanar        = 11, /**< Y, UV in two surfaces (UV as one surface) with VU byte ordering, width, height ratio same as YUV444Planar. */
+    cudaEglColorFormatYUYV422                 = 12, /**< Y, U, V in one surface, interleaved as UYVY in one channel. */
+    cudaEglColorFormatUYVY422                 = 13, /**< Y, U, V in one surface, interleaved as YUYV in one channel. */
+    cudaEglColorFormatABGR                    = 14, /**< R/G/B/A four channels in one surface with RGBA byte ordering. */
+    cudaEglColorFormatBGRA                    = 15, /**< R/G/B/A four channels in one surface with ARGB byte ordering. */
+    cudaEglColorFormatA                       = 16, /**< Alpha color format - one channel in one surface. */
+    cudaEglColorFormatRG                      = 17, /**< R/G color format - two channels in one surface with GR byte ordering */
+    cudaEglColorFormatAYUV                    = 18, /**< Y, U, V, A four channels in one surface, interleaved as VUYA. */
+    cudaEglColorFormatYVU444SemiPlanar        = 19, /**< Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU422SemiPlanar        = 20, /**< Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU420SemiPlanar        = 21, /**< Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_444SemiPlanar = 22, /**< Y10, V10U10 in two surfaces (VU as one surface) with UV byte ordering, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatY10V10U10_420SemiPlanar = 23, /**< Y10, V10U10 in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY12V12U12_444SemiPlanar = 24, /**< Y12, V12U12 in two surfaces (VU as one surface) with UV byte ordering, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatY12V12U12_420SemiPlanar = 25, /**< Y12, V12U12 in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatVYUY_ER                 = 26, /**< Extended Range Y, U, V in one surface, interleaved as YVYU in one channel. */
+    cudaEglColorFormatUYVY_ER                 = 27, /**< Extended Range Y, U, V in one surface, interleaved as YUYV in one channel. */
+    cudaEglColorFormatYUYV_ER                 = 28, /**< Extended Range Y, U, V in one surface, interleaved as UYVY in one channel. */
+    cudaEglColorFormatYVYU_ER                 = 29, /**< Extended Range Y, U, V in one surface, interleaved as VYUY in one channel. */
+    cudaEglColorFormatYUVA_ER                 = 31, /**< Extended Range Y, U, V, A four channels in one surface, interleaved as AVUY. */
+    cudaEglColorFormatAYUV_ER                 = 32, /**< Extended Range Y, U, V, A four channels in one surface, interleaved as VUYA. */
+    cudaEglColorFormatYUV444Planar_ER         = 33, /**< Extended Range Y, U, V in three surfaces, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV422Planar_ER         = 34, /**< Extended Range Y, U, V in three surfaces, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV420Planar_ER         = 35, /**< Extended Range Y, U, V in three surfaces, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYUV444SemiPlanar_ER     = 36, /**< Extended Range Y, UV in two surfaces (UV as one surface) with VU byte ordering, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV422SemiPlanar_ER     = 37, /**< Extended Range Y, UV in two surfaces (UV as one surface) with VU byte ordering, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYUV420SemiPlanar_ER     = 38, /**< Extended Range Y, UV in two surfaces (UV as one surface) with VU byte ordering, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU444Planar_ER         = 39, /**< Extended Range Y, V, U in three surfaces, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU422Planar_ER         = 40, /**< Extended Range Y, V, U in three surfaces, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU420Planar_ER         = 41, /**< Extended Range Y, V, U in three surfaces, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU444SemiPlanar_ER     = 42, /**< Extended Range Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU422SemiPlanar_ER     = 43, /**< Extended Range Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU420SemiPlanar_ER     = 44, /**< Extended Range Y, VU in two surfaces (VU as one surface) with UV byte ordering, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatBayerRGGB               = 45, /**< Bayer format - one channel in one surface with interleaved RGGB ordering. */
+    cudaEglColorFormatBayerBGGR               = 46, /**< Bayer format - one channel in one surface with interleaved BGGR ordering. */
+    cudaEglColorFormatBayerGRBG               = 47, /**< Bayer format - one channel in one surface with interleaved GRBG ordering. */
+    cudaEglColorFormatBayerGBRG               = 48, /**< Bayer format - one channel in one surface with interleaved GBRG ordering. */
+    cudaEglColorFormatBayer10RGGB             = 49, /**< Bayer10 format - one channel in one surface with interleaved RGGB ordering. Out of 16 bits, 10 bits used 6 bits No-op. */
+    cudaEglColorFormatBayer10BGGR             = 50, /**< Bayer10 format - one channel in one surface with interleaved BGGR ordering. Out of 16 bits, 10 bits used 6 bits No-op. */
+    cudaEglColorFormatBayer10GRBG             = 51, /**< Bayer10 format - one channel in one surface with interleaved GRBG ordering. Out of 16 bits, 10 bits used 6 bits No-op. */
+    cudaEglColorFormatBayer10GBRG             = 52, /**< Bayer10 format - one channel in one surface with interleaved GBRG ordering. Out of 16 bits, 10 bits used 6 bits No-op. */
+    cudaEglColorFormatBayer12RGGB             = 53, /**< Bayer12 format - one channel in one surface with interleaved RGGB ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12BGGR             = 54, /**< Bayer12 format - one channel in one surface with interleaved BGGR ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12GRBG             = 55, /**< Bayer12 format - one channel in one surface with interleaved GRBG ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12GBRG             = 56, /**< Bayer12 format - one channel in one surface with interleaved GBRG ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer14RGGB             = 57, /**< Bayer14 format - one channel in one surface with interleaved RGGB ordering. Out of 16 bits, 14 bits used 2 bits No-op. */
+    cudaEglColorFormatBayer14BGGR             = 58, /**< Bayer14 format - one channel in one surface with interleaved BGGR ordering. Out of 16 bits, 14 bits used 2 bits No-op. */
+    cudaEglColorFormatBayer14GRBG             = 59, /**< Bayer14 format - one channel in one surface with interleaved GRBG ordering. Out of 16 bits, 14 bits used 2 bits No-op. */
+    cudaEglColorFormatBayer14GBRG             = 60, /**< Bayer14 format - one channel in one surface with interleaved GBRG ordering. Out of 16 bits, 14 bits used 2 bits No-op. */
+    cudaEglColorFormatBayer20RGGB             = 61, /**< Bayer20 format - one channel in one surface with interleaved RGGB ordering. Out of 32 bits, 20 bits used 12 bits No-op. */
+    cudaEglColorFormatBayer20BGGR             = 62, /**< Bayer20 format - one channel in one surface with interleaved BGGR ordering. Out of 32 bits, 20 bits used 12 bits No-op. */
+    cudaEglColorFormatBayer20GRBG             = 63, /**< Bayer20 format - one channel in one surface with interleaved GRBG ordering. Out of 32 bits, 20 bits used 12 bits No-op. */
+    cudaEglColorFormatBayer20GBRG             = 64, /**< Bayer20 format - one channel in one surface with interleaved GBRG ordering. Out of 32 bits, 20 bits used 12 bits No-op. */
+    cudaEglColorFormatYVU444Planar            = 65, /**< Y, V, U in three surfaces, each in a separate surface, U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU422Planar            = 66, /**< Y, V, U in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = Y height. */
+    cudaEglColorFormatYVU420Planar            = 67, /**< Y, V, U in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatBayerIspRGGB            = 68, /**< Nvidia proprietary Bayer ISP format - one channel in one surface with interleaved RGGB ordering and mapped to opaque integer datatype. */
+    cudaEglColorFormatBayerIspBGGR            = 69, /**< Nvidia proprietary Bayer ISP format - one channel in one surface with interleaved BGGR ordering and mapped to opaque integer datatype. */
+    cudaEglColorFormatBayerIspGRBG            = 70, /**< Nvidia proprietary Bayer ISP format - one channel in one surface with interleaved GRBG ordering and mapped to opaque integer datatype. */
+    cudaEglColorFormatBayerIspGBRG            = 71, /**< Nvidia proprietary Bayer ISP format - one channel in one surface with interleaved GBRG ordering and mapped to opaque integer datatype. */
+    cudaEglColorFormatBayerBCCR               = 72, /**< Bayer format - one channel in one surface with interleaved BCCR ordering. */
+    cudaEglColorFormatBayerRCCB               = 73, /**< Bayer format - one channel in one surface with interleaved RCCB ordering. */
+    cudaEglColorFormatBayerCRBC               = 74, /**< Bayer format - one channel in one surface with interleaved CRBC ordering. */
+    cudaEglColorFormatBayerCBRC               = 75, /**< Bayer format - one channel in one surface with interleaved CBRC ordering. */
+    cudaEglColorFormatBayer10CCCC             = 76, /**< Bayer10 format - one channel in one surface with interleaved CCCC ordering. Out of 16 bits, 10 bits used 6 bits No-op. */
+    cudaEglColorFormatBayer12BCCR             = 77, /**< Bayer12 format - one channel in one surface with interleaved BCCR ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12RCCB             = 78, /**< Bayer12 format - one channel in one surface with interleaved RCCB ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12CRBC             = 79, /**< Bayer12 format - one channel in one surface with interleaved CRBC ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12CBRC             = 80, /**< Bayer12 format - one channel in one surface with interleaved CBRC ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatBayer12CCCC             = 81, /**< Bayer12 format - one channel in one surface with interleaved CCCC ordering. Out of 16 bits, 12 bits used 4 bits No-op. */
+    cudaEglColorFormatY                       = 82, /**< Color format for single Y plane. */
+    cudaEglColorFormatYUV420SemiPlanar_2020   = 83, /**< Y, UV in two surfaces (UV as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU420SemiPlanar_2020   = 84, /**< Y, VU in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYUV420Planar_2020       = 85, /**< Y, U, V in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU420Planar_2020       = 86, /**< Y, V, U in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYUV420SemiPlanar_709    = 87, /**< Y, UV in two surfaces (UV as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU420SemiPlanar_709    = 88, /**< Y, VU in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYUV420Planar_709        = 89, /**< Y, U, V in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatYVU420Planar_709        = 90, /**< Y, V, U in three surfaces, each in a separate surface, U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_420SemiPlanar_709  = 91, /**< Y10, V10U10 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_420SemiPlanar_2020 = 92, /**< Y10, V10U10 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_422SemiPlanar_2020 = 93, /**< Y10, V10U10  in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height =  Y height. */
+    cudaEglColorFormatY10V10U10_422SemiPlanar      = 94, /**< Y10, V10U10  in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height =  Y height. */
+    cudaEglColorFormatY10V10U10_422SemiPlanar_709  = 95, /**< Y10, V10U10  in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height =  Y height. */
+    cudaEglColorFormatY_ER                         = 96, /**< Extended Range Color format for single Y plane. */
+    cudaEglColorFormatY_709_ER                     = 97, /**< Extended Range Color format for single Y plane. */
+    cudaEglColorFormatY10_ER                       = 98, /**< Extended Range Color format for single Y10 plane. */
+    cudaEglColorFormatY10_709_ER                   = 99, /**< Extended Range Color format for single Y10 plane. */
+    cudaEglColorFormatY12_ER                       = 100, /**< Extended Range Color format for single Y12 plane. */
+    cudaEglColorFormatY12_709_ER                   = 101, /**< Extended Range Color format for single Y12 plane. */
+    cudaEglColorFormatYUVA                         = 102, /**< Y, U, V, A four channels in one surface, interleaved as AVUY. */
+    cudaEglColorFormatYVYU                         = 104, /**< Y, U, V in one surface, interleaved as YVYU in one channel. */
+    cudaEglColorFormatVYUY                         = 105, /**< Y, U, V in one surface, interleaved as VYUY in one channel. */
+    cudaEglColorFormatY10V10U10_420SemiPlanar_ER     = 106, /**< Extended Range Y10, V10U10 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_420SemiPlanar_709_ER = 107, /**< Extended Range Y10, V10U10 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY10V10U10_444SemiPlanar_ER     = 108, /**< Extended Range Y10, V10U10 in two surfaces (VU as one surface) U/V width = Y width, U/V height = Y height. */ 
+    cudaEglColorFormatY10V10U10_444SemiPlanar_709_ER = 109, /**< Extended Range Y10, V10U10 in two surfaces (VU as one surface) U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatY12V12U12_420SemiPlanar_ER     = 110, /**< Extended Range Y12, V12U12 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY12V12U12_420SemiPlanar_709_ER = 111, /**< Extended Range Y12, V12U12 in two surfaces (VU as one surface) U/V width = 1/2 Y width, U/V height = 1/2 Y height. */
+    cudaEglColorFormatY12V12U12_444SemiPlanar_ER     = 112, /**< Extended Range Y12, V12U12 in two surfaces (VU as one surface) U/V width = Y width, U/V height = Y height. */
+    cudaEglColorFormatY12V12U12_444SemiPlanar_709_ER = 113, /**< Extended Range Y12, V12U12 in two surfaces (VU as one surface) U/V width = Y width, U/V height = Y height. */
+} cudaEglColorFormat;
+
+/**
+ * CUDA EGL Plane Descriptor - structure defining each plane of a CUDA EGLFrame
+ */
+typedef struct cudaEglPlaneDesc_st {
+    unsigned int width;                         /**< Width of plane */
+    unsigned int height;                        /**< Height of plane */
+    unsigned int depth;                         /**< Depth of plane */
+    unsigned int pitch;                         /**< Pitch of plane */
+    unsigned int numChannels;                   /**< Number of channels for the plane */
+    struct cudaChannelFormatDesc channelDesc;   /**< Channel Format Descriptor */
+    unsigned int reserved[4];                   /**< Reserved for future use */
+} cudaEglPlaneDesc;
+
+/**
+ * CUDA EGLFrame Descriptor - structure defining one frame of EGL.
+ *
+ * Each frame may contain one or more planes depending on whether the surface is Multiplanar or not.
+ * Each plane of EGLFrame is represented by ::cudaEglPlaneDesc which is defined as:
+ * \code
+ * typedef struct cudaEglPlaneDesc_st {
+ *     unsigned int width;
+ *     unsigned int height;
+ *     unsigned int depth;
+ *     unsigned int pitch;
+ *     unsigned int numChannels;
+ *     struct cudaChannelFormatDesc channelDesc;
+ *     unsigned int reserved[4];
+ * } cudaEglPlaneDesc;
+ * \endcode
+
+*/
+typedef struct cudaEglFrame_st {
+   union {
+       cudaArray_t            pArray[CUDA_EGL_MAX_PLANES];     /**< Array of CUDA arrays corresponding to each plane*/
+       struct cudaPitchedPtr  pPitch[CUDA_EGL_MAX_PLANES];     /**< Array of Pointers corresponding to each plane*/
+   } frame;
+   cudaEglPlaneDesc planeDesc[CUDA_EGL_MAX_PLANES];     /**< CUDA EGL Plane Descriptor ::cudaEglPlaneDesc*/
+   unsigned int planeCount;                             /**< Number of planes */
+   cudaEglFrameType frameType;                          /**< Array or Pitch */
+   cudaEglColorFormat eglColorFormat;                   /**< CUDA EGL Color Format*/
+} cudaEglFrame;
+
+/**
+ * CUDA EGLSream Connection
+ */
+typedef struct  CUeglStreamConnection_st *cudaEglStreamConnection;
+
+/** @} */ /* END CUDART_TYPES */
+
+/**
+ * \addtogroup CUDART_EGL EGL Interoperability
+ * This section describes the EGL interoperability functions of the CUDA
+ * runtime application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Registers an EGL image
+ *
+ * Registers the EGLImageKHR specified by \p image for access by
+ * CUDA. A handle to the registered object is returned as \p pCudaResource.
+ * Additional Mapping/Unmapping is not required for the registered resource and
+ * ::cudaGraphicsResourceGetMappedEglFrame can be directly called on the \p pCudaResource.
+ *
+ * The application will be responsible for synchronizing access to shared objects.
+ * The application must ensure that any pending operation which access the objects have completed
+ * before passing control to CUDA. This may be accomplished by issuing and waiting for
+ * glFinish command on all GLcontexts (for OpenGL and likewise for other APIs).
+ * The application will be also responsible for ensuring that any pending operation on the
+ * registered CUDA resource has completed prior to executing subsequent commands in other APIs
+ * accesing the same memory objects.
+ * This can be accomplished by calling cuCtxSynchronize or cuEventSynchronize (preferably).
+ *
+ * The surface's intended usage is specified using \p flags, as follows:
+ *
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA. This is the default value.
+ * - ::cudaGraphicsRegisterFlagsReadOnly: Specifies that CUDA
+ *   will not write to this resource.
+ * - ::cudaGraphicsRegisterFlagsWriteDiscard: Specifies that
+ *   CUDA will not read from this resource and will write over the
+ *   entire contents of the resource, so none of the data previously
+ *   stored in the resource will be preserved.
+ *
+ * The EGLImageKHR is an object which can be used to create EGLImage target resource. It is defined as a void pointer.
+ * typedef void* EGLImageKHR
+ *
+ * \param pCudaResource   - Pointer to the returned object handle
+ * \param image           - An EGLImageKHR image which can be used to create target resource.
+ * \param flags           - Map flags
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsResourceGetMappedEglFrame,
+ * ::cuGraphicsEGLRegisterImage
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsEGLRegisterImage(struct cudaGraphicsResource **pCudaResource, EGLImageKHR image, unsigned int flags);
+
+/**
+ * \brief Connect CUDA to EGLStream as a consumer.
+ *
+ * Connect CUDA as a consumer to EGLStreamKHR specified by \p eglStream.
+ *
+ * The EGLStreamKHR is an EGL object that transfers a sequence of image frames from one
+ * API to another.
+ *
+ * \param conn              - Pointer to the returned connection handle
+ * \param eglStream         - EGLStreamKHR handle
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamConsumerDisconnect,
+ * ::cudaEGLStreamConsumerAcquireFrame,
+ * ::cudaEGLStreamConsumerReleaseFrame,
+ * ::cuEGLStreamConsumerConnect
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamConsumerConnect(cudaEglStreamConnection *conn, EGLStreamKHR eglStream);
+
+/**
+ * \brief Connect CUDA to EGLStream as a consumer with given flags.
+ *
+ * Connect CUDA as a consumer to EGLStreamKHR specified by \p stream with specified \p flags defined by
+ * ::cudaEglResourceLocationFlags.
+ *
+ * The flags specify whether the consumer wants to access frames from system memory or video memory.
+ * Default is ::cudaEglResourceLocationVidmem.
+ *
+ * \param conn              - Pointer to the returned connection handle
+ * \param eglStream         - EGLStreamKHR handle
+ * \param flags             - Flags denote intended location - system or video.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamConsumerDisconnect,
+ * ::cudaEGLStreamConsumerAcquireFrame,
+ * ::cudaEGLStreamConsumerReleaseFrame,
+ * ::cuEGLStreamConsumerConnectWithFlags
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamConsumerConnectWithFlags(cudaEglStreamConnection *conn, EGLStreamKHR eglStream, unsigned int flags);
+
+/**
+ * \brief Disconnect CUDA as a consumer to EGLStream .
+ *
+ * Disconnect CUDA as a consumer to EGLStreamKHR.
+ *
+ * \param conn            - Conection to disconnect.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamConsumerConnect,
+ * ::cudaEGLStreamConsumerAcquireFrame,
+ * ::cudaEGLStreamConsumerReleaseFrame,
+ * ::cuEGLStreamConsumerDisconnect
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamConsumerDisconnect(cudaEglStreamConnection *conn);
+
+/**
+ * \brief Acquire an image frame from the EGLStream with CUDA as a consumer.
+ *
+ * Acquire an image frame from EGLStreamKHR.
+ * ::cudaGraphicsResourceGetMappedEglFrame can be called on \p pCudaResource to get
+ * ::cudaEglFrame.
+ *
+ * \param conn            - Connection on which to acquire
+ * \param pCudaResource   - CUDA resource on which the EGLStream frame will be mapped for use.
+ * \param pStream         - CUDA stream for synchronization and any data migrations
+ * implied by ::cudaEglResourceLocationFlags.
+ * \param timeout         - Desired timeout in usec.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * ::cudaErrorLaunchTimeout
+ *
+ * \sa
+ * ::cudaEGLStreamConsumerConnect,
+ * ::cudaEGLStreamConsumerDisconnect,
+ * ::cudaEGLStreamConsumerReleaseFrame,
+ * ::cuEGLStreamConsumerAcquireFrame
+ */
+
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamConsumerAcquireFrame(cudaEglStreamConnection *conn,
+        cudaGraphicsResource_t *pCudaResource, cudaStream_t *pStream, unsigned int timeout);
+/**
+ * \brief Releases the last frame acquired from the EGLStream.
+ *
+ * Release the acquired image frame specified by \p pCudaResource to EGLStreamKHR.
+ *
+ * \param conn            - Connection on which to release
+ * \param pCudaResource   - CUDA resource whose corresponding frame is to be released
+ * \param pStream         - CUDA stream on which release will be done.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamConsumerConnect,
+ * ::cudaEGLStreamConsumerDisconnect,
+ * ::cudaEGLStreamConsumerAcquireFrame,
+ * ::cuEGLStreamConsumerReleaseFrame
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamConsumerReleaseFrame(cudaEglStreamConnection *conn,
+                                                  cudaGraphicsResource_t pCudaResource, cudaStream_t *pStream);
+
+/**
+ * \brief Connect CUDA to EGLStream as a producer.
+ *
+ * Connect CUDA as a producer to EGLStreamKHR specified by \p stream.
+ *
+ * The EGLStreamKHR is an EGL object that transfers a sequence of image frames from one
+ * API to another.
+ *
+ * \param conn   - Pointer to the returned connection handle
+ * \param eglStream - EGLStreamKHR handle
+ * \param width  - width of the image to be submitted to the stream
+ * \param height - height of the image to be submitted to the stream
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamProducerDisconnect,
+ * ::cudaEGLStreamProducerPresentFrame,
+ * ::cudaEGLStreamProducerReturnFrame,
+ * ::cuEGLStreamProducerConnect
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamProducerConnect(cudaEglStreamConnection *conn,
+                                                EGLStreamKHR eglStream, EGLint width, EGLint height);
+
+/**
+ * \brief Disconnect CUDA as a producer  to EGLStream .
+ *
+ * Disconnect CUDA as a producer to EGLStreamKHR.
+ *
+ * \param conn            - Conection to disconnect.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamProducerConnect,
+ * ::cudaEGLStreamProducerPresentFrame,
+ * ::cudaEGLStreamProducerReturnFrame,
+ * ::cuEGLStreamProducerDisconnect
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamProducerDisconnect(cudaEglStreamConnection *conn);
+
+/**
+ * \brief Present a CUDA eglFrame to the EGLStream with CUDA as a producer.
+ *
+ * The ::cudaEglFrame is defined as:
+ * \code
+ * typedef struct cudaEglFrame_st {
+ *     union {
+ *         cudaArray_t            pArray[CUDA_EGL_MAX_PLANES];
+ *         struct cudaPitchedPtr  pPitch[CUDA_EGL_MAX_PLANES];
+ *     } frame;
+ *     cudaEglPlaneDesc planeDesc[CUDA_EGL_MAX_PLANES];
+ *     unsigned int planeCount;
+ *     cudaEglFrameType frameType;
+ *     cudaEglColorFormat eglColorFormat;
+ * } cudaEglFrame;
+ * \endcode
+ *
+ * For ::cudaEglFrame of type ::cudaEglFrameTypePitch, the application may present sub-region of a memory
+ * allocation. In that case, ::cudaPitchedPtr::ptr will specify the start address of the sub-region in
+ * the allocation and ::cudaEglPlaneDesc will specify the dimensions of the sub-region.
+ *
+ * \param conn            - Connection on which to present the CUDA array
+ * \param eglframe        - CUDA Eglstream Proucer Frame handle to be sent to the consumer over EglStream.
+ * \param pStream         - CUDA stream on which to present the frame.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamProducerConnect,
+ * ::cudaEGLStreamProducerDisconnect,
+ * ::cudaEGLStreamProducerReturnFrame,
+ * ::cuEGLStreamProducerPresentFrame
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamProducerPresentFrame(cudaEglStreamConnection *conn,
+                                                 cudaEglFrame eglframe, cudaStream_t *pStream);
+
+/**
+ * \brief Return the CUDA eglFrame to the EGLStream last released by the consumer.
+ * 
+ * This API can potentially return cudaErrorLaunchTimeout if the consumer has not 
+ * returned a frame to EGL stream. If timeout is returned the application can retry.
+ *
+ * \param conn            - Connection on which to present the CUDA array
+ * \param eglframe        - CUDA Eglstream Proucer Frame handle returned from the consumer over EglStream.
+ * \param pStream         - CUDA stream on which to return the frame.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \sa
+ * ::cudaEGLStreamProducerConnect,
+ * ::cudaEGLStreamProducerDisconnect,
+ * ::cudaEGLStreamProducerPresentFrame,
+ * ::cuEGLStreamProducerReturnFrame
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEGLStreamProducerReturnFrame(cudaEglStreamConnection *conn,
+                                                cudaEglFrame *eglframe, cudaStream_t *pStream);
+
+/**
+ * \brief Get an eglFrame through which to access a registered EGL graphics resource.
+ *
+ * Returns in \p *eglFrame an eglFrame pointer through which the registered graphics resource
+ * \p resource may be accessed.
+ * This API can only be called for EGL graphics resources.
+ *
+ * The ::cudaEglFrame is defined as
+ * \code
+ * typedef struct cudaEglFrame_st {
+ *     union {
+ *         cudaArray_t             pArray[CUDA_EGL_MAX_PLANES];
+ *         struct cudaPitchedPtr   pPitch[CUDA_EGL_MAX_PLANES];
+ *     } frame;
+ *     cudaEglPlaneDesc planeDesc[CUDA_EGL_MAX_PLANES];
+ *     unsigned int planeCount;
+ *     cudaEglFrameType frameType;
+ *     cudaEglColorFormat eglColorFormat;
+ * } cudaEglFrame;
+ * \endcode
+ *
+ *
+ * \param eglFrame   - Returned eglFrame.
+ * \param resource   - Registered resource to access.
+ * \param index      - Index for cubemap surfaces.
+ * \param mipLevel   - Mipmap level for the subresource to access.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown
+ *
+ * \note Note that in case of multiplanar \p *eglFrame, pitch of only first plane (unsigned int cudaEglPlaneDesc::pitch) is to be considered by the application.
+ *
+ * \sa
+ * ::cudaGraphicsSubResourceGetMappedArray,
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsResourceGetMappedEglFrame
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsResourceGetMappedEglFrame(cudaEglFrame* eglFrame,
+                                        cudaGraphicsResource_t resource, unsigned int index, unsigned int mipLevel);
+
+/**
+ * \brief Creates an event from EGLSync object
+ *
+ * Creates an event *phEvent from an EGLSyncKHR eglSync with the flages specified
+ * via \p flags. Valid flags include:
+ * - ::cudaEventDefault: Default event creation flag.
+ * - ::cudaEventBlockingSync: Specifies that the created event should use blocking
+ * synchronization.  A CPU thread that uses ::cudaEventSynchronize() to wait on
+ * an event created with this flag will block until the event has actually
+ * been completed.
+ *
+ * ::cudaEventRecord and TimingData are not supported for events created from EGLSync.
+ *
+ * The EGLSyncKHR is an opaque handle to an EGL sync object.
+ * typedef void* EGLSyncKHR
+ *
+ * \param phEvent - Returns newly created event
+ * \param eglSync - Opaque handle to EGLSync object
+ * \param flags   - Event creation flags
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorMemoryAllocation
+ *
+ * \sa
+ * ::cudaEventQuery,
+ * ::cudaEventSynchronize,
+ * ::cudaEventDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEventCreateFromEGLSync(cudaEvent_t *phEvent, EGLSyncKHR eglSync, unsigned int flags);
+
+/** @} */ /* END CUDART_EGL */
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#endif /* __CUDA_EGL_INTEROP_H__ */
+
diff --git a/ext/cudart/include/cuda_fp16.h b/ext/cudart/include/cuda_fp16.h
new file mode 100644
index 00000000..8dc1c29c
--- /dev/null
+++ b/ext/cudart/include/cuda_fp16.h
@@ -0,0 +1,3794 @@
+/*
+* Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+*
+* NOTICE TO LICENSEE:
+*
+* This source code and/or documentation ("Licensed Deliverables") are
+* subject to NVIDIA intellectual property rights under U.S. and
+* international Copyright laws.
+*
+* These Licensed Deliverables contained herein is PROPRIETARY and
+* CONFIDENTIAL to NVIDIA and is being provided under the terms and
+* conditions of a form of NVIDIA software license agreement by and
+* between NVIDIA and Licensee ("License Agreement") or electronically
+* accepted by Licensee.  Notwithstanding any terms or conditions to
+* the contrary in the License Agreement, reproduction or disclosure
+* of the Licensed Deliverables to any third party without the express
+* written consent of NVIDIA is prohibited.
+*
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THESE LICENSED DELIVERABLES.
+*
+* U.S. Government End Users.  These Licensed Deliverables are a
+* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+* 1995), consisting of "commercial computer software" and "commercial
+* computer software documentation" as such terms are used in 48
+* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+* only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+* U.S. Government End Users acquire the Licensed Deliverables with
+* only those rights set forth herein.
+*
+* Any use of the Licensed Deliverables in individual and commercial
+* software must include, in the user documentation and internal
+* comments to the code, the above Disclaimer and U.S. Government End
+* Users Notice.
+*/
+
+/**
+* \defgroup CUDA_MATH_INTRINSIC_HALF Half Precision Intrinsics
+* This section describes half precision intrinsic functions that are
+* only supported in device code.
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF_ARITHMETIC Half Arithmetic Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF2_ARITHMETIC Half2 Arithmetic Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF_COMPARISON Half Comparison Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF2_COMPARISON Half2 Comparison Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF_MISC Half Precision Conversion and Data Movement
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF_FUNCTIONS Half Math Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+/**
+* \defgroup CUDA_MATH__HALF2_FUNCTIONS Half2 Math Functions
+* \ingroup CUDA_MATH_INTRINSIC_HALF
+* To use these functions, include the header file \p cuda_fp16.h in your program.
+*/
+
+#ifndef __CUDA_FP16_H__
+#define __CUDA_FP16_H__
+
+#define ___CUDA_FP16_STRINGIFY_INNERMOST(x) #x
+#define __CUDA_FP16_STRINGIFY(x) ___CUDA_FP16_STRINGIFY_INNERMOST(x)
+
+#if defined(__cplusplus)
+#if defined(__CUDACC__)
+#define __CUDA_FP16_DECL__ static __device__ __inline__
+#define __CUDA_HOSTDEVICE_FP16_DECL__ static __host__ __device__ __inline__
+#else
+#define __CUDA_HOSTDEVICE_FP16_DECL__ static
+#endif /* defined(__CUDACC__) */
+
+#define __CUDA_FP16_TYPES_EXIST__
+
+/* Forward-declaration of structures defined in "cuda_fp16.hpp" */
+
+/**
+ * \brief half datatype 
+ * 
+ * \details This structure implements the datatype for storing 
+ * half-precision floating-point numbers. The structure implements 
+ * assignment operators and type conversions. 
+ * 16 bits are being used in total: 1 sign bit, 5 bits for the exponent, 
+ * and the significand is being stored in 10 bits. 
+ * The total precision is 11 bits. There are 15361 representable 
+ * numbers within the interval [0.0, 1.0], endpoints included. 
+ * On average we have log10(2**11) ~ 3.311 decimal digits. 
+ * 
+ * \internal
+ * \req IEEE 754-2008 compliant implementation of half-precision 
+ * floating-point numbers. 
+ * \endinternal
+ */
+struct __half;
+
+/**
+ * \brief half2 datatype
+ * 
+ * \details This structure implements the datatype for storing two 
+ * half-precision floating-point numbers. 
+ * The structure implements assignment operators and type conversions. 
+ * 
+ * \internal
+ * \req Vectorified version of half. 
+ * \endinternal
+ */
+struct __half2;
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts double number to half precision in round-to-nearest-even mode
+* and returns \p half with converted value.
+*
+* \details Converts double number \p a to half precision in round-to-nearest-even mode.
+* \param[in] a - double. Is only being read.
+* \returns half
+* - \p a converted to half.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __double2half(const double a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts float number to half precision in round-to-nearest-even mode
+* and returns \p half with converted value. 
+* 
+* \details Converts float number \p a to half precision in round-to-nearest-even mode. 
+* \param[in] a - float. Is only being read. 
+* \returns half
+* - \p a converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts float number to half precision in round-to-nearest-even mode
+* and returns \p half with converted value.
+*
+* \details Converts float number \p a to half precision in round-to-nearest-even mode.
+* \param[in] a - float. Is only being read. 
+* \returns half
+* - \p a converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rn(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts float number to half precision in round-towards-zero mode
+* and returns \p half with converted value.
+* 
+* \details Converts float number \p a to half precision in round-towards-zero mode.
+* \param[in] a - float. Is only being read. 
+* \returns half
+* - \p a converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rz(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts float number to half precision in round-down mode
+* and returns \p half with converted value.
+* 
+* \details Converts float number \p a to half precision in round-down mode.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns half
+* - \p a converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rd(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts float number to half precision in round-up mode
+* and returns \p half with converted value.
+* 
+* \details Converts float number \p a to half precision in round-up mode.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns half
+* - \p a converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_ru(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts \p half number to float.
+* 
+* \details Converts half number \p a to float.
+* \param[in] a - float. Is only being read. 
+* 
+* \returns float
+* - \p a converted to float. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ float __half2float(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts input to half precision in round-to-nearest-even mode and
+* populates both halves of \p half2 with converted value.
+*
+* \details Converts input \p a to half precision in round-to-nearest-even mode and
+* populates both halves of \p half2 with converted value.
+* \param[in] a - float. Is only being read. 
+*
+* \returns half2
+* - The \p half2 value with both halves equal to the converted half
+* precision number.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __float2half2_rn(const float a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts both input floats to half precision in round-to-nearest-even
+* mode and returns \p half2 with converted values.
+*
+* \details Converts both input floats to half precision in round-to-nearest-even mode
+* and combines the results into one \p half2 number. Low 16 bits of the return
+* value correspond to the input \p a, high 16 bits correspond to the input \p
+* b.
+* \param[in] a - float. Is only being read. 
+* \param[in] b - float. Is only being read. 
+* 
+* \returns half2
+* - The \p half2 value with corresponding halves equal to the
+* converted input floats.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __floats2half2_rn(const float a, const float b);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts low 16 bits of \p half2 to float and returns the result
+* 
+* \details Converts low 16 bits of \p half2 input \p a to 32-bit floating-point number
+* and returns the result.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns float
+* - The low 16 bits of \p a converted to float.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ float __low2float(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts high 16 bits of \p half2 to float and returns the result
+* 
+* \details Converts high 16 bits of \p half2 input \p a to 32-bit floating-point number
+* and returns the result.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns float
+* - The high 16 bits of \p a converted to float.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ float __high2float(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed short integer in round-towards-zero mode.
+*
+* \details Convert the half-precision floating-point value \p h to a signed short
+* integer in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read.
+*
+* \returns short int
+* - \p h converted to a signed short integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ short int __half2short_rz(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned short integer in round-towards-zero
+* mode.
+*
+* \details Convert the half-precision floating-point value \p h to an unsigned short
+* integer in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read.
+*
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned short int __half2ushort_rz(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed integer in round-towards-zero mode.
+*
+* \details Convert the half-precision floating-point value \p h to a signed integer in
+* round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read.
+*
+* \returns int
+* - \p h converted to a signed integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ int __half2int_rz(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned integer in round-towards-zero mode.
+*
+* \details Convert the half-precision floating-point value \p h to an unsigned integer
+* in round-towards-zero mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read.
+*
+* \returns unsigned int
+* - \p h converted to an unsigned integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned int __half2uint_rz(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed 64-bit integer in round-towards-zero mode.
+*
+* \details Convert the half-precision floating-point value \p h to a signed 64-bit
+* integer in round-towards-zero mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - half. Is only being read.
+*
+* \returns long long int
+* - \p h converted to a signed 64-bit integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ long long int __half2ll_rz(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned 64-bit integer in round-towards-zero
+* mode.
+*
+* \details Convert the half-precision floating-point value \p h to an unsigned 64-bit
+* integer in round-towards-zero mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - half. Is only being read.
+*
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned long long int __half2ull_rz(const __half h);
+
+#if defined(__CUDACC__)
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts both components of float2 number to half precision in
+* round-to-nearest-even mode and returns \p half2 with converted values.
+* 
+* \details Converts both components of float2 to half precision in round-to-nearest
+* mode and combines the results into one \p half2 number. Low 16 bits of the
+* return value correspond to \p a.x and high 16 bits of the return value
+* correspond to \p a.y.
+* \param[in] a - float2. Is only being read. 
+*  
+* \returns half2
+* - The \p half2 which has corresponding halves equal to the
+* converted float2 components.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __float22half2_rn(const float2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Converts both halves of \p half2 to float2 and returns the result.
+* 
+* \details Converts both halves of \p half2 input \p a to float2 and returns the
+* result.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns float2
+* - \p a converted to float2.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ float2 __half22float2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed integer in round-to-nearest-even mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed integer in
+* round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ int __half2int_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed integer in round-down mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed integer in
+* round-down mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ int __half2int_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed integer in round-up mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed integer in
+* round-up mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns int
+* - \p h converted to a signed integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ int __half2int_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed integer to a half in round-to-nearest-even mode.
+* 
+* \details Convert the signed integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __int2half_rn(const int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed integer to a half in round-towards-zero mode.
+* 
+* \details Convert the signed integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __int2half_rz(const int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed integer to a half in round-down mode.
+* 
+* \details Convert the signed integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __int2half_rd(const int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed integer to a half in round-up mode.
+* 
+* \details Convert the signed integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __int2half_ru(const int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed short integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed short
+* integer in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ short int __half2short_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed short integer in round-down mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed short
+* integer in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ short int __half2short_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed short integer in round-up mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed short
+* integer in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns short int
+* - \p h converted to a signed short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ short int __half2short_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed short integer to a half in round-to-nearest-even
+* mode.
+* 
+* \details Convert the signed short integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __short2half_rn(const short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed short integer to a half in round-towards-zero mode.
+* 
+* \details Convert the signed short integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __short2half_rz(const short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed short integer to a half in round-down mode.
+* 
+* \details Convert the signed short integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __short2half_rd(const short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed short integer to a half in round-up mode.
+* 
+* \details Convert the signed short integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __short2half_ru(const short int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned integer in round-to-nearest-even mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned integer
+* in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned int __half2uint_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned integer in round-down mode.
+*
+* \details Convert the half-precision floating-point value \p h to an unsigned integer
+* in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+*
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned int __half2uint_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned integer in round-up mode.
+*
+* \details Convert the half-precision floating-point value \p h to an unsigned integer
+* in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+*
+* \returns unsigned int
+* - \p h converted to an unsigned integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned int __half2uint_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned integer to a half in round-to-nearest-even mode.
+* 
+* \details Convert the unsigned integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __uint2half_rn(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned integer to a half in round-towards-zero mode.
+* 
+* \details Convert the unsigned integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half.  
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __uint2half_rz(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned integer to a half in round-down mode.
+* 
+* \details Convert the unsigned integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __uint2half_rd(const unsigned int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned integer to a half in round-up mode.
+* 
+* \details Convert the unsigned integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - unsigned int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __uint2half_ru(const unsigned int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned short integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned short
+* integer in round-to-nearest-even mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned short integer in round-down mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned short
+* integer in round-down mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+*/
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned short integer in round-up mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned short
+* integer in round-up mode. NaN inputs are converted to 0.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned short int
+* - \p h converted to an unsigned short integer. 
+*/
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned short integer to a half in round-to-nearest-even
+* mode.
+* 
+* \details Convert the unsigned short integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ushort2half_rn(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned short integer to a half in round-towards-zero
+* mode.
+* 
+* \details Convert the unsigned short integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ushort2half_rz(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned short integer to a half in round-down mode.
+* 
+* \details Convert the unsigned short integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ushort2half_rd(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned short integer to a half in round-up mode.
+* 
+* \details Convert the unsigned short integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ushort2half_ru(const unsigned short int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned 64-bit integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned 64-bit
+* integer in round-to-nearest-even mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned 64-bit integer in round-down mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned 64-bit
+* integer in round-down mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to an unsigned 64-bit integer in round-up mode.
+* 
+* \details Convert the half-precision floating-point value \p h to an unsigned 64-bit
+* integer in round-up mode. NaN inputs return 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned long long int
+* - \p h converted to an unsigned 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned 64-bit integer to a half in round-to-nearest-even
+* mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ull2half_rn(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned 64-bit integer to a half in round-towards-zero
+* mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ull2half_rz(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned 64-bit integer to a half in round-down mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half.  
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ull2half_rd(const unsigned long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert an unsigned 64-bit integer to a half in round-up mode.
+* 
+* \details Convert the unsigned 64-bit integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - unsigned long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ull2half_ru(const unsigned long long int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed 64-bit integer in round-to-nearest-even
+* mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed 64-bit
+* integer in round-to-nearest-even mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ long long int __half2ll_rn(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed 64-bit integer in round-down mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed 64-bit
+* integer in round-down mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ long long int __half2ll_rd(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a half to a signed 64-bit integer in round-up mode.
+* 
+* \details Convert the half-precision floating-point value \p h to a signed 64-bit
+* integer in round-up mode. NaN inputs return a long long int with hex value of 0x8000000000000000.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns long long int
+* - \p h converted to a signed 64-bit integer. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ long long int __half2ll_ru(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed 64-bit integer to a half in round-to-nearest-even
+* mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a half-precision floating-point
+* value in round-to-nearest-even mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ll2half_rn(const long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed 64-bit integer to a half in round-towards-zero mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a half-precision floating-point
+* value in round-towards-zero mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+*/
+__CUDA_FP16_DECL__ __half __ll2half_rz(const long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed 64-bit integer to a half in round-down mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a half-precision floating-point
+* value in round-down mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ll2half_rd(const long long int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Convert a signed 64-bit integer to a half in round-up mode.
+* 
+* \details Convert the signed 64-bit integer value \p i to a half-precision floating-point
+* value in round-up mode.
+* \param[in] i - long long int. Is only being read. 
+* 
+* \returns half
+* - \p i converted to half. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ll2half_ru(const long long int i);
+
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Truncate input argument to the integral part.
+* 
+* \details Round \p h to the nearest integer value that does not exceed \p h in
+* magnitude.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns half
+* - The truncated integer value. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half htrunc(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculate ceiling of the input argument.
+* 
+* \details Compute the smallest integer value not less than \p h.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns half
+* - The smallest integer value not less than \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hceil(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculate the largest integer less than or equal to \p h.
+* 
+* \details Calculate the largest integer value which is less than or equal to \p h.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns half
+* - The largest integer value which is less than or equal to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hfloor(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Round input to nearest integer value in half-precision floating-point
+* number.
+* 
+* \details Round \p h to the nearest integer value in half-precision floating-point
+* format, with halfway cases rounded to the nearest even integer value.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns half
+* - The nearest integer to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hrint(const __half h);
+
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Truncate \p half2 vector input argument to the integral part.
+* 
+* \details Round each component of vector \p h to the nearest integer value that does
+* not exceed \p h in magnitude.
+* \param[in] h - half2. Is only being read. 
+* 
+* \returns half2
+* - The truncated \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2trunc(const __half2 h);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculate \p half2 vector ceiling of the input argument.
+* 
+* \details For each component of vector \p h compute the smallest integer value not less
+* than \p h.
+* \param[in] h - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector of smallest integers not less than \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2ceil(const __half2 h);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculate the largest integer less than or equal to \p h.
+* 
+* \details For each component of vector \p h calculate the largest integer value which
+* is less than or equal to \p h.
+* \param[in] h - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector of largest integers which is less than or equal to \p h. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2floor(const __half2 h);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Round input to nearest integer value in half-precision floating-point
+* number.
+* 
+* \details Round each component of \p half2 vector \p h to the nearest integer value in
+* half-precision floating-point format, with halfway cases rounded to the
+* nearest even integer value.
+* \param[in] h - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector of rounded integer values. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2rint(const __half2 h);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Returns \p half2 with both halves equal to the input value.
+* 
+* \details Returns \p half2 number with both halves equal to the input \p a \p half
+* number.
+* \param[in] a - half. Is only being read. 
+* 
+* \returns half2
+* - The vector which has both its halves equal to the input \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __half2half2(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Swaps both halves of the \p half2 input.
+* 
+* \details Swaps both halves of the \p half2 input and returns a new \p half2 number
+* with swapped halves.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - \p a with its halves being swapped. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __lowhigh2highlow(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Extracts low 16 bits from each of the two \p half2 inputs and combines
+* into one \p half2 number. 
+* 
+* \details Extracts low 16 bits from each of the two \p half2 inputs and combines into
+* one \p half2 number. Low 16 bits from input \p a is stored in low 16 bits of
+* the return value, low 16 bits from input \p b is stored in high 16 bits of
+* the return value. 
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The low 16 bits of \p a and of \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __lows2half2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Extracts high 16 bits from each of the two \p half2 inputs and
+* combines into one \p half2 number.
+* 
+* \details Extracts high 16 bits from each of the two \p half2 inputs and combines into
+* one \p half2 number. High 16 bits from input \p a is stored in low 16 bits of
+* the return value, high 16 bits from input \p b is stored in high 16 bits of
+* the return value.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The high 16 bits of \p a and of \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __highs2half2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Returns high 16 bits of \p half2 input.
+*
+* \details Returns high 16 bits of \p half2 input \p a.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half
+* - The high 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __high2half(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Returns low 16 bits of \p half2 input.
+*
+* \details Returns low 16 bits of \p half2 input \p a.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half
+* - Returns \p half which contains low 16 bits of the input \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __low2half(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Checks if the input \p half number is infinite.
+* 
+* \details Checks if the input \p half number \p a is infinite. 
+* \param[in] a - half. Is only being read. 
+* 
+* \returns int 
+* - -1 iff \p a is equal to negative infinity, 
+* - 1 iff \p a is equal to positive infinity, 
+* - 0 otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ int __hisinf(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Combines two \p half numbers into one \p half2 number.
+* 
+* \details Combines two input \p half number \p a and \p b into one \p half2 number.
+* Input \p a is stored in low 16 bits of the return value, input \p b is stored
+* in high 16 bits of the return value.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+* 
+* \returns half2
+* - The half2 with one half equal to \p a and the other to \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __halves2half2(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Extracts low 16 bits from \p half2 input.
+* 
+* \details Extracts low 16 bits from \p half2 input \p a and returns a new \p half2
+* number which has both halves equal to the extracted bits.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - The half2 with both halves equal to the low 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __low2half2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Extracts high 16 bits from \p half2 input.
+* 
+* \details Extracts high 16 bits from \p half2 input \p a and returns a new \p half2
+* number which has both halves equal to the extracted bits.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - The half2 with both halves equal to the high 16 bits of the input. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __high2half2(const __half2 a);
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Reinterprets bits in a \p half as a signed short integer.
+* 
+* \details Reinterprets the bits in the half-precision floating-point number \p h
+* as a signed short integer. 
+* \param[in] h - half. Is only being read. 
+* 
+* \returns short int
+* - The reinterpreted value. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ short int __half_as_short(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Reinterprets bits in a \p half as an unsigned short integer.
+* 
+* \details Reinterprets the bits in the half-precision floating-point \p h
+* as an unsigned short number.
+* \param[in] h - half. Is only being read. 
+* 
+* \returns unsigned short int
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ unsigned short int __half_as_ushort(const __half h);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Reinterprets bits in a signed short integer as a \p half.
+* 
+* \details Reinterprets the bits in the signed short integer \p i as a
+* half-precision floating-point number.
+* \param[in] i - short int. Is only being read. 
+* 
+* \returns half
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __short_as_half(const short int i);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Reinterprets bits in an unsigned short integer as a \p half.
+* 
+* \details Reinterprets the bits in the unsigned short integer \p i as a
+* half-precision floating-point number.
+* \param[in] i - unsigned short int. Is only being read. 
+* 
+* \returns half
+* - The reinterpreted value.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __ushort_as_half(const unsigned short int i);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Calculates \p half maximum of two input values.
+*
+* \details Calculates \p half max(\p a, \p b)
+* defined as (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hmax(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Calculates \p half minimum of two input values.
+*
+* \details Calculates \p half min(\p a, \p b)
+* defined as (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hmin(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Calculates \p half2 vector maximum of two inputs.
+*
+* \details Calculates \p half2 vector max(\p a, \p b).
+* Elementwise \p half operation is defined as
+* (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise maximum of vectors \p a  and \p b
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmax2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Calculates \p half2 vector minimum of two inputs.
+*
+* \details Calculates \p half2 vector min(\p a, \p b).
+* Elementwise \p half operation is defined as
+* (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, the other input is returned.
+* - If both inputs are NaNs, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise minimum of vectors \p a  and \p b
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmin2(const __half2 a, const __half2 b);
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 300)
+#if !defined warpSize && !defined __local_warpSize
+#define warpSize    32
+#define __local_warpSize
+#endif
+
+#if defined(_WIN32)
+# define __DEPRECATED__(msg) __declspec(deprecated(msg))
+#elif (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5 && !defined(__clang__))))
+# define __DEPRECATED__(msg) __attribute__((deprecated))
+#else
+# define __DEPRECATED__(msg) __attribute__((deprecated(msg)))
+#endif
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+#define __WSB_DEPRECATION_MESSAGE(x) __CUDA_FP16_STRINGIFY(x) "() is deprecated in favor of " __CUDA_FP16_STRINGIFY(x) "_sync() and may be removed in a future release (Use -Wno-deprecated-declarations to suppress this warning)."
+
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) __half2 __shfl(const __half2 var, const int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) __half2 __shfl_up(const __half2 var, const unsigned int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down))__half2 __shfl_down(const __half2 var, const unsigned int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) __half2 __shfl_xor(const __half2 var, const int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) __half __shfl(const __half var, const int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) __half __shfl_up(const __half var, const unsigned int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) __half __shfl_down(const __half var, const unsigned int delta, const int width = warpSize);
+__CUDA_FP16_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) __half __shfl_xor(const __half var, const int delta, const int width = warpSize);
+#endif
+
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Direct copy from indexed thread. 
+* 
+* \details Returns the value of var held by the thread whose ID is given by delta. 
+* If width is less than warpSize then each subsection of the warp behaves as a separate 
+* entity with a starting logical thread ID of 0. If delta is outside the range [0:width-1], 
+* the value returned corresponds to the value of var held by the delta modulo width (i.e. 
+* within the same subsection). width must have a value which is a power of 2; 
+* results are undefined if width is not a power of 2, or is a number greater than 
+* warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half2. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as half2. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __shfl_sync(const unsigned mask, const __half2 var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with lower ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by subtracting delta from the caller's lane ID. 
+* The value of var held by the resulting lane ID is returned: in effect, var is shifted up 
+* the warp by delta threads. If width is less than warpSize then each subsection of the warp 
+* behaves as a separate entity with a starting logical thread ID of 0. The source thread index 
+* will not wrap around the value of width, so effectively the lower delta threads will be unchanged. 
+* width must have a value which is a power of 2; results are undefined if width is not a power of 2, 
+* or is a number greater than warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half2. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as half2. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __shfl_up_sync(const unsigned mask, const __half2 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with higher ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by adding delta to the caller's thread ID. 
+* The value of var held by the resulting thread ID is returned: this has the effect 
+* of shifting var down the warp by delta threads. If width is less than warpSize then 
+* each subsection of the warp behaves as a separate entity with a starting logical 
+* thread ID of 0. As for __shfl_up_sync(), the ID number of the source thread 
+* will not wrap around the value of width and so the upper delta threads 
+* will remain unchanged. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half2. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as half2. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __shfl_down_sync(const unsigned mask, const __half2 var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread based on bitwise XOR of own thread ID. 
+* 
+* \details Calculates a source thread ID by performing a bitwise XOR of the caller's thread ID with mask: 
+* the value of var held by the resulting thread ID is returned. If width is less than warpSize then each 
+* group of width consecutive threads are able to access elements from earlier groups of threads, 
+* however if they attempt to access elements from later groups of threads their own value of var 
+* will be returned. This mode implements a butterfly addressing pattern such as is used in tree 
+* reduction and broadcast. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half2. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 4-byte word referenced by var from the source thread ID as half2. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __shfl_xor_sync(const unsigned mask, const __half2 var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Direct copy from indexed thread. 
+* 
+* \details Returns the value of var held by the thread whose ID is given by delta. 
+* If width is less than warpSize then each subsection of the warp behaves as a separate 
+* entity with a starting logical thread ID of 0. If delta is outside the range [0:width-1], 
+* the value returned corresponds to the value of var held by the delta modulo width (i.e. 
+* within the same subsection). width must have a value which is a power of 2; 
+* results are undefined if width is not a power of 2, or is a number greater than 
+* warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as half. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __shfl_sync(const unsigned mask, const __half var, const int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with lower ID relative to the caller. 
+* \details Calculates a source thread ID by subtracting delta from the caller's lane ID. 
+* The value of var held by the resulting lane ID is returned: in effect, var is shifted up 
+* the warp by delta threads. If width is less than warpSize then each subsection of the warp 
+* behaves as a separate entity with a starting logical thread ID of 0. The source thread index 
+* will not wrap around the value of width, so effectively the lower delta threads will be unchanged. 
+* width must have a value which is a power of 2; results are undefined if width is not a power of 2, 
+* or is a number greater than warpSize. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as half. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __shfl_up_sync(const unsigned mask, const __half var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread with higher ID relative to the caller. 
+* 
+* \details Calculates a source thread ID by adding delta to the caller's thread ID. 
+* The value of var held by the resulting thread ID is returned: this has the effect 
+* of shifting var down the warp by delta threads. If width is less than warpSize then 
+* each subsection of the warp behaves as a separate entity with a starting logical 
+* thread ID of 0. As for __shfl_up_sync(), the ID number of the source thread 
+* will not wrap around the value of width and so the upper delta threads 
+* will remain unchanged. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as half. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __shfl_down_sync(const unsigned mask, const __half var, const unsigned int delta, const int width = warpSize);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Exchange a variable between threads within a warp. Copy from a thread based on bitwise XOR of own thread ID. 
+* 
+* \details Calculates a source thread ID by performing a bitwise XOR of the caller's thread ID with mask: 
+* the value of var held by the resulting thread ID is returned. If width is less than warpSize then each 
+* group of width consecutive threads are able to access elements from earlier groups of threads, 
+* however if they attempt to access elements from later groups of threads their own value of var 
+* will be returned. This mode implements a butterfly addressing pattern such as is used in tree 
+* reduction and broadcast. 
+* \param[in] mask - unsigned int. Is only being read. 
+* \param[in] var - half. Is only being read. 
+* \param[in] delta - int. Is only being read. 
+* \param[in] width - int. Is only being read. 
+* 
+* \returns Returns the 2-byte word referenced by var from the source thread ID as half. 
+* If the source thread ID is out of range or the source thread has exited, the calling thread's own var is returned. 
+* \note_ref_guide_warp_shuffle
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior not reentrant, not thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __shfl_xor_sync(const unsigned mask, const __half var, const int delta, const int width = warpSize);
+
+#if defined(__local_warpSize)
+#undef warpSize
+#undef __local_warpSize
+#endif
+#endif /*!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 300) */
+
+#if defined(__cplusplus) && ( !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 320) )
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.nc` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldg(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.nc` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldg(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cg` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldcg(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cg` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldcg(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.ca` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldca(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.ca` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldca(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cs` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldcs(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cs` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldcs(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.lu` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldlu(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.lu` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldlu(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cv` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half2 __ldcv(const  __half2 *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `ld.global.cv` load instruction.
+* \param[in] ptr - memory location
+* \returns The value pointed by `ptr`
+*/
+__CUDA_FP16_DECL__ __half __ldcv(const __half *const ptr);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.wb` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stwb(__half2 *const ptr, const __half2 value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.wb` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stwb(__half *const ptr, const __half value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.cg` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stcg(__half2 *const ptr, const __half2 value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.cg` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stcg(__half *const ptr, const __half value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.cs` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stcs(__half2 *const ptr, const __half2 value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.cs` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stcs(__half *const ptr, const __half value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.wt` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stwt(__half2 *const ptr, const __half2 value);
+/**
+* \ingroup CUDA_MATH__HALF_MISC
+* \brief Generates a `st.global.wt` store instruction.
+* \param[out] ptr - memory location
+* \param[in] value - the value to be stored
+*/
+__CUDA_FP16_DECL__ void __stwt(__half *const ptr, const __half value);
+#endif /*defined(__cplusplus) && ( !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 320) )*/
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs half2 vector if-equal comparison.
+* 
+* \details Performs \p half2 vector if-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector result of if-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __heq2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector not-equal comparison.
+* 
+* \details Performs \p half2 vector not-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector result of not-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hne2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector less-equal comparison.
+*
+* \details Performs \p half2 vector less-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The \p half2 result of less-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hle2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector greater-equal comparison.
+*
+* \details Performs \p half2 vector greater-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The vector result of greater-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hge2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector less-than comparison.
+*
+* \details Performs \p half2 vector less-than comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The half2 vector result of less-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hlt2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector greater-than comparison.
+* 
+* \details Performs \p half2 vector greater-than comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector result of greater-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hgt2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered if-equal comparison.
+* 
+* \details Performs \p half2 vector if-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns half2
+* - The vector result of unordered if-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hequ2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered not-equal comparison.
+*
+* \details Performs \p half2 vector not-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The vector result of unordered not-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hneu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered less-equal comparison.
+*
+* Performs \p half2 vector less-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The vector result of unordered less-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hleu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered greater-equal comparison.
+*
+* \details Performs \p half2 vector greater-equal comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The \p half2 vector result of unordered greater-equal comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hgeu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered less-than comparison.
+*
+* \details Performs \p half2 vector less-than comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The vector result of unordered less-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hltu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered greater-than comparison.
+*
+* \details Performs \p half2 vector greater-than comparison of inputs \p a and \p b.
+* The corresponding \p half results are set to 1.0 for true, or 0.0 for false.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The \p half2 vector result of unordered greater-than comparison of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hgtu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Determine whether \p half2 argument is a NaN.
+*
+* \details Determine whether each half of input \p half2 number \p a is a NaN.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The half2 with the corresponding \p half results set to
+* 1.0 for NaN, 0.0 otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hisnan2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector addition in round-to-nearest-even mode.
+*
+* \details Performs \p half2 vector add of inputs \p a and \p b, in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-95
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The sum of vectors \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hadd2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p half2 input vector \p b from input vector \p a in
+* round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-104
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The subtraction of vector \p b from \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hsub2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p half2 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-102
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The result of elementwise multiplying the vectors \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmul2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector addition in round-to-nearest-even mode.
+*
+* \details Performs \p half2 vector add of inputs \p a and \p b, in round-to-nearest
+* mode. Prevents floating-point contractions of mul+add into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-95
+* \endinternal
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The sum of vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hadd2_rn(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p half2 input vector \p b from input vector \p a in
+* round-to-nearest-even mode. Prevents floating-point contractions of mul+sub
+* into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-104
+* \endinternal
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The subtraction of vector \p b from \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hsub2_rn(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p half2 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode. Prevents floating-point contractions of
+* mul+add or sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-102
+* \endinternal
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise multiplying the vectors \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmul2_rn(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector division in round-to-nearest-even mode.
+*
+* \details Divides \p half2 input vector \p a by input vector \p b in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-103
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise division of \p a with \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __h2div(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Calculates the absolute value of both halves of the input \p half2 number and
+* returns the result.
+*
+* \details Calculates the absolute value of both halves of the input \p half2 number and
+* returns the result.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - Returns \p a with the absolute value of both halves. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __habs2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector addition in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p half2 vector add of inputs \p a and \p b, in round-to-nearest
+* mode, and clamps the results to range [0.0, 1.0]. NaN results are flushed to
+* +0.0.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The sum of \p a and \p b, with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hadd2_sat(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector subtraction in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Subtracts \p half2 input vector \p b from input vector \p a in
+* round-to-nearest-even mode, and clamps the results to range [0.0, 1.0]. NaN
+* results are flushed to +0.0.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The subtraction of vector \p b from \p a, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hsub2_sat(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector multiplication in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Performs \p half2 vector multiplication of inputs \p a and \p b, in
+* round-to-nearest-even mode, and clamps the results to range [0.0, 1.0]. NaN
+* results are flushed to +0.0.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns half2
+* - The result of elementwise multiplication of vectors \p a and \p b, 
+* with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmul2_sat(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector fused multiply-add in round-to-nearest-even
+* mode.
+*
+* \details Performs \p half2 vector multiply on inputs \p a and \p b,
+* then performs a \p half2 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-105
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* \param[in] c - half2. Is only being read. 
+*
+* \returns half2
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hfma2(const __half2 a, const __half2 b, const __half2 c);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector fused multiply-add in round-to-nearest-even
+* mode, with saturation to [0.0, 1.0].
+*
+* \details Performs \p half2 vector multiply on inputs \p a and \p b,
+* then performs a \p half2 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode, and clamps the
+* results to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* \param[in] c - half2. Is only being read. 
+*
+* \returns half2
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c, 
+* with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hfma2_sat(const __half2 a, const __half2 b, const __half2 c);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Negates both halves of the input \p half2 number and returns the
+* result.
+*
+* \details Negates both halves of the input \p half2 number \p a and returns the result.
+* \internal
+* \req DEEPLEARN-SRM_REQ-101
+* \endinternal
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - Returns \p a with both halves negated. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hneg2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Calculates the absolute value of input \p half number and returns the result.
+*
+* \details Calculates the absolute value of input \p half number and returns the result.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The absolute value of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __habs(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half addition in round-to-nearest-even mode.
+*
+* \details Performs \p half addition of inputs \p a and \p b, in round-to-nearest-even
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-94
+* \endinternal
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The sum of \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hadd(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p half input \p b from input \p a in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-97
+* \endinternal
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The result of subtracting \p b from \p a. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hsub(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p half multiplication of inputs \p a and \p b, in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-99
+* \endinternal
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The result of multiplying \p a and \p b. 
+*/
+__CUDA_FP16_DECL__ __half __hmul(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half addition in round-to-nearest-even mode.
+*
+* \details Performs \p half addition of inputs \p a and \p b, in round-to-nearest-even
+* mode. Prevents floating-point contractions of mul+add into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-94
+* \endinternal
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* - The sum of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hadd_rn(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half subtraction in round-to-nearest-even mode.
+*
+* \details Subtracts \p half input \p b from input \p a in round-to-nearest
+* mode. Prevents floating-point contractions of mul+sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-97
+* \endinternal
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* - The result of subtracting \p b from \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hsub_rn(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half multiplication in round-to-nearest-even mode.
+*
+* \details Performs \p half multiplication of inputs \p a and \p b, in round-to-nearest
+* mode. Prevents floating-point contractions of mul+add or sub into fma.
+* \internal
+* \req DEEPLEARN-SRM_REQ-99
+* \endinternal
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* - The result of multiplying \p a and \p b.
+*/
+__CUDA_FP16_DECL__ __half __hmul_rn(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half division in round-to-nearest-even mode.
+* 
+* \details Divides \p half input \p a by input \p b in round-to-nearest
+* mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-98
+* \endinternal
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+* 
+* \returns half
+* - The result of dividing \p a by \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__  __half __hdiv(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half addition in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p half add of inputs \p a and \p b, in round-to-nearest-even mode,
+* and clamps the result to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The sum of \p a and \p b, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hadd_sat(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half subtraction in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Subtracts \p half input \p b from input \p a in round-to-nearest
+* mode,
+* and clamps the result to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The result of subtraction of \p b from \p a, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hsub_sat(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half multiplication in round-to-nearest-even mode, with
+* saturation to [0.0, 1.0].
+*
+* \details Performs \p half multiplication of inputs \p a and \p b, in round-to-nearest
+* mode, and clamps the result to range [0.0, 1.0]. NaN results are flushed to
+* +0.0.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns half
+* - The result of multiplying \p a and \p b, with respect to saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hmul_sat(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half fused multiply-add in round-to-nearest-even mode.
+*
+* \details Performs \p half multiply on inputs \p a and \p b,
+* then performs a \p half add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* \internal
+* \req DEEPLEARN-SRM_REQ-96
+* \endinternal
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+* \param[in] c - half. Is only being read. 
+*
+* \returns half
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hfma(const __half a, const __half b, const __half c);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half fused multiply-add in round-to-nearest-even mode,
+* with saturation to [0.0, 1.0].
+*
+* \details Performs \p half multiply on inputs \p a and \p b,
+* then performs a \p half add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode, and clamps the result
+* to range [0.0, 1.0]. NaN results are flushed to +0.0.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+* \param[in] c - half. Is only being read. 
+*
+* \returns half
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c, with respect to saturation. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hfma_sat(const __half a, const __half b, const __half c);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Negates input \p half number and returns the result.
+*
+* \details Negates input \p half number and returns the result.
+* \internal
+* \req DEEPLEARN-SRM_REQ-100
+* \endinternal
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - minus a
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hneg(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector if-equal comparison and returns boolean true
+* iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector if-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half if-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of if-equal comparison
+* of vectors \p a and \p b are true;
+* - false otherwise.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbeq2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector not-equal comparison and returns boolean
+* true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector not-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half not-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of not-equal comparison
+* of vectors \p a and \p b are true, 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbne2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector less-equal comparison and returns boolean
+* true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector less-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half less-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of less-equal comparison
+* of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hble2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector greater-equal comparison and returns boolean
+* true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector greater-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half greater-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of greater-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbge2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector less-than comparison and returns boolean
+* true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector less-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half less-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of less-than comparison
+* of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hblt2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector greater-than comparison and returns boolean
+* true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector greater-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half greater-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate false results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+* 
+* \returns bool 
+* - true if both \p half results of greater-than
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbgt2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered if-equal comparison and returns
+* boolean true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector if-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half if-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered if-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbequ2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered not-equal comparison and returns
+* boolean true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector not-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half not-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered not-equal
+* comparison of vectors \p a and \p b are true;
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbneu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered less-equal comparison and returns
+* boolean true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector less-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half less-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered less-equal
+* comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbleu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered greater-equal comparison and
+* returns boolean true iff both \p half results are true, boolean false
+* otherwise.
+*
+* \details Performs \p half2 vector greater-equal comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half greater-equal comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered
+* greater-equal comparison of vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbgeu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered less-than comparison and returns
+* boolean true iff both \p half results are true, boolean false otherwise.
+*
+* \details Performs \p half2 vector less-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half less-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered less-than comparison of 
+* vectors \p a and \p b are true; 
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbltu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Performs \p half2 vector unordered greater-than comparison and
+* returns boolean true iff both \p half results are true, boolean false
+* otherwise.
+*
+* \details Performs \p half2 vector greater-than comparison of inputs \p a and \p b.
+* The bool result is set to true only if both \p half greater-than comparisons
+* evaluate to true, or false otherwise.
+* NaN inputs generate true results.
+* \param[in] a - half2. Is only being read. 
+* \param[in] b - half2. Is only being read. 
+*
+* \returns bool
+* - true if both \p half results of unordered
+* greater-than comparison of vectors \p a and \p b are true;
+* - false otherwise. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hbgtu2(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half if-equal comparison.
+*
+* \details Performs \p half if-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of if-equal comparison of \p a and \p b. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __heq(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half not-equal comparison.
+*
+* \details Performs \p half not-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of not-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hne(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half less-equal comparison.
+*
+* \details Performs \p half less-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of less-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hle(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half greater-equal comparison.
+*
+* \details Performs \p half greater-equal comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of greater-equal comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hge(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half less-than comparison.
+*
+* \details Performs \p half less-than comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of less-than comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hlt(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half greater-than comparison.
+*
+* \details Performs \p half greater-than comparison of inputs \p a and \p b.
+* NaN inputs generate false results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of greater-than comparison of \p a and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hgt(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered if-equal comparison.
+*
+* \details Performs \p half if-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered if-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hequ(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered not-equal comparison.
+*
+* \details Performs \p half not-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered not-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hneu(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered less-equal comparison.
+*
+* \details Performs \p half less-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered less-equal comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hleu(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered greater-equal comparison.
+*
+* \details Performs \p half greater-equal comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered greater-equal comparison of \p a
+* and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hgeu(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered less-than comparison.
+*
+* \details Performs \p half less-than comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered less-than comparison of \p a and
+* \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hltu(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Performs \p half unordered greater-than comparison.
+*
+* \details Performs \p half greater-than comparison of inputs \p a and \p b.
+* NaN inputs generate true results.
+* \param[in] a - half. Is only being read. 
+* \param[in] b - half. Is only being read. 
+*
+* \returns bool
+* - The boolean result of unordered greater-than comparison of \p a
+* and \p b.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hgtu(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Determine whether \p half argument is a NaN.
+*
+* \details Determine whether \p half value \p a is a NaN.
+* \param[in] a - half. Is only being read. 
+*
+* \returns bool
+* - true iff argument is NaN. 
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ bool __hisnan(const __half a);
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Calculates \p half maximum of two input values, NaNs pass through.
+*
+* \details Calculates \p half max(\p a, \p b)
+* defined as (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hmax_nan(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_COMPARISON
+* \brief Calculates \p half minimum of two input values, NaNs pass through.
+*
+* \details Calculates \p half min(\p a, \p b)
+* defined as (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+*
+* \returns half
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hmin_nan(const __half a, const __half b);
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Performs \p half fused multiply-add in round-to-nearest-even mode with relu saturation.
+*
+* \details Performs \p half multiply on inputs \p a and \p b,
+* then performs a \p half add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* Then negative result is clamped to 0.
+* NaN result is converted to canonical NaN.
+* \param[in] a - half. Is only being read.
+* \param[in] b - half. Is only being read.
+* \param[in] c - half. Is only being read.
+*
+* \returns half
+* - The result of fused multiply-add operation on \p
+* a, \p b, and \p c with relu saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half __hfma_relu(const __half a, const __half b, const __half c);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Calculates \p half2 vector maximum of two inputs, NaNs pass through.
+*
+* \details Calculates \p half2 vector max(\p a, \p b).
+* Elementwise \p half operation is defined as
+* (\p a > \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise maximum of vectors \p a  and \p b, with NaNs pass through
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmax2_nan(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_COMPARISON
+* \brief Calculates \p half2 vector minimum of two inputs, NaNs pass through.
+*
+* \details Calculates \p half2 vector min(\p a, \p b).
+* Elementwise \p half operation is defined as
+* (\p a < \p b) ? \p a : \p b.
+* - If either of inputs is NaN, then canonical NaN is returned.
+* - If values of both inputs are 0.0, then +0.0 > -0.0
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise minimum of vectors \p a  and \p b, with NaNs pass through
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hmin2_nan(const __half2 a, const __half2 b);
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs \p half2 vector fused multiply-add in round-to-nearest-even
+* mode with relu saturation.
+*
+* \details Performs \p half2 vector multiply on inputs \p a and \p b,
+* then performs a \p half2 vector add of the result with \p c,
+* rounding the result once in round-to-nearest-even mode.
+* Then negative result is clamped to 0.
+* NaN result is converted to canonical NaN.
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+* \param[in] c - half2. Is only being read.
+*
+* \returns half2
+* - The result of elementwise fused multiply-add operation on vectors \p a, \p b, and \p c with relu saturation.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hfma2_relu(const __half2 a, const __half2 b, const __half2 c);
+#endif /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800) */
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Performs fast complex multiply-accumulate
+*
+* \details Interprets vector \p half2 input pairs \p a, \p b, and \p c as
+* complex numbers in \p half precision and performs
+* complex multiply-accumulate operation: a*b + c
+* \param[in] a - half2. Is only being read.
+* \param[in] b - half2. Is only being read.
+* \param[in] c - half2. Is only being read.
+*
+* \returns half2
+* - The result of complex multiply-accumulate operation on complex numbers \p a, \p b, and \p c
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 __hcmadd(const __half2 a, const __half2 b, const __half2 c);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half square root in round-to-nearest-even mode.
+*
+* \details Calculates \p half square root of input \p a in round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The square root of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hsqrt(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half reciprocal square root in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p half reciprocal square root of input \p a in round-to-nearest
+* mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The reciprocal square root of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hrsqrt(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half reciprocal in round-to-nearest-even mode.
+*
+* \details Calculates \p half reciprocal of input \p a in round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The reciprocal of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hrcp(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half natural logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p half natural logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The natural logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hlog(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half binary logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p half binary logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The binary logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hlog2(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half decimal logarithm in round-to-nearest-even mode.
+*
+* \details Calculates \p half decimal logarithm of input \p a in round-to-nearest-even
+* mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The decimal logarithm of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hlog10(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half natural exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p half natural exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The natural exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hexp(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half binary exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p half binary exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The binary exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hexp2(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half decimal exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p half decimal exponential function of input \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The decimal exponential function on \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hexp10(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half cosine in round-to-nearest-even mode.
+*
+* \details Calculates \p half cosine of input \p a in round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The cosine of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hcos(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF_FUNCTIONS
+* \brief Calculates \p half sine in round-to-nearest-even mode.
+*
+* \details Calculates \p half sine of input \p a in round-to-nearest-even mode.
+* \param[in] a - half. Is only being read. 
+*
+* \returns half
+* - The sine of \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half hsin(const __half a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector square root in round-to-nearest-even mode.
+*
+* \details Calculates \p half2 square root of input vector \p a in round-to-nearest
+* mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise square root on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2sqrt(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector reciprocal square root in round-to-nearest
+* mode.
+*
+* \details Calculates \p half2 reciprocal square root of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise reciprocal square root on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2rsqrt(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector reciprocal in round-to-nearest-even mode.
+*
+* \details Calculates \p half2 reciprocal of input vector \p a in round-to-nearest-even
+* mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise reciprocal on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2rcp(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector natural logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p half2 natural logarithm of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise natural logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2log(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector binary logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p half2 binary logarithm of input vector \p a in round-to-nearest
+* mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise binary logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2log2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector decimal logarithm in round-to-nearest-even
+* mode.
+*
+* \details Calculates \p half2 decimal logarithm of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise decimal logarithm on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2log10(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector exponential function in round-to-nearest
+* mode.
+*
+* \details Calculates \p half2 exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2exp(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector binary exponential function in
+* round-to-nearest-even mode.
+*
+* \details Calculates \p half2 binary exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+*
+* \returns half2
+* - The elementwise binary exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2exp2(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector decimal exponential function in
+* round-to-nearest-even mode.
+* 
+* \details Calculates \p half2 decimal exponential function of input vector \p a in
+* round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - The elementwise decimal exponential function on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2exp10(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector cosine in round-to-nearest-even mode.
+* 
+* \details Calculates \p half2 cosine of input vector \p a in round-to-nearest-even
+* mode.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - The elementwise cosine on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2cos(const __half2 a);
+/**
+* \ingroup CUDA_MATH__HALF2_FUNCTIONS
+* \brief Calculates \p half2 vector sine in round-to-nearest-even mode.
+* 
+* \details Calculates \p half2 sine of input vector \p a in round-to-nearest-even mode.
+* \param[in] a - half2. Is only being read. 
+* 
+* \returns half2
+* - The elementwise sine on vector \p a.
+* \internal
+* \exception-guarantee no-throw guarantee
+* \behavior reentrant, thread safe
+* \endinternal
+*/
+__CUDA_FP16_DECL__ __half2 h2sin(const __half2 a);
+
+#endif /*if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)*/
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 600)
+
+/**
+* \ingroup CUDA_MATH__HALF2_ARITHMETIC
+* \brief Vector add \p val to the value stored at \p address in global or shared memory, and writes this
+* value back to \p address. The atomicity of the add operation is guaranteed separately for each of the
+* two __half elements; the entire __half2 is not guaranteed to be atomic as a single 32-bit access.
+* 
+* \details The location of \p address must be in global or shared memory. This operation has undefined
+* behavior otherwise. This operation is only supported by devices of compute capability 6.x and higher.
+* 
+* \param[in] address - half2*. An address in global or shared memory.
+* \param[in] val - half2. The value to be added.
+* 
+* \returns half2
+* - The old value read from \p address.
+*
+* \note_ref_guide_atomic
+*/
+__CUDA_FP16_DECL__ __half2 atomicAdd(__half2 *const address, const __half2 val);
+
+#endif /*if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 600)*/
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+
+/**
+* \ingroup CUDA_MATH__HALF_ARITHMETIC
+* \brief Adds \p val to the value stored at \p address in global or shared memory, and writes this value
+* back to \p address. This operation is performed in one atomic operation.
+* 
+* \details The location of \p address must be in global or shared memory. This operation has undefined
+* behavior otherwise. This operation is only supported by devices of compute capability 7.x and higher.
+* 
+* \param[in] address - half*. An address in global or shared memory.
+* \param[in] val - half. The value to be added.
+* 
+* \returns half
+* - The old value read from \p address.
+* 
+* \note_ref_guide_atomic
+*/
+__CUDA_FP16_DECL__ __half atomicAdd(__half *const address, const __half val);
+
+#endif /*if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)*/
+
+#endif /* defined(__CUDACC__) */
+
+#undef __CUDA_FP16_DECL__
+#undef __CUDA_HOSTDEVICE_FP16_DECL__
+
+#endif /* defined(__cplusplus) */
+
+/* Note the .hpp file is included even for host-side compilation, to capture the "half" & "half2" definitions */
+#include "cuda_fp16.hpp"
+#undef ___CUDA_FP16_STRINGIFY_INNERMOST
+#undef __CUDA_FP16_STRINGIFY
+
+#endif /* end of include guard: __CUDA_FP16_H__ */
diff --git a/ext/cudart/include/cuda_fp16.hpp b/ext/cudart/include/cuda_fp16.hpp
new file mode 100644
index 00000000..e15f46b3
--- /dev/null
+++ b/ext/cudart/include/cuda_fp16.hpp
@@ -0,0 +1,2614 @@
+/*
+* Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+*
+* NOTICE TO LICENSEE:
+*
+* This source code and/or documentation ("Licensed Deliverables") are
+* subject to NVIDIA intellectual property rights under U.S. and
+* international Copyright laws.
+*
+* These Licensed Deliverables contained herein is PROPRIETARY and
+* CONFIDENTIAL to NVIDIA and is being provided under the terms and
+* conditions of a form of NVIDIA software license agreement by and
+* between NVIDIA and Licensee ("License Agreement") or electronically
+* accepted by Licensee.  Notwithstanding any terms or conditions to
+* the contrary in the License Agreement, reproduction or disclosure
+* of the Licensed Deliverables to any third party without the express
+* written consent of NVIDIA is prohibited.
+*
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+* SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+* PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+* NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+* DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+* NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+* NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+* LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+* SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+* DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+* WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+* OF THESE LICENSED DELIVERABLES.
+*
+* U.S. Government End Users.  These Licensed Deliverables are a
+* "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+* 1995), consisting of "commercial computer software" and "commercial
+* computer software documentation" as such terms are used in 48
+* C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+* only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+* 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+* U.S. Government End Users acquire the Licensed Deliverables with
+* only those rights set forth herein.
+*
+* Any use of the Licensed Deliverables in individual and commercial
+* software must include, in the user documentation and internal
+* comments to the code, the above Disclaimer and U.S. Government End
+* Users Notice.
+*/
+
+#if !defined(__CUDA_FP16_HPP__)
+#define __CUDA_FP16_HPP__
+
+#if !defined(__CUDA_FP16_H__)
+#error "Do not include this file directly. Instead, include cuda_fp16.h."
+#endif
+
+#if !defined(_MSC_VER) && __cplusplus >= 201103L
+#   define __CPP_VERSION_AT_LEAST_11_FP16
+#elif _MSC_FULL_VER >= 190024210 && _MSVC_LANG >= 201103L
+#   define __CPP_VERSION_AT_LEAST_11_FP16
+#endif
+
+/* C++11 header for std::move. 
+ * In RTC mode, std::move is provided implicitly; don't include the header
+ */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP16) && !defined(__CUDACC_RTC__)
+#include <utility>
+#endif /* __cplusplus >= 201103L && !defined(__CUDACC_RTC__) */
+
+/* C++ header for std::memcpy (used for type punning in host-side implementations).
+ * When compiling as a CUDA source file memcpy is provided implicitly.
+ * !defined(__CUDACC__) implies !defined(__CUDACC_RTC__).
+ */
+#if defined(__cplusplus) && !defined(__CUDACC__)
+#include <cstring>
+#endif /* defined(__cplusplus) && !defined(__CUDACC__) */
+
+
+/* Set up function decorations */
+#if defined(__CUDACC__)
+#define __CUDA_FP16_DECL__ static __device__ __inline__
+#define __CUDA_HOSTDEVICE_FP16_DECL__ static __host__ __device__ __inline__
+#define __VECTOR_FUNCTIONS_DECL__ static __inline__ __host__ __device__
+#define __CUDA_HOSTDEVICE__ __host__ __device__
+#else /* !defined(__CUDACC__) */
+#if defined(__GNUC__)
+#define __CUDA_HOSTDEVICE_FP16_DECL__ static __attribute__ ((unused))
+#else
+#define __CUDA_HOSTDEVICE_FP16_DECL__ static
+#endif /* defined(__GNUC__) */
+#define __CUDA_HOSTDEVICE__
+#endif /* defined(__CUDACC_) */
+
+/* Set up structure-alignment attribute */
+#if defined(__CUDACC__)
+#define __CUDA_ALIGN__(align) __align__(align)
+#else
+/* Define alignment macro based on compiler type (cannot assume C11 "_Alignas" is available) */
+#if __cplusplus >= 201103L
+#define __CUDA_ALIGN__(n) alignas(n)    /* C++11 kindly gives us a keyword for this */
+#else /* !defined(__CPP_VERSION_AT_LEAST_11_FP16)*/
+#if defined(__GNUC__)
+#define __CUDA_ALIGN__(n) __attribute__ ((aligned(n)))
+#elif defined(_MSC_VER)
+#define __CUDA_ALIGN__(n) __declspec(align(n))
+#else
+#define __CUDA_ALIGN__(n)
+#endif /* defined(__GNUC__) */
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP16) */
+#endif /* defined(__CUDACC__) */
+
+/* Macros to allow half & half2 to be used by inline assembly */
+#define __HALF_TO_US(var) *(reinterpret_cast<unsigned short *>(&(var)))
+#define __HALF_TO_CUS(var) *(reinterpret_cast<const unsigned short *>(&(var)))
+#define __HALF2_TO_UI(var) *(reinterpret_cast<unsigned int *>(&(var)))
+#define __HALF2_TO_CUI(var) *(reinterpret_cast<const unsigned int *>(&(var)))
+
+/* Macros for half & half2 binary arithmetic */
+#define __BINARY_OP_HALF_MACRO(name) /* do */ {\
+   __half val; \
+   asm( "{" __CUDA_FP16_STRINGIFY(name) ".f16 %0,%1,%2;\n}" \
+        :"=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)),"h"(__HALF_TO_CUS(b))); \
+   return val; \
+} /* while(0) */
+#define __BINARY_OP_HALF2_MACRO(name) /* do */ {\
+   __half2 val; \
+   asm( "{" __CUDA_FP16_STRINGIFY(name) ".f16x2 %0,%1,%2;\n}" \
+        :"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)),"r"(__HALF2_TO_CUI(b))); \
+   return val; \
+} /* while(0) */
+#define __TERNARY_OP_HALF_MACRO(name) /* do */ {\
+   __half val; \
+   asm( "{" __CUDA_FP16_STRINGIFY(name) ".f16 %0,%1,%2,%3;\n}" \
+        :"=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)),"h"(__HALF_TO_CUS(b)),"h"(__HALF_TO_CUS(c))); \
+   return val; \
+} /* while(0) */
+#define __TERNARY_OP_HALF2_MACRO(name) /* do */ {\
+   __half2 val; \
+   asm( "{" __CUDA_FP16_STRINGIFY(name) ".f16x2 %0,%1,%2,%3;\n}" \
+        :"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)),"r"(__HALF2_TO_CUI(b)),"r"(__HALF2_TO_CUI(c))); \
+   return val; \
+} /* while(0) */
+
+/**
+* Types which allow static initialization of "half" and "half2" until
+* these become an actual builtin. Note this initialization is as a
+* bitfield representation of "half", and not a conversion from short->half.
+* Such a representation will be deprecated in a future version of CUDA. 
+* (Note these are visible to non-nvcc compilers, including C-only compilation)
+*/
+typedef struct __CUDA_ALIGN__(2) {
+    unsigned short x;
+} __half_raw;
+
+typedef struct __CUDA_ALIGN__(4) {
+    unsigned short x;
+    unsigned short y;
+} __half2_raw;
+
+/* All other definitions in this file are only visible to C++ compilers */
+#if defined(__cplusplus)
+
+/* Hide GCC member initialization list warnings because of host/device in-function init requirement */
+#if defined(__GNUC__)
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#pragma GCC diagnostic ignored "-Weffc++"
+#endif /* __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) */
+#endif /* defined(__GNUC__) */
+
+/* class' : multiple assignment operators specified
+   The class has multiple assignment operators of a single type. This warning is informational */
+#if defined(_MSC_VER) && _MSC_VER >= 1500
+#pragma warning( push )
+#pragma warning( disable:4522 )
+#endif /* defined(__GNUC__) */
+
+struct __CUDA_ALIGN__(2) __half {
+protected:
+    unsigned short __x;
+
+public:
+#if defined(__CPP_VERSION_AT_LEAST_11_FP16)
+    __half() = default;
+#else
+    __CUDA_HOSTDEVICE__ __half() { }
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP16) */
+
+    /* Convert to/from __half_raw */
+    __CUDA_HOSTDEVICE__ __half(const __half_raw &hr) : __x(hr.x) { }
+    __CUDA_HOSTDEVICE__ __half &operator=(const __half_raw &hr) { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ volatile __half &operator=(const __half_raw &hr) volatile { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ volatile __half &operator=(const volatile __half_raw &hr) volatile { __x = hr.x; return *this; }
+    __CUDA_HOSTDEVICE__ operator __half_raw() const { __half_raw ret; ret.x = __x; return ret; }
+    __CUDA_HOSTDEVICE__ operator __half_raw() const volatile { __half_raw ret; ret.x = __x; return ret; }
+
+#if !defined(__CUDA_NO_HALF_CONVERSIONS__)
+
+    /* Construct from float/double */
+    __CUDA_HOSTDEVICE__ __half(const float f) { __x = __float2half(f).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const double f) { __x = __double2half(f).__x;  }
+
+    __CUDA_HOSTDEVICE__ operator float() const { return __half2float(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const float f) { __x = __float2half(f).__x; return *this; }
+
+    /* We omit "cast to double" operator, so as to not be ambiguous about up-cast */
+    __CUDA_HOSTDEVICE__ __half &operator=(const double f) { __x = __double2half(f).__x; return *this; }
+
+/* Member functions only available to nvcc compilation so far */
+#if defined(__CUDACC__)
+    /* Allow automatic construction from types supported natively in hardware */
+    /* Note we do avoid constructor init-list because of special host/device compilation rules */
+    __CUDA_HOSTDEVICE__ __half(const short val) { __x = __short2half_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const unsigned short val) { __x = __ushort2half_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const int val) { __x = __int2half_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const unsigned int val) { __x = __uint2half_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const long long val) { __x = __ll2half_rn(val).__x;  }
+    __CUDA_HOSTDEVICE__ __half(const unsigned long long val) { __x = __ull2half_rn(val).__x; }
+
+    /* Allow automatic casts to supported builtin types, matching all that are permitted with float */
+    __CUDA_HOSTDEVICE__ operator short() const { return __half2short_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const short val) { __x = __short2half_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned short() const { return __half2ushort_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const unsigned short val) { __x = __ushort2half_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator int() const { return __half2int_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const int val) { __x = __int2half_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned int() const { return __half2uint_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const unsigned int val) { __x = __uint2half_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator long long() const { return __half2ll_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const long long val) { __x = __ll2half_rn(val).__x; return *this; }
+
+    __CUDA_HOSTDEVICE__ operator unsigned long long() const { return __half2ull_rz(*this); }
+    __CUDA_HOSTDEVICE__ __half &operator=(const unsigned long long val) { __x = __ull2half_rn(val).__x; return *this; }
+
+    /* Boolean conversion - note both 0 and -0 must return false */
+    __CUDA_HOSTDEVICE__ operator bool() const { return (__x & 0x7FFFU) != 0U; }
+#endif /* defined(__CUDACC__) */
+#endif /* !defined(__CUDA_NO_HALF_CONVERSIONS__) */
+};
+
+/* Global-space operator functions are only available to nvcc compilation */
+#if defined(__CUDACC__)
+
+/* Arithmetic FP16 operations only supported on arch >= 5.3 */
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)
+#if !defined(__CUDA_NO_HALF_OPERATORS__)
+/* Some basic arithmetic operations expected of a builtin */
+__device__ __forceinline__ __half operator+(const __half &lh, const __half &rh) { return __hadd(lh, rh); }
+__device__ __forceinline__ __half operator-(const __half &lh, const __half &rh) { return __hsub(lh, rh); }
+__device__ __forceinline__ __half operator*(const __half &lh, const __half &rh) { return __hmul(lh, rh); }
+__device__ __forceinline__ __half operator/(const __half &lh, const __half &rh) { return __hdiv(lh, rh); }
+
+__device__ __forceinline__ __half &operator+=(__half &lh, const __half &rh) { lh = __hadd(lh, rh); return lh; }
+__device__ __forceinline__ __half &operator-=(__half &lh, const __half &rh) { lh = __hsub(lh, rh); return lh; }
+__device__ __forceinline__ __half &operator*=(__half &lh, const __half &rh) { lh = __hmul(lh, rh); return lh; }
+__device__ __forceinline__ __half &operator/=(__half &lh, const __half &rh) { lh = __hdiv(lh, rh); return lh; }
+
+/* Note for increment and decrement we use the raw value 0x3C00U equating to half(1.0F), to avoid the extra conversion */
+__device__ __forceinline__ __half &operator++(__half &h)      { __half_raw one; one.x = 0x3C00U; h += one; return h; }
+__device__ __forceinline__ __half &operator--(__half &h)      { __half_raw one; one.x = 0x3C00U; h -= one; return h; }
+__device__ __forceinline__ __half  operator++(__half &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __half ret = h;
+    __half_raw one;
+    one.x = 0x3C00U;
+    h += one;
+    return ret;
+}
+__device__ __forceinline__ __half  operator--(__half &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __half ret = h;
+    __half_raw one;
+    one.x = 0x3C00U;
+    h -= one;
+    return ret;
+}
+
+/* Unary plus and inverse operators */
+__device__ __forceinline__ __half operator+(const __half &h) { return h; }
+__device__ __forceinline__ __half operator-(const __half &h) { return __hneg(h); }
+
+/* Some basic comparison operations to make it look like a builtin */
+__device__ __forceinline__ bool operator==(const __half &lh, const __half &rh) { return __heq(lh, rh); }
+__device__ __forceinline__ bool operator!=(const __half &lh, const __half &rh) { return __hneu(lh, rh); }
+__device__ __forceinline__ bool operator> (const __half &lh, const __half &rh) { return __hgt(lh, rh); }
+__device__ __forceinline__ bool operator< (const __half &lh, const __half &rh) { return __hlt(lh, rh); }
+__device__ __forceinline__ bool operator>=(const __half &lh, const __half &rh) { return __hge(lh, rh); }
+__device__ __forceinline__ bool operator<=(const __half &lh, const __half &rh) { return __hle(lh, rh); }
+#endif /* !defined(__CUDA_NO_HALF_OPERATORS__) */
+#endif /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530) */
+#endif /* defined(__CUDACC__) */
+
+/* __half2 is visible to non-nvcc host compilers */
+struct __CUDA_ALIGN__(4) __half2 {
+    __half x;
+    __half y;
+
+    // All construct/copy/assign/move
+public:
+#if defined(__CPP_VERSION_AT_LEAST_11_FP16)
+    __half2() = default;
+    __CUDA_HOSTDEVICE__ __half2(const __half2 &&src) { __HALF2_TO_UI(*this) = std::move(__HALF2_TO_CUI(src)); }
+    __CUDA_HOSTDEVICE__ __half2 &operator=(const __half2 &&src) { __HALF2_TO_UI(*this) = std::move(__HALF2_TO_CUI(src)); return *this; }
+#else
+    __CUDA_HOSTDEVICE__ __half2() { }
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP16) */
+    __CUDA_HOSTDEVICE__ __half2(const __half &a, const __half &b) : x(a), y(b) { }
+    __CUDA_HOSTDEVICE__ __half2(const __half2 &src) { __HALF2_TO_UI(*this) = __HALF2_TO_CUI(src); }
+    __CUDA_HOSTDEVICE__ __half2 &operator=(const __half2 &src) { __HALF2_TO_UI(*this) = __HALF2_TO_CUI(src); return *this; }
+
+    /* Convert to/from __half2_raw */
+    __CUDA_HOSTDEVICE__ __half2(const __half2_raw &h2r ) { __HALF2_TO_UI(*this) = __HALF2_TO_CUI(h2r); }
+    __CUDA_HOSTDEVICE__ __half2 &operator=(const __half2_raw &h2r) { __HALF2_TO_UI(*this) = __HALF2_TO_CUI(h2r); return *this; }
+    __CUDA_HOSTDEVICE__ operator __half2_raw() const { __half2_raw ret; ret.x = 0U; ret.y = 0U; __HALF2_TO_UI(ret) = __HALF2_TO_CUI(*this); return ret; }
+};
+
+/* Global-space operator functions are only available to nvcc compilation */
+#if defined(__CUDACC__)
+
+/* Arithmetic FP16x2 operations only supported on arch >= 5.3 */
+#if (!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)) && !defined(__CUDA_NO_HALF2_OPERATORS__)
+
+__device__ __forceinline__ __half2 operator+(const __half2 &lh, const __half2 &rh) { return __hadd2(lh, rh); }
+__device__ __forceinline__ __half2 operator-(const __half2 &lh, const __half2 &rh) { return __hsub2(lh, rh); }
+__device__ __forceinline__ __half2 operator*(const __half2 &lh, const __half2 &rh) { return __hmul2(lh, rh); }
+__device__ __forceinline__ __half2 operator/(const __half2 &lh, const __half2 &rh) { return __h2div(lh, rh); }
+
+__device__ __forceinline__ __half2& operator+=(__half2 &lh, const __half2 &rh) { lh = __hadd2(lh, rh); return lh; }
+__device__ __forceinline__ __half2& operator-=(__half2 &lh, const __half2 &rh) { lh = __hsub2(lh, rh); return lh; }
+__device__ __forceinline__ __half2& operator*=(__half2 &lh, const __half2 &rh) { lh = __hmul2(lh, rh); return lh; }
+__device__ __forceinline__ __half2& operator/=(__half2 &lh, const __half2 &rh) { lh = __h2div(lh, rh); return lh; }
+
+__device__ __forceinline__ __half2 &operator++(__half2 &h)      { __half2_raw one; one.x = 0x3C00U; one.y = 0x3C00U; h = __hadd2(h, one); return h; }
+__device__ __forceinline__ __half2 &operator--(__half2 &h)      { __half2_raw one; one.x = 0x3C00U; one.y = 0x3C00U; h = __hsub2(h, one); return h; }
+__device__ __forceinline__ __half2  operator++(__half2 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __half2 ret = h;
+    __half2_raw one;
+    one.x = 0x3C00U;
+    one.y = 0x3C00U;
+    h = __hadd2(h, one);
+    return ret;
+}
+__device__ __forceinline__ __half2  operator--(__half2 &h, const int ignored)
+{
+    // ignored on purpose. Parameter only needed to distinguish the function declaration from other types of operators.
+    static_cast<void>(ignored);
+
+    const __half2 ret = h;
+    __half2_raw one;
+    one.x = 0x3C00U;
+    one.y = 0x3C00U;
+    h = __hsub2(h, one);
+    return ret;
+}
+
+__device__ __forceinline__ __half2 operator+(const __half2 &h) { return h; }
+__device__ __forceinline__ __half2 operator-(const __half2 &h) { return __hneg2(h); }
+
+__device__ __forceinline__ bool operator==(const __half2 &lh, const __half2 &rh) { return __hbeq2(lh, rh); }
+__device__ __forceinline__ bool operator!=(const __half2 &lh, const __half2 &rh) { return __hbneu2(lh, rh); }
+__device__ __forceinline__ bool operator>(const __half2 &lh, const __half2 &rh) { return __hbgt2(lh, rh); }
+__device__ __forceinline__ bool operator<(const __half2 &lh, const __half2 &rh) { return __hblt2(lh, rh); }
+__device__ __forceinline__ bool operator>=(const __half2 &lh, const __half2 &rh) { return __hbge2(lh, rh); }
+__device__ __forceinline__ bool operator<=(const __half2 &lh, const __half2 &rh) { return __hble2(lh, rh); }
+
+#endif /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530) */
+#endif /* defined(__CUDACC__) */
+
+/* Restore warning for multiple assignment operators */
+#if defined(_MSC_VER) && _MSC_VER >= 1500
+#pragma warning( pop )
+#endif /* defined(_MSC_VER) && _MSC_VER >= 1500 */
+
+/* Restore -Weffc++ warnings from here on */
+#if defined(__GNUC__)
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
+#pragma GCC diagnostic pop
+#endif /* __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) */
+#endif /* defined(__GNUC__) */
+
+#undef __CUDA_HOSTDEVICE__
+#undef __CUDA_ALIGN__
+
+#ifndef __CUDACC_RTC__  /* no host functions in NVRTC mode */
+static inline unsigned short __internal_float2half(const float f, unsigned int &sign, unsigned int &remainder)
+{
+    unsigned int x;
+    unsigned int u;
+    unsigned int result;
+#if defined(__CUDACC__)
+    (void)memcpy(&x, &f, sizeof(f));
+#else
+    (void)std::memcpy(&x, &f, sizeof(f));
+#endif
+    u = (x & 0x7fffffffU);
+    sign = ((x >> 16U) & 0x8000U);
+    // NaN/+Inf/-Inf
+    if (u >= 0x7f800000U) {
+        remainder = 0U;
+        result = ((u == 0x7f800000U) ? (sign | 0x7c00U) : 0x7fffU);
+    } else if (u > 0x477fefffU) { // Overflows
+        remainder = 0x80000000U;
+        result = (sign | 0x7bffU);
+    } else if (u >= 0x38800000U) { // Normal numbers
+        remainder = u << 19U;
+        u -= 0x38000000U;
+        result = (sign | (u >> 13U));
+    } else if (u < 0x33000001U) { // +0/-0
+        remainder = u;
+        result = sign;
+    } else { // Denormal numbers
+        const unsigned int exponent = u >> 23U;
+        const unsigned int shift = 0x7eU - exponent;
+        unsigned int mantissa = (u & 0x7fffffU);
+        mantissa |= 0x800000U;
+        remainder = mantissa << (32U - shift);
+        result = (sign | (mantissa >> shift));
+        result &= 0x0000FFFFU;
+    }
+    return static_cast<unsigned short>(result);
+}
+#endif  /* #if !defined(__CUDACC_RTC__) */
+
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __double2half(const double a)
+{
+#if defined(__CUDA_ARCH__)
+    __half val;
+    asm("{  cvt.rn.f16.f64 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "d"(a));
+    return val;
+#else
+    __half result;
+    /*
+    // Perform rounding to 11 bits of precision, convert value
+    // to float and call existing float to half conversion.
+    // By pre-rounding to 11 bits we avoid additional rounding
+    // in float to half conversion.
+    */
+    unsigned long long int absa;
+    unsigned long long int ua;
+    #if defined(__CUDACC__)
+        (void)memcpy(&ua, &a, sizeof(a));
+    #else
+        (void)std::memcpy(&ua, &a, sizeof(a));
+    #endif
+    absa = (ua & 0x7fffffffffffffffULL);
+    if ((absa >= 0x40f0000000000000ULL) || (absa <= 0x3e60000000000000ULL))
+    {
+        /*
+        // |a| >= 2^16 or NaN or |a| <= 2^(-25)
+        // double-rounding is not a problem
+        */
+        result = __float2half(static_cast<float>(a));
+    }
+    else
+    {
+        /*
+        // here 2^(-25) < |a| < 2^16
+        // prepare shifter value such that a + shifter
+        // done in double precision performs round-to-nearest-even
+        // and (a + shifter) - shifter results in a rounded to
+        // 11 bits of precision. Shifter needs to have exponent of
+        // a plus 53 - 11 = 42 and a leading bit in mantissa to guard
+        // against negative values.
+        // So need to have |a| capped to avoid overflow in exponent.
+        // For inputs that are smaller than half precision minnorm
+        // we prepare fixed shifter exponent.
+        */
+        unsigned long long shifterBits;
+        if (absa >= 0x3f10000000000000ULL)
+        {
+            /*
+            // Here if |a| >= 2^(-14)
+            // add 42 to exponent bits
+            */
+            shifterBits  = (ua & 0x7ff0000000000000ULL) + 0x02A0000000000000ULL;
+        }
+        else
+        {
+            /*
+            // 2^(-25) < |a| < 2^(-14), potentially results in denormal
+            // set exponent bits to 42 - 14 + bias
+            */
+            shifterBits = 0x41B0000000000000ULL;
+        }
+        // set leading mantissa bit to protect against negative inputs
+        shifterBits |= 0x0008000000000000ULL;
+        double shifter;
+        #if defined(__CUDACC__)
+            (void)memcpy(&shifter, &shifterBits, sizeof(shifterBits));
+        #else
+            (void)std::memcpy(&shifter, &shifterBits, sizeof(shifterBits));
+        #endif
+        double aShiftRound = a + shifter;
+
+        /*
+        // Prevent the compiler from optimizing away a + shifter - shifter
+        // by doing intermediate memcopy and harmless bitwize operation
+        */
+        unsigned long long int aShiftRoundBits;
+        #if defined(__CUDACC__)
+            (void)memcpy(&aShiftRoundBits, &aShiftRound, sizeof(aShiftRound));
+        #else
+            (void)std::memcpy(&aShiftRoundBits, &aShiftRound, sizeof(aShiftRound));
+        #endif
+
+        // the value is positive, so this operation doesn't change anything
+        aShiftRoundBits &= 0x7fffffffffffffffULL;
+
+        #if defined(__CUDACC__)
+            (void)memcpy(&aShiftRound, &aShiftRoundBits, sizeof(aShiftRound));
+        #else
+            (void)std::memcpy(&aShiftRound, &aShiftRoundBits, sizeof(aShiftRound));
+        #endif
+
+        result = __float2half(static_cast<float>(aShiftRound - shifter));
+    }
+
+    return result;
+#endif
+}
+
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half(const float a)
+{
+    __half val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.rn.f16.f32 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "f"(a));
+#else
+    __half_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2half(a, sign, remainder);
+    if ((remainder > 0x80000000U) || ((remainder == 0x80000000U) && ((r.x & 0x1U) != 0U))) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rn(const float a)
+{
+    __half val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.rn.f16.f32 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "f"(a));
+#else
+    __half_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2half(a, sign, remainder);
+    if ((remainder > 0x80000000U) || ((remainder == 0x80000000U) && ((r.x & 0x1U) != 0U))) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rz(const float a)
+{
+    __half val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.rz.f16.f32 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "f"(a));
+#else
+    __half_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2half(a, sign, remainder);
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_rd(const float a)
+{
+    __half val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.rm.f16.f32 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "f"(a));
+#else
+    __half_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2half(a, sign, remainder);
+    if ((remainder != 0U) && (sign != 0U)) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __float2half_ru(const float a)
+{
+    __half val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.rp.f16.f32 %0, %1;}\n" : "=h"(__HALF_TO_US(val)) : "f"(a));
+#else
+    __half_raw r;
+    unsigned int sign = 0U;
+    unsigned int remainder = 0U;
+    r.x = __internal_float2half(a, sign, remainder);
+    if ((remainder != 0U) && (sign == 0U)) {
+        r.x++;
+    }
+    val = r;
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __float2half2_rn(const float a)
+{
+    __half2 val;
+#if defined(__CUDA_ARCH__)
+    asm("{.reg .f16 low;\n"
+        "  cvt.rn.f16.f32 low, %1;\n"
+        "  mov.b32 %0, {low,low};}\n" : "=r"(__HALF2_TO_UI(val)) : "f"(a));
+#else
+    val = __half2(__float2half_rn(a), __float2half_rn(a));
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __floats2half2_rn(const float a, const float b)
+{
+    __half2 val;
+#if defined(__CUDA_ARCH__)
+#if (__CUDA_ARCH__ >= 800)
+    asm("{ cvt.rn.f16x2.f32 %0, %2, %1; }\n"
+        : "=r"(__HALF2_TO_UI(val)) : "f"(a), "f"(b));
+#else
+    asm("{.reg .f16 low,high;\n"
+        "  cvt.rn.f16.f32 low, %1;\n"
+        "  cvt.rn.f16.f32 high, %2;\n"
+        "  mov.b32 %0, {low,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "f"(a), "f"(b));
+#endif
+#else
+    val = __half2(__float2half_rn(a), __float2half_rn(b));
+#endif
+    return val;
+}
+
+#ifndef __CUDACC_RTC__  /* no host functions in NVRTC mode */
+static inline float __internal_half2float(const unsigned short h)
+{
+    unsigned int sign = ((static_cast<unsigned int>(h) >> 15U) & 1U);
+    unsigned int exponent = ((static_cast<unsigned int>(h) >> 10U) & 0x1fU);
+    unsigned int mantissa = ((static_cast<unsigned int>(h) & 0x3ffU) << 13U);
+    float f;
+    if (exponent == 0x1fU) { /* NaN or Inf */
+        /* discard sign of a NaN */
+        sign = ((mantissa != 0U) ? (sign >> 1U) : sign);
+        mantissa = ((mantissa != 0U) ? 0x7fffffU : 0U);
+        exponent = 0xffU;
+    } else if (exponent == 0U) { /* Denorm or Zero */
+        if (mantissa != 0U) {
+            unsigned int msb;
+            exponent = 0x71U;
+            do {
+                msb = (mantissa & 0x400000U);
+                mantissa <<= 1U; /* normalize */
+                --exponent;
+            } while (msb == 0U);
+            mantissa &= 0x7fffffU; /* 1.mantissa is implicit */
+        }
+    } else {
+        exponent += 0x70U;
+    }
+    const unsigned int u = ((sign << 31U) | (exponent << 23U) | mantissa);
+#if defined(__CUDACC__)
+    (void)memcpy(&f, &u, sizeof(u));
+#else
+    (void)std::memcpy(&f, &u, sizeof(u));
+#endif
+    return f;
+}
+#endif  /* !defined(__CUDACC_RTC__) */
+
+__CUDA_HOSTDEVICE_FP16_DECL__ float __half2float(const __half a)
+{
+    float val;
+#if defined(__CUDA_ARCH__)
+    asm("{  cvt.f32.f16 %0, %1;}\n" : "=f"(val) : "h"(__HALF_TO_CUS(a)));
+#else
+    val = __internal_half2float(static_cast<__half_raw>(a).x);
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ float __low2float(const __half2 a)
+{
+    float val;
+#if defined(__CUDA_ARCH__)
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high},%1;\n"
+        "  cvt.f32.f16 %0, low;}\n" : "=f"(val) : "r"(__HALF2_TO_CUI(a)));
+#else
+    val = __internal_half2float(static_cast<__half2_raw>(a).x);
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ float __high2float(const __half2 a)
+{
+    float val;
+#if defined(__CUDA_ARCH__)
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high},%1;\n"
+        "  cvt.f32.f16 %0, high;}\n" : "=f"(val) : "r"(__HALF2_TO_CUI(a)));
+#else
+    val = __internal_half2float(static_cast<__half2_raw>(a).y);
+#endif
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ short int __half2short_rz(const __half h)
+{
+    short int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.s16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const short int max_val = (short int)0x7fffU;
+    const short int min_val = (short int)0x8000U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = 0;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<short int>(f);
+    }
+#endif
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned short int __half2ushort_rz(const __half h)
+{
+    unsigned short int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.u16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const unsigned short int max_val = 0xffffU;
+    const unsigned short int min_val = 0U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = 0U;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<unsigned short int>(f);
+    }
+#endif
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ int __half2int_rz(const __half h)
+{
+    int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.s32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const int max_val = (int)0x7fffffffU;
+    const int min_val = (int)0x80000000U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = 0;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<int>(f);
+    }
+#endif
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned int __half2uint_rz(const __half h)
+{
+    unsigned int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.u32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const unsigned int max_val = 0xffffffffU;
+    const unsigned int min_val = 0U;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = 0U;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<unsigned int>(f);
+    }
+#endif
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ long long int __half2ll_rz(const __half h)
+{
+    long long int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.s64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const long long int max_val = (long long int)0x7fffffffffffffffULL;
+    const long long int min_val = (long long int)0x8000000000000000ULL;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = min_val;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<long long int>(f);
+    }
+#endif
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ unsigned long long int __half2ull_rz(const __half h)
+{
+    unsigned long long int i;
+#if defined __CUDA_ARCH__
+    asm("cvt.rzi.u64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+#else
+    const float f = __half2float(h);
+    const unsigned long long int max_val = 0xffffffffffffffffULL;
+    const unsigned long long int min_val = 0ULL;
+    const unsigned short bits = static_cast<unsigned short>(static_cast<__half_raw>(h).x << 1U);
+    // saturation fixup
+    if (bits > (unsigned short)0xF800U) {
+        // NaN
+        i = 0x8000000000000000ULL;
+    } else if (f > static_cast<float>(max_val)) {
+        // saturate maximum
+        i = max_val;
+    } else if (f < static_cast<float>(min_val)) {
+        // saturate minimum
+        i = min_val;
+    } else {
+        // normal value, conversion is well-defined
+        i = static_cast<unsigned long long int>(f);
+    }
+#endif
+    return i;
+}
+
+/* Intrinsic functions only available to nvcc compilers */
+#if defined(__CUDACC__)
+
+/* CUDA vector-types compatible vector creation function (note returns __half2, not half2) */
+__VECTOR_FUNCTIONS_DECL__ __half2 make_half2(const __half x, const __half y)
+{
+    __half2 t; t.x = x; t.y = y; return t;
+}
+#undef __VECTOR_FUNCTIONS_DECL__
+
+
+/* Definitions of intrinsics */
+__CUDA_HOSTDEVICE_FP16_DECL__ __half2 __float22half2_rn(const float2 a)
+{
+    const __half2 val = __floats2half2_rn(a.x, a.y);
+    return val;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ float2 __half22float2(const __half2 a)
+{
+    float hi_float;
+    float lo_float;
+#if defined(__CUDA_ARCH__)
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high},%1;\n"
+        "  cvt.f32.f16 %0, low;}\n" : "=f"(lo_float) : "r"(__HALF2_TO_CUI(a)));
+
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high},%1;\n"
+        "  cvt.f32.f16 %0, high;}\n" : "=f"(hi_float) : "r"(__HALF2_TO_CUI(a)));
+#else
+    lo_float = __internal_half2float(((__half2_raw)a).x);
+    hi_float = __internal_half2float(((__half2_raw)a).y);
+#endif
+    return make_float2(lo_float, hi_float);
+}
+__CUDA_FP16_DECL__ int __half2int_rn(const __half h)
+{
+    int i;
+    asm("cvt.rni.s32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ int __half2int_rd(const __half h)
+{
+    int i;
+    asm("cvt.rmi.s32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ int __half2int_ru(const __half h)
+{
+    int i;
+    asm("cvt.rpi.s32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __int2half_rn(const int i)
+{
+    __half h;
+#if defined(__CUDA_ARCH__)
+    asm("cvt.rn.f16.s32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+#else
+    // double-rounding is not a problem here: if integer
+    // has more than 24 bits, it is already too large to
+    // be represented in half precision, and result will
+    // be infinity.
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __int2half_rz(const int i)
+{
+    __half h;
+    asm("cvt.rz.f16.s32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __int2half_rd(const int i)
+{
+    __half h;
+    asm("cvt.rm.f16.s32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __int2half_ru(const int i)
+{
+    __half h;
+    asm("cvt.rp.f16.s32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ short int __half2short_rn(const __half h)
+{
+    short int i;
+    asm("cvt.rni.s16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ short int __half2short_rd(const __half h)
+{
+    short int i;
+    asm("cvt.rmi.s16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ short int __half2short_ru(const __half h)
+{
+    short int i;
+    asm("cvt.rpi.s16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __short2half_rn(const short int i)
+{
+    __half h;
+#if defined __CUDA_ARCH__
+    asm("cvt.rn.f16.s16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+#else
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __short2half_rz(const short int i)
+{
+    __half h;
+    asm("cvt.rz.f16.s16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __short2half_rd(const short int i)
+{
+    __half h;
+    asm("cvt.rm.f16.s16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __short2half_ru(const short int i)
+{
+    __half h;
+    asm("cvt.rp.f16.s16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ unsigned int __half2uint_rn(const __half h)
+{
+    unsigned int i;
+    asm("cvt.rni.u32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned int __half2uint_rd(const __half h)
+{
+    unsigned int i;
+    asm("cvt.rmi.u32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned int __half2uint_ru(const __half h)
+{
+    unsigned int i;
+    asm("cvt.rpi.u32.f16 %0, %1;" : "=r"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __uint2half_rn(const unsigned int i)
+{
+    __half h;
+#if defined __CUDA_ARCH__
+    asm("cvt.rn.f16.u32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+#else
+    // double-rounding is not a problem here: if integer
+    // has more than 24 bits, it is already too large to
+    // be represented in half precision, and result will
+    // be infinity.
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __uint2half_rz(const unsigned int i)
+{
+    __half h;
+    asm("cvt.rz.f16.u32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __uint2half_rd(const unsigned int i)
+{
+    __half h;
+    asm("cvt.rm.f16.u32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __uint2half_ru(const unsigned int i)
+{
+    __half h;
+    asm("cvt.rp.f16.u32 %0, %1;" : "=h"(__HALF_TO_US(h)) : "r"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_rn(const __half h)
+{
+    unsigned short int i;
+    asm("cvt.rni.u16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_rd(const __half h)
+{
+    unsigned short int i;
+    asm("cvt.rmi.u16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned short int __half2ushort_ru(const __half h)
+{
+    unsigned short int i;
+    asm("cvt.rpi.u16.f16 %0, %1;" : "=h"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ushort2half_rn(const unsigned short int i)
+{
+    __half h;
+#if defined __CUDA_ARCH__
+    asm("cvt.rn.f16.u16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+#else
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ushort2half_rz(const unsigned short int i)
+{
+    __half h;
+    asm("cvt.rz.f16.u16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ushort2half_rd(const unsigned short int i)
+{
+    __half h;
+    asm("cvt.rm.f16.u16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ushort2half_ru(const unsigned short int i)
+{
+    __half h;
+    asm("cvt.rp.f16.u16 %0, %1;" : "=h"(__HALF_TO_US(h)) : "h"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_rn(const __half h)
+{
+    unsigned long long int i;
+    asm("cvt.rni.u64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_rd(const __half h)
+{
+    unsigned long long int i;
+    asm("cvt.rmi.u64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ unsigned long long int __half2ull_ru(const __half h)
+{
+    unsigned long long int i;
+    asm("cvt.rpi.u64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ull2half_rn(const unsigned long long int i)
+{
+    __half h;
+#if defined(__CUDA_ARCH__)
+    asm("cvt.rn.f16.u64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+#else
+    // double-rounding is not a problem here: if integer
+    // has more than 24 bits, it is already too large to
+    // be represented in half precision, and result will
+    // be infinity.
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ull2half_rz(const unsigned long long int i)
+{
+    __half h;
+    asm("cvt.rz.f16.u64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ull2half_rd(const unsigned long long int i)
+{
+    __half h;
+    asm("cvt.rm.f16.u64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ull2half_ru(const unsigned long long int i)
+{
+    __half h;
+    asm("cvt.rp.f16.u64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ long long int __half2ll_rn(const __half h)
+{
+    long long int i;
+    asm("cvt.rni.s64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ long long int __half2ll_rd(const __half h)
+{
+    long long int i;
+    asm("cvt.rmi.s64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_FP16_DECL__ long long int __half2ll_ru(const __half h)
+{
+    long long int i;
+    asm("cvt.rpi.s64.f16 %0, %1;" : "=l"(i) : "h"(__HALF_TO_CUS(h)));
+    return i;
+}
+__CUDA_HOSTDEVICE_FP16_DECL__ __half __ll2half_rn(const long long int i)
+{
+    __half h;
+#if defined(__CUDA_ARCH__)
+    asm("cvt.rn.f16.s64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+#else
+    // double-rounding is not a problem here: if integer
+    // has more than 24 bits, it is already too large to
+    // be represented in half precision, and result will
+    // be infinity.
+    const float  f = static_cast<float>(i);
+                 h = __float2half_rn(f);
+#endif
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ll2half_rz(const long long int i)
+{
+    __half h;
+    asm("cvt.rz.f16.s64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ll2half_rd(const long long int i)
+{
+    __half h;
+    asm("cvt.rm.f16.s64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ll2half_ru(const long long int i)
+{
+    __half h;
+    asm("cvt.rp.f16.s64 %0, %1;" : "=h"(__HALF_TO_US(h)) : "l"(i));
+    return h;
+}
+
+__CUDA_FP16_DECL__ __half htrunc(const __half h)
+{
+    __half r;
+    asm("cvt.rzi.f16.f16 %0, %1;" : "=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(h)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half hceil(const __half h)
+{
+    __half r;
+    asm("cvt.rpi.f16.f16 %0, %1;" : "=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(h)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half hfloor(const __half h)
+{
+    __half r;
+    asm("cvt.rmi.f16.f16 %0, %1;" : "=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(h)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half hrint(const __half h)
+{
+    __half r;
+    asm("cvt.rni.f16.f16 %0, %1;" : "=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(h)));
+    return r;
+}
+
+__CUDA_FP16_DECL__ __half2 h2trunc(const __half2 h)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  cvt.rzi.f16.f16 low, low;\n"
+        "  cvt.rzi.f16.f16 high, high;\n"
+        "  mov.b32 %0, {low,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(h)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2ceil(const __half2 h)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  cvt.rpi.f16.f16 low, low;\n"
+        "  cvt.rpi.f16.f16 high, high;\n"
+        "  mov.b32 %0, {low,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(h)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2floor(const __half2 h)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  cvt.rmi.f16.f16 low, low;\n"
+        "  cvt.rmi.f16.f16 high, high;\n"
+        "  mov.b32 %0, {low,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(h)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2rint(const __half2 h)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  cvt.rni.f16.f16 low, low;\n"
+        "  cvt.rni.f16.f16 high, high;\n"
+        "  mov.b32 %0, {low,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(h)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 __lows2half2(const __half2 a, const __half2 b)
+{
+    __half2 val;
+    asm("{.reg .f16 alow,ahigh,blow,bhigh;\n"
+        "  mov.b32 {alow,ahigh}, %1;\n"
+        "  mov.b32 {blow,bhigh}, %2;\n"
+        "  mov.b32 %0, {alow,blow};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)), "r"(__HALF2_TO_CUI(b)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 __highs2half2(const __half2 a, const __half2 b)
+{
+    __half2 val;
+    asm("{.reg .f16 alow,ahigh,blow,bhigh;\n"
+        "  mov.b32 {alow,ahigh}, %1;\n"
+        "  mov.b32 {blow,bhigh}, %2;\n"
+        "  mov.b32 %0, {ahigh,bhigh};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)), "r"(__HALF2_TO_CUI(b)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half __low2half(const __half2 a)
+{
+    __half ret;
+    asm("{.reg .f16 low,high;\n"
+        " mov.b32 {low,high}, %1;\n"
+        " mov.b16 %0, low;}" : "=h"(__HALF_TO_US(ret)) : "r"(__HALF2_TO_CUI(a)));
+    return ret;
+}
+__CUDA_FP16_DECL__ int __hisinf(const __half a)
+{
+    int retval;
+    if (__HALF_TO_CUS(a) == 0xFC00U) {
+        retval = -1;
+    } else if (__HALF_TO_CUS(a) == 0x7C00U) {
+        retval = 1;
+    } else {
+        retval = 0;
+    }
+    return retval;
+}
+__CUDA_FP16_DECL__ __half2 __low2half2(const __half2 a)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {low,low};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 __high2half2(const __half2 a)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {high,high};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half __high2half(const __half2 a)
+{
+    __half ret;
+    asm("{.reg .f16 low,high;\n"
+        " mov.b32 {low,high}, %1;\n"
+        " mov.b16 %0, high;}" : "=h"(__HALF_TO_US(ret)) : "r"(__HALF2_TO_CUI(a)));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __halves2half2(const __half a, const __half b)
+{
+    __half2 val;
+    asm("{  mov.b32 %0, {%1,%2};}\n"
+        : "=r"(__HALF2_TO_UI(val)) : "h"(__HALF_TO_CUS(a)), "h"(__HALF_TO_CUS(b)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 __half2half2(const __half a)
+{
+    __half2 val;
+    asm("{  mov.b32 %0, {%1,%1};}\n"
+        : "=r"(__HALF2_TO_UI(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 __lowhigh2highlow(const __half2 a)
+{
+    __half2 val;
+    asm("{.reg .f16 low,high;\n"
+        "  mov.b32 {low,high}, %1;\n"
+        "  mov.b32 %0, {high,low};}\n" : "=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ short int __half_as_short(const __half h)
+{
+    return static_cast<short int>(__HALF_TO_CUS(h));
+}
+__CUDA_FP16_DECL__ unsigned short int __half_as_ushort(const __half h)
+{
+    return __HALF_TO_CUS(h);
+}
+__CUDA_FP16_DECL__ __half __short_as_half(const short int i)
+{
+    __half h;
+    __HALF_TO_US(h) = static_cast<unsigned short int>(i);
+    return h;
+}
+__CUDA_FP16_DECL__ __half __ushort_as_half(const unsigned short int i)
+{
+    __half h;
+    __HALF_TO_US(h) = i;
+    return h;
+}
+
+/******************************************************************************
+*                             __half arithmetic                             *
+******************************************************************************/
+__CUDA_FP16_DECL__ __half __hmax(const __half a, const __half b)
+{
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+    __BINARY_OP_HALF_MACRO(max)
+#else
+    const float fa = __half2float(a);
+    const float fb = __half2float(b);
+    float fr;
+    asm("{max.f32 %0,%1,%2;\n}"
+        :"=f"(fr) : "f"(fa), "f"(fb));
+    const __half hr = __float2half(fr);
+    return hr;
+#endif
+}
+__CUDA_FP16_DECL__ __half __hmin(const __half a, const __half b)
+{
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+    __BINARY_OP_HALF_MACRO(min)
+#else
+    const float fa = __half2float(a);
+    const float fb = __half2float(b);
+    float fr;
+    asm("{min.f32 %0,%1,%2;\n}"
+        :"=f"(fr) : "f"(fa), "f"(fb));
+    const __half hr = __float2half(fr);
+    return hr;
+#endif
+}
+
+/******************************************************************************
+*                            __half2 arithmetic                             *
+******************************************************************************/
+__CUDA_FP16_DECL__ __half2 __hmax2(const __half2 a, const __half2 b)
+{
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+    __BINARY_OP_HALF2_MACRO(max)
+#else
+    const float2 fa = __half22float2(a);
+    const float2 fb = __half22float2(b);
+    float2 fr;
+    asm("{max.f32 %0,%1,%2;\n}"
+        :"=f"(fr.x) : "f"(fa.x), "f"(fb.x));
+    asm("{max.f32 %0,%1,%2;\n}"
+        :"=f"(fr.y) : "f"(fa.y), "f"(fb.y));
+    const __half2 hr = __float22half2_rn(fr);
+    return hr;
+#endif
+}
+__CUDA_FP16_DECL__ __half2 __hmin2(const __half2 a, const __half2 b)
+{
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+    __BINARY_OP_HALF2_MACRO(min)
+#else
+    const float2 fa = __half22float2(a);
+    const float2 fb = __half22float2(b);
+    float2 fr;
+    asm("{min.f32 %0,%1,%2;\n}"
+        :"=f"(fr.x) : "f"(fa.x), "f"(fb.x));
+    asm("{min.f32 %0,%1,%2;\n}"
+        :"=f"(fr.y) : "f"(fa.y), "f"(fb.y));
+    const __half2 hr = __float22half2_rn(fr);
+    return hr;
+#endif
+}
+
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 300)
+/******************************************************************************
+*                           __half, __half2 warp shuffle                     *
+******************************************************************************/
+#define __SHUFFLE_HALF2_MACRO(name) /* do */ {\
+   __half2 r; \
+   asm volatile ("{" __CUDA_FP16_STRINGIFY(name) " %0,%1,%2,%3;\n}" \
+       :"=r"(__HALF2_TO_UI(r)): "r"(__HALF2_TO_CUI(var)), "r"(delta), "r"(c)); \
+   return r; \
+} /* while(0) */
+
+#define __SHUFFLE_SYNC_HALF2_MACRO(name) /* do */ {\
+   __half2 r; \
+   asm volatile ("{" __CUDA_FP16_STRINGIFY(name) " %0,%1,%2,%3,%4;\n}" \
+       :"=r"(__HALF2_TO_UI(r)): "r"(__HALF2_TO_CUI(var)), "r"(delta), "r"(c), "r"(mask)); \
+   return r; \
+} /* while(0) */
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+
+__CUDA_FP16_DECL__ __half2 __shfl(const __half2 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_HALF2_MACRO(shfl.idx.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_up(const __half2 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = (warp_size - static_cast<unsigned>(width)) << 8U;
+    __SHUFFLE_HALF2_MACRO(shfl.up.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_down(const __half2 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_HALF2_MACRO(shfl.down.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_xor(const __half2 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_HALF2_MACRO(shfl.bfly.b32)
+}
+
+#endif /* !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700 */
+
+__CUDA_FP16_DECL__ __half2 __shfl_sync(const unsigned mask, const __half2 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_HALF2_MACRO(shfl.sync.idx.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_up_sync(const unsigned mask, const __half2 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = (warp_size - static_cast<unsigned>(width)) << 8U;
+    __SHUFFLE_SYNC_HALF2_MACRO(shfl.sync.up.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_down_sync(const unsigned mask, const __half2 var, const unsigned int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_HALF2_MACRO(shfl.sync.down.b32)
+}
+__CUDA_FP16_DECL__ __half2 __shfl_xor_sync(const unsigned mask, const __half2 var, const int delta, const int width)
+{
+    unsigned int warp_size;
+    asm("{mov.u32 %0, WARP_SZ;\n}" : "=r"(warp_size));
+    const unsigned int c = ((warp_size - static_cast<unsigned>(width)) << 8U) | 0x1fU;
+    __SHUFFLE_SYNC_HALF2_MACRO(shfl.sync.bfly.b32)
+}
+
+#undef __SHUFFLE_HALF2_MACRO
+#undef __SHUFFLE_SYNC_HALF2_MACRO
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+
+__CUDA_FP16_DECL__ __half __shfl(const __half var, const int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl(temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_up(const __half var, const unsigned int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_up(temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_down(const __half var, const unsigned int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_down(temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_xor(const __half var, const int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_xor(temp1, delta, width);
+    return __low2half(temp2);
+}
+
+#endif /* !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700 */
+
+__CUDA_FP16_DECL__ __half __shfl_sync(const unsigned mask, const __half var, const int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_sync(mask, temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_up_sync(const unsigned mask, const __half var, const unsigned int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_up_sync(mask, temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_down_sync(const unsigned mask, const __half var, const unsigned int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_down_sync(mask, temp1, delta, width);
+    return __low2half(temp2);
+}
+__CUDA_FP16_DECL__ __half __shfl_xor_sync(const unsigned mask, const __half var, const int delta, const int width)
+{
+    const __half2 temp1 = __halves2half2(var, var);
+    const __half2 temp2 = __shfl_xor_sync(mask, temp1, delta, width);
+    return __low2half(temp2);
+}
+
+#endif /*!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 300)*/
+/******************************************************************************
+*               __half and __half2 __ldg,__ldcg,__ldca,__ldcs                *
+******************************************************************************/
+
+#if defined(__cplusplus) && (!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 320))
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __LDG_PTR   "l"
+#else
+#define __LDG_PTR   "r"
+#endif /*(defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)*/
+__CUDA_FP16_DECL__ __half2 __ldg(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.nc.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldg(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.nc.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __ldcg(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.cg.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldcg(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.cg.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __ldca(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.ca.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldca(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.ca.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __ldcs(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.cs.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldcs(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.cs.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr));
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __ldlu(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.lu.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldlu(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.lu.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_FP16_DECL__ __half2 __ldcv(const  __half2 *const ptr)
+{
+    __half2 ret;
+    asm ("ld.global.cv.b32 %0, [%1];"  : "=r"(__HALF2_TO_UI(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_FP16_DECL__ __half __ldcv(const __half *const ptr)
+{
+    __half ret;
+    asm ("ld.global.cv.b16 %0, [%1];"  : "=h"(__HALF_TO_US(ret)) : __LDG_PTR(ptr) : "memory");
+    return ret;
+}
+__CUDA_FP16_DECL__ void __stwb(__half2 *const ptr, const __half2 value)
+{
+    asm ("st.global.wb.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__HALF2_TO_CUI(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stwb(__half *const ptr, const __half value)
+{
+    asm ("st.global.wb.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__HALF_TO_CUS(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stcg(__half2 *const ptr, const __half2 value)
+{
+    asm ("st.global.cg.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__HALF2_TO_CUI(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stcg(__half *const ptr, const __half value)
+{
+    asm ("st.global.cg.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__HALF_TO_CUS(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stcs(__half2 *const ptr, const __half2 value)
+{
+    asm ("st.global.cs.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__HALF2_TO_CUI(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stcs(__half *const ptr, const __half value)
+{
+    asm ("st.global.cs.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__HALF_TO_CUS(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stwt(__half2 *const ptr, const __half2 value)
+{
+    asm ("st.global.wt.b32 [%0], %1;"  :: __LDG_PTR(ptr), "r"(__HALF2_TO_CUI(value)) : "memory");
+}
+__CUDA_FP16_DECL__ void __stwt(__half *const ptr, const __half value)
+{
+    asm ("st.global.wt.b16 [%0], %1;"  :: __LDG_PTR(ptr),  "h"(__HALF_TO_CUS(value)) : "memory");
+}
+#undef __LDG_PTR
+#endif /*defined(__cplusplus) && (!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 320))*/
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)
+/******************************************************************************
+*                             __half2 comparison                             *
+******************************************************************************/
+#define __COMPARISON_OP_HALF2_MACRO(name) /* do */ {\
+   __half2 val; \
+   asm( "{ " __CUDA_FP16_STRINGIFY(name) ".f16x2.f16x2 %0,%1,%2;\n}" \
+        :"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)),"r"(__HALF2_TO_CUI(b))); \
+   return val; \
+} /* while(0) */
+__CUDA_FP16_DECL__ __half2 __heq2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.eq)
+}
+__CUDA_FP16_DECL__ __half2 __hne2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.ne)
+}
+__CUDA_FP16_DECL__ __half2 __hle2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.le)
+}
+__CUDA_FP16_DECL__ __half2 __hge2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.ge)
+}
+__CUDA_FP16_DECL__ __half2 __hlt2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.lt)
+}
+__CUDA_FP16_DECL__ __half2 __hgt2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.gt)
+}
+__CUDA_FP16_DECL__ __half2 __hequ2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.equ)
+}
+__CUDA_FP16_DECL__ __half2 __hneu2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.neu)
+}
+__CUDA_FP16_DECL__ __half2 __hleu2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.leu)
+}
+__CUDA_FP16_DECL__ __half2 __hgeu2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.geu)
+}
+__CUDA_FP16_DECL__ __half2 __hltu2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.ltu)
+}
+__CUDA_FP16_DECL__ __half2 __hgtu2(const __half2 a, const __half2 b)
+{
+    __COMPARISON_OP_HALF2_MACRO(set.gtu)
+}
+#undef __COMPARISON_OP_HALF2_MACRO
+#define __BOOL_COMPARISON_OP_HALF2_MACRO(name) /* do */ {\
+   __half2 val; \
+   bool retval; \
+   asm( "{ " __CUDA_FP16_STRINGIFY(name) ".f16x2.f16x2 %0,%1,%2;\n}" \
+        :"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)),"r"(__HALF2_TO_CUI(b))); \
+   if (__HALF2_TO_CUI(val) == 0x3C003C00U) {\
+      retval = true; \
+   } else { \
+      retval = false; \
+   }\
+   return retval;\
+} /* while(0) */
+__CUDA_FP16_DECL__ bool __hbeq2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.eq)
+}
+__CUDA_FP16_DECL__ bool __hbne2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.ne)
+}
+__CUDA_FP16_DECL__ bool __hble2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.le)
+}
+__CUDA_FP16_DECL__ bool __hbge2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.ge)
+}
+__CUDA_FP16_DECL__ bool __hblt2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.lt)
+}
+__CUDA_FP16_DECL__ bool __hbgt2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.gt)
+}
+__CUDA_FP16_DECL__ bool __hbequ2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.equ)
+}
+__CUDA_FP16_DECL__ bool __hbneu2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.neu)
+}
+__CUDA_FP16_DECL__ bool __hbleu2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.leu)
+}
+__CUDA_FP16_DECL__ bool __hbgeu2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.geu)
+}
+__CUDA_FP16_DECL__ bool __hbltu2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.ltu)
+}
+__CUDA_FP16_DECL__ bool __hbgtu2(const __half2 a, const __half2 b)
+{
+    __BOOL_COMPARISON_OP_HALF2_MACRO(set.gtu)
+}
+#undef __BOOL_COMPARISON_OP_HALF2_MACRO
+/******************************************************************************
+*                             __half comparison                              *
+******************************************************************************/
+#define __COMPARISON_OP_HALF_MACRO(name) /* do */ {\
+   unsigned short val; \
+   asm( "{ .reg .pred __$temp3;\n" \
+        "  setp." __CUDA_FP16_STRINGIFY(name) ".f16  __$temp3, %1, %2;\n" \
+        "  selp.u16 %0, 1, 0, __$temp3;}" \
+        : "=h"(val) : "h"(__HALF_TO_CUS(a)), "h"(__HALF_TO_CUS(b))); \
+   return (val != 0U) ? true : false; \
+} /* while(0) */
+__CUDA_FP16_DECL__ bool __heq(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(eq)
+}
+__CUDA_FP16_DECL__ bool __hne(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(ne)
+}
+__CUDA_FP16_DECL__ bool __hle(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(le)
+}
+__CUDA_FP16_DECL__ bool __hge(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(ge)
+}
+__CUDA_FP16_DECL__ bool __hlt(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(lt)
+}
+__CUDA_FP16_DECL__ bool __hgt(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(gt)
+}
+__CUDA_FP16_DECL__ bool __hequ(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(equ)
+}
+__CUDA_FP16_DECL__ bool __hneu(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(neu)
+}
+__CUDA_FP16_DECL__ bool __hleu(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(leu)
+}
+__CUDA_FP16_DECL__ bool __hgeu(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(geu)
+}
+__CUDA_FP16_DECL__ bool __hltu(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(ltu)
+}
+__CUDA_FP16_DECL__ bool __hgtu(const __half a, const __half b)
+{
+    __COMPARISON_OP_HALF_MACRO(gtu)
+}
+#undef __COMPARISON_OP_HALF_MACRO
+/******************************************************************************
+*                            __half2 arithmetic                             *
+******************************************************************************/
+__CUDA_FP16_DECL__ __half2 __hadd2(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(add)
+}
+__CUDA_FP16_DECL__ __half2 __hsub2(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(sub)
+}
+__CUDA_FP16_DECL__ __half2 __hmul2(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(mul)
+}
+__CUDA_FP16_DECL__ __half2 __hadd2_sat(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(add.sat)
+}
+__CUDA_FP16_DECL__ __half2 __hsub2_sat(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(sub.sat)
+}
+__CUDA_FP16_DECL__ __half2 __hmul2_sat(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(mul.sat)
+}
+__CUDA_FP16_DECL__ __half2 __hadd2_rn(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(add.rn)
+}
+__CUDA_FP16_DECL__ __half2 __hsub2_rn(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(sub.rn)
+}
+__CUDA_FP16_DECL__ __half2 __hmul2_rn(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(mul.rn)
+}
+__CUDA_FP16_DECL__ __half2 __hfma2(const __half2 a, const __half2 b, const __half2 c)
+{
+    __TERNARY_OP_HALF2_MACRO(fma.rn)
+}
+__CUDA_FP16_DECL__ __half2 __hfma2_sat(const __half2 a, const __half2 b, const __half2 c)
+{
+    __TERNARY_OP_HALF2_MACRO(fma.rn.sat)
+}
+__CUDA_FP16_DECL__ __half2 __h2div(const __half2 a, const __half2 b) {
+    __half ha = __low2half(a);
+    __half hb = __low2half(b);
+
+    const __half v1 = __hdiv(ha, hb);
+
+    ha = __high2half(a);
+    hb = __high2half(b);
+
+    const __half v2 = __hdiv(ha, hb);
+
+    return __halves2half2(v1, v2);
+}
+/******************************************************************************
+*                             __half arithmetic                             *
+******************************************************************************/
+__CUDA_FP16_DECL__ __half __hadd(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(add)
+}
+__CUDA_FP16_DECL__ __half __hsub(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(sub)
+}
+__CUDA_FP16_DECL__ __half __hmul(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(mul)
+}
+__CUDA_FP16_DECL__ __half __hadd_sat(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(add.sat)
+}
+__CUDA_FP16_DECL__ __half __hsub_sat(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(sub.sat)
+}
+__CUDA_FP16_DECL__ __half __hmul_sat(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(mul.sat)
+}
+__CUDA_FP16_DECL__ __half __hadd_rn(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(add.rn)
+}
+__CUDA_FP16_DECL__ __half __hsub_rn(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(sub.rn)
+}
+__CUDA_FP16_DECL__ __half __hmul_rn(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(mul.rn)
+}
+__CUDA_FP16_DECL__ __half __hfma(const __half a, const __half b, const __half c)
+{
+    __TERNARY_OP_HALF_MACRO(fma.rn)
+}
+__CUDA_FP16_DECL__ __half __hfma_sat(const __half a, const __half b, const __half c)
+{
+    __TERNARY_OP_HALF_MACRO(fma.rn.sat)
+}
+__CUDA_FP16_DECL__ __half __hdiv(const __half a, const __half b) {
+    __half v;
+    __half abs;
+    __half den;
+    __HALF_TO_US(den) = 0x008FU;
+
+    float rcp;
+    const float fa = __half2float(a);
+    const float fb = __half2float(b);
+
+    asm("{rcp.approx.ftz.f32 %0, %1;\n}" :"=f"(rcp) : "f"(fb));
+
+    float fv = rcp * fa;
+
+    v = __float2half(fv);
+    __HALF_TO_US(abs) = static_cast<unsigned short>(static_cast<unsigned int>(__HALF_TO_CUS(v)) & 0x00007FFFU);
+    if (__hlt(abs, den) && (!(__HALF_TO_CUS(abs) == 0x0000U))) {
+        const float err = __fmaf_rn(-fb, fv, fa);
+        fv = __fmaf_rn(rcp, err, fv);
+        v = __float2half(fv);
+    }
+    return v;
+}
+
+/******************************************************************************
+*                             __half2 functions                  *
+******************************************************************************/
+#define __SPEC_CASE2(i,r, spc, ulp) \
+   "{.reg.b32 spc, ulp, p;\n"\
+   "  mov.b32 spc," __CUDA_FP16_STRINGIFY(spc) ";\n"\
+   "  mov.b32 ulp," __CUDA_FP16_STRINGIFY(ulp) ";\n"\
+   "  set.eq.f16x2.f16x2 p," __CUDA_FP16_STRINGIFY(i) ", spc;\n"\
+   "  fma.rn.f16x2 " __CUDA_FP16_STRINGIFY(r) ",p,ulp," __CUDA_FP16_STRINGIFY(r) ";\n}\n"
+#define __SPEC_CASE(i,r, spc, ulp) \
+   "{.reg.b16 spc, ulp, p;\n"\
+   "  mov.b16 spc," __CUDA_FP16_STRINGIFY(spc) ";\n"\
+   "  mov.b16 ulp," __CUDA_FP16_STRINGIFY(ulp) ";\n"\
+   "  set.eq.f16.f16 p," __CUDA_FP16_STRINGIFY(i) ", spc;\n"\
+   "  fma.rn.f16 " __CUDA_FP16_STRINGIFY(r) ",p,ulp," __CUDA_FP16_STRINGIFY(r) ";\n}\n"
+#define __APPROX_FCAST(fun) /* do */ {\
+   __half val;\
+   asm("{.reg.b32         f;        \n"\
+                " .reg.b16         r;        \n"\
+                "  mov.b16         r,%1;     \n"\
+                "  cvt.f32.f16     f,r;      \n"\
+                "  " __CUDA_FP16_STRINGIFY(fun) ".approx.ftz.f32   f,f;  \n"\
+                "  cvt.rn.f16.f32      r,f;  \n"\
+                "  mov.b16         %0,r;     \n"\
+                "}": "=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));\
+   return val;\
+} /* while(0) */
+#define __APPROX_FCAST2(fun) /* do */ {\
+   __half2 val;\
+   asm("{.reg.b16         hl, hu;         \n"\
+                " .reg.b32         fl, fu;         \n"\
+                "  mov.b32         {hl, hu}, %1;   \n"\
+                "  cvt.f32.f16     fl, hl;         \n"\
+                "  cvt.f32.f16     fu, hu;         \n"\
+                "  " __CUDA_FP16_STRINGIFY(fun) ".approx.ftz.f32   fl, fl;     \n"\
+                "  " __CUDA_FP16_STRINGIFY(fun) ".approx.ftz.f32   fu, fu;     \n"\
+                "  cvt.rn.f16.f32      hl, fl;     \n"\
+                "  cvt.rn.f16.f32      hu, fu;     \n"\
+                "  mov.b32         %0, {hl, hu};   \n"\
+                "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));       \
+   return val;\
+} /* while(0) */
+static __device__ __forceinline__ float __float_simpl_sinf(float a);
+static __device__ __forceinline__ float __float_simpl_cosf(float a);
+__CUDA_FP16_DECL__ __half hsin(const __half a) {
+    const float sl = __float_simpl_sinf(__half2float(a));
+    __half r = __float2half_rn(sl);
+    asm("{\n\t"
+        "  .reg.b16 i,r,t;     \n\t"
+        "  mov.b16 r, %0;      \n\t"
+        "  mov.b16 i, %1;      \n\t"
+        "  and.b16 t, r, 0x8000U; \n\t"
+        "  abs.f16 r, r;   \n\t"
+        "  abs.f16 i, i;   \n\t"
+        __SPEC_CASE(i, r, 0X32B3U, 0x0800U)
+        __SPEC_CASE(i, r, 0X5CB0U, 0x9000U)
+        "  or.b16  r,r,t;      \n\t"
+        "  mov.b16 %0, r;      \n"
+        "}\n" : "+h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half2 h2sin(const __half2 a) {
+    const float sl = __float_simpl_sinf(__half2float(a.x));
+    const float sh = __float_simpl_sinf(__half2float(a.y));
+    __half2 r = __floats2half2_rn(sl, sh);
+    asm("{\n\t"
+        "  .reg.b32 i,r,t;             \n\t"
+        "  mov.b32 r, %0;              \n\t"
+        "  mov.b32 i, %1;              \n\t"
+        "  and.b32 t, r, 0x80008000U;   \n\t"
+        "  abs.f16x2 r, r;   \n\t"
+        "  abs.f16x2 i, i;   \n\t"
+        __SPEC_CASE2(i, r, 0X32B332B3U, 0x08000800U)
+        __SPEC_CASE2(i, r, 0X5CB05CB0U, 0x90009000U)
+        "  or.b32  r, r, t;            \n\t"
+        "  mov.b32 %0, r;              \n"
+        "}\n" : "+r"(__HALF2_TO_UI(r)) : "r"(__HALF2_TO_CUI(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half hcos(const __half a) {
+    const float cl = __float_simpl_cosf(__half2float(a));
+    __half r = __float2half_rn(cl);
+    asm("{\n\t"
+        "  .reg.b16 i,r;        \n\t"
+        "  mov.b16 r, %0;       \n\t"
+        "  mov.b16 i, %1;       \n\t"
+        "  abs.f16 i, i;        \n\t"
+        __SPEC_CASE(i, r, 0X2B7CU, 0x1000U)
+        "  mov.b16 %0, r;       \n"
+        "}\n" : "+h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half2 h2cos(const __half2 a) {
+    const float cl = __float_simpl_cosf(__half2float(a.x));
+    const float ch = __float_simpl_cosf(__half2float(a.y));
+    __half2 r = __floats2half2_rn(cl, ch);
+    asm("{\n\t"
+        "  .reg.b32 i,r;   \n\t"
+        "  mov.b32 r, %0;  \n\t"
+        "  mov.b32 i, %1;  \n\t"
+        "  abs.f16x2 i, i; \n\t"
+        __SPEC_CASE2(i, r, 0X2B7C2B7CU, 0x10001000U)
+        "  mov.b32 %0, r;  \n"
+        "}\n" : "+r"(__HALF2_TO_UI(r)) : "r"(__HALF2_TO_CUI(a)));
+    return r;
+}
+static __device__ __forceinline__ float __internal_trig_reduction_kernel(const float a, unsigned int *const quadrant)
+{
+    const float ar = __fmaf_rn(a, 0.636619772F, 12582912.0F);
+    const unsigned q = __float_as_uint(ar);
+    const float j = __fsub_rn(ar, 12582912.0F);
+    float t = __fmaf_rn(j, -1.5707962512969971e+000F, a);
+    t = __fmaf_rn(j, -7.5497894158615964e-008F, t);
+    *quadrant = q;
+    return t;
+}
+static __device__ __forceinline__ float __internal_sin_cos_kernel(const float x, const unsigned int i)
+{
+    float z;
+    const float x2 = x*x;
+    float a8;
+    float a6;
+    float a4;
+    float a2;
+    float a1;
+    float a0;
+
+    if ((i & 1U) != 0U) {
+        // cos
+        a8 =  2.44331571e-5F;
+        a6 = -1.38873163e-3F;
+        a4 =  4.16666457e-2F;
+        a2 = -5.00000000e-1F;
+        a1 = x2;
+        a0 = 1.0F;
+    }
+    else {
+        // sin
+        a8 = -1.95152959e-4F;
+        a6 =  8.33216087e-3F;
+        a4 = -1.66666546e-1F;
+        a2 = 0.0F;
+        a1 = x;
+        a0 = x;
+    }
+
+    z = __fmaf_rn(a8, x2, a6);
+    z = __fmaf_rn(z, x2, a4);
+    z = __fmaf_rn(z, x2, a2);
+    z = __fmaf_rn(z, a1, a0);
+
+    if ((i & 2U) != 0U) {
+        z = -z;
+    }
+    return z;
+}
+static __device__ __forceinline__ float __float_simpl_sinf(float a)
+{
+    float z;
+    unsigned i;
+    a = __internal_trig_reduction_kernel(a, &i);
+    z = __internal_sin_cos_kernel(a, i);
+    return z;
+}
+static __device__ __forceinline__ float __float_simpl_cosf(float a)
+{
+    float z;
+    unsigned i;
+    a = __internal_trig_reduction_kernel(a, &i);
+    z = __internal_sin_cos_kernel(a, (i & 0x3U) + 1U);
+    return z;
+}
+
+__CUDA_FP16_DECL__ __half hexp(const __half a) {
+    __half val;
+    asm("{.reg.b32         f, C, nZ;       \n"
+        " .reg.b16         h,r;            \n"
+        "  mov.b16         h,%1;           \n"
+        "  cvt.f32.f16     f,h;            \n"
+        "  mov.b32         C, 0x3fb8aa3bU; \n"
+        "  mov.b32         nZ, 0x80000000U;\n"
+        "  fma.rn.f32      f,f,C,nZ;       \n"
+        "  ex2.approx.ftz.f32  f,f;        \n"
+        "  cvt.rn.f16.f32      r,f;        \n"
+        __SPEC_CASE(h, r, 0X1F79U, 0x9400U)
+        __SPEC_CASE(h, r, 0X25CFU, 0x9400U)
+        __SPEC_CASE(h, r, 0XC13BU, 0x0400U)
+        __SPEC_CASE(h, r, 0XC1EFU, 0x0200U)
+        "  mov.b16         %0,r;           \n"
+        "}": "=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2exp(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         h,r,fl,fu,C,nZ; \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  mov.b32         h, %1;          \n"
+        "  cvt.f32.f16     fl, hl;         \n"
+        "  cvt.f32.f16     fu, hu;         \n"
+        "  mov.b32         C, 0x3fb8aa3bU; \n"
+        "  mov.b32         nZ, 0x80000000U;\n"
+        "  fma.rn.f32      fl,fl,C,nZ;     \n"
+        "  fma.rn.f32      fu,fu,C,nZ;     \n"
+        "  ex2.approx.ftz.f32  fl, fl;     \n"
+        "  ex2.approx.ftz.f32  fu, fu;     \n"
+        "  cvt.rn.f16.f32      hl, fl;     \n"
+        "  cvt.rn.f16.f32      hu, fu;     \n"
+        "  mov.b32         r, {hl, hu};    \n"
+        __SPEC_CASE2(h, r, 0X1F791F79U, 0x94009400U)
+        __SPEC_CASE2(h, r, 0X25CF25CFU, 0x94009400U)
+        __SPEC_CASE2(h, r, 0XC13BC13BU, 0x04000400U)
+        __SPEC_CASE2(h, r, 0XC1EFC1EFU, 0x02000200U)
+        "  mov.b32         %0, r;  \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half hexp2(const __half a) {
+    __half val;
+    asm("{.reg.b32         f, ULP;         \n"
+        " .reg.b16         r;              \n"
+        "  mov.b16         r,%1;           \n"
+        "  cvt.f32.f16     f,r;            \n"
+        "  ex2.approx.ftz.f32      f,f;    \n"
+        "  mov.b32         ULP, 0x33800000U;\n"
+        "  fma.rn.f32      f,f,ULP,f;      \n"
+        "  cvt.rn.f16.f32      r,f;        \n"
+        "  mov.b16         %0,r;           \n"
+        "}": "=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2exp2(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         fl, fu, ULP;    \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  cvt.f32.f16     fl, hl;         \n"
+        "  cvt.f32.f16     fu, hu;         \n"
+        "  ex2.approx.ftz.f32  fl, fl;     \n"
+        "  ex2.approx.ftz.f32  fu, fu;     \n"
+        "  mov.b32         ULP, 0x33800000U;\n"
+        "  fma.rn.f32      fl,fl,ULP,fl;   \n"
+        "  fma.rn.f32      fu,fu,ULP,fu;   \n"
+        "  cvt.rn.f16.f32      hl, fl;     \n"
+        "  cvt.rn.f16.f32      hu, fu;     \n"
+        "  mov.b32         %0, {hl, hu};   \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half hexp10(const __half a) {
+    __half val;
+    asm("{.reg.b16         h,r;            \n"
+        " .reg.b32         f, C, nZ;       \n"
+        "  mov.b16         h, %1;          \n"
+        "  cvt.f32.f16     f, h;           \n"
+        "  mov.b32         C, 0x40549A78U; \n"
+        "  mov.b32         nZ, 0x80000000U;\n"
+        "  fma.rn.f32      f,f,C,nZ;       \n"
+        "  ex2.approx.ftz.f32  f, f;       \n"
+        "  cvt.rn.f16.f32      r, f;       \n"
+        __SPEC_CASE(h, r, 0x34DEU, 0x9800U)
+        __SPEC_CASE(h, r, 0x9766U, 0x9000U)
+        __SPEC_CASE(h, r, 0x9972U, 0x1000U)
+        __SPEC_CASE(h, r, 0xA5C4U, 0x1000U)
+        __SPEC_CASE(h, r, 0xBF0AU, 0x8100U)
+        "  mov.b16         %0, r;          \n"
+        "}":"=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2exp10(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         h,r,fl,fu,C,nZ; \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  mov.b32         h, %1;          \n"
+        "  cvt.f32.f16     fl, hl;         \n"
+        "  cvt.f32.f16     fu, hu;         \n"
+        "  mov.b32         C, 0x40549A78U; \n"
+        "  mov.b32         nZ, 0x80000000U;\n"
+        "  fma.rn.f32      fl,fl,C,nZ;     \n"
+        "  fma.rn.f32      fu,fu,C,nZ;     \n"
+        "  ex2.approx.ftz.f32  fl, fl;     \n"
+        "  ex2.approx.ftz.f32  fu, fu;     \n"
+        "  cvt.rn.f16.f32      hl, fl;     \n"
+        "  cvt.rn.f16.f32      hu, fu;     \n"
+        "  mov.b32         r, {hl, hu};    \n"
+        __SPEC_CASE2(h, r, 0x34DE34DEU, 0x98009800U)
+        __SPEC_CASE2(h, r, 0x97669766U, 0x90009000U)
+        __SPEC_CASE2(h, r, 0x99729972U, 0x10001000U)
+        __SPEC_CASE2(h, r, 0xA5C4A5C4U, 0x10001000U)
+        __SPEC_CASE2(h, r, 0xBF0ABF0AU, 0x81008100U)
+        "  mov.b32         %0, r;  \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half hlog2(const __half a) {
+    __half val;
+    asm("{.reg.b16         h, r;           \n"
+        " .reg.b32         f;              \n"
+        "  mov.b16         h, %1;          \n"
+        "  cvt.f32.f16     f, h;           \n"
+        "  lg2.approx.ftz.f32  f, f;       \n"
+        "  cvt.rn.f16.f32      r, f;       \n"
+        __SPEC_CASE(r, r, 0xA2E2U, 0x8080U)
+        __SPEC_CASE(r, r, 0xBF46U, 0x9400U)
+        "  mov.b16         %0, r;          \n"
+        "}":"=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2log2(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;         \n"
+        " .reg.b32         fl, fu, r, p;   \n"
+        "  mov.b32         {hl, hu}, %1;   \n"
+        "  cvt.f32.f16     fl, hl;         \n"
+        "  cvt.f32.f16     fu, hu;         \n"
+        "  lg2.approx.ftz.f32  fl, fl;     \n"
+        "  lg2.approx.ftz.f32  fu, fu;     \n"
+        "  cvt.rn.f16.f32      hl, fl;     \n"
+        "  cvt.rn.f16.f32      hu, fu;     \n"
+        "  mov.b32         r, {hl, hu};    \n"
+        __SPEC_CASE2(r, r, 0xA2E2A2E2U, 0x80808080U)
+        __SPEC_CASE2(r, r, 0xBF46BF46U, 0x94009400U)
+        "  mov.b32         %0, r;          \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half hlog(const __half a) {
+    __half val;
+    asm("{.reg.b32         f, C;           \n"
+        " .reg.b16         r,h;            \n"
+        "  mov.b16         h,%1;           \n"
+        "  cvt.f32.f16     f,h;            \n"
+        "  lg2.approx.ftz.f32  f,f;        \n"
+        "  mov.b32         C, 0x3f317218U;  \n"
+        "  mul.f32         f,f,C;          \n"
+        "  cvt.rn.f16.f32      r,f;        \n"
+        __SPEC_CASE(h, r, 0X160DU, 0x9C00U)
+        __SPEC_CASE(h, r, 0X3BFEU, 0x8010U)
+        __SPEC_CASE(h, r, 0X3C0BU, 0x8080U)
+        __SPEC_CASE(h, r, 0X6051U, 0x1C00U)
+        "  mov.b16         %0,r;           \n"
+        "}": "=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2log(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;             \n"
+        " .reg.b32         r, fl, fu, C, h;    \n"
+        "  mov.b32         {hl, hu}, %1;       \n"
+        "  mov.b32         h, %1;              \n"
+        "  cvt.f32.f16     fl, hl;             \n"
+        "  cvt.f32.f16     fu, hu;             \n"
+        "  lg2.approx.ftz.f32  fl, fl;         \n"
+        "  lg2.approx.ftz.f32  fu, fu;         \n"
+        "  mov.b32         C, 0x3f317218U;     \n"
+        "  mul.f32         fl,fl,C;            \n"
+        "  mul.f32         fu,fu,C;            \n"
+        "  cvt.rn.f16.f32      hl, fl;         \n"
+        "  cvt.rn.f16.f32      hu, fu;         \n"
+        "  mov.b32         r, {hl, hu};        \n"
+        __SPEC_CASE2(h, r, 0X160D160DU, 0x9C009C00U)
+        __SPEC_CASE2(h, r, 0X3BFE3BFEU, 0x80108010U)
+        __SPEC_CASE2(h, r, 0X3C0B3C0BU, 0x80808080U)
+        __SPEC_CASE2(h, r, 0X60516051U, 0x1C001C00U)
+        "  mov.b32         %0, r;              \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half hlog10(const __half a) {
+    __half val;
+    asm("{.reg.b16         h, r;           \n"
+        " .reg.b32         f, C;           \n"
+        "  mov.b16         h, %1;          \n"
+        "  cvt.f32.f16     f, h;           \n"
+        "  lg2.approx.ftz.f32  f, f;       \n"
+        "  mov.b32         C, 0x3E9A209BU; \n"
+        "  mul.f32         f,f,C;          \n"
+        "  cvt.rn.f16.f32      r, f;       \n"
+        __SPEC_CASE(h, r, 0x338FU, 0x1000U)
+        __SPEC_CASE(h, r, 0x33F8U, 0x9000U)
+        __SPEC_CASE(h, r, 0x57E1U, 0x9800U)
+        __SPEC_CASE(h, r, 0x719DU, 0x9C00U)
+        "  mov.b16         %0, r;          \n"
+        "}":"=h"(__HALF_TO_US(val)) : "h"(__HALF_TO_CUS(a)));
+    return val;
+}
+__CUDA_FP16_DECL__ __half2 h2log10(const __half2 a) {
+    __half2 val;
+    asm("{.reg.b16         hl, hu;             \n"
+        " .reg.b32         r, fl, fu, C, h;    \n"
+        "  mov.b32         {hl, hu}, %1;       \n"
+        "  mov.b32         h, %1;              \n"
+        "  cvt.f32.f16     fl, hl;             \n"
+        "  cvt.f32.f16     fu, hu;             \n"
+        "  lg2.approx.ftz.f32  fl, fl;         \n"
+        "  lg2.approx.ftz.f32  fu, fu;         \n"
+        "  mov.b32         C, 0x3E9A209BU;     \n"
+        "  mul.f32         fl,fl,C;            \n"
+        "  mul.f32         fu,fu,C;            \n"
+        "  cvt.rn.f16.f32      hl, fl;         \n"
+        "  cvt.rn.f16.f32      hu, fu;         \n"
+        "  mov.b32         r, {hl, hu};        \n"
+        __SPEC_CASE2(h, r, 0x338F338FU, 0x10001000U)
+        __SPEC_CASE2(h, r, 0x33F833F8U, 0x90009000U)
+        __SPEC_CASE2(h, r, 0x57E157E1U, 0x98009800U)
+        __SPEC_CASE2(h, r, 0x719D719DU, 0x9C009C00U)
+        "  mov.b32         %0, r;              \n"
+        "}":"=r"(__HALF2_TO_UI(val)) : "r"(__HALF2_TO_CUI(a)));
+    return val;
+}
+#undef __SPEC_CASE2
+#undef __SPEC_CASE
+__CUDA_FP16_DECL__ __half2 h2rcp(const __half2 a) {
+    __APPROX_FCAST2(rcp)
+}
+__CUDA_FP16_DECL__ __half hrcp(const __half a) {
+    __APPROX_FCAST(rcp)
+}
+__CUDA_FP16_DECL__ __half2 h2rsqrt(const __half2 a) {
+    __APPROX_FCAST2(rsqrt)
+}
+__CUDA_FP16_DECL__ __half hrsqrt(const __half a) {
+    __APPROX_FCAST(rsqrt)
+}
+__CUDA_FP16_DECL__ __half2 h2sqrt(const __half2 a) {
+    __APPROX_FCAST2(sqrt)
+}
+__CUDA_FP16_DECL__ __half hsqrt(const __half a) {
+    __APPROX_FCAST(sqrt)
+}
+#undef __APPROX_FCAST
+#undef __APPROX_FCAST2
+__CUDA_FP16_DECL__ __half2 __hisnan2(const __half2 a)
+{
+    __half2 r;
+    asm("{set.nan.f16x2.f16x2 %0,%1,%2;\n}"
+        :"=r"(__HALF2_TO_UI(r)) : "r"(__HALF2_TO_CUI(a)), "r"(__HALF2_TO_CUI(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ bool __hisnan(const __half a)
+{
+    __half r;
+    asm("{set.nan.f16.f16 %0,%1,%2;\n}"
+        :"=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(a)), "h"(__HALF_TO_CUS(a)));
+    return __HALF_TO_CUS(r) != 0U;
+}
+__CUDA_FP16_DECL__ __half2 __hneg2(const __half2 a)
+{
+    __half2 r;
+    asm("{neg.f16x2 %0,%1;\n}"
+        :"=r"(__HALF2_TO_UI(r)) : "r"(__HALF2_TO_CUI(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half __hneg(const __half a)
+{
+    __half r;
+    asm("{neg.f16 %0,%1;\n}"
+        :"=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half2 __habs2(const __half2 a)
+{
+    __half2 r;
+    asm("{abs.f16x2 %0,%1;\n}"
+        :"=r"(__HALF2_TO_UI(r)) : "r"(__HALF2_TO_CUI(a)));
+    return r;
+}
+__CUDA_FP16_DECL__ __half __habs(const __half a)
+{
+    __half r;
+    asm("{abs.f16 %0,%1;\n}"
+        :"=h"(__HALF_TO_US(r)) : "h"(__HALF_TO_CUS(a)));
+    return r;
+}
+
+__CUDA_FP16_DECL__ __half2 __hcmadd(const __half2 a, const __half2 b, const __half2 c)
+{
+    // fast version of complex multiply-accumulate
+    // (a.re, a.im) * (b.re, b.im) + (c.re, c.im)
+    // acc.re = (c.re + a.re*b.re) - a.im*b.im
+    // acc.im = (c.im + a.re*b.im) + a.im*b.re
+    __half real_tmp =  __hfma(a.x, b.x, c.x);
+    __half img_tmp  =  __hfma(a.x, b.y, c.y);
+    real_tmp = __hfma(__hneg(a.y), b.y, real_tmp);
+    img_tmp  = __hfma(a.y,         b.x, img_tmp);
+    return make_half2(real_tmp, img_tmp);
+}
+
+#endif /*!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 530)*/
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)
+__CUDA_FP16_DECL__ __half __hmax_nan(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(max.NaN)
+}
+__CUDA_FP16_DECL__ __half __hmin_nan(const __half a, const __half b)
+{
+    __BINARY_OP_HALF_MACRO(min.NaN)
+}
+__CUDA_FP16_DECL__ __half __hfma_relu(const __half a, const __half b, const __half c)
+{
+    __TERNARY_OP_HALF_MACRO(fma.rn.relu)
+}
+
+__CUDA_FP16_DECL__ __half2 __hmax2_nan(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(max.NaN)
+}
+__CUDA_FP16_DECL__ __half2 __hmin2_nan(const __half2 a, const __half2 b)
+{
+    __BINARY_OP_HALF2_MACRO(min.NaN)
+}
+__CUDA_FP16_DECL__ __half2 __hfma2_relu(const __half2 a, const __half2 b, const __half2 c)
+{
+    __TERNARY_OP_HALF2_MACRO(fma.rn.relu)
+}
+#endif /*!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 800)*/
+
+/* Define __PTR for atomicAdd prototypes below, undef after done */
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __PTR   "l"
+#else
+#define __PTR   "r"
+#endif /*(defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)*/
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
+
+__CUDA_FP16_DECL__  __half2 atomicAdd(__half2 *const address, const __half2 val) {
+    __half2 r;
+    asm volatile ("{ atom.add.noftz.f16x2 %0,[%1],%2; }\n"
+                  : "=r"(__HALF2_TO_UI(r)) : __PTR(address), "r"(__HALF2_TO_CUI(val))
+                  : "memory");
+   return r;
+}
+
+#endif /*!defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600*/
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 700
+
+__CUDA_FP16_DECL__  __half atomicAdd(__half *const address, const __half val) {
+    __half r;
+    asm volatile ("{ atom.add.noftz.f16 %0,[%1],%2; }\n"
+                  : "=h"(__HALF_TO_US(r))
+                  : __PTR(address), "h"(__HALF_TO_CUS(val))
+                  : "memory");
+   return r;
+}
+
+#endif /*!defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 700*/
+
+#undef __PTR
+
+#undef __CUDA_FP16_DECL__
+#endif /* defined(__CUDACC__) */
+#endif /* defined(__cplusplus) */
+
+#undef __TERNARY_OP_HALF2_MACRO
+#undef __TERNARY_OP_HALF_MACRO
+#undef __BINARY_OP_HALF2_MACRO
+#undef __BINARY_OP_HALF_MACRO
+
+#undef __CUDA_HOSTDEVICE_FP16_DECL__
+#undef __CUDA_FP16_DECL__
+
+#undef __HALF_TO_US
+#undef __HALF_TO_CUS
+#undef __HALF2_TO_UI
+#undef __HALF2_TO_CUI
+
+/* Define first-class types "half" and "half2", unless user specifies otherwise via "#define CUDA_NO_HALF" */
+/* C cannot ever have these types defined here, because __half and __half2 are C++ classes */
+#if defined(__cplusplus) && !defined(CUDA_NO_HALF)
+typedef __half half;
+typedef __half2 half2;
+// for consistency with __nv_bfloat16
+typedef __half      __nv_half;
+typedef __half2     __nv_half2;
+typedef __half_raw  __nv_half_raw;
+typedef __half2_raw __nv_half2_raw;
+typedef __half        nv_half;
+typedef __half2       nv_half2;
+#endif /* defined(__cplusplus) && !defined(CUDA_NO_HALF) */
+
+#if defined(__CPP_VERSION_AT_LEAST_11_FP16)
+#undef __CPP_VERSION_AT_LEAST_11_FP16
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP16) */
+
+#endif /* end of include guard: __CUDA_FP16_HPP__ */
diff --git a/ext/cudart/include/cuda_fp8.h b/ext/cudart/include/cuda_fp8.h
new file mode 100644
index 00000000..13a1d733
--- /dev/null
+++ b/ext/cudart/include/cuda_fp8.h
@@ -0,0 +1,360 @@
+/*
+ * Copyright 2022 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef __CUDA_FP8_H__
+#define __CUDA_FP8_H__
+
+/* Set up function decorations */
+#if defined(__CUDACC__)
+#define __CUDA_FP8_DECL__ static __device__ __inline__
+#define __CUDA_HOSTDEVICE_FP8__ __host__ __device__
+#define __CUDA_HOSTDEVICE_FP8_DECL__ static __host__ __device__ __inline__
+#else /* !defined(__CUDACC__) */
+#if defined(__GNUC__)
+#define __CUDA_HOSTDEVICE_FP8_DECL__ static __attribute__((unused))
+#else
+#define __CUDA_HOSTDEVICE_FP8_DECL__ static
+#endif /* defined(__GNUC__) */
+#define __CUDA_HOSTDEVICE_FP8__
+#endif /* defined(__CUDACC_) */
+
+#if !defined(_MSC_VER) && __cplusplus >= 201103L
+#define __CPP_VERSION_AT_LEAST_11_FP8
+#elif _MSC_FULL_VER >= 190024210 && _MSVC_LANG >= 201103L
+#define __CPP_VERSION_AT_LEAST_11_FP8
+#endif
+
+/* bring in __half_raw data type */
+#include "cuda_fp16.h"
+/* bring in __nv_bfloat16_raw data type */
+#include "cuda_bf16.h"
+/* bring in float2, double4, etc vector types */
+#include "vector_types.h"
+
+/**
+ * \defgroup CUDA_MATH_INTRINSIC_FP8 FP8 Intrinsics
+ * This section describes fp8 intrinsic functions.
+ * To use these functions, include the header file \p cuda_fp8.h in your
+ * program.
+ */
+
+/**
+ * \defgroup CUDA_MATH_FP8_MISC FP8 Conversion and Data Movement
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ * To use these functions, include the header file \p cuda_fp8.h in your
+ * program.
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief 8-bit \p unsigned \p integer
+ * type abstraction used to for \p fp8 floating-point
+ * numbers storage.
+ */
+typedef unsigned char __nv_fp8_storage_t;
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief 16-bit \p unsigned \p integer
+ * type abstraction used to for storage of pairs of
+ * \p fp8 floating-point numbers.
+ */
+typedef unsigned short int __nv_fp8x2_storage_t;
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief 32-bit \p unsigned \p integer
+ * type abstraction used to for storage of tetrads of
+ * \p fp8 floating-point numbers.
+ */
+typedef unsigned int __nv_fp8x4_storage_t;
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Enumerates the modes applicable when
+ * performing a narrowing conversion to \p fp8 destination types.
+ */
+typedef enum __nv_saturation_t {
+    /**
+     * Means no saturation to finite is performed when conversion
+     * results in rounding values outside the range of destination
+     * type.
+     * NOTE: for fp8 type of e4m3 kind, the results that are larger
+     * than the maximum representable finite number of the target
+     * format become NaN.
+     */
+    __NV_NOSAT,
+    /**
+     * Means input larger than the maximum representable
+     * finite number MAXNORM of the target format round to the
+     * MAXNORM of the same sign as input.
+     */
+    __NV_SATFINITE,
+} __nv_saturation_t;
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Enumerates the possible
+ * interpretations of the 8-bit values when referring to them as
+ * \p fp8 types.
+ */
+typedef enum __nv_fp8_interpretation_t {
+    __NV_E4M3, /**< Stands for \p fp8 numbers of \p e4m3 kind. */
+    __NV_E5M2, /**< Stands for \p fp8 numbers of \p e5m2 kind. */
+} __nv_fp8_interpretation_t;
+
+/* Forward-declaration of C-style APIs */
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input \p double precision \p x to \p fp8 type of the
+ * requested kind using round-to-nearest-even rounding and requested saturation
+ * mode.
+ *
+ * \details Converts input \p x to \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter,
+ * using round-to-nearest-even rounding and
+ * saturation mode specified by \p saturate parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_double_to_fp8(const double x, const __nv_saturation_t saturate,
+                       const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input vector of two \p double precision numbers packed
+ * in \p double2 \p x into a vector of two values of \p fp8 type of
+ * the requested kind using round-to-nearest-even rounding and requested
+ * saturation mode.
+ *
+ * \details Converts input vector \p x to a vector of two \p fp8 values of the
+ * kind specified by \p fp8_interpretation parameter, using
+ * round-to-nearest-even rounding and saturation mode specified by \p saturate
+ * parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8x2_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_double2_to_fp8x2(const double2 x, const __nv_saturation_t saturate,
+                          const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input \p single precision \p x to \p fp8 type of the
+ * requested kind using round-to-nearest-even rounding and requested saturation
+ * mode.
+ *
+ * \details Converts input \p x to \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter,
+ * using round-to-nearest-even rounding and
+ * saturation mode specified by \p saturate parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_float_to_fp8(const float x, const __nv_saturation_t saturate,
+                      const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input vector of two \p single precision numbers packed
+ * in \p float2 \p x into a vector of two values of \p fp8 type of
+ * the requested kind using round-to-nearest-even rounding and requested
+ * saturation mode.
+ *
+ * \details Converts input vector \p x to a vector of two \p fp8 values of the
+ * kind specified by \p fp8_interpretation parameter, using
+ * round-to-nearest-even rounding and saturation mode specified by \p saturate
+ * parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8x2_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_float2_to_fp8x2(const float2 x, const __nv_saturation_t saturate,
+                         const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input \p half precision \p x to \p fp8 type of the requested
+ * kind using round-to-nearest-even rounding and requested saturation mode.
+ *
+ * \details Converts input \p x to \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter,
+ * using round-to-nearest-even rounding and
+ * saturation mode specified by \p saturate parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_halfraw_to_fp8(const __half_raw x, const __nv_saturation_t saturate,
+                        const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input vector of two \p half precision numbers packed
+ * in \p __half2_raw \p x into a vector of two values of \p fp8 type of
+ * the requested kind using round-to-nearest-even rounding and requested
+ * saturation mode.
+ *
+ * \details Converts input vector \p x to a vector of two \p fp8 values of the
+ * kind specified by \p fp8_interpretation parameter, using
+ * round-to-nearest-even rounding and saturation mode specified by \p saturate
+ * parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8x2_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t __nv_cvt_halfraw2_to_fp8x2(
+    const __half2_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input \p nv_bfloat16 precision \p x to \p fp8 type of the
+ * requested kind using round-to-nearest-even rounding and requested saturation
+ * mode.
+ *
+ * \details Converts input \p x to \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter,
+ * using round-to-nearest-even rounding and
+ * saturation mode specified by \p saturate parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t __nv_cvt_bfloat16raw_to_fp8(
+    const __nv_bfloat16_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input vector of two \p nv_bfloat16 precision numbers packed
+ * in \p __nv_bfloat162_raw \p x into a vector of two values of \p fp8 type of
+ * the requested kind using round-to-nearest-even rounding and requested
+ * saturation mode.
+ *
+ * \details Converts input vector \p x to a vector of two \p fp8 values of the
+ * kind specified by \p fp8_interpretation parameter, using
+ * round-to-nearest-even rounding and saturation mode specified by \p saturate
+ * parameter.
+ *
+ * \returns
+ * - The \p __nv_fp8x2_storage_t value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_bfloat16raw2_to_fp8x2(
+    const __nv_bfloat162_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation);
+
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input \p fp8 \p x of the specified kind
+ * to \p half precision.
+ *
+ * \details Converts input \p x of \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter
+ * to \p half precision.
+ *
+ * \returns
+ * - The \p __half_raw value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __half_raw
+__nv_cvt_fp8_to_halfraw(const __nv_fp8_storage_t x,
+                        const __nv_fp8_interpretation_t fp8_interpretation);
+/**
+ * \ingroup CUDA_MATH_FP8_MISC
+ * \brief Converts input vector of two \p fp8 values of the specified kind
+ * to a vector of two \p half precision values packed in \p __half2_raw
+ * structure.
+ *
+ * \details Converts input vector \p x of \p fp8 type of the kind specified by
+ * \p fp8_interpretation parameter
+ * to a vector of two \p half precision values and returns as \p __half2_raw
+ * structure.
+ *
+ * \returns
+ * - The \p __half2_raw value holds the result of conversion.
+ */
+__CUDA_HOSTDEVICE_FP8_DECL__ __half2_raw
+__nv_cvt_fp8x2_to_halfraw2(const __nv_fp8x2_storage_t x,
+                           const __nv_fp8_interpretation_t fp8_interpretation);
+
+#if defined(__cplusplus)
+
+#define __CUDA_FP8_TYPES_EXIST__
+
+/* Forward-declaration of structures defined in "cuda_fp8.hpp" */
+struct __nv_fp8_e5m2;
+struct __nv_fp8x2_e5m2;
+struct __nv_fp8x4_e5m2;
+
+struct __nv_fp8_e4m3;
+struct __nv_fp8x2_e4m3;
+struct __nv_fp8x4_e4m3;
+
+#endif /* defined(__cplusplus) */
+
+#include "cuda_fp8.hpp"
+
+#undef __CUDA_FP8_DECL__
+#undef __CUDA_HOSTDEVICE_FP8__
+#undef __CUDA_HOSTDEVICE_FP8_DECL__
+
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+#undef __CPP_VERSION_AT_LEAST_11_FP8
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#endif /* end of include guard: __CUDA_FP8_H__ */
diff --git a/ext/cudart/include/cuda_fp8.hpp b/ext/cudart/include/cuda_fp8.hpp
new file mode 100644
index 00000000..9bfe2b78
--- /dev/null
+++ b/ext/cudart/include/cuda_fp8.hpp
@@ -0,0 +1,1546 @@
+/*
+ * Copyright 2022 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_FP8_HPP__)
+#define __CUDA_FP8_HPP__
+
+#if !defined(__CUDA_FP8_H__)
+#error "Do not include this file directly. Instead, include cuda_fp8.h."
+#endif
+
+/* C++ header for std::memcpy (used for type punning in host-side
+ * implementations). When compiling as a CUDA source file memcpy is provided
+ * implicitly. !defined(__CUDACC__) implies !defined(__CUDACC_RTC__).
+ */
+#if defined(__cplusplus) && !defined(__CUDACC__)
+#include <cstring>
+#elif !defined(__cplusplus) && !defined(__CUDACC__)
+#include <string.h>
+#endif /* defined(__cplusplus) && !defined(__CUDACC__) */
+
+/* Set up structure-alignment attribute */
+#if !(defined __CUDA_ALIGN__)
+#if defined(__CUDACC__)
+#define __CUDA_ALIGN__(align) __align__(align)
+#else
+/* Define alignment macro based on compiler type (cannot assume C11 "_Alignas"
+ * is available) */
+#if __cplusplus >= 201103L
+#define __CUDA_ALIGN__(n)                                                      \
+    alignas(n) /* C++11 kindly gives us a keyword for this */
+#else          /* !defined(__CPP_VERSION_AT_LEAST_11_FP8)*/
+#if defined(__GNUC__)
+#define __CUDA_ALIGN__(n) __attribute__((aligned(n)))
+#elif defined(_MSC_VER)
+#define __CUDA_ALIGN__(n) __declspec(align(n))
+#else
+#define __CUDA_ALIGN__(n)
+#endif /* defined(__GNUC__) */
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+#endif /* defined(__CUDACC__) */
+#endif /* !(defined __CUDA_ALIGN__) */
+
+#if !(defined __CPP_VERSION_AT_LEAST_11_FP8)
+/* need c++11 for explicit operators */
+#define __CUDA_NO_FP8_CONVERSION_OPERATORS__
+#endif
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_double_to_fp8(const double x, const __nv_saturation_t saturate,
+                       const __nv_fp8_interpretation_t fp8_interpretation) {
+    unsigned char res;
+    unsigned long long int xbits;
+
+#if defined(__CUDACC__) || (!defined __cplusplus)
+    (void)memcpy(&xbits, &x, sizeof(x));
+#else
+    (void)std::memcpy(&xbits, &x, sizeof(x));
+#endif
+    unsigned char FP8_MAXNORM;
+    unsigned char FP8_MANTISSA_MASK;
+    unsigned short int FP8_EXP_BIAS;
+    unsigned long long int FP8_SIGNIFICAND_BITS;
+    const unsigned long long int DP_INF_BITS = 0x7FF0000000000000ULL;
+    unsigned long long int FP8_MINDENORM_O2;
+    unsigned long long int FP8_OVERFLOW_THRESHOLD;
+    unsigned long long int FP8_MINNORM;
+
+    if (fp8_interpretation == __NV_E4M3) {
+        FP8_EXP_BIAS = 7U;
+        FP8_SIGNIFICAND_BITS = 4ULL;
+        FP8_MANTISSA_MASK = 0x7U;
+        FP8_MINDENORM_O2 = 0x3F50000000000000ULL; // mindenorm/2 = 2^-10
+        FP8_OVERFLOW_THRESHOLD =
+            0x407D000000000000ULL; // maxnorm + 1/2ulp = 0x1.Cp+8 + 0x1p+4
+        FP8_MAXNORM = 0x7EU;
+        FP8_MINNORM = 0x3F90000000000000ULL; // minnorm = 2^-6
+    } else {                                 //__NV_E5M2
+        FP8_EXP_BIAS = 15U;
+        FP8_SIGNIFICAND_BITS = 3ULL;
+        FP8_MANTISSA_MASK = 0x3U;
+        FP8_MINDENORM_O2 = 0x3EE0000000000000ULL; // mindenorm/2 = 2^-17
+        FP8_OVERFLOW_THRESHOLD =
+            0x40EE000000000000ULL -
+            1ULL; // maxnorm + 1/2ulp = 0x1.Ep+15, and -1 to have common code
+        FP8_MAXNORM = 0x7BU;
+        FP8_MINNORM = 0x3F10000000000000ULL; // minnorm = 2^-14
+    }
+
+    // 1/2 LSB of the target format, positioned in double precision mantissa
+    // helpful in midpoints detection during round-to-nearest-even step
+    const unsigned long long int FP8_DP_HALF_ULP =
+        (unsigned long long int)1ULL << (53ULL - FP8_SIGNIFICAND_BITS - 1ULL);
+    // prepare sign bit in target format
+    unsigned char sign = (unsigned char)((xbits >> 63ULL) << 7U);
+    // prepare exponent field in target format
+    unsigned char exp =
+        (unsigned char)((((unsigned short int)(xbits >> 52ULL)) & 0x7FFU) -
+                        1023U + FP8_EXP_BIAS);
+    // round mantissa to target format width, rounding towards zero
+    unsigned char mantissa =
+        (unsigned char)(xbits >> (53ULL - FP8_SIGNIFICAND_BITS)) &
+        FP8_MANTISSA_MASK;
+    unsigned long long int absx = xbits & 0x7FFFFFFFFFFFFFFFULL;
+
+    if (absx <= FP8_MINDENORM_O2) {
+        // zero or underflow
+        res = 0U;
+    } else if (absx > DP_INF_BITS) {
+        // NaN
+        if (fp8_interpretation == __NV_E4M3) {
+            res = 0x7FU;
+        } else {
+            // NaN --> QNaN
+            res = 0x7EU | mantissa;
+        }
+    } else if (absx > FP8_OVERFLOW_THRESHOLD) {
+        if (saturate == __NV_SATFINITE) {
+            res = FP8_MAXNORM;
+        } else {
+            // __NV_NOSAT
+            if (fp8_interpretation == __NV_E4M3) {
+                // no Inf in E4M3
+                res = 0x7FU; // NaN
+            } else {
+                res = 0x7CU; // Inf in E5M2
+            }
+        }
+    } else if (absx >= FP8_MINNORM) {
+        res = (unsigned char)((exp << (FP8_SIGNIFICAND_BITS - 1U)) | mantissa);
+        // rounded-off bits
+        unsigned long long int round =
+            xbits & ((FP8_DP_HALF_ULP << 1ULL) - 1ULL);
+        // round-to-nearest-even adjustment
+        if ((round > FP8_DP_HALF_ULP) ||
+            ((round == FP8_DP_HALF_ULP) && (mantissa & 1U))) {
+            res = (unsigned char)(res + 1U);
+        }
+    } else // Denormal range
+    {
+        unsigned char shift = (unsigned char)(1U - exp);
+        // add implicit leading bit
+        mantissa |= (unsigned char)(1U << (FP8_SIGNIFICAND_BITS - 1U));
+        // additional round-off due to denormalization
+        res = (unsigned char)(mantissa >> shift);
+
+        // rounded-off bits, including implicit leading bit
+        unsigned long long int round =
+            (xbits | ((unsigned long long int)1ULL << (53ULL - 1ULL))) &
+            ((FP8_DP_HALF_ULP << (shift + 1ULL)) - 1ULL);
+        // round-to-nearest-even adjustment
+        if ((round > (FP8_DP_HALF_ULP << shift)) ||
+            ((round == (FP8_DP_HALF_ULP << shift)) && (res & 1U))) {
+            res = (unsigned char)(res + 1U);
+        }
+    }
+
+    res |= sign;
+
+    return (__nv_fp8_storage_t)res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_double2_to_fp8x2(const double2 x, const __nv_saturation_t saturate,
+                          const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_fp8x2_storage_t storage = (__nv_fp8x2_storage_t)__nv_cvt_double_to_fp8(
+        x.y, saturate, fp8_interpretation);
+    storage = (__nv_fp8x2_storage_t)(storage << 8U);
+    storage = (__nv_fp8x2_storage_t)(storage |
+                                     __nv_cvt_double_to_fp8(
+                                         x.x, saturate, fp8_interpretation));
+    return storage;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_float_to_fp8(const float x, const __nv_saturation_t saturate,
+                      const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_fp8_storage_t res = 0U;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    if (saturate == __NV_SATFINITE) {
+        __nv_fp8x2_storage_t storage;
+        if (fp8_interpretation == __NV_E5M2) {
+            asm("{cvt.rn.satfinite.e5m2x2.f32 %0, %2, %1;}\n"
+                : "=h"(storage)
+                : "f"(x), "f"(0.0f));
+        } else {
+            asm("{cvt.rn.satfinite.e4m3x2.f32 %0, %2, %1;}\n"
+                : "=h"(storage)
+                : "f"(x), "f"(0.0f));
+        }
+        res = (__nv_fp8_storage_t)storage;
+    } else
+#endif
+    {
+        unsigned int xbits;
+#if defined(__CUDACC__) || (!defined __cplusplus)
+        (void)memcpy(&xbits, &x, sizeof(x));
+#else
+        (void)std::memcpy(&xbits, &x, sizeof(x));
+#endif
+
+        // isnan
+        if ((xbits & 0x7FFFFFFFU) > 0x7F800000U) {
+            // Canonical NaN
+            xbits = 0x7FFFFFFFU;
+        }
+
+        float fx;
+#if defined(__CUDACC__) || (!defined __cplusplus)
+        (void)memcpy(&fx, &xbits, sizeof(xbits));
+#else
+        (void)std::memcpy(&fx, &xbits, sizeof(xbits));
+#endif
+
+        const double dx = (double)fx;
+        res = __nv_cvt_double_to_fp8(dx, saturate, fp8_interpretation);
+    }
+    return res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_float2_to_fp8x2(const float2 x, const __nv_saturation_t saturate,
+                         const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_fp8x2_storage_t storage;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    if (saturate == __NV_SATFINITE) {
+        if (fp8_interpretation == __NV_E5M2) {
+            asm("{cvt.rn.satfinite.e5m2x2.f32 %0, %2, %1;}\n"
+                : "=h"(storage)
+                : "f"(x.x), "f"(x.y));
+        } else {
+            asm("{cvt.rn.satfinite.e4m3x2.f32 %0, %2, %1;}\n"
+                : "=h"(storage)
+                : "f"(x.x), "f"(x.y));
+        }
+    } else
+#endif
+    {
+        storage = (__nv_fp8x2_storage_t)__nv_cvt_float_to_fp8(
+            x.y, saturate, fp8_interpretation);
+        storage = (__nv_fp8x2_storage_t)(storage << 8U);
+        storage = (__nv_fp8x2_storage_t)(storage | __nv_cvt_float_to_fp8(
+                                                       x.x, saturate,
+                                                       fp8_interpretation));
+    }
+    return storage;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ float
+__internal_halfraw_to_float(const __half_raw x) {
+    float f;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 530)
+    asm("{cvt.f32.f16 %0, %1;}\n" : "=f"(f) : "h"(x.x));
+#else
+    const unsigned int ux = (unsigned int)x.x;
+    unsigned int sign = (ux >> 15U) & 1U;
+    unsigned int exponent = (ux >> 10U) & 0x1fU;
+    unsigned int mantissa = (ux & 0x3ffU) << 13U;
+    if (exponent == 0x1fU) { /* NaN or Inf */
+        /* discard sign of a NaN */
+        sign = ((mantissa != 0U) ? (sign >> 1U) : sign);
+        mantissa = ((mantissa != 0U) ? 0x7fffffU : 0U);
+        exponent = 0xffU;
+    } else if (exponent == 0U) { /* Denorm or Zero */
+        if (mantissa != 0U) {
+            unsigned int msb;
+            exponent = 0x71U;
+            do {
+                msb = (mantissa & 0x400000U);
+                mantissa <<= 1U; /* normalize */
+                --exponent;
+            } while (msb == 0U);
+            mantissa &= 0x7fffffU; /* 1.mantissa is implicit */
+        }
+    } else {
+        exponent += 0x70U;
+    }
+    const unsigned int u = ((sign << 31U) | (exponent << 23U) | mantissa);
+#if defined(__CUDACC__) || (!defined __cplusplus)
+    (void)memcpy(&f, &u, sizeof(u));
+#else
+    (void)std::memcpy(&f, &u, sizeof(u));
+#endif
+#endif /* (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 530) */
+    return f;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ float2
+__internal_halfraw2_to_float2(const __half2_raw x) {
+    __half_raw raw;
+    float2 res;
+    raw.x = x.x;
+    res.x = __internal_halfraw_to_float(raw);
+    raw.x = x.y;
+    res.y = __internal_halfraw_to_float(raw);
+    return res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t
+__nv_cvt_halfraw_to_fp8(const __half_raw x, const __nv_saturation_t saturate,
+                        const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_fp8_storage_t res = 0U;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    if (saturate == __NV_SATFINITE) {
+        unsigned int half2_storage = (unsigned int)(x.x);
+        __nv_fp8x2_storage_t tmp;
+        if (fp8_interpretation == __NV_E5M2) {
+            asm("{cvt.rn.satfinite.e5m2x2.f16x2 %0, %1;}\n"
+                : "=h"(tmp)
+                : "r"(half2_storage));
+        } else {
+            asm("{cvt.rn.satfinite.e4m3x2.f16x2 %0, %1;}\n"
+                : "=h"(tmp)
+                : "r"(half2_storage));
+        }
+        res = (__nv_fp8_storage_t)tmp;
+    } else
+#endif
+    {
+        float fx = __internal_halfraw_to_float(x);
+        res = __nv_cvt_float_to_fp8(fx, saturate, fp8_interpretation);
+    }
+    return res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t __nv_cvt_halfraw2_to_fp8x2(
+    const __half2_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_fp8x2_storage_t tmp;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    if (saturate == __NV_SATFINITE) {
+        unsigned int half2_storage;
+        (void)memcpy(&half2_storage, &x, sizeof(x));
+
+        if (fp8_interpretation == __NV_E5M2) {
+            asm("{cvt.rn.satfinite.e5m2x2.f16x2 %0, %1;}\n"
+                : "=h"(tmp)
+                : "r"(half2_storage));
+        } else {
+            asm("{cvt.rn.satfinite.e4m3x2.f16x2 %0, %1;}\n"
+                : "=h"(tmp)
+                : "r"(half2_storage));
+        }
+    } else
+#endif
+    {
+        __half_raw raw;
+        raw.x = x.x;
+        __nv_fp8_storage_t lo =
+            __nv_cvt_halfraw_to_fp8(raw, saturate, fp8_interpretation);
+        raw.x = x.y;
+        __nv_fp8_storage_t hi =
+            __nv_cvt_halfraw_to_fp8(raw, saturate, fp8_interpretation);
+        tmp = hi;
+        tmp = (__nv_fp8x2_storage_t)(tmp << 8U);
+        tmp = (__nv_fp8x2_storage_t)(tmp | lo);
+    }
+    return tmp;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ float
+__internal_bf16raw_to_float(const __nv_bfloat16_raw x) {
+    const unsigned int ux = ((unsigned int)x.x) << 16U;
+    float fx;
+#if defined(__CUDACC__) || (!defined __cplusplus)
+    (void)memcpy(&fx, &ux, sizeof(ux));
+#else
+    (void)std::memcpy(&fx, &ux, sizeof(ux));
+#endif
+    return fx;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_bfloat16_raw
+__internal_float_to_bf16raw_rz(const float x) {
+    unsigned int ux;
+    __nv_bfloat16_raw r;
+#if defined(__CUDACC__) || (!defined __cplusplus)
+    (void)memcpy(&ux, &x, sizeof(x));
+#else
+    (void)std::memcpy(&ux, &x, sizeof(x));
+#endif
+    r.x = (unsigned short int)(ux >> 16U);
+    return r;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8_storage_t __nv_cvt_bfloat16raw_to_fp8(
+    const __nv_bfloat16_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation) {
+    const float fx = __internal_bf16raw_to_float(x);
+    const __nv_fp8_storage_t res =
+        __nv_cvt_float_to_fp8(fx, saturate, fp8_interpretation);
+    return res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __nv_fp8x2_storage_t
+__nv_cvt_bfloat16raw2_to_fp8x2(
+    const __nv_bfloat162_raw x, const __nv_saturation_t saturate,
+    const __nv_fp8_interpretation_t fp8_interpretation) {
+    __nv_bfloat16_raw raw;
+    raw.x = x.y;
+    __nv_fp8x2_storage_t storage =
+        (__nv_fp8x2_storage_t)__nv_cvt_bfloat16raw_to_fp8(raw, saturate,
+                                                          fp8_interpretation);
+    storage = (__nv_fp8x2_storage_t)(storage << 8U);
+    raw.x = x.x;
+    storage = (__nv_fp8x2_storage_t)(storage |
+                                     __nv_cvt_bfloat16raw_to_fp8(
+                                         raw, saturate, fp8_interpretation));
+    return storage;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __half2_raw
+__nv_cvt_fp8x2_to_halfraw2(const __nv_fp8x2_storage_t x,
+                           const __nv_fp8_interpretation_t fp8_interpretation);
+__CUDA_HOSTDEVICE_FP8_DECL__ __half_raw
+__nv_cvt_fp8_to_halfraw(const __nv_fp8_storage_t x,
+                        const __nv_fp8_interpretation_t fp8_interpretation) {
+    __half_raw res;
+    res.x = 0U;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    res.x =
+        __nv_cvt_fp8x2_to_halfraw2((__nv_fp8x2_storage_t)x, fp8_interpretation)
+            .x;
+#else
+    unsigned short int ur = (unsigned short int)x;
+    ur = (unsigned short int)(ur << 8U);
+
+    if (fp8_interpretation == __NV_E5M2) {
+        if ((ur & 0x7FFFU) > 0x7C00U) {
+            /* If NaN, return canonical NaN */
+            ur = 0x7FFFU;
+        }
+    } else { // __NV_E4M3
+        unsigned short int sign = ur & 0x8000U;
+        unsigned short int exponent =
+            (unsigned short int)(((ur & 0x7800U) >> 1U) + 0x2000U);
+        unsigned short int mantissa = (ur & 0x0700U) >> 1U;
+        unsigned char absx = 0x7FU & (unsigned char)x;
+
+        if (absx == 0x7FU) // NaN
+        {
+            ur = 0x7FFFU; // fp16 canonical NaN, discard sign
+        } else if (exponent == 0x2000U) {
+            // zero or denormal
+            if (mantissa != 0U) {
+                // normalize
+                mantissa = (unsigned short int)(mantissa << 1U);
+                while ((mantissa & 0x0400U) == 0U) {
+                    mantissa = (unsigned short int)(mantissa << 1U);
+                    exponent = (unsigned short int)(exponent - 0x0400U);
+                }
+                // discard implicit leading bit
+                mantissa &= 0x03FFU;
+            } else { // Zero
+                exponent = 0U;
+            }
+
+            ur = (sign | exponent) | mantissa;
+        } else {
+            ur = (sign | exponent) | mantissa;
+        }
+    }
+    res.x = ur;
+#endif
+    return res;
+}
+
+__CUDA_HOSTDEVICE_FP8_DECL__ __half2_raw
+__nv_cvt_fp8x2_to_halfraw2(const __nv_fp8x2_storage_t x,
+                           const __nv_fp8_interpretation_t fp8_interpretation) {
+    __half2_raw res;
+#if (defined __CUDA_ARCH__) && (__CUDA_ARCH__ >= 900)
+    unsigned int half2_storage;
+    if (fp8_interpretation == __NV_E5M2) {
+        asm("{cvt.rn.f16x2.e5m2x2 %0, %1;}\n" : "=r"(half2_storage) : "h"(x));
+    } else {
+        asm("{cvt.rn.f16x2.e4m3x2 %0, %1;}\n" : "=r"(half2_storage) : "h"(x));
+    }
+    (void)memcpy(&res, &half2_storage, sizeof(half2_storage));
+#else
+    res.x =
+        __nv_cvt_fp8_to_halfraw((__nv_fp8_storage_t)x, fp8_interpretation).x;
+    res.y = __nv_cvt_fp8_to_halfraw((__nv_fp8_storage_t)(x >> 8U),
+                                    fp8_interpretation)
+                .x;
+#endif
+    return res;
+}
+
+/* All other definitions in this file are only visible to C++ compilers */
+#if defined(__cplusplus)
+
+/**
+ * \defgroup CUDA_MATH_FP8_E5M2_STRUCT C++ struct for handling fp8 data type of e5m2 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+ * \brief __nv_fp8_e5m2 datatype
+ *
+ * \details This structure implements the datatype for handling
+ * \p fp8 floating-point numbers of \p e5m2 kind:
+ * with 1 sign, 5 exponent, 1 implicit and 2 explicit mantissa bits.
+ *
+ * The structure implements converting constructors and operators.
+ */
+struct __CUDA_ALIGN__(1) __nv_fp8_e5m2 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Storage variable contains the \p fp8 floating-point data.
+     */
+    __nv_fp8_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8_e5m2() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider FP types */
+    /* Note we do avoid constructor init-list because of special host/device
+     * compilation rules */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p __half data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const __half f) {
+        __x = __nv_cvt_halfraw_to_fp8(static_cast<__half_raw>(f),
+                                      __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p __nv_bfloat16 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const __nv_bfloat16 f) {
+        __x = __nv_cvt_bfloat16raw_to_fp8(static_cast<__nv_bfloat16_raw>(f),
+                                          __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p float data type, relies on \p __NV_SATFINITE behavior
+     * for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const float f) {
+        __x = __nv_cvt_float_to_fp8(f, __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p double data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const double f) {
+        __x = __nv_cvt_double_to_fp8(f, __NV_SATFINITE, __NV_E5M2);
+    }
+
+    /* Converts from integral */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p unsigned \p short \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__
+    __nv_fp8_e5m2(const unsigned short int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p unsigned \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const unsigned int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p unsigned \p long \p long \p int data type, relies on
+     * \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__
+    __nv_fp8_e5m2(const unsigned long long int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p short \p int data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const short int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p int data type, relies on \p __NV_SATFINITE behavior
+     * for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Constructor from \p long \p long \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e5m2(const long long int val) {
+        __x = static_cast<__nv_fp8_e5m2>(static_cast<float>(val)).__x;
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening FP converts */
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p __half data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __half() const {
+        return static_cast<__half>(__nv_cvt_fp8_to_halfraw(__x, __NV_E5M2));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p float data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float() const {
+        return __internal_halfraw_to_float(
+            __nv_cvt_fp8_to_halfraw(__x, __NV_E5M2));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p __nv_bfloat16 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __nv_bfloat16() const {
+        return static_cast<__nv_bfloat16>(
+            __internal_float_to_bf16raw_rz(float(*this)));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p double data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator double() const {
+        return static_cast<double>(float(*this));
+    }
+
+    /* Convert to integral */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p unsigned \p char data type.
+     * Clamps negative and too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned char() const {
+        unsigned char i;
+        const float f = float(*this);
+        const unsigned char max_val = 0xFFU;
+        const unsigned char min_val = 0U;
+        const unsigned char bits = (*this).__x;
+        // saturation fixup
+        if ((bits & 0x7FU) > 0x7CU) {
+            // NaN
+            i = 0;
+        } else if (f > static_cast<float>(max_val)) {
+            // saturate maximum
+            i = max_val;
+        } else if (f < static_cast<float>(min_val)) {
+            // saturate minimum
+            i = min_val;
+        } else {
+            // normal value
+            i = static_cast<unsigned char>(f);
+        }
+        return i;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p unsigned \p short \p int data type.
+     * Clamps negative and too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned short int() const {
+        return __half2ushort_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p unsigned \p int data type.
+     * Clamps negative and too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned int() const {
+        return __half2uint_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p unsigned \p long \p long \p int data type.
+     * Clamps negative and too large inputs to the output range.
+     * \p NaN inputs convert to \p 0x8000000000000000ULL.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned long long int() const {
+        return __half2ull_rz(__half(*this));
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p signed \p char data type.
+     * Clamps too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator signed char() const {
+        signed char i;
+        const float f = float(*this);
+        const signed char max_val = (signed char)0x7FU;
+        const signed char min_val = (signed char)0x80U;
+        const unsigned char bits = (*this).__x;
+        // saturation fixup
+        if ((bits & 0x7FU) > 0x7CU) {
+            // NaN
+            i = 0;
+        } else if (f > static_cast<float>(max_val)) {
+            // saturate maximum
+            i = max_val;
+        } else if (f < static_cast<float>(min_val)) {
+            // saturate minimum
+            i = min_val;
+        } else {
+            // normal value
+            i = static_cast<signed char>(f);
+        }
+        return i;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p short \p int data type.
+     * Clamps too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator short int() const {
+        return __half2short_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p int data type.
+     * Clamps too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator int() const {
+        return __half2int_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p long \p long \p int data type.
+     * Clamps too large inputs to the output range.
+     * \p NaN inputs convert to \p 0x8000000000000000LL.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator long long int() const {
+        return __half2ll_rz(__half(*this));
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E5M2_STRUCT
+     * Conversion operator to \p bool data type.
+     * +0 and -0 inputs convert to \p false.
+     * Non-zero inputs convert to \p true.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator bool() const {
+        return (__x & 0x7FU) != 0U;
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+/**
+ * \defgroup CUDA_MATH_FP8X2_E5M2_STRUCT C++ struct for handling vector type of two fp8 values of e5m2 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+ * \brief __nv_fp8x2_e5m2 datatype
+ *
+ * \details This structure implements the datatype for handling two
+ * \p fp8 floating-point numbers of \p e5m2 kind each:
+ * with 1 sign, 5 exponent, 1 implicit and 2 explicit mantissa bits.
+ *
+ * The structure implements converting constructors and operators.
+ */
+struct __CUDA_ALIGN__(2) __nv_fp8x2_e5m2 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Storage variable contains the vector of two \p fp8 floating-point data
+     * values.
+     */
+    __nv_fp8x2_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8x2_e5m2() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e5m2() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider types */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Constructor from \p __half2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e5m2(const __half2 f) {
+        __x = __nv_cvt_halfraw2_to_fp8x2(static_cast<__half2_raw>(f),
+                                         __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Constructor from \p __nv_bfloat162 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e5m2(const __nv_bfloat162 f) {
+        __x = __nv_cvt_bfloat16raw2_to_fp8x2(static_cast<__nv_bfloat162_raw>(f),
+                                             __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Constructor from \p float2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e5m2(const float2 f) {
+        __x = __nv_cvt_float2_to_fp8x2(f, __NV_SATFINITE, __NV_E5M2);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Constructor from \p double2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e5m2(const double2 f) {
+        __x = __nv_cvt_double2_to_fp8x2(f, __NV_SATFINITE, __NV_E5M2);
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening converts */
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Conversion operator to \p __half2 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __half2() const {
+        return static_cast<__half2>(__nv_cvt_fp8x2_to_halfraw2(__x, __NV_E5M2));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E5M2_STRUCT
+     * Conversion operator to \p float2 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float2() const {
+        return __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(__x, __NV_E5M2));
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+__CUDA_HOSTDEVICE_FP8_DECL__ unsigned int
+__internal_pack_u16x2_to_u32(const unsigned short int src_lo,
+                             const unsigned short int src_hi) {
+    unsigned int dst;
+#if (defined __CUDACC__) && (defined __CUDA_ARCH__)
+    asm("{  mov.b32 %0, {%1,%2};}\n" : "=r"(dst) : "h"(src_lo), "h"(src_hi));
+#else
+    dst = (static_cast<unsigned int>(src_hi) << 16U) |
+          static_cast<unsigned int>(src_lo);
+#endif
+    return dst;
+}
+
+/**
+ * \defgroup CUDA_MATH_FP8X4_E5M2_STRUCT C++ struct for handling vector type of four fp8 values of e5m2 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+ * \brief __nv_fp8x4_e5m2 datatype
+ *
+ * \details This structure implements the datatype for handling four
+ * \p fp8 floating-point numbers of \p e5m2 kind each:
+ * with 1 sign, 5 exponent, 1 implicit and 2 explicit mantissa bits.
+ *
+ * The structure implements converting constructors and operators.
+ */
+struct __CUDA_ALIGN__(4) __nv_fp8x4_e5m2 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Storage variable contains the vector of four \p fp8 floating-point data
+     * values.
+     */
+    __nv_fp8x4_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8x4_e5m2() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e5m2() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider types */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Constructor from a pair of \p __half2 data type values,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e5m2(const __half2 flo,
+                                                     const __half2 fhi) {
+        const __nv_fp8x2_storage_t rlo = __nv_cvt_halfraw2_to_fp8x2(
+            static_cast<__half2_raw>(flo), __NV_SATFINITE, __NV_E5M2);
+        const __nv_fp8x2_storage_t rhi = __nv_cvt_halfraw2_to_fp8x2(
+            static_cast<__half2_raw>(fhi), __NV_SATFINITE, __NV_E5M2);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Constructor from a pair of \p __nv_bfloat162 data type values,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e5m2(const __nv_bfloat162 flo,
+                                                     const __nv_bfloat162 fhi) {
+        const __nv_fp8x2_storage_t rlo = __nv_cvt_bfloat16raw2_to_fp8x2(
+            static_cast<__nv_bfloat162_raw>(flo), __NV_SATFINITE, __NV_E5M2);
+        const __nv_fp8x2_storage_t rhi = __nv_cvt_bfloat16raw2_to_fp8x2(
+            static_cast<__nv_bfloat162_raw>(fhi), __NV_SATFINITE, __NV_E5M2);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Constructor from \p float4 vector data type,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e5m2(const float4 f) {
+        const float2 flo = {f.x, f.y};
+        const float2 fhi = {f.z, f.w};
+        const __nv_fp8x2_storage_t rlo =
+            __nv_cvt_float2_to_fp8x2(flo, __NV_SATFINITE, __NV_E5M2);
+        const __nv_fp8x2_storage_t rhi =
+            __nv_cvt_float2_to_fp8x2(fhi, __NV_SATFINITE, __NV_E5M2);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Constructor from \p double4 vector data type,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e5m2(const double4 f) {
+        const double2 flo = {f.x, f.y};
+        const double2 fhi = {f.z, f.w};
+        const __nv_fp8x2_storage_t rlo =
+            __nv_cvt_double2_to_fp8x2(flo, __NV_SATFINITE, __NV_E5M2);
+        const __nv_fp8x2_storage_t rhi =
+            __nv_cvt_double2_to_fp8x2(fhi, __NV_SATFINITE, __NV_E5M2);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening converts */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E5M2_STRUCT
+     * Conversion operator to \p float4 vector data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float4() const {
+        const __nv_fp8x2_storage_t slo = static_cast<__nv_fp8x2_storage_t>(__x);
+        const __nv_fp8x2_storage_t shi =
+            static_cast<__nv_fp8x2_storage_t>(__x >> 16U);
+        float2 rlo = __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(slo, __NV_E5M2));
+        float2 rhi = __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(shi, __NV_E5M2));
+        float4 res = {rlo.x, rlo.y, rhi.x, rhi.y};
+        return res;
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+/**
+ * \defgroup CUDA_MATH_FP8_E4M3_STRUCT C++ struct for handling fp8 data type of e4m3 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+ * \brief __nv_fp8_e4m3 datatype
+ *
+ * \details This structure implements the datatype for storing
+ * \p fp8 floating-point numbers of \p e4m3 kind:
+ * with 1 sign, 4 exponent, 1 implicit and 3 explicit mantissa bits.
+ * The encoding doesn't support Infinity.
+ * NaNs are limited to 0x7F and 0xFF values.
+ *
+ * The structure implements converting constructors and operators.
+ */
+struct __CUDA_ALIGN__(1) __nv_fp8_e4m3 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Storage variable contains the \p fp8 floating-point data.
+     */
+    __nv_fp8_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8_e4m3() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider FP types */
+    /* Note we do avoid constructor init-list because of special host/device
+     * compilation rules */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p __half data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const __half f) {
+        __x = __nv_cvt_halfraw_to_fp8(static_cast<__half_raw>(f),
+                                      __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p __nv_bfloat16 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const __nv_bfloat16 f) {
+        __x = __nv_cvt_bfloat16raw_to_fp8(static_cast<__nv_bfloat16_raw>(f),
+                                          __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p float data type, relies on \p __NV_SATFINITE behavior
+     * for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const float f) {
+        __x = __nv_cvt_float_to_fp8(f, __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p double data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const double f) {
+        __x = __nv_cvt_double_to_fp8(f, __NV_SATFINITE, __NV_E4M3);
+    }
+
+    /* Converts from integral */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p unsigned \p short \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__
+    __nv_fp8_e4m3(const unsigned short int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p unsigned \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const unsigned int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p unsigned \p long \p long \p int data type, relies on
+     * \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__
+    __nv_fp8_e4m3(const unsigned long long int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p short \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const short int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p int data type, relies on \p __NV_SATFINITE behavior
+     * for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Constructor from \p long \p long \p int data type, relies on \p
+     * __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8_e4m3(const long long int val) {
+        __x = static_cast<__nv_fp8_e4m3>(static_cast<float>(val)).__x;
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening FP converts */
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p __half data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __half() const {
+        return static_cast<__half>(__nv_cvt_fp8_to_halfraw(__x, __NV_E4M3));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p float data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float() const {
+        return __internal_halfraw_to_float(
+            __nv_cvt_fp8_to_halfraw(__x, __NV_E4M3));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p __nv_bfloat16 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __nv_bfloat16() const {
+        return static_cast<__nv_bfloat16>(
+            __internal_float_to_bf16raw_rz(float(*this)));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p double data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator double() const {
+        return static_cast<double>(float(*this));
+    }
+
+    /* Convert to integral */
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p unsigned \p char data type.
+     * Clamps negative and too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned char() const {
+        unsigned char i;
+        const float f = float(*this);
+        const unsigned char max_val = 0xFFU;
+        const unsigned char min_val = 0U;
+        const unsigned char bits = (*this).__x;
+        // saturation fixup
+        if ((bits & 0x7FU) == 0x7FU) {
+            // NaN
+            i = 0;
+        } else if (f > static_cast<float>(max_val)) {
+            // saturate maximum
+            i = max_val;
+        } else if (f < static_cast<float>(min_val)) {
+            // saturate minimum
+            i = min_val;
+        } else {
+            // normal value
+            i = static_cast<unsigned char>(f);
+        }
+        return i;
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p unsigned \p short \p int data type.
+     * Clamps negative inputs to zero.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned short int() const {
+        return __half2ushort_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p unsigned \p int data type.
+     * Clamps negative inputs to zero.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned int() const {
+        return __half2uint_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p unsigned \p long \p long \p int data type.
+     * Clamps negative inputs to zero.
+     * \p NaN inputs convert to \p 0x8000000000000000ULL.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator unsigned long long int() const {
+        return __half2ull_rz(__half(*this));
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p signed \p char data type.
+     * Clamps too large inputs to the output range.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator signed char() const {
+        signed char i;
+        const float f = float(*this);
+        const signed char max_val = (signed char)0x7FU;
+        const signed char min_val = (signed char)0x80U;
+        const unsigned char bits = (*this).__x;
+        // saturation fixup
+        if ((bits & 0x7FU) == 0x7FU) {
+            // NaN
+            i = 0;
+        } else if (f > static_cast<float>(max_val)) {
+            // saturate maximum
+            i = max_val;
+        } else if (f < static_cast<float>(min_val)) {
+            // saturate minimum
+            i = min_val;
+        } else {
+            // normal value
+            i = static_cast<signed char>(f);
+        }
+        return i;
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p short \p int data type.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator short int() const {
+        return __half2short_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p int data type.
+     * \p NaN inputs convert to \p zero.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator int() const {
+        return __half2int_rz(__half(*this));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p long \p long \p int data type.
+     * \p NaN inputs convert to \p 0x8000000000000000LL.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator long long int() const {
+        return __half2ll_rz(__half(*this));
+    }
+
+    /**
+     * \ingroup CUDA_MATH_FP8_E4M3_STRUCT
+     * Conversion operator to \p bool data type.
+     * +0 and -0 inputs convert to \p false.
+     * Non-zero inputs convert to \p true.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator bool() const {
+        return (__x & 0x7FU) != 0U;
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+/**
+ * \defgroup CUDA_MATH_FP8X2_E4M3_STRUCT C++ struct for handling vector type of two fp8 values of e4m3 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+ * \brief __nv_fp8x2_e4m3 datatype
+ *
+ * \details This structure implements the datatype for storage
+ * and operations on the vector of two \p fp8 values of \p e4m3 kind each:
+ * with 1 sign, 4 exponent, 1 implicit and 3 explicit mantissa bits.
+ * The encoding doesn't support Infinity.
+ * NaNs are limited to 0x7F and 0xFF values.
+ */
+struct __CUDA_ALIGN__(2) __nv_fp8x2_e4m3 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Storage variable contains the vector of two \p fp8 floating-point data
+     * values.
+     */
+    __nv_fp8x2_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8x2_e4m3() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e4m3() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider types */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Constructor from \p __half2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e4m3(const __half2 f) {
+        __x = __nv_cvt_halfraw2_to_fp8x2(static_cast<__half2_raw>(f),
+                                         __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Constructor from \p __nv_bfloat162 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e4m3(const __nv_bfloat162 f) {
+        __x = __nv_cvt_bfloat16raw2_to_fp8x2(static_cast<__nv_bfloat162_raw>(f),
+                                             __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Constructor from \p float2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e4m3(const float2 f) {
+        __x = __nv_cvt_float2_to_fp8x2(f, __NV_SATFINITE, __NV_E4M3);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Constructor from \p double2 data type, relies on \p __NV_SATFINITE
+     * behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x2_e4m3(const double2 f) {
+        __x = __nv_cvt_double2_to_fp8x2(f, __NV_SATFINITE, __NV_E4M3);
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening converts */
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Conversion operator to \p __half2 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator __half2() const {
+        return static_cast<__half2>(__nv_cvt_fp8x2_to_halfraw2(__x, __NV_E4M3));
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X2_E4M3_STRUCT
+     * Conversion operator to \p float2 data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float2() const {
+        return __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(__x, __NV_E4M3));
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+/**
+ * \defgroup CUDA_MATH_FP8X4_E4M3_STRUCT C++ struct for handling vector type of four fp8 values of e4m3 kind.
+ * \ingroup CUDA_MATH_INTRINSIC_FP8
+ */
+
+/**
+ * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+ * \brief __nv_fp8x4_e4m3 datatype
+ *
+ * \details This structure implements the datatype for storage
+ * and operations on the vector of four \p fp8 values of \p e4m3 kind each:
+ * with 1 sign, 4 exponent, 1 implicit and 3 explicit mantissa bits.
+ * The encoding doesn't support Infinity.
+ * NaNs are limited to 0x7F and 0xFF values.
+ */
+struct __CUDA_ALIGN__(4) __nv_fp8x4_e4m3 {
+  public:
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Storage variable contains the vector of four \p fp8 floating-point data
+     * values.
+     */
+    __nv_fp8x4_storage_t __x;
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Constructor by default.
+     */
+#if defined(__CPP_VERSION_AT_LEAST_11_FP8)
+    __nv_fp8x4_e4m3() = default;
+#else
+    __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e4m3() {}
+#endif /* defined(__CPP_VERSION_AT_LEAST_11_FP8) */
+
+#if !defined(__CUDA_NO_FP8_CONVERSIONS__)
+
+    /* Construct from wider types */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Constructor from a pair of \p __half2 data type values,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e4m3(const __half2 flo,
+                                                     const __half2 fhi) {
+        const __nv_fp8x2_storage_t rlo = __nv_cvt_halfraw2_to_fp8x2(
+            static_cast<__half2_raw>(flo), __NV_SATFINITE, __NV_E4M3);
+        const __nv_fp8x2_storage_t rhi = __nv_cvt_halfraw2_to_fp8x2(
+            static_cast<__half2_raw>(fhi), __NV_SATFINITE, __NV_E4M3);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Constructor from a pair of \p __nv_bfloat162 data type values,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e4m3(const __nv_bfloat162 flo,
+                                                     const __nv_bfloat162 fhi) {
+        const __nv_fp8x2_storage_t rlo = __nv_cvt_bfloat16raw2_to_fp8x2(
+            static_cast<__nv_bfloat162_raw>(flo), __NV_SATFINITE, __NV_E4M3);
+        const __nv_fp8x2_storage_t rhi = __nv_cvt_bfloat16raw2_to_fp8x2(
+            static_cast<__nv_bfloat162_raw>(fhi), __NV_SATFINITE, __NV_E4M3);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Constructor from \p float4 vector data type,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e4m3(const float4 f) {
+        const float2 flo = {f.x, f.y};
+        const float2 fhi = {f.z, f.w};
+        const __nv_fp8x2_storage_t rlo =
+            __nv_cvt_float2_to_fp8x2(flo, __NV_SATFINITE, __NV_E4M3);
+        const __nv_fp8x2_storage_t rhi =
+            __nv_cvt_float2_to_fp8x2(fhi, __NV_SATFINITE, __NV_E4M3);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Constructor from \p double4 vector data type,
+     * relies on \p __NV_SATFINITE behavior for out-of-range values.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ __nv_fp8x4_e4m3(const double4 f) {
+        const double2 flo = {f.x, f.y};
+        const double2 fhi = {f.z, f.w};
+        const __nv_fp8x2_storage_t rlo =
+            __nv_cvt_double2_to_fp8x2(flo, __NV_SATFINITE, __NV_E4M3);
+        const __nv_fp8x2_storage_t rhi =
+            __nv_cvt_double2_to_fp8x2(fhi, __NV_SATFINITE, __NV_E4M3);
+        __x = __internal_pack_u16x2_to_u32(rlo, rhi);
+    }
+
+#if !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__)
+    /* Widening converts */
+
+    /**
+     * \ingroup CUDA_MATH_FP8X4_E4M3_STRUCT
+     * Conversion operator to \p float4 vector data type.
+     */
+    explicit __CUDA_HOSTDEVICE_FP8__ operator float4() const {
+        const __nv_fp8x2_storage_t slo = static_cast<__nv_fp8x2_storage_t>(__x);
+        const __nv_fp8x2_storage_t shi =
+            static_cast<__nv_fp8x2_storage_t>(__x >> 16U);
+        float2 rlo = __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(slo, __NV_E4M3));
+        float2 rhi = __internal_halfraw2_to_float2(
+            __nv_cvt_fp8x2_to_halfraw2(shi, __NV_E4M3));
+        float4 res = {rlo.x, rlo.y, rhi.x, rhi.y};
+        return res;
+    }
+#endif /* !defined(__CUDA_NO_FP8_CONVERSION_OPERATORS__) */
+#endif /* !defined(__CUDA_NO_FP8_CONVERSIONS__) */
+};
+
+#endif /* defined(__cplusplus) */
+
+#endif /* end of include guard: __CUDA_FP8_HPP__ */
diff --git a/ext/cudart/include/cuda_gl_interop.h b/ext/cudart/include/cuda_gl_interop.h
new file mode 100644
index 00000000..68f6ac94
--- /dev/null
+++ b/ext/cudart/include/cuda_gl_interop.h
@@ -0,0 +1,508 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_GL_INTEROP_H__)
+#define __CUDA_GL_INTEROP_H__
+
+#include "cuda_runtime_api.h"
+
+#if defined(__APPLE__)
+
+#include <OpenGL/gl.h>
+
+#else /* __APPLE__ */
+
+#if defined(__arm__) || defined(__aarch64__)
+#ifndef GL_VERSION
+#error Please include the appropriate gl headers before including cuda_gl_interop.h
+#endif
+#else
+#include <GL/gl.h>
+#endif
+
+#endif /* __APPLE__ */
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \addtogroup CUDART_OPENGL OpenGL Interoperability
+ * This section describes the OpenGL interoperability functions of the CUDA
+ * runtime application programming interface. Note that mapping of OpenGL
+ * resources is performed with the graphics API agnostic, resource mapping 
+ * interface described in \ref CUDART_INTEROP "Graphics Interopability".
+ *
+ * @{
+ */
+
+/**
+ * CUDA devices corresponding to the current OpenGL context
+ */
+enum cudaGLDeviceList
+{
+  cudaGLDeviceListAll           = 1, /**< The CUDA devices for all GPUs used by the current OpenGL context */
+  cudaGLDeviceListCurrentFrame  = 2, /**< The CUDA devices for the GPUs used by the current OpenGL context in its currently rendering frame */
+  cudaGLDeviceListNextFrame     = 3  /**< The CUDA devices for the GPUs to be used by the current OpenGL context in the next frame  */
+};
+
+/**
+ * \brief Gets the CUDA devices associated with the current OpenGL context
+ *
+ * Returns in \p *pCudaDeviceCount the number of CUDA-compatible devices 
+ * corresponding to the current OpenGL context. Also returns in \p *pCudaDevices 
+ * at most \p cudaDeviceCount of the CUDA-compatible devices corresponding to 
+ * the current OpenGL context. If any of the GPUs being used by the current OpenGL
+ * context are not CUDA capable then the call will return ::cudaErrorNoDevice.
+ *
+ * \param pCudaDeviceCount - Returned number of CUDA devices corresponding to the 
+ *                           current OpenGL context
+ * \param pCudaDevices     - Returned CUDA devices corresponding to the current 
+ *                           OpenGL context
+ * \param cudaDeviceCount  - The size of the output device array \p pCudaDevices
+ * \param deviceList       - The set of devices to return.  This set may be
+ *                           ::cudaGLDeviceListAll for all devices, 
+ *                           ::cudaGLDeviceListCurrentFrame for the devices used to
+ *                           render the current frame (in SLI), or
+ *                           ::cudaGLDeviceListNextFrame for the devices used to
+ *                           render the next frame (in SLI).
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorInvalidGraphicsContext,
+ * ::cudaErrorUnknown
+ *
+ * \note This function is not supported on Mac OS X.
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray, 
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGLGetDevices 
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGLGetDevices(unsigned int *pCudaDeviceCount, int *pCudaDevices, unsigned int cudaDeviceCount, enum cudaGLDeviceList deviceList);
+
+/**
+ * \brief Register an OpenGL texture or renderbuffer object
+ *
+ * Registers the texture or renderbuffer object specified by \p image for access by CUDA.
+ * A handle to the registered object is returned as \p resource.
+ *
+ * \p target must match the type of the object, and must be one of ::GL_TEXTURE_2D, 
+ * ::GL_TEXTURE_RECTANGLE, ::GL_TEXTURE_CUBE_MAP, ::GL_TEXTURE_3D, ::GL_TEXTURE_2D_ARRAY, 
+ * or ::GL_RENDERBUFFER.
+ *
+ * The register flags \p flags specify the intended usage, as follows: 
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA. This is the default value.
+ * - ::cudaGraphicsRegisterFlagsReadOnly: Specifies that CUDA
+ *   will not write to this resource.
+ * - ::cudaGraphicsRegisterFlagsWriteDiscard: Specifies that
+ *   CUDA will not read from this resource and will write over the
+ *   entire contents of the resource, so none of the data previously
+ *   stored in the resource will be preserved.
+ * - ::cudaGraphicsRegisterFlagsSurfaceLoadStore: Specifies that CUDA will
+ *   bind this resource to a surface reference.
+ * - ::cudaGraphicsRegisterFlagsTextureGather: Specifies that CUDA will perform
+ *   texture gather operations on this resource.
+ *
+ * The following image formats are supported. For brevity's sake, the list is abbreviated.
+ * For ex., {GL_R, GL_RG} X {8, 16} would expand to the following 4 formats 
+ * {GL_R8, GL_R16, GL_RG8, GL_RG16} :
+ * - GL_RED, GL_RG, GL_RGBA, GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY
+ * - {GL_R, GL_RG, GL_RGBA} X {8, 16, 16F, 32F, 8UI, 16UI, 32UI, 8I, 16I, 32I}
+ * - {GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY} X
+ * {8, 16, 16F_ARB, 32F_ARB, 8UI_EXT, 16UI_EXT, 32UI_EXT, 8I_EXT, 16I_EXT, 32I_EXT}
+ *
+ * The following image classes are currently disallowed:
+ * - Textures with borders
+ * - Multisampled renderbuffers
+ *
+ * \param resource - Pointer to the returned object handle
+ * \param image    - name of texture or renderbuffer object to be registered
+ * \param target   - Identifies the type of object specified by \p image 
+ * \param flags    - Register flags
+ * 
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources, 
+ * ::cudaGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsGLRegisterImage
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsGLRegisterImage(struct cudaGraphicsResource **resource, GLuint image, GLenum target, unsigned int flags);
+
+/**
+ * \brief Registers an OpenGL buffer object
+ *
+ * Registers the buffer object specified by \p buffer for access by
+ * CUDA.  A handle to the registered object is returned as \p
+ * resource.  The register flags \p flags specify the intended usage,
+ * as follows:
+ *
+ * - ::cudaGraphicsRegisterFlagsNone: Specifies no hints about how this
+ *   resource will be used. It is therefore assumed that this resource will be
+ *   read from and written to by CUDA. This is the default value.
+ * - ::cudaGraphicsRegisterFlagsReadOnly: Specifies that CUDA
+ *   will not write to this resource.
+ * - ::cudaGraphicsRegisterFlagsWriteDiscard: Specifies that
+ *   CUDA will not read from this resource and will write over the
+ *   entire contents of the resource, so none of the data previously
+ *   stored in the resource will be preserved.
+ *
+ * \param resource - Pointer to the returned object handle
+ * \param buffer   - name of buffer object to be registered
+ * \param flags    - Register flags
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa 
+ * ::cudaGraphicsUnregisterResource,
+ * ::cudaGraphicsMapResources,
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsGLRegisterBuffer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsGLRegisterBuffer(struct cudaGraphicsResource **resource, GLuint buffer, unsigned int flags);
+
+#ifdef _WIN32
+#ifndef WGL_NV_gpu_affinity
+typedef void* HGPUNV;
+#endif
+
+/**
+ * \brief Gets the CUDA device associated with hGpu
+ *
+ * Returns the CUDA device associated with a hGpu, if applicable.
+ *
+ * \param device - Returns the device associated with hGpu, or -1 if hGpu is
+ * not a compute device.
+ * \param hGpu   - Handle to a GPU, as queried via WGL_NV_gpu_affinity
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ *
+ * \sa
+ * ::WGL_NV_gpu_affinity,
+ * ::cuWGLGetDevice
+ */
+extern __host__ cudaError_t CUDARTAPI cudaWGLGetDevice(int *device, HGPUNV hGpu);
+#endif
+
+/** @} */ /* END CUDART_OPENGL */
+
+/**
+ * \addtogroup CUDART_OPENGL_DEPRECATED OpenGL Interoperability [DEPRECATED]
+ * This section describes deprecated OpenGL interoperability functionality.
+ *
+ * @{
+ */
+
+/**
+ * CUDA GL Map Flags
+ */
+enum cudaGLMapFlags
+{
+  cudaGLMapFlagsNone         = 0,  /**< Default; Assume resource can be read/written */
+  cudaGLMapFlagsReadOnly     = 1,  /**< CUDA kernels will not write to this resource */
+  cudaGLMapFlagsWriteDiscard = 2   /**< CUDA kernels will only write to and will not read from this resource */
+};
+
+/**
+ * \brief Sets a CUDA device to use OpenGL interoperability
+ *
+ * \deprecated This function is deprecated as of CUDA 5.0. 
+ *
+ * This function is deprecated and should no longer be used.  It is
+ * no longer necessary to associate a CUDA device with an OpenGL
+ * context in order to achieve maximum interoperability performance.
+ *
+ * \param device - Device to use for OpenGL interoperability
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorSetOnActiveProcess
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsGLRegisterBuffer, ::cudaGraphicsGLRegisterImage
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLSetGLDevice(int device);
+
+/**
+ * \brief Registers a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Registers the buffer object of ID \p bufObj for access by
+ * CUDA. This function must be called before CUDA can map the buffer
+ * object.  The OpenGL context used to create the buffer, or another
+ * context from the same share group, must be bound to the current
+ * thread when this is called.
+ *
+ * \param bufObj - Buffer object ID to register
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInitializationError
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsGLRegisterBuffer
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLRegisterBufferObject(GLuint bufObj);
+
+/**
+ * \brief Maps a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Maps the buffer object of ID \p bufObj into the address space of
+ * CUDA and returns in \p *devPtr the base pointer of the resulting
+ * mapping.  The buffer must have previously been registered by
+ * calling ::cudaGLRegisterBufferObject().  While a buffer is mapped
+ * by CUDA, any OpenGL operation which references the buffer will
+ * result in undefined behavior.  The OpenGL context used to create
+ * the buffer, or another context from the same share group, must be
+ * bound to the current thread when this is called.
+ *
+ * All streams in the current thread are synchronized with the current
+ * GL context.
+ *
+ * \param devPtr - Returned device pointer to CUDA object
+ * \param bufObj - Buffer object ID to map
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMapBufferObjectFailed
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsMapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLMapBufferObject(void **devPtr, GLuint bufObj);
+
+/**
+ * \brief Unmaps a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Unmaps the buffer object of ID \p bufObj for access by CUDA.  When
+ * a buffer is unmapped, the base address returned by
+ * ::cudaGLMapBufferObject() is invalid and subsequent references to
+ * the address result in undefined behavior.  The OpenGL context used
+ * to create the buffer, or another context from the same share group,
+ * must be bound to the current thread when this is called.
+ *
+ * All streams in the current thread are synchronized with the current
+ * GL context.
+ *
+ * \param bufObj - Buffer object to unmap
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnmapBufferObjectFailed
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsUnmapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLUnmapBufferObject(GLuint bufObj);
+
+/**
+ * \brief Unregisters a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Unregisters the buffer object of ID \p bufObj for access by CUDA
+ * and releases any CUDA resources associated with the buffer.  Once a
+ * buffer is unregistered, it may no longer be mapped by CUDA.  The GL
+ * context used to create the buffer, or another context from the
+ * same share group, must be bound to the current thread when this is
+ * called.
+ *
+ * \param bufObj - Buffer object to unregister
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsUnregisterResource
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLUnregisterBufferObject(GLuint bufObj);
+
+/**
+ * \brief Set usage flags for mapping an OpenGL buffer
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Set flags for mapping the OpenGL buffer \p bufObj
+ *
+ * Changes to flags will take effect the next time \p bufObj is mapped.
+ * The \p flags argument may be any of the following:
+ *
+ * - ::cudaGLMapFlagsNone: Specifies no hints about how this buffer will
+ * be used. It is therefore assumed that this buffer will be read from and
+ * written to by CUDA kernels. This is the default value.
+ * - ::cudaGLMapFlagsReadOnly: Specifies that CUDA kernels which access this
+ * buffer will not write to the buffer.
+ * - ::cudaGLMapFlagsWriteDiscard: Specifies that CUDA kernels which access
+ * this buffer will not read from the buffer and will write over the
+ * entire contents of the buffer, so none of the data previously stored in
+ * the buffer will be preserved.
+ *
+ * If \p bufObj has not been registered for use with CUDA, then
+ * ::cudaErrorInvalidResourceHandle is returned. If \p bufObj is presently
+ * mapped for access by CUDA, then ::cudaErrorUnknown is returned.
+ *
+ * \param bufObj    - Registered buffer object to set flags for
+ * \param flags     - Parameters for buffer mapping
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsResourceSetMapFlags
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLSetBufferObjectMapFlags(GLuint bufObj, unsigned int flags); 
+
+/**
+ * \brief Maps a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Maps the buffer object of ID \p bufObj into the address space of
+ * CUDA and returns in \p *devPtr the base pointer of the resulting
+ * mapping.  The buffer must have previously been registered by
+ * calling ::cudaGLRegisterBufferObject().  While a buffer is mapped
+ * by CUDA, any OpenGL operation which references the buffer will
+ * result in undefined behavior.  The OpenGL context used to create
+ * the buffer, or another context from the same share group, must be
+ * bound to the current thread when this is called.
+ *
+ * Stream /p stream is synchronized with the current GL context.
+ *
+ * \param devPtr - Returned device pointer to CUDA object
+ * \param bufObj - Buffer object ID to map
+ * \param stream - Stream to synchronize
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMapBufferObjectFailed
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsMapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLMapBufferObjectAsync(void **devPtr, GLuint bufObj, cudaStream_t stream);
+
+/**
+ * \brief Unmaps a buffer object for access by CUDA
+ *
+ * \deprecated This function is deprecated as of CUDA 3.0. 
+ *
+ * Unmaps the buffer object of ID \p bufObj for access by CUDA.  When
+ * a buffer is unmapped, the base address returned by
+ * ::cudaGLMapBufferObject() is invalid and subsequent references to
+ * the address result in undefined behavior.  The OpenGL context used
+ * to create the buffer, or another context from the same share group,
+ * must be bound to the current thread when this is called.
+ *
+ * Stream /p stream is synchronized with the current GL context.
+ *
+ * \param bufObj - Buffer object to unmap
+ * \param stream - Stream to synchronize
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnmapBufferObjectFailed
+ * \notefnerr
+ *
+ * \sa ::cudaGraphicsUnmapResources
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGLUnmapBufferObjectAsync(GLuint bufObj, cudaStream_t stream);
+
+/** @} */ /* END CUDART_OPENGL_DEPRECATED */
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#undef __CUDA_DEPRECATED
+
+#endif /* __CUDA_GL_INTEROP_H__ */
+
diff --git a/ext/cudart/include/cuda_occupancy.h b/ext/cudart/include/cuda_occupancy.h
new file mode 100644
index 00000000..ffe55709
--- /dev/null
+++ b/ext/cudart/include/cuda_occupancy.h
@@ -0,0 +1,1958 @@
+/*
+ * Copyright 1993-2017 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+/**
+ * CUDA Occupancy Calculator
+ *
+ * NAME
+ *
+ *   cudaOccMaxActiveBlocksPerMultiprocessor,
+ *   cudaOccMaxPotentialOccupancyBlockSize,
+ *   cudaOccMaxPotentialOccupancyBlockSizeVariableSMem
+ *   cudaOccAvailableDynamicSMemPerBlock
+ *
+ * DESCRIPTION
+ *
+ *   The CUDA occupancy calculator provides a standalone, programmatical
+ *   interface to compute the occupancy of a function on a device. It can also
+ *   provide occupancy-oriented launch configuration suggestions.
+ *
+ *   The function and device are defined by the user through
+ *   cudaOccFuncAttributes, cudaOccDeviceProp, and cudaOccDeviceState
+ *   structures. All APIs require all 3 of them.
+ *
+ *   See the structure definition for more details about the device / function
+ *   descriptors.
+ *
+ *   See each API's prototype for API usage.
+ *
+ * COMPATIBILITY
+ *
+ *   The occupancy calculator will be updated on each major CUDA toolkit
+ *   release. It does not provide forward compatibility, i.e. new hardwares
+ *   released after this implementation's release will not be supported.
+ *
+ * NOTE
+ *
+ *   If there is access to CUDA runtime, and the sole intent is to calculate
+ *   occupancy related values on one of the accessible CUDA devices, using CUDA
+ *   runtime's occupancy calculation APIs is recommended.
+ *
+ */
+
+#ifndef __cuda_occupancy_h__
+#define __cuda_occupancy_h__
+
+#include <stddef.h>
+#include <limits.h>
+#include <string.h>
+
+
+// __OCC_INLINE will be undefined at the end of this header
+//
+#ifdef __CUDACC__
+#define __OCC_INLINE inline __host__ __device__
+#elif defined _MSC_VER
+#define __OCC_INLINE __inline
+#else // GNUCC assumed
+#define __OCC_INLINE inline
+#endif
+
+enum cudaOccError_enum {
+    CUDA_OCC_SUCCESS              = 0,  // no error encountered
+    CUDA_OCC_ERROR_INVALID_INPUT  = 1,  // input parameter is invalid
+    CUDA_OCC_ERROR_UNKNOWN_DEVICE = 2,  // requested device is not supported in
+                                        // current implementation or device is
+                                        // invalid
+};
+typedef enum cudaOccError_enum       cudaOccError;
+
+typedef struct cudaOccResult         cudaOccResult;
+typedef struct cudaOccDeviceProp     cudaOccDeviceProp;
+typedef struct cudaOccFuncAttributes cudaOccFuncAttributes;
+typedef struct cudaOccDeviceState    cudaOccDeviceState;
+
+/**
+ * The CUDA occupancy calculator computes the occupancy of the function
+ * described by attributes with the given block size (blockSize), static device
+ * properties (properties), dynamic device states (states) and per-block dynamic
+ * shared memory allocation (dynamicSMemSize) in bytes, and output it through
+ * result along with other useful information. The occupancy is computed in
+ * terms of the maximum number of active blocks per multiprocessor. The user can
+ * then convert it to other metrics, such as number of active warps.
+ *
+ * RETURN VALUE
+ *
+ * The occupancy and related information is returned through result.
+ *
+ * If result->activeBlocksPerMultiprocessor is 0, then the given parameter
+ * combination cannot run on the device.
+ *
+ * ERRORS
+ *
+ *     CUDA_OCC_ERROR_INVALID_INPUT   input parameter is invalid.
+ *     CUDA_OCC_ERROR_UNKNOWN_DEVICE  requested device is not supported in
+ *     current implementation or device is invalid
+ */
+static __OCC_INLINE
+cudaOccError cudaOccMaxActiveBlocksPerMultiprocessor(
+    cudaOccResult               *result,           // out
+    const cudaOccDeviceProp     *properties,       // in
+    const cudaOccFuncAttributes *attributes,       // in
+    const cudaOccDeviceState    *state,            // in
+    int                          blockSize,        // in
+    size_t                       dynamicSmemSize); // in
+
+/**
+ * The CUDA launch configurator C API suggests a grid / block size pair (in
+ * minGridSize and blockSize) that achieves the best potential occupancy
+ * (i.e. maximum number of active warps with the smallest number of blocks) for
+ * the given function described by attributes, on a device described by
+ * properties with settings in state.
+ *
+ * If per-block dynamic shared memory allocation is not needed, the user should
+ * leave both blockSizeToDynamicSMemSize and dynamicSMemSize as 0.
+ *
+ * If per-block dynamic shared memory allocation is needed, then if the dynamic
+ * shared memory size is constant regardless of block size, the size should be
+ * passed through dynamicSMemSize, and blockSizeToDynamicSMemSize should be
+ * NULL.
+ *
+ * Otherwise, if the per-block dynamic shared memory size varies with different
+ * block sizes, the user needs to provide a pointer to an unary function through
+ * blockSizeToDynamicSMemSize that computes the dynamic shared memory needed by
+ * a block of the function for any given block size. dynamicSMemSize is
+ * ignored. An example signature is:
+ *
+ *    // Take block size, returns dynamic shared memory needed
+ *    size_t blockToSmem(int blockSize);
+ *
+ * RETURN VALUE
+ *
+ * The suggested block size and the minimum number of blocks needed to achieve
+ * the maximum occupancy are returned through blockSize and minGridSize.
+ *
+ * If *blockSize is 0, then the given combination cannot run on the device.
+ *
+ * ERRORS
+ *
+ *     CUDA_OCC_ERROR_INVALID_INPUT   input parameter is invalid.
+ *     CUDA_OCC_ERROR_UNKNOWN_DEVICE  requested device is not supported in
+ *     current implementation or device is invalid
+ *
+ */
+static __OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSize(
+    int                         *minGridSize,      // out
+    int                         *blockSize,        // out
+    const cudaOccDeviceProp     *properties,       // in
+    const cudaOccFuncAttributes *attributes,       // in
+    const cudaOccDeviceState    *state,            // in
+    size_t                     (*blockSizeToDynamicSMemSize)(int), // in
+    size_t                       dynamicSMemSize); // in
+
+/**
+ * The CUDA launch configurator C++ API suggests a grid / block size pair (in
+ * minGridSize and blockSize) that achieves the best potential occupancy
+ * (i.e. the maximum number of active warps with the smallest number of blocks)
+ * for the given function described by attributes, on a device described by
+ * properties with settings in state.
+ *
+ * If per-block dynamic shared memory allocation is 0 or constant regardless of
+ * block size, the user can use cudaOccMaxPotentialOccupancyBlockSize to
+ * configure the launch. A constant dynamic shared memory allocation size in
+ * bytes can be passed through dynamicSMemSize.
+ *
+ * Otherwise, if the per-block dynamic shared memory size varies with different
+ * block sizes, the user needs to use
+ * cudaOccMaxPotentialOccupancyBlockSizeVariableSmem instead, and provide a
+ * functor / pointer to an unary function (blockSizeToDynamicSMemSize) that
+ * computes the dynamic shared memory needed by func for any given block
+ * size. An example signature is:
+ *
+ *  // Take block size, returns per-block dynamic shared memory needed
+ *  size_t blockToSmem(int blockSize);
+ *
+ * RETURN VALUE
+ *
+ * The suggested block size and the minimum number of blocks needed to achieve
+ * the maximum occupancy are returned through blockSize and minGridSize.
+ *
+ * If *blockSize is 0, then the given combination cannot run on the device.
+ *
+ * ERRORS
+ *
+ *     CUDA_OCC_ERROR_INVALID_INPUT   input parameter is invalid.
+ *     CUDA_OCC_ERROR_UNKNOWN_DEVICE  requested device is not supported in
+ *     current implementation or device is invalid
+ *
+ */
+
+#if defined(__cplusplus)
+namespace {
+
+__OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSize(
+    int                         *minGridSize,          // out
+    int                         *blockSize,            // out
+    const cudaOccDeviceProp     *properties,           // in
+    const cudaOccFuncAttributes *attributes,           // in
+    const cudaOccDeviceState    *state,                // in
+    size_t                       dynamicSMemSize = 0); // in
+
+template <typename UnaryFunction>
+__OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSizeVariableSMem(
+    int                         *minGridSize,          // out
+    int                         *blockSize,            // out
+    const cudaOccDeviceProp     *properties,           // in
+    const cudaOccFuncAttributes *attributes,           // in
+    const cudaOccDeviceState    *state,                // in
+    UnaryFunction                blockSizeToDynamicSMemSize); // in
+
+} // namespace anonymous
+#endif // defined(__cplusplus)
+
+/**
+ *
+ * The CUDA dynamic shared memory calculator computes the maximum size of 
+ * per-block dynamic shared memory if we want to place numBlocks blocks
+ * on an SM.
+ *
+ * RETURN VALUE
+ *
+ * Returns in *dynamicSmemSize the maximum size of dynamic shared memory to allow 
+ * numBlocks blocks per SM.
+ *
+ * ERRORS
+ *
+ *     CUDA_OCC_ERROR_INVALID_INPUT   input parameter is invalid.
+ *     CUDA_OCC_ERROR_UNKNOWN_DEVICE  requested device is not supported in
+ *     current implementation or device is invalid
+ *
+ */
+static __OCC_INLINE
+cudaOccError cudaOccAvailableDynamicSMemPerBlock(
+    size_t                      *dynamicSmemSize,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    int                         numBlocks,
+    int                         blockSize);
+
+/**
+ * Data structures
+ *
+ * These structures are subject to change for future architecture and CUDA
+ * releases. C users should initialize the structure as {0}.
+ *
+ */
+
+/**
+ * Device descriptor
+ *
+ * This structure describes a device.
+ */
+struct cudaOccDeviceProp {
+    int    computeMajor;                // Compute capability major version
+    int    computeMinor;                // Compute capability minor
+                                        // version. None supported minor version
+                                        // may cause error
+    int    maxThreadsPerBlock;          // Maximum number of threads per block
+    int    maxThreadsPerMultiprocessor; // Maximum number of threads per SM
+                                        // i.e. (Max. number of warps) x (warp
+                                        // size)
+    int    regsPerBlock;                // Maximum number of registers per block
+    int    regsPerMultiprocessor;       // Maximum number of registers per SM
+    int    warpSize;                    // Warp size
+    size_t sharedMemPerBlock;           // Maximum shared memory size per block
+    size_t sharedMemPerMultiprocessor;  // Maximum shared memory size per SM
+    int    numSms;                      // Number of SMs available
+    size_t sharedMemPerBlockOptin;      // Maximum optin shared memory size per block
+    size_t reservedSharedMemPerBlock;   // Shared memory per block reserved by driver
+
+#ifdef __cplusplus
+    // This structure can be converted from a cudaDeviceProp structure for users
+    // that use this header in their CUDA applications.
+    //
+    // If the application have access to the CUDA Runtime API, the application
+    // can obtain the device properties of a CUDA device through
+    // cudaGetDeviceProperties, and initialize a cudaOccDeviceProp with the
+    // cudaDeviceProp structure.
+    //
+    // Example:
+    /*
+     {
+         cudaDeviceProp prop;
+
+         cudaGetDeviceProperties(&prop, ...);
+
+         cudaOccDeviceProp occProp = prop;
+
+         ...
+
+         cudaOccMaxPotentialOccupancyBlockSize(..., &occProp, ...);
+     }
+     */
+    //
+    template<typename DeviceProp>
+    __OCC_INLINE
+    cudaOccDeviceProp(const DeviceProp &props)
+    :   computeMajor                (props.major),
+        computeMinor                (props.minor),
+        maxThreadsPerBlock          (props.maxThreadsPerBlock),
+        maxThreadsPerMultiprocessor (props.maxThreadsPerMultiProcessor),
+        regsPerBlock                (props.regsPerBlock),
+        regsPerMultiprocessor       (props.regsPerMultiprocessor),
+        warpSize                    (props.warpSize),
+        sharedMemPerBlock           (props.sharedMemPerBlock),
+        sharedMemPerMultiprocessor  (props.sharedMemPerMultiprocessor),
+        numSms                      (props.multiProcessorCount),
+        sharedMemPerBlockOptin      (props.sharedMemPerBlockOptin),
+        reservedSharedMemPerBlock   (props.reservedSharedMemPerBlock)
+    {}
+
+    __OCC_INLINE
+    cudaOccDeviceProp()
+    :   computeMajor                (0),
+        computeMinor                (0),
+        maxThreadsPerBlock          (0),
+        maxThreadsPerMultiprocessor (0),
+        regsPerBlock                (0),
+        regsPerMultiprocessor       (0),
+        warpSize                    (0),
+        sharedMemPerBlock           (0),
+        sharedMemPerMultiprocessor  (0),
+        numSms                      (0),
+        sharedMemPerBlockOptin      (0),
+        reservedSharedMemPerBlock   (0)
+    {}
+#endif // __cplusplus
+};
+
+/**
+ * Partitioned global caching option
+ */
+typedef enum cudaOccPartitionedGCConfig_enum {
+    PARTITIONED_GC_OFF,        // Disable partitioned global caching
+    PARTITIONED_GC_ON,         // Prefer partitioned global caching
+    PARTITIONED_GC_ON_STRICT   // Force partitioned global caching
+} cudaOccPartitionedGCConfig;
+
+/**
+ * Per function opt in maximum dynamic shared memory limit
+ */
+typedef enum cudaOccFuncShmemConfig_enum {
+    FUNC_SHMEM_LIMIT_DEFAULT,   // Default shmem limit
+    FUNC_SHMEM_LIMIT_OPTIN,     // Use the optin shmem limit
+} cudaOccFuncShmemConfig;
+
+/**
+ * Function descriptor
+ *
+ * This structure describes a CUDA function.
+ */
+struct cudaOccFuncAttributes {
+    int maxThreadsPerBlock; // Maximum block size the function can work with. If
+                            // unlimited, use INT_MAX or any value greater than
+                            // or equal to maxThreadsPerBlock of the device
+    int numRegs;            // Number of registers used. When the function is
+                            // launched on device, the register count may change
+                            // due to internal tools requirements.
+    size_t sharedSizeBytes; // Number of static shared memory used
+
+    cudaOccPartitionedGCConfig partitionedGCConfig; 
+                            // Partitioned global caching is required to enable
+                            // caching on certain chips, such as sm_52
+                            // devices. Partitioned global caching can be
+                            // automatically disabled if the occupancy
+                            // requirement of the launch cannot support caching.
+                            //
+                            // To override this behavior with caching on and
+                            // calculate occupancy strictly according to the
+                            // preference, set partitionedGCConfig to
+                            // PARTITIONED_GC_ON_STRICT. This is especially
+                            // useful for experimenting and finding launch
+                            // configurations (MaxPotentialOccupancyBlockSize)
+                            // that allow global caching to take effect.
+                            //
+                            // This flag only affects the occupancy calculation.
+
+    cudaOccFuncShmemConfig shmemLimitConfig;
+                            // Certain chips like sm_70 allow a user to opt into
+                            // a higher per block limit of dynamic shared memory
+                            // This optin is performed on a per function basis
+                            // using the cuFuncSetAttribute function
+
+    size_t maxDynamicSharedSizeBytes;
+                            // User set limit on maximum dynamic shared memory
+                            // usable by the kernel
+                            // This limit is set using the cuFuncSetAttribute
+                            // function.
+
+    int numBlockBarriers;   // Number of block barriers used (default to 1)
+#ifdef __cplusplus
+    // This structure can be converted from a cudaFuncAttributes structure for
+    // users that use this header in their CUDA applications.
+    //
+    // If the application have access to the CUDA Runtime API, the application
+    // can obtain the function attributes of a CUDA kernel function through
+    // cudaFuncGetAttributes, and initialize a cudaOccFuncAttributes with the
+    // cudaFuncAttributes structure.
+    //
+    // Example:
+    /*
+      __global__ void foo() {...}
+
+      ...
+
+      {
+          cudaFuncAttributes attr;
+
+          cudaFuncGetAttributes(&attr, foo);
+
+          cudaOccFuncAttributes occAttr = attr;
+
+          ...
+
+          cudaOccMaxPotentialOccupancyBlockSize(..., &occAttr, ...);
+      }
+     */
+    //
+    template<typename FuncAttributes>
+    __OCC_INLINE
+    cudaOccFuncAttributes(const FuncAttributes &attr)
+    :   maxThreadsPerBlock  (attr.maxThreadsPerBlock),
+        numRegs             (attr.numRegs),
+        sharedSizeBytes     (attr.sharedSizeBytes),
+        partitionedGCConfig (PARTITIONED_GC_OFF),
+        shmemLimitConfig    (FUNC_SHMEM_LIMIT_OPTIN),
+        maxDynamicSharedSizeBytes (attr.maxDynamicSharedSizeBytes),
+        numBlockBarriers    (1)
+    {}
+
+    __OCC_INLINE
+    cudaOccFuncAttributes()
+    :   maxThreadsPerBlock  (0),
+        numRegs             (0),
+        sharedSizeBytes     (0),
+        partitionedGCConfig (PARTITIONED_GC_OFF),
+        shmemLimitConfig    (FUNC_SHMEM_LIMIT_DEFAULT),
+        maxDynamicSharedSizeBytes (0),
+        numBlockBarriers    (0)
+    {}
+#endif
+};
+
+typedef enum cudaOccCacheConfig_enum {
+    CACHE_PREFER_NONE   = 0x00, // no preference for shared memory or L1 (default)
+    CACHE_PREFER_SHARED = 0x01, // prefer larger shared memory and smaller L1 cache
+    CACHE_PREFER_L1     = 0x02, // prefer larger L1 cache and smaller shared memory
+    CACHE_PREFER_EQUAL  = 0x03  // prefer equal sized L1 cache and shared memory
+} cudaOccCacheConfig;
+
+typedef enum cudaOccCarveoutConfig_enum {
+    SHAREDMEM_CARVEOUT_DEFAULT       = -1,  // no preference for shared memory or L1 (default)
+    SHAREDMEM_CARVEOUT_MAX_SHARED    = 100, // prefer maximum available shared memory, minimum L1 cache
+    SHAREDMEM_CARVEOUT_MAX_L1        = 0,    // prefer maximum available L1 cache, minimum shared memory
+    SHAREDMEM_CARVEOUT_HALF          = 50   // prefer half of maximum available shared memory, with the rest as L1 cache
+} cudaOccCarveoutConfig;
+
+/**
+ * Device state descriptor
+ *
+ * This structure describes device settings that affect occupancy calculation.
+ */
+struct cudaOccDeviceState
+{
+    // Cache / shared memory split preference. Deprecated on Volta 
+    cudaOccCacheConfig cacheConfig; 
+    // Shared memory / L1 split preference. Supported on only Volta
+    int carveoutConfig;
+
+#ifdef __cplusplus
+    __OCC_INLINE
+    cudaOccDeviceState()
+    :   cacheConfig     (CACHE_PREFER_NONE),
+        carveoutConfig  (SHAREDMEM_CARVEOUT_DEFAULT)
+    {}
+#endif
+};
+
+typedef enum cudaOccLimitingFactor_enum {
+                                    // Occupancy limited due to:
+    OCC_LIMIT_WARPS         = 0x01, // - warps available
+    OCC_LIMIT_REGISTERS     = 0x02, // - registers available
+    OCC_LIMIT_SHARED_MEMORY = 0x04, // - shared memory available
+    OCC_LIMIT_BLOCKS        = 0x08, // - blocks available
+    OCC_LIMIT_BARRIERS      = 0x10  // - barrier available
+} cudaOccLimitingFactor;
+
+/**
+ * Occupancy output
+ *
+ * This structure contains occupancy calculator's output.
+ */
+struct cudaOccResult {
+    int activeBlocksPerMultiprocessor; // Occupancy
+    unsigned int limitingFactors;      // Factors that limited occupancy. A bit
+                                       // field that counts the limiting
+                                       // factors, see cudaOccLimitingFactor
+    int blockLimitRegs;                // Occupancy due to register
+                                       // usage, INT_MAX if the kernel does not
+                                       // use any register.
+    int blockLimitSharedMem;           // Occupancy due to shared memory
+                                       // usage, INT_MAX if the kernel does not
+                                       // use shared memory.
+    int blockLimitWarps;               // Occupancy due to block size limit
+    int blockLimitBlocks;              // Occupancy due to maximum number of blocks
+                                       // managable per SM
+    int blockLimitBarriers;            // Occupancy due to block barrier usage
+    int allocatedRegistersPerBlock;    // Actual number of registers allocated per
+                                       // block
+    size_t allocatedSharedMemPerBlock; // Actual size of shared memory allocated
+                                       // per block
+    cudaOccPartitionedGCConfig partitionedGCConfig;
+                                       // Report if partitioned global caching
+                                       // is actually enabled.
+};
+
+/**
+ * Partitioned global caching support
+ *
+ * See cudaOccPartitionedGlobalCachingModeSupport
+ */
+typedef enum cudaOccPartitionedGCSupport_enum {
+    PARTITIONED_GC_NOT_SUPPORTED,  // Partitioned global caching is not supported
+    PARTITIONED_GC_SUPPORTED,      // Partitioned global caching is supported
+} cudaOccPartitionedGCSupport;
+
+/**
+ * Implementation
+ */
+
+/**
+ * Max compute capability supported
+ */
+#define __CUDA_OCC_MAJOR__ 9
+#define __CUDA_OCC_MINOR__ 0
+
+//////////////////////////////////////////
+//    Mathematical Helper Functions     //
+//////////////////////////////////////////
+
+static __OCC_INLINE int __occMin(int lhs, int rhs)
+{
+    return rhs < lhs ? rhs : lhs;
+}
+
+static __OCC_INLINE int __occDivideRoundUp(int x, int y)
+{
+    return (x + (y - 1)) / y;
+}
+
+static __OCC_INLINE int __occRoundUp(int x, int y)
+{
+    return y * __occDivideRoundUp(x, y);
+}
+
+//////////////////////////////////////////
+//      Architectural Properties        //
+//////////////////////////////////////////
+
+/**
+ * Granularity of shared memory allocation
+ */
+static __OCC_INLINE cudaOccError cudaOccSMemAllocationGranularity(int *limit, const cudaOccDeviceProp *properties)
+{
+    int value;
+
+    switch(properties->computeMajor) {
+        case 3:
+        case 5:
+        case 6:
+        case 7:
+            value = 256;
+            break;
+        case 8:
+        case 9:
+            value = 128;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = value;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Maximum number of registers per thread
+ */
+static __OCC_INLINE cudaOccError cudaOccRegAllocationMaxPerThread(int *limit, const cudaOccDeviceProp *properties)
+{
+    int value;
+
+    switch(properties->computeMajor) {
+        case 3:
+        case 5:
+        case 6:
+            value = 255;
+            break;
+        case 7:
+        case 8:
+        case 9:
+            value = 256;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = value;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Granularity of register allocation
+ */
+static __OCC_INLINE cudaOccError cudaOccRegAllocationGranularity(int *limit, const cudaOccDeviceProp *properties)
+{
+    int value;
+
+    switch(properties->computeMajor) {
+        case 3:
+        case 5:
+        case 6:
+        case 7:
+        case 8:
+        case 9:
+            value = 256;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = value;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Number of sub-partitions
+ */
+static __OCC_INLINE cudaOccError cudaOccSubPartitionsPerMultiprocessor(int *limit, const cudaOccDeviceProp *properties)
+{
+    int value;
+
+    switch(properties->computeMajor) {
+        case 3:
+        case 5:
+        case 7:
+        case 8:
+        case 9:
+            value = 4;
+            break;
+        case 6:
+            value = properties->computeMinor ? 4 : 2;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = value;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+
+/**
+ * Maximum number of blocks that can run simultaneously on a multiprocessor
+ */
+static __OCC_INLINE cudaOccError cudaOccMaxBlocksPerMultiprocessor(int* limit, const cudaOccDeviceProp *properties)
+{
+    int value;
+
+    switch(properties->computeMajor) {
+        case 3:
+            value = 16;
+            break;
+        case 5:
+        case 6:
+            value = 32;
+            break;
+        case 7: {
+            int isTuring = properties->computeMinor == 5;
+            value = (isTuring) ? 16 : 32;
+            break;
+        }
+        case 8:
+            if (properties->computeMinor == 0) {
+                value = 32;
+            }
+            else if (properties->computeMinor == 9) {
+                value = 24;
+            }
+            else {
+                value = 16;
+            }
+            break;
+        case 9:
+            value = 32;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = value;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/** 
+ * Align up shared memory based on compute major configurations
+ */
+static __OCC_INLINE cudaOccError cudaOccAlignUpShmemSizeVoltaPlus(size_t *shMemSize, const cudaOccDeviceProp *properties)
+{
+    // Volta and Turing have shared L1 cache / shared memory, and support cache
+    // configuration to trade one for the other. These values are needed to
+    // map carveout config ratio to the next available architecture size
+    size_t size = *shMemSize;
+
+    switch (properties->computeMajor) {
+    case 7: {
+        // Turing supports 32KB and 64KB shared mem.
+        int isTuring = properties->computeMinor == 5;
+        if (isTuring) {
+            if      (size <= 32 * 1024) {
+                *shMemSize = 32 * 1024;
+            }
+            else if (size <= 64 * 1024) {
+                *shMemSize = 64 * 1024;
+            }
+            else {
+                return CUDA_OCC_ERROR_INVALID_INPUT;
+            }
+        }
+        // Volta supports 0KB, 8KB, 16KB, 32KB, 64KB, and 96KB shared mem.
+        else {
+            if      (size == 0) {
+                *shMemSize = 0;
+            }
+            else if (size <= 8 * 1024) {
+                *shMemSize = 8 * 1024;
+            }
+            else if (size <= 16 * 1024) {
+                *shMemSize = 16 * 1024;
+            }
+            else if (size <= 32 * 1024) {
+                *shMemSize = 32 * 1024;
+            }
+            else if (size <= 64 * 1024) {
+                *shMemSize = 64 * 1024;
+            }
+            else if (size <= 96 * 1024) {
+                *shMemSize = 96 * 1024;
+            }
+            else {
+                return CUDA_OCC_ERROR_INVALID_INPUT;
+            }
+        }
+        break;
+    }
+    case 8:
+        if (properties->computeMinor == 0 || properties->computeMinor == 7) {
+            if      (size == 0) {
+                *shMemSize = 0;
+            }
+            else if (size <= 8 * 1024) {
+                *shMemSize = 8 * 1024;
+            }
+            else if (size <= 16 * 1024) {
+                *shMemSize = 16 * 1024;
+            }
+            else if (size <= 32 * 1024) {
+                *shMemSize = 32 * 1024;
+            }
+            else if (size <= 64 * 1024) {
+                *shMemSize = 64 * 1024;
+            }
+            else if (size <= 100 * 1024) {
+                *shMemSize = 100 * 1024;
+            }
+            else if (size <= 132 * 1024) {
+                *shMemSize = 132 * 1024;
+            }
+            else if (size <= 164 * 1024) {
+                *shMemSize = 164 * 1024;
+            }
+            else {
+                return CUDA_OCC_ERROR_INVALID_INPUT;
+            }
+        }
+        else {
+            if      (size == 0) {
+                *shMemSize = 0;
+            }
+            else if (size <= 8 * 1024) {
+                *shMemSize = 8 * 1024;
+            }
+            else if (size <= 16 * 1024) {
+                *shMemSize = 16 * 1024;
+            }
+            else if (size <= 32 * 1024) {
+                *shMemSize = 32 * 1024;
+            }
+            else if (size <= 64 * 1024) {
+                *shMemSize = 64 * 1024;
+            }
+            else if (size <= 100 * 1024) {
+                *shMemSize = 100 * 1024;
+            }
+            else {
+                return CUDA_OCC_ERROR_INVALID_INPUT;
+            }
+        }
+        break;
+    case 9: {
+        if      (size == 0) {
+            *shMemSize = 0;
+        }
+        else if (size <= 8 * 1024) {
+            *shMemSize = 8 * 1024;
+        }
+        else if (size <= 16 * 1024) {
+            *shMemSize = 16 * 1024;
+        }
+        else if (size <= 32 * 1024) {
+            *shMemSize = 32 * 1024;
+        }
+        else if (size <= 64 * 1024) {
+            *shMemSize = 64 * 1024;
+        }
+        else if (size <= 100 * 1024) {
+            *shMemSize = 100 * 1024;
+        }
+        else if (size <= 132 * 1024) {
+            *shMemSize = 132 * 1024;
+        }
+        else if (size <= 164 * 1024) {
+            *shMemSize = 164 * 1024;
+        }
+        else if (size <= 196 * 1024) {
+            *shMemSize = 196 * 1024;
+        }
+        else if (size <= 228 * 1024) {
+            *shMemSize = 228 * 1024;
+        }
+        else {
+            return CUDA_OCC_ERROR_INVALID_INPUT;
+        }
+        break;
+    }
+    default:
+        return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Shared memory based on the new carveoutConfig API introduced with Volta
+ */
+static __OCC_INLINE cudaOccError cudaOccSMemPreferenceVoltaPlus(size_t *limit, const cudaOccDeviceProp *properties, const cudaOccDeviceState *state)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+    size_t preferenceShmemSize;
+
+    // CUDA 9.0 introduces a new API to set shared memory - L1 configuration on supported
+    // devices. This preference will take precedence over the older cacheConfig setting.
+    // Map cacheConfig to its effective preference value.
+    int effectivePreference = state->carveoutConfig;
+    if ((effectivePreference < SHAREDMEM_CARVEOUT_DEFAULT) || (effectivePreference > SHAREDMEM_CARVEOUT_MAX_SHARED)) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+    
+    if (effectivePreference == SHAREDMEM_CARVEOUT_DEFAULT) {
+        switch (state->cacheConfig)
+        {
+        case CACHE_PREFER_L1:
+            effectivePreference = SHAREDMEM_CARVEOUT_MAX_L1;
+            break;
+        case CACHE_PREFER_SHARED:
+            effectivePreference = SHAREDMEM_CARVEOUT_MAX_SHARED;
+            break;
+        case CACHE_PREFER_EQUAL:
+            effectivePreference = SHAREDMEM_CARVEOUT_HALF;
+            break;
+        default:
+            effectivePreference = SHAREDMEM_CARVEOUT_DEFAULT;
+            break;
+        }
+    }
+
+    if (effectivePreference == SHAREDMEM_CARVEOUT_DEFAULT) {
+        preferenceShmemSize = properties->sharedMemPerMultiprocessor;
+    }
+    else {
+        preferenceShmemSize = (size_t) (effectivePreference * properties->sharedMemPerMultiprocessor) / 100;
+    }
+
+    status = cudaOccAlignUpShmemSizeVoltaPlus(&preferenceShmemSize, properties);
+    *limit = preferenceShmemSize;
+    return status;
+}
+
+/**
+ * Shared memory based on the cacheConfig
+ */
+static __OCC_INLINE cudaOccError cudaOccSMemPreference(size_t *limit, const cudaOccDeviceProp *properties, const cudaOccDeviceState *state)
+{
+    size_t bytes                          = 0;
+    size_t sharedMemPerMultiprocessorHigh = properties->sharedMemPerMultiprocessor;
+    cudaOccCacheConfig cacheConfig        = state->cacheConfig;
+
+    // Kepler has shared L1 cache / shared memory, and support cache
+    // configuration to trade one for the other. These values are needed to
+    // calculate the correct shared memory size for user requested cache
+    // configuration.
+    //
+    size_t minCacheSize                   = 16384;
+    size_t maxCacheSize                   = 49152;
+    size_t cacheAndSharedTotal            = sharedMemPerMultiprocessorHigh + minCacheSize;
+    size_t sharedMemPerMultiprocessorLow  = cacheAndSharedTotal - maxCacheSize;
+
+    switch (properties->computeMajor) {
+        case 3:
+            // Kepler supports 16KB, 32KB, or 48KB partitions for L1. The rest
+            // is shared memory.
+            //
+            switch (cacheConfig) {
+                default :
+                case CACHE_PREFER_NONE:
+                case CACHE_PREFER_SHARED:
+                    bytes = sharedMemPerMultiprocessorHigh;
+                    break;
+                case CACHE_PREFER_L1:
+                    bytes = sharedMemPerMultiprocessorLow;
+                    break;
+                case CACHE_PREFER_EQUAL:
+                    // Equal is the mid-point between high and low. It should be
+                    // equivalent to low + 16KB.
+                    //
+                    bytes = (sharedMemPerMultiprocessorHigh + sharedMemPerMultiprocessorLow) / 2;
+                    break;
+            }
+            break;
+        case 5:
+        case 6:
+            // Maxwell and Pascal have dedicated shared memory.
+            //
+            bytes = sharedMemPerMultiprocessorHigh;
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    *limit = bytes;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Shared memory based on config requested by User
+ */
+static __OCC_INLINE cudaOccError cudaOccSMemPerMultiprocessor(size_t *limit, const cudaOccDeviceProp *properties, const cudaOccDeviceState *state)
+{
+    // Volta introduces a new API that allows for shared memory carveout preference. Because it is a shared memory preference,
+    // it is handled separately from the cache config preference.
+    if (properties->computeMajor >= 7) {
+        return cudaOccSMemPreferenceVoltaPlus(limit, properties, state);
+    }
+    return cudaOccSMemPreference(limit, properties, state);
+}
+
+/**
+ * Return the per block shared memory limit based on function config
+ */
+static __OCC_INLINE cudaOccError cudaOccSMemPerBlock(size_t *limit, const cudaOccDeviceProp *properties, cudaOccFuncShmemConfig shmemLimitConfig, size_t smemPerCta)
+{
+    switch (properties->computeMajor) {
+        case 2:
+        case 3:
+        case 4:
+        case 5:
+        case 6:
+            *limit = properties->sharedMemPerBlock;
+            break;
+        case 7:
+        case 8:
+        case 9:
+            switch (shmemLimitConfig) {
+                default:
+                case FUNC_SHMEM_LIMIT_DEFAULT:
+                    *limit = properties->sharedMemPerBlock;
+                    break;
+                case FUNC_SHMEM_LIMIT_OPTIN:
+                    if (smemPerCta > properties->sharedMemPerBlock) {
+                        *limit = properties->sharedMemPerBlockOptin;
+                    }
+                    else {
+                        *limit = properties->sharedMemPerBlock;
+                    }
+                    break;
+            }
+            break;
+        default:
+            return CUDA_OCC_ERROR_UNKNOWN_DEVICE;
+    }
+
+    // Starting Ampere, CUDA driver reserves additional shared memory per block
+    if (properties->computeMajor >= 8) {
+        *limit += properties->reservedSharedMemPerBlock;
+    }
+
+    return CUDA_OCC_SUCCESS;
+}
+
+/**
+ * Partitioned global caching mode support
+ */
+static __OCC_INLINE cudaOccError cudaOccPartitionedGlobalCachingModeSupport(cudaOccPartitionedGCSupport *limit, const cudaOccDeviceProp *properties)
+{
+    *limit = PARTITIONED_GC_NOT_SUPPORTED;
+
+    if ((properties->computeMajor == 5 && (properties->computeMinor == 2 || properties->computeMinor == 3)) ||
+        properties->computeMajor == 6) {
+        *limit = PARTITIONED_GC_SUPPORTED;
+    }
+
+    if (properties->computeMajor == 6 && properties->computeMinor == 0) {
+        *limit = PARTITIONED_GC_NOT_SUPPORTED;
+    }
+
+    return CUDA_OCC_SUCCESS;
+}
+
+///////////////////////////////////////////////
+//            User Input Sanity              //
+///////////////////////////////////////////////
+
+static __OCC_INLINE cudaOccError cudaOccDevicePropCheck(const cudaOccDeviceProp *properties)
+{
+    // Verify device properties
+    //
+    // Each of these limits must be a positive number.
+    //
+    // Compute capacity is checked during the occupancy calculation
+    //
+    if (properties->maxThreadsPerBlock          <= 0 ||
+        properties->maxThreadsPerMultiprocessor <= 0 ||
+        properties->regsPerBlock                <= 0 ||
+        properties->regsPerMultiprocessor       <= 0 ||
+        properties->warpSize                    <= 0 ||
+        properties->sharedMemPerBlock           <= 0 ||
+        properties->sharedMemPerMultiprocessor  <= 0 ||
+        properties->numSms                      <= 0) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    return CUDA_OCC_SUCCESS;
+}
+
+static __OCC_INLINE cudaOccError cudaOccFuncAttributesCheck(const cudaOccFuncAttributes *attributes)
+{
+    // Verify function attributes
+    //
+    if (attributes->maxThreadsPerBlock <= 0 ||
+        attributes->numRegs < 0) {            // Compiler may choose not to use
+                                              // any register (empty kernels,
+                                              // etc.)
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    return CUDA_OCC_SUCCESS;
+}
+
+static __OCC_INLINE cudaOccError cudaOccDeviceStateCheck(const cudaOccDeviceState *state)
+{
+    (void)state;   // silence unused-variable warning
+    // Placeholder
+    //
+
+    return CUDA_OCC_SUCCESS;
+}
+
+static __OCC_INLINE cudaOccError cudaOccInputCheck(
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+
+    status = cudaOccDevicePropCheck(properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    status = cudaOccFuncAttributesCheck(attributes);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    status = cudaOccDeviceStateCheck(state);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    return status;
+}
+
+///////////////////////////////////////////////
+//    Occupancy calculation Functions        //
+///////////////////////////////////////////////
+
+static __OCC_INLINE cudaOccPartitionedGCConfig cudaOccPartitionedGCExpected(
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes)
+{
+    cudaOccPartitionedGCSupport gcSupport;
+    cudaOccPartitionedGCConfig gcConfig;
+
+    cudaOccPartitionedGlobalCachingModeSupport(&gcSupport, properties);
+
+    gcConfig = attributes->partitionedGCConfig;
+
+    if (gcSupport == PARTITIONED_GC_NOT_SUPPORTED) {
+        gcConfig = PARTITIONED_GC_OFF;
+    }
+
+    return gcConfig;
+}
+
+// Warp limit
+//
+static __OCC_INLINE cudaOccError cudaOccMaxBlocksPerSMWarpsLimit(
+    int                         *limit,
+    cudaOccPartitionedGCConfig   gcConfig,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    int                          blockSize)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+    int maxWarpsPerSm;
+    int warpsAllocatedPerCTA;
+    int maxBlocks;
+    (void)attributes;   // silence unused-variable warning
+
+    if (blockSize > properties->maxThreadsPerBlock) {
+        maxBlocks = 0;
+    }
+    else {
+        maxWarpsPerSm = properties->maxThreadsPerMultiprocessor / properties->warpSize;
+        warpsAllocatedPerCTA = __occDivideRoundUp(blockSize, properties->warpSize);
+        maxBlocks = 0;
+
+        if (gcConfig != PARTITIONED_GC_OFF) {
+            int maxBlocksPerSmPartition;
+            int maxWarpsPerSmPartition;
+
+            // If partitioned global caching is on, then a CTA can only use a SM
+            // partition (a half SM), and thus a half of the warp slots
+            // available per SM
+            //
+            maxWarpsPerSmPartition  = maxWarpsPerSm / 2;
+            maxBlocksPerSmPartition = maxWarpsPerSmPartition / warpsAllocatedPerCTA;
+            maxBlocks               = maxBlocksPerSmPartition * 2;
+        }
+        // On hardware that supports partitioned global caching, each half SM is
+        // guaranteed to support at least 32 warps (maximum number of warps of a
+        // CTA), so caching will not cause 0 occupancy due to insufficient warp
+        // allocation slots.
+        //
+        else {
+            maxBlocks = maxWarpsPerSm / warpsAllocatedPerCTA;
+        }
+    }
+
+    *limit = maxBlocks;
+
+    return status;
+}
+
+// Shared memory limit
+//
+static __OCC_INLINE cudaOccError cudaOccMaxBlocksPerSMSmemLimit(
+    int                         *limit,
+    cudaOccResult               *result,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    int                          blockSize,
+    size_t                       dynamicSmemSize)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+    int allocationGranularity;
+    size_t userSmemPreference = 0;
+    size_t totalSmemUsagePerCTA;
+    size_t maxSmemUsagePerCTA;
+    size_t smemAllocatedPerCTA;
+    size_t staticSmemSize;
+    size_t sharedMemPerMultiprocessor;
+    size_t smemLimitPerCTA;
+    int maxBlocks;
+    int dynamicSmemSizeExceeded = 0;
+    int totalSmemSizeExceeded = 0;
+    (void)blockSize;   // silence unused-variable warning
+
+    status = cudaOccSMemAllocationGranularity(&allocationGranularity, properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // Obtain the user preferred shared memory size. This setting is ignored if
+    // user requests more shared memory than preferred.
+    //
+    status = cudaOccSMemPerMultiprocessor(&userSmemPreference, properties, state);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    staticSmemSize = attributes->sharedSizeBytes + properties->reservedSharedMemPerBlock;
+    totalSmemUsagePerCTA = staticSmemSize + dynamicSmemSize;
+    smemAllocatedPerCTA = __occRoundUp((int)totalSmemUsagePerCTA, (int)allocationGranularity);
+
+    maxSmemUsagePerCTA = staticSmemSize + attributes->maxDynamicSharedSizeBytes;
+
+    dynamicSmemSizeExceeded = 0;
+    totalSmemSizeExceeded   = 0;
+
+    // Obtain the user set maximum dynamic size if it exists
+    // If so, the current launch dynamic shared memory must not
+    // exceed the set limit
+    if (attributes->shmemLimitConfig != FUNC_SHMEM_LIMIT_DEFAULT &&
+        dynamicSmemSize > attributes->maxDynamicSharedSizeBytes) {
+        dynamicSmemSizeExceeded = 1;
+    }
+
+    status = cudaOccSMemPerBlock(&smemLimitPerCTA, properties, attributes->shmemLimitConfig, maxSmemUsagePerCTA);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    if (smemAllocatedPerCTA > smemLimitPerCTA) {
+        totalSmemSizeExceeded = 1;
+    }
+
+    if (dynamicSmemSizeExceeded || totalSmemSizeExceeded) {
+        maxBlocks = 0;
+    }
+    else {
+        // User requested shared memory limit is used as long as it is greater
+        // than the total shared memory used per CTA, i.e. as long as at least
+        // one CTA can be launched.
+        if (userSmemPreference >= smemAllocatedPerCTA) {
+            sharedMemPerMultiprocessor = userSmemPreference;
+        }
+        else {
+            // On Volta+, user requested shared memory will limit occupancy
+            // if it's less than shared memory per CTA. Otherwise, the
+            // maximum shared memory limit is used.
+            if (properties->computeMajor >= 7) {
+                sharedMemPerMultiprocessor = smemAllocatedPerCTA;
+                status = cudaOccAlignUpShmemSizeVoltaPlus(&sharedMemPerMultiprocessor, properties);
+                if (status != CUDA_OCC_SUCCESS) {
+                    return status;
+                }
+            }
+            else {
+                sharedMemPerMultiprocessor = properties->sharedMemPerMultiprocessor;
+            }
+        }
+
+        if (smemAllocatedPerCTA > 0) {
+            maxBlocks = (int)(sharedMemPerMultiprocessor / smemAllocatedPerCTA);
+        }
+        else {
+            maxBlocks = INT_MAX;
+        }
+    }
+
+    result->allocatedSharedMemPerBlock = smemAllocatedPerCTA;
+
+    *limit = maxBlocks;
+
+    return status;
+}
+
+static __OCC_INLINE
+cudaOccError cudaOccMaxBlocksPerSMRegsLimit(
+    int                         *limit,
+    cudaOccPartitionedGCConfig  *gcConfig,
+    cudaOccResult               *result,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    int                          blockSize)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+    int allocationGranularity;
+    int warpsAllocatedPerCTA;
+    int regsAllocatedPerCTA;
+    int regsAssumedPerCTA;
+    int regsPerWarp;
+    int regsAllocatedPerWarp;
+    int numSubPartitions;
+    int numRegsPerSubPartition;
+    int numWarpsPerSubPartition;
+    int numWarpsPerSM;
+    int maxBlocks;
+    int maxRegsPerThread;
+
+    status = cudaOccRegAllocationGranularity(
+        &allocationGranularity,
+        properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    status = cudaOccRegAllocationMaxPerThread(
+        &maxRegsPerThread,
+        properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    status = cudaOccSubPartitionsPerMultiprocessor(&numSubPartitions, properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    warpsAllocatedPerCTA = __occDivideRoundUp(blockSize, properties->warpSize);
+
+    // GPUs of compute capability 2.x and higher allocate registers to warps
+    //
+    // Number of regs per warp is regs per thread x warp size, rounded up to
+    // register allocation granularity
+    //
+    regsPerWarp          = attributes->numRegs * properties->warpSize;
+    regsAllocatedPerWarp = __occRoundUp(regsPerWarp, allocationGranularity);
+    regsAllocatedPerCTA  = regsAllocatedPerWarp * warpsAllocatedPerCTA;
+
+    // Hardware verifies if a launch fits the per-CTA register limit. For
+    // historical reasons, the verification logic assumes register
+    // allocations are made to all partitions simultaneously. Therefore, to
+    // simulate the hardware check, the warp allocation needs to be rounded
+    // up to the number of partitions.
+    //
+    regsAssumedPerCTA = regsAllocatedPerWarp * __occRoundUp(warpsAllocatedPerCTA, numSubPartitions);
+
+    if (properties->regsPerBlock < regsAssumedPerCTA ||   // Hardware check
+        properties->regsPerBlock < regsAllocatedPerCTA || // Software check
+        attributes->numRegs > maxRegsPerThread) {         // Per thread limit check
+        maxBlocks = 0;
+    }
+    else {
+        if (regsAllocatedPerWarp > 0) {
+            // Registers are allocated in each sub-partition. The max number
+            // of warps that can fit on an SM is equal to the max number of
+            // warps per sub-partition x number of sub-partitions.
+            //
+            numRegsPerSubPartition  = properties->regsPerMultiprocessor / numSubPartitions;
+            numWarpsPerSubPartition = numRegsPerSubPartition / regsAllocatedPerWarp;
+
+            maxBlocks = 0;
+
+            if (*gcConfig != PARTITIONED_GC_OFF) {
+                int numSubPartitionsPerSmPartition;
+                int numWarpsPerSmPartition;
+                int maxBlocksPerSmPartition;
+
+                // If partitioned global caching is on, then a CTA can only
+                // use a half SM, and thus a half of the registers available
+                // per SM
+                //
+                numSubPartitionsPerSmPartition = numSubPartitions / 2;
+                numWarpsPerSmPartition         = numWarpsPerSubPartition * numSubPartitionsPerSmPartition;
+                maxBlocksPerSmPartition        = numWarpsPerSmPartition / warpsAllocatedPerCTA;
+                maxBlocks                      = maxBlocksPerSmPartition * 2;
+            }
+
+            // Try again if partitioned global caching is not enabled, or if
+            // the CTA cannot fit on the SM with caching on (maxBlocks == 0).  In the latter
+            // case, the device will automatically turn off caching, except
+            // if the user forces enablement via PARTITIONED_GC_ON_STRICT to calculate
+            // occupancy and launch configuration.
+            //
+            if (maxBlocks == 0 && *gcConfig != PARTITIONED_GC_ON_STRICT) {
+               // In case *gcConfig was PARTITIONED_GC_ON flip it OFF since
+               // this is what it will be if we spread CTA across partitions.
+               //
+               *gcConfig = PARTITIONED_GC_OFF;
+               numWarpsPerSM = numWarpsPerSubPartition * numSubPartitions;
+               maxBlocks     = numWarpsPerSM / warpsAllocatedPerCTA;
+            }
+        }
+        else {
+            maxBlocks = INT_MAX;
+        }
+    }
+
+
+    result->allocatedRegistersPerBlock = regsAllocatedPerCTA;
+
+    *limit = maxBlocks;
+
+    return status;
+}
+
+// Barrier limit
+//
+static __OCC_INLINE cudaOccError cudaOccMaxBlocksPerSMBlockBarrierLimit(
+    int                         *limit,
+    int                          ctaLimitBlocks,
+    const cudaOccFuncAttributes *attributes)
+{
+    cudaOccError status = CUDA_OCC_SUCCESS;
+    int numBarriersAvailable = ctaLimitBlocks * 2;
+    int numBarriersUsed = attributes->numBlockBarriers;
+    int maxBlocks = INT_MAX;
+
+    if (numBarriersUsed) {
+        maxBlocks = numBarriersAvailable / numBarriersUsed;
+    }
+
+    *limit = maxBlocks;
+
+    return status;
+}
+
+///////////////////////////////////
+//      API Implementations      //
+///////////////////////////////////
+
+static __OCC_INLINE
+cudaOccError cudaOccMaxActiveBlocksPerMultiprocessor(
+    cudaOccResult               *result,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    int                          blockSize,
+    size_t                       dynamicSmemSize)
+{
+    cudaOccError status          = CUDA_OCC_SUCCESS;
+    int          ctaLimitWarps   = 0;
+    int          ctaLimitBlocks  = 0;
+    int          ctaLimitSMem    = 0;
+    int          ctaLimitRegs    = 0;
+    int          ctaLimitBars    = 0;
+    int          ctaLimit        = 0;
+    unsigned int limitingFactors = 0;
+    
+    cudaOccPartitionedGCConfig gcConfig = PARTITIONED_GC_OFF;
+
+    if (!result || !properties || !attributes || !state || blockSize <= 0) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    ///////////////////////////
+    // Check user input
+    ///////////////////////////
+
+    status = cudaOccInputCheck(properties, attributes, state);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    ///////////////////////////
+    // Initialization
+    ///////////////////////////
+
+    gcConfig = cudaOccPartitionedGCExpected(properties, attributes);
+
+    ///////////////////////////
+    // Compute occupancy
+    ///////////////////////////
+
+    // Limits due to registers/SM
+    // Also compute if partitioned global caching has to be turned off
+    //
+    status = cudaOccMaxBlocksPerSMRegsLimit(&ctaLimitRegs, &gcConfig, result, properties, attributes, blockSize);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // SMs on GP100 (6.0) have 2 subpartitions, while those on GP10x have 4.
+    // As a result, an SM on GP100 may be able to run more CTAs than the one on GP10x.
+    // For forward compatibility within Pascal family, if a function cannot run on GP10x (maxBlock == 0),
+    // we do not let it run on any Pascal processor, even though it may be able to run on GP100.
+    // Therefore, we check the occupancy on GP10x when it can run on GP100
+    //
+    if (properties->computeMajor == 6 && properties->computeMinor == 0 && ctaLimitRegs) {
+        cudaOccDeviceProp propertiesGP10x;
+        cudaOccPartitionedGCConfig gcConfigGP10x = gcConfig;
+        int ctaLimitRegsGP10x = 0;
+
+        // Set up properties for GP10x
+        memcpy(&propertiesGP10x, properties, sizeof(propertiesGP10x));
+        propertiesGP10x.computeMinor = 1;
+
+        status = cudaOccMaxBlocksPerSMRegsLimit(&ctaLimitRegsGP10x, &gcConfigGP10x, result, &propertiesGP10x, attributes, blockSize);
+        if (status != CUDA_OCC_SUCCESS) {
+            return status;
+        }
+
+        if (ctaLimitRegsGP10x == 0) {
+            ctaLimitRegs = 0;
+        }
+    }
+
+    // Limits due to warps/SM
+    //
+    status = cudaOccMaxBlocksPerSMWarpsLimit(&ctaLimitWarps, gcConfig, properties, attributes, blockSize);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // Limits due to blocks/SM
+    //
+    status = cudaOccMaxBlocksPerMultiprocessor(&ctaLimitBlocks, properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // Limits due to shared memory/SM
+    //
+    status = cudaOccMaxBlocksPerSMSmemLimit(&ctaLimitSMem, result, properties, attributes, state, blockSize, dynamicSmemSize);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    ///////////////////////////
+    // Overall occupancy
+    ///////////////////////////
+
+    // Overall limit is min() of limits due to above reasons
+    //
+    ctaLimit = __occMin(ctaLimitRegs, __occMin(ctaLimitSMem, __occMin(ctaLimitWarps, ctaLimitBlocks)));
+
+    // Determine occupancy limiting factors
+    //
+    if (ctaLimit == ctaLimitWarps) {
+        limitingFactors |= OCC_LIMIT_WARPS;
+    }
+    if (ctaLimit == ctaLimitRegs) {
+        limitingFactors |= OCC_LIMIT_REGISTERS;
+    }
+    if (ctaLimit == ctaLimitSMem) {
+        limitingFactors |= OCC_LIMIT_SHARED_MEMORY;
+    }
+    if (ctaLimit == ctaLimitBlocks) {
+        limitingFactors |= OCC_LIMIT_BLOCKS;
+    }
+
+    // For Hopper onwards compute the limits to occupancy based on block barrier count
+    //
+    if (properties->computeMajor >= 9 && attributes->numBlockBarriers > 0) {
+        // Limits due to barrier/SM
+        //
+        status = cudaOccMaxBlocksPerSMBlockBarrierLimit(&ctaLimitBars, ctaLimitBlocks, attributes);
+        if (status != CUDA_OCC_SUCCESS) {
+            return status;
+        }
+
+        // Recompute overall limit based on barrier/SM
+        //
+        ctaLimit = __occMin(ctaLimitBars, ctaLimit);
+
+        // Determine if this is occupancy limiting factor
+        //
+        if (ctaLimit == ctaLimitBars) {
+            limitingFactors |= OCC_LIMIT_BARRIERS;
+        }
+    }
+    else {
+        ctaLimitBars = INT_MAX;
+    }
+
+    // Fill in the return values
+    //
+    result->limitingFactors = limitingFactors;
+
+    result->blockLimitRegs      = ctaLimitRegs;
+    result->blockLimitSharedMem = ctaLimitSMem;
+    result->blockLimitWarps     = ctaLimitWarps;
+    result->blockLimitBlocks    = ctaLimitBlocks;
+    result->blockLimitBarriers  = ctaLimitBars;
+    result->partitionedGCConfig = gcConfig;
+
+    // Final occupancy
+    result->activeBlocksPerMultiprocessor = ctaLimit;
+
+    return CUDA_OCC_SUCCESS;
+}
+
+static __OCC_INLINE
+cudaOccError cudaOccAvailableDynamicSMemPerBlock(
+    size_t                      *bytesAvailable,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    int                         numBlocks,
+    int                         blockSize)
+{
+    int allocationGranularity;
+    size_t smemLimitPerBlock;
+    size_t smemAvailableForDynamic;
+    size_t userSmemPreference = 0;
+    size_t sharedMemPerMultiprocessor;
+    cudaOccResult result;
+    cudaOccError status = CUDA_OCC_SUCCESS;
+
+    if (numBlocks <= 0)
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+
+    // First compute occupancy of potential kernel launch.
+    //
+    status = cudaOccMaxActiveBlocksPerMultiprocessor(&result, properties, attributes, state, blockSize, 0);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+    // Check if occupancy is achievable given user requested number of blocks. 
+    //
+    if (result.activeBlocksPerMultiprocessor < numBlocks) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    status = cudaOccSMemAllocationGranularity(&allocationGranularity, properties);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // Return the per block shared memory limit based on function config.
+    //
+    status = cudaOccSMemPerBlock(&smemLimitPerBlock, properties, attributes->shmemLimitConfig, properties->sharedMemPerMultiprocessor);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    // If there is only a single block needed per SM, then the user preference can be ignored and the fully SW
+    // limit is allowed to be used as shared memory otherwise if more than one block is needed, then the user
+    // preference sets the total limit of available shared memory.
+    //
+    cudaOccSMemPerMultiprocessor(&userSmemPreference, properties, state);
+    if (numBlocks == 1) {
+        sharedMemPerMultiprocessor = smemLimitPerBlock;
+    }
+    else {
+        if (!userSmemPreference) {
+            userSmemPreference = 1 ;
+            status = cudaOccAlignUpShmemSizeVoltaPlus(&userSmemPreference, properties);
+            if (status != CUDA_OCC_SUCCESS) {
+                return status;
+            }
+        }
+        sharedMemPerMultiprocessor = userSmemPreference;
+    }
+
+    // Compute total shared memory available per SM
+    //
+    smemAvailableForDynamic =  sharedMemPerMultiprocessor / numBlocks;
+    smemAvailableForDynamic = (smemAvailableForDynamic / allocationGranularity) * allocationGranularity;
+
+    // Cap shared memory
+    //
+    if (smemAvailableForDynamic > smemLimitPerBlock) {
+        smemAvailableForDynamic = smemLimitPerBlock;
+    }
+
+    // Now compute dynamic shared memory size
+    smemAvailableForDynamic = smemAvailableForDynamic - attributes->sharedSizeBytes; 
+
+    // Cap computed dynamic SM by user requested limit specified via cuFuncSetAttribute()
+    //
+    if (smemAvailableForDynamic > attributes->maxDynamicSharedSizeBytes)
+        smemAvailableForDynamic = attributes->maxDynamicSharedSizeBytes;
+
+    *bytesAvailable = smemAvailableForDynamic;
+    return CUDA_OCC_SUCCESS;
+}
+
+static __OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSize(
+    int                         *minGridSize,
+    int                         *blockSize,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    size_t                     (*blockSizeToDynamicSMemSize)(int),
+    size_t                       dynamicSMemSize)
+{
+    cudaOccError  status = CUDA_OCC_SUCCESS;
+    cudaOccResult result;
+
+    // Limits
+    int occupancyLimit;
+    int granularity;
+    int blockSizeLimit;
+
+    // Recorded maximum
+    int maxBlockSize = 0;
+    int numBlocks    = 0;
+    int maxOccupancy = 0;
+
+    // Temporary
+    int blockSizeToTryAligned;
+    int blockSizeToTry;
+    int blockSizeLimitAligned;
+    int occupancyInBlocks;
+    int occupancyInThreads;
+
+    ///////////////////////////
+    // Check user input
+    ///////////////////////////
+
+    if (!minGridSize || !blockSize || !properties || !attributes || !state) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    status = cudaOccInputCheck(properties, attributes, state);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    /////////////////////////////////////////////////////////////////////////////////
+    // Try each block size, and pick the block size with maximum occupancy
+    /////////////////////////////////////////////////////////////////////////////////
+
+    occupancyLimit = properties->maxThreadsPerMultiprocessor;
+    granularity    = properties->warpSize;
+
+    blockSizeLimit        = __occMin(properties->maxThreadsPerBlock, attributes->maxThreadsPerBlock);
+    blockSizeLimitAligned = __occRoundUp(blockSizeLimit, granularity);
+
+    for (blockSizeToTryAligned = blockSizeLimitAligned; blockSizeToTryAligned > 0; blockSizeToTryAligned -= granularity) {
+        blockSizeToTry = __occMin(blockSizeLimit, blockSizeToTryAligned);
+
+        // Ignore dynamicSMemSize if the user provides a mapping
+        //
+        if (blockSizeToDynamicSMemSize) {
+            dynamicSMemSize = (*blockSizeToDynamicSMemSize)(blockSizeToTry);
+        }
+
+        status = cudaOccMaxActiveBlocksPerMultiprocessor(
+            &result,
+            properties,
+            attributes,
+            state,
+            blockSizeToTry,
+            dynamicSMemSize);
+
+        if (status != CUDA_OCC_SUCCESS) {
+            return status;
+        }
+
+        occupancyInBlocks = result.activeBlocksPerMultiprocessor;
+        occupancyInThreads = blockSizeToTry * occupancyInBlocks;
+
+        if (occupancyInThreads > maxOccupancy) {
+            maxBlockSize = blockSizeToTry;
+            numBlocks    = occupancyInBlocks;
+            maxOccupancy = occupancyInThreads;
+        }
+
+        // Early out if we have reached the maximum
+        //
+        if (occupancyLimit == maxOccupancy) {
+            break;
+        }
+    }
+
+    ///////////////////////////
+    // Return best available
+    ///////////////////////////
+
+    // Suggested min grid size to achieve a full machine launch
+    //
+    *minGridSize = numBlocks * properties->numSms;
+    *blockSize = maxBlockSize;
+
+    return status;
+}
+
+
+#if defined(__cplusplus)
+
+namespace {
+
+__OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSize(
+    int                         *minGridSize,
+    int                         *blockSize,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    size_t                       dynamicSMemSize)
+{
+    return cudaOccMaxPotentialOccupancyBlockSize(
+        minGridSize,
+        blockSize,
+        properties,
+        attributes,
+        state,
+        NULL,
+        dynamicSMemSize);
+}
+
+template <typename UnaryFunction>
+__OCC_INLINE
+cudaOccError cudaOccMaxPotentialOccupancyBlockSizeVariableSMem(
+    int                         *minGridSize,
+    int                         *blockSize,
+    const cudaOccDeviceProp     *properties,
+    const cudaOccFuncAttributes *attributes,
+    const cudaOccDeviceState    *state,
+    UnaryFunction                blockSizeToDynamicSMemSize)
+{
+    cudaOccError  status = CUDA_OCC_SUCCESS;
+    cudaOccResult result;
+
+    // Limits
+    int occupancyLimit;
+    int granularity;
+    int blockSizeLimit;
+
+    // Recorded maximum
+    int maxBlockSize = 0;
+    int numBlocks    = 0;
+    int maxOccupancy = 0;
+
+    // Temporary
+    int blockSizeToTryAligned;
+    int blockSizeToTry;
+    int blockSizeLimitAligned;
+    int occupancyInBlocks;
+    int occupancyInThreads;
+    size_t dynamicSMemSize;
+
+    ///////////////////////////
+    // Check user input
+    ///////////////////////////
+
+    if (!minGridSize || !blockSize || !properties || !attributes || !state) {
+        return CUDA_OCC_ERROR_INVALID_INPUT;
+    }
+
+    status = cudaOccInputCheck(properties, attributes, state);
+    if (status != CUDA_OCC_SUCCESS) {
+        return status;
+    }
+
+    /////////////////////////////////////////////////////////////////////////////////
+    // Try each block size, and pick the block size with maximum occupancy
+    /////////////////////////////////////////////////////////////////////////////////
+
+    occupancyLimit = properties->maxThreadsPerMultiprocessor;
+    granularity    = properties->warpSize;
+    blockSizeLimit        = __occMin(properties->maxThreadsPerBlock, attributes->maxThreadsPerBlock);
+    blockSizeLimitAligned = __occRoundUp(blockSizeLimit, granularity);
+
+    for (blockSizeToTryAligned = blockSizeLimitAligned; blockSizeToTryAligned > 0; blockSizeToTryAligned -= granularity) {
+        blockSizeToTry = __occMin(blockSizeLimit, blockSizeToTryAligned);
+
+        dynamicSMemSize = blockSizeToDynamicSMemSize(blockSizeToTry);
+
+        status = cudaOccMaxActiveBlocksPerMultiprocessor(
+            &result,
+            properties,
+            attributes,
+            state,
+            blockSizeToTry,
+            dynamicSMemSize);
+
+        if (status != CUDA_OCC_SUCCESS) {
+            return status;
+        }
+
+        occupancyInBlocks = result.activeBlocksPerMultiprocessor;
+
+        occupancyInThreads = blockSizeToTry * occupancyInBlocks;
+
+        if (occupancyInThreads > maxOccupancy) {
+            maxBlockSize = blockSizeToTry;
+            numBlocks    = occupancyInBlocks;
+            maxOccupancy = occupancyInThreads;
+        }
+
+        // Early out if we have reached the maximum
+        //
+        if (occupancyLimit == maxOccupancy) {
+            break;
+        }
+    }
+
+    ///////////////////////////
+    // Return best available
+    ///////////////////////////
+
+    // Suggested min grid size to achieve a full machine launch
+    //
+    *minGridSize = numBlocks * properties->numSms;
+    *blockSize = maxBlockSize;
+
+    return status;
+}
+
+} // namespace anonymous
+
+#endif /*__cplusplus */
+
+#undef __OCC_INLINE
+
+#endif /*__cuda_occupancy_h__*/
diff --git a/ext/cudart/include/cuda_pipeline.h b/ext/cudart/include/cuda_pipeline.h
new file mode 100644
index 00000000..46bc89e4
--- /dev/null
+++ b/ext/cudart/include/cuda_pipeline.h
@@ -0,0 +1,224 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_PIPELINE_H_
+# define _CUDA_PIPELINE_H_
+
+# include "cuda_pipeline_primitives.h"
+
+# if !defined(_CUDA_PIPELINE_CPLUSPLUS_11_OR_LATER)
+#  error This file requires compiler support for the ISO C++ 2011 standard. This support must be enabled with the \
+         -std=c++11 compiler option.
+# endif
+
+# if defined(_CUDA_PIPELINE_ARCH_700_OR_LATER)
+#  include "cuda_awbarrier.h"
+# endif
+
+// Integration with libcu++'s cuda::barrier<cuda::thread_scope_block>.
+
+# if defined(_CUDA_PIPELINE_ARCH_700_OR_LATER)
+#  if defined(_LIBCUDACXX_CUDA_ABI_VERSION)
+#   define _LIBCUDACXX_PIPELINE_ASSUMED_ABI_VERSION _LIBCUDACXX_CUDA_ABI_VERSION
+#  else
+#   define _LIBCUDACXX_PIPELINE_ASSUMED_ABI_VERSION 4
+#  endif
+
+#  define _LIBCUDACXX_PIPELINE_CONCAT(X, Y) X ## Y
+#  define _LIBCUDACXX_PIPELINE_CONCAT2(X, Y) _LIBCUDACXX_PIPELINE_CONCAT(X, Y)
+#  define _LIBCUDACXX_PIPELINE_INLINE_NAMESPACE _LIBCUDACXX_PIPELINE_CONCAT2(__, _LIBCUDACXX_PIPELINE_ASSUMED_ABI_VERSION)
+
+namespace cuda { inline namespace _LIBCUDACXX_PIPELINE_INLINE_NAMESPACE {
+    struct __block_scope_barrier_base;
+}}
+
+# endif
+
+_CUDA_PIPELINE_BEGIN_NAMESPACE
+
+template<size_t N, typename T>
+_CUDA_PIPELINE_QUALIFIER
+auto segment(T* ptr) -> T(*)[N];
+
+class pipeline {
+public:
+    pipeline(const pipeline&) = delete;
+    pipeline(pipeline&&) = delete;
+    pipeline& operator=(const pipeline&) = delete;
+    pipeline& operator=(pipeline&&) = delete;
+
+    _CUDA_PIPELINE_QUALIFIER pipeline();
+    _CUDA_PIPELINE_QUALIFIER size_t commit();
+    _CUDA_PIPELINE_QUALIFIER void commit_and_wait();
+    _CUDA_PIPELINE_QUALIFIER void wait(size_t batch);
+    template<unsigned N>
+    _CUDA_PIPELINE_QUALIFIER void wait_prior();
+
+# if defined(_CUDA_PIPELINE_ARCH_700_OR_LATER)
+    _CUDA_PIPELINE_QUALIFIER void arrive_on(awbarrier& barrier);
+    _CUDA_PIPELINE_QUALIFIER void arrive_on(cuda::__block_scope_barrier_base& barrier);
+# endif
+
+private:
+    size_t current_batch;
+};
+
+template<class T>
+_CUDA_PIPELINE_QUALIFIER
+void memcpy_async(T& dst, const T& src, pipeline& pipe);
+
+template<class T, size_t DstN, size_t SrcN>
+_CUDA_PIPELINE_QUALIFIER
+void memcpy_async(T(*dst)[DstN], const T(*src)[SrcN], pipeline& pipe);
+
+template<size_t N, typename T>
+_CUDA_PIPELINE_QUALIFIER
+auto segment(T* ptr) -> T(*)[N]
+{
+    return (T(*)[N])ptr;
+}
+
+_CUDA_PIPELINE_QUALIFIER
+pipeline::pipeline()
+    : current_batch(0)
+{
+}
+
+_CUDA_PIPELINE_QUALIFIER
+size_t pipeline::commit()
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_commit();
+    return this->current_batch++;
+}
+
+_CUDA_PIPELINE_QUALIFIER
+void pipeline::commit_and_wait()
+{
+    (void)pipeline::commit();
+    pipeline::wait_prior<0>();
+}
+
+_CUDA_PIPELINE_QUALIFIER
+void pipeline::wait(size_t batch)
+{
+    const size_t prior = this->current_batch > batch ? this->current_batch - batch : 0;
+
+    switch (prior) {
+    case  0 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<0>(); break;
+    case  1 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<1>(); break;
+    case  2 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<2>(); break;
+    case  3 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<3>(); break;
+    case  4 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<4>(); break;
+    case  5 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<5>(); break;
+    case  6 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<6>(); break;
+    case  7 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<7>(); break;
+    default : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<8>(); break;
+    }
+}
+
+template<unsigned N>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline::wait_prior()
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<N>();
+}
+
+# if defined(_CUDA_PIPELINE_ARCH_700_OR_LATER)
+_CUDA_PIPELINE_QUALIFIER
+void pipeline::arrive_on(awbarrier& barrier)
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_arrive_on(&barrier.barrier);
+}
+
+_CUDA_PIPELINE_QUALIFIER
+void pipeline::arrive_on(cuda::__block_scope_barrier_base & barrier)
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_arrive_on(reinterpret_cast<uint64_t *>(&barrier));
+}
+# endif
+
+template<class T>
+_CUDA_PIPELINE_QUALIFIER
+void memcpy_async(T& dst, const T& src, pipeline& pipe)
+{
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(&src) & (alignof(T) - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(&dst) & (alignof(T) - 1)));
+
+    if (__is_trivially_copyable(T)) {
+        _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_copy_relaxed<sizeof(T), alignof(T)>(
+                reinterpret_cast<void*>(&dst), reinterpret_cast<const void*>(&src));
+    } else {
+        dst = src;
+    }
+}
+
+template<class T, size_t DstN, size_t SrcN>
+_CUDA_PIPELINE_QUALIFIER
+void memcpy_async(T(*dst)[DstN], const T(*src)[SrcN], pipeline& pipe)
+{
+    constexpr size_t dst_size = sizeof(*dst);
+    constexpr size_t src_size = sizeof(*src);
+    static_assert(dst_size == 4 || dst_size == 8 || dst_size == 16, "Unsupported copy size.");
+    static_assert(src_size <= dst_size, "Source size must be less than or equal to destination size.");
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (dst_size - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (dst_size - 1)));
+
+    if (__is_trivially_copyable(T)) {
+        _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_copy_strict<sizeof(*dst), sizeof(*src)>(
+                reinterpret_cast<void*>(*dst), reinterpret_cast<const void*>(*src));
+    } else {
+        for (size_t i = 0; i < DstN; ++i) {
+            (*dst)[i] = (i < SrcN) ? (*src)[i] : T();
+        }
+    }
+}
+
+_CUDA_PIPELINE_END_NAMESPACE
+
+#endif /* !_CUDA_PIPELINE_H_ */
diff --git a/ext/cudart/include/cuda_pipeline_helpers.h b/ext/cudart/include/cuda_pipeline_helpers.h
new file mode 100644
index 00000000..48826407
--- /dev/null
+++ b/ext/cudart/include/cuda_pipeline_helpers.h
@@ -0,0 +1,373 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_PIPELINE_HELPERS_H_
+# define _CUDA_PIPELINE_HELPERS_H_
+
+# define _CUDA_PIPELINE_NAMESPACE       nvcuda::experimental
+# define _CUDA_PIPELINE_BEGIN_NAMESPACE namespace nvcuda { namespace experimental {
+# define _CUDA_PIPELINE_END_NAMESPACE   } }
+
+# define _CUDA_PIPELINE_INTERNAL_NAMESPACE       _CUDA_PIPELINE_NAMESPACE::__pipeline_internal
+# define _CUDA_PIPELINE_BEGIN_INTERNAL_NAMESPACE _CUDA_PIPELINE_BEGIN_NAMESPACE namespace __pipeline_internal {
+# define _CUDA_PIPELINE_END_INTERNAL_NAMESPACE   } _CUDA_PIPELINE_END_NAMESPACE
+
+# if !defined(_CUDA_PIPELINE_QUALIFIER)
+#  define _CUDA_PIPELINE_QUALIFIER inline __device__
+# endif
+# if !defined(_CUDA_PIPELINE_STATIC_QUALIFIER)
+#  define _CUDA_PIPELINE_STATIC_QUALIFIER static inline __device__
+# endif
+
+# if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+#  define _CUDA_PIPELINE_ARCH_700_OR_LATER
+# endif
+
+# if (__CUDA_ARCH__ >= 800)
+#  define _CUDA_PIPELINE_HAS_ASYNC_COPY 1
+# else
+#  define _CUDA_PIPELINE_HAS_ASYNC_COPY 0
+# endif
+
+# if !defined(_CUDA_PIPELINE_MAX_STAGES)
+#  define _CUDA_PIPELINE_MAX_STAGES 8
+# endif
+
+# if defined(__cplusplus) && ((__cplusplus >= 201103L) || (defined(_MSC_VER) && (_MSC_VER >= 1900)))
+#  define _CUDA_PIPELINE_CPLUSPLUS_11_OR_LATER
+# endif
+
+# if !defined(_CUDA_PIPELINE_DEBUG)
+#  if defined(__CUDACC_DEBUG__)
+#   define _CUDA_PIPELINE_DEBUG 1
+#  else
+#   define _CUDA_PIPELINE_DEBUG 0
+#  endif
+# endif
+
+# if defined(_CUDA_PIPELINE_DEBUG) && (_CUDA_PIPELINE_DEBUG == 1) && !defined(NDEBUG)
+#  if !defined(__CUDACC_RTC__)
+#   include <cassert>
+#  endif
+#  define _CUDA_PIPELINE_ASSERT(x) assert((x));
+#  define _CUDA_PIPELINE_ABORT() assert(0);
+# else
+#  define _CUDA_PIPELINE_ASSERT(x)
+#  define _CUDA_PIPELINE_ABORT() __trap();
+# endif
+
+# if defined(_CUDA_PIPELINE_CPLUSPLUS_11_OR_LATER)
+#  define _CUDA_PIPELINE_STATIC_ASSERT(c, m) static_assert(c, m)
+# else
+#  define _CUDA_PIPELINE_STATIC_ASSERT(c, m)
+# endif
+
+# if (defined(_MSC_VER) && !defined(_WIN64)) || defined(__arm__)
+#  define _CUDA_PIPELINE_ASM_PTR_CONSTRAINT "r"
+# else
+#  define _CUDA_PIPELINE_ASM_PTR_CONSTRAINT "l"
+# endif
+
+# if defined(__CUDACC_RTC__)
+typedef unsigned int       uint32_t;
+typedef unsigned long long uint64_t;
+typedef uint64_t           uintptr_t;
+# else
+#  include <stdint.h>
+# endif
+
+_CUDA_PIPELINE_BEGIN_INTERNAL_NAMESPACE
+
+_CUDA_PIPELINE_STATIC_ASSERT(sizeof(short) ==  2, "Size mismatch for type 'short'");
+_CUDA_PIPELINE_STATIC_ASSERT(sizeof(int)   ==  4, "Size mismatch for type 'int'");
+_CUDA_PIPELINE_STATIC_ASSERT(sizeof(int2)  ==  8, "Size mismatch for type 'int2'");
+_CUDA_PIPELINE_STATIC_ASSERT(sizeof(int4)  == 16, "Size mismatch for type 'int4'");
+
+extern "C" __device__ uint32_t __nvvm_get_smem_pointer(void *);
+
+template<size_t CopySize, size_t SourceSize>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_memcpy_sync(void* __restrict__ dst, const void* __restrict__ src)
+{
+    _CUDA_PIPELINE_STATIC_ASSERT(CopySize == 4 || CopySize == 8 || CopySize == 16, "Unsupported copy size.");
+    _CUDA_PIPELINE_STATIC_ASSERT(SourceSize <= CopySize, "Source size must be less than or equal to copy size");
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (CopySize - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (CopySize - 1)));
+
+    char* const d = reinterpret_cast<char*>(dst);
+    const char* const s = reinterpret_cast<const char*>(src);
+
+    size_t copy_step_size;
+    if (SourceSize == 0) {
+        copy_step_size = CopySize;
+    } else if (SourceSize == 2 || SourceSize == 4 || SourceSize == 8 || SourceSize == 16) {
+        copy_step_size = SourceSize;
+    } else {
+        copy_step_size = 1;
+    }
+
+    for (size_t i = 0; i < CopySize; i += copy_step_size) {
+        const bool copy_source = SourceSize && (i < SourceSize);
+
+        switch (copy_step_size) {
+        case 1:
+            d[i] = copy_source ? s[i] : char();
+            break;
+        case 2:
+            *reinterpret_cast<short*>(d + i) = copy_source ? *reinterpret_cast<const short*>(s + i) : short();
+            break;
+        case 4:
+            *reinterpret_cast<int*>(d + i) = copy_source ? *reinterpret_cast<const int*>(s + i) : int();
+            break;
+        case 8:
+            *reinterpret_cast<int2*>(d + i) = copy_source ? *reinterpret_cast<const int2*>(s + i) : int2();
+            break;
+        case 16:
+            *reinterpret_cast<int4*>(d + i) = copy_source ? *reinterpret_cast<const int4*>(s + i) : int4();
+            break;
+        }
+    }
+}
+
+template<bool UseHwAsyncCopy>
+struct ImplementationChooser;
+
+template<>
+struct ImplementationChooser<true> {
+    template<size_t CopySize, size_t SourceSize>
+    struct CpAsyncChooser {
+        _CUDA_PIPELINE_STATIC_QUALIFIER
+        void cp_async(void* __restrict__ dst, const void* __restrict__ src)
+        {
+            asm volatile ("cp.async.ca.shared.global [%0], [%1], %2, %3;"
+                :
+                : "r"(__nvvm_get_smem_pointer(dst)), _CUDA_PIPELINE_ASM_PTR_CONSTRAINT(src), "n"(CopySize),
+                  "n"(SourceSize)
+                : "memory");
+        }
+    };
+
+    template<size_t SourceSize>
+    struct CpAsyncChooser<16, SourceSize> {
+        _CUDA_PIPELINE_STATIC_QUALIFIER
+        void cp_async(void* __restrict__ dst, const void* __restrict__ src)
+        {
+            asm volatile ("cp.async.cg.shared.global [%0], [%1], %2, %3;"
+                :
+                : "r"(__nvvm_get_smem_pointer(dst)), _CUDA_PIPELINE_ASM_PTR_CONSTRAINT(src), "n"(16), "n"(SourceSize)
+                : "memory");
+        }
+    };
+
+    template<size_t CopySize, size_t SourceSize>
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_memcpy_async(void* __restrict__ dst, const void* __restrict__ src)
+    {
+        _CUDA_PIPELINE_STATIC_ASSERT(CopySize == 4 || CopySize == 8 || CopySize == 16, "Unsupported copy size.");
+        _CUDA_PIPELINE_STATIC_ASSERT(SourceSize <= CopySize, "Source size must be less than or equal to copy size");
+        _CUDA_PIPELINE_ASSERT(__isShared(dst));
+        _CUDA_PIPELINE_ASSERT(__isGlobal(src));
+        _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (CopySize - 1)));
+        _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (CopySize - 1)));
+
+        CpAsyncChooser<CopySize, SourceSize>::cp_async(dst, src);
+    }
+
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_commit()
+    {
+        asm volatile ("cp.async.commit_group;");
+    }
+
+    template<unsigned N>
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_wait_prior()
+    {
+        asm volatile ("cp.async.wait_group %0;"
+            :
+            : "n"(N < _CUDA_PIPELINE_MAX_STAGES ? N : _CUDA_PIPELINE_MAX_STAGES));
+    }
+
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_arrive_on(uint64_t* barrier)
+    {
+        _CUDA_PIPELINE_ASSERT(__isShared(barrier));
+
+        asm volatile ("cp.async.mbarrier.arrive.shared.b64 [%0];"
+            :
+            : "r"(__nvvm_get_smem_pointer(barrier)));
+    }
+};
+
+template<>
+struct ImplementationChooser<false> {
+    template<size_t CopySize, size_t SourceSize>
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_memcpy_async(void* __restrict__ dst, const void* __restrict__ src)
+    {
+        _CUDA_PIPELINE_STATIC_ASSERT(CopySize == 4 || CopySize == 8 || CopySize == 16, "Unsupported copy size.");
+        _CUDA_PIPELINE_STATIC_ASSERT(SourceSize <= CopySize, "Source size must be less than or equal to copy size");
+        _CUDA_PIPELINE_ASSERT(__isShared(dst));
+        _CUDA_PIPELINE_ASSERT(__isGlobal(src));
+        _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (CopySize - 1)));
+        _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (CopySize - 1)));
+
+        pipeline_memcpy_sync<CopySize, SourceSize>(dst, src);
+    }
+
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_commit()
+    {
+    }
+
+    template<unsigned N>
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_wait_prior()
+    {
+    }
+
+    _CUDA_PIPELINE_STATIC_QUALIFIER
+    void pipeline_arrive_on(uint64_t* barrier)
+    {
+    }
+};
+
+template<size_t CopySize, size_t SourceSize>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_memcpy_async(void* __restrict__ dst, const void* __restrict__ src)
+{
+    _CUDA_PIPELINE_STATIC_ASSERT(CopySize == 4 || CopySize == 8 || CopySize == 16, "Unsupported copy size.");
+    _CUDA_PIPELINE_STATIC_ASSERT(SourceSize <= CopySize, "Source size must be less than or equal to copy size");
+    _CUDA_PIPELINE_ASSERT(__isShared(dst));
+    _CUDA_PIPELINE_ASSERT(__isGlobal(src));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (CopySize - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (CopySize - 1)));
+
+    ImplementationChooser<_CUDA_PIPELINE_HAS_ASYNC_COPY>::pipeline_memcpy_async<CopySize, SourceSize>(dst, src);
+}
+
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_commit()
+{
+    ImplementationChooser<_CUDA_PIPELINE_HAS_ASYNC_COPY>::pipeline_commit();
+}
+
+template<unsigned N>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_wait_prior()
+{
+    ImplementationChooser<_CUDA_PIPELINE_HAS_ASYNC_COPY>::pipeline_wait_prior<N>();
+}
+
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_arrive_on(uint64_t* barrier)
+{
+    ImplementationChooser<_CUDA_PIPELINE_HAS_ASYNC_COPY>::pipeline_arrive_on(barrier);
+}
+
+template<size_t CopySize, size_t SourceSize>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_copy_strict(void* __restrict__ dst, const void* __restrict__ src)
+{
+    _CUDA_PIPELINE_STATIC_ASSERT(CopySize == 4 || CopySize == 8 || CopySize == 16, "Unsupported copy size.");
+    _CUDA_PIPELINE_STATIC_ASSERT(SourceSize <= CopySize, "Source size must be less than or equal to copy size.");
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (CopySize - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (CopySize - 1)));
+
+    if (__isGlobal(src) && __isShared(dst)) {
+        pipeline_memcpy_async<CopySize, SourceSize>(dst, src);
+    } else {
+        pipeline_memcpy_sync<CopySize, SourceSize>(dst, src);
+    }
+}
+
+template<size_t CopySize, size_t Align>
+_CUDA_PIPELINE_QUALIFIER
+void pipeline_copy_relaxed(void* __restrict__ dst, const void* __restrict__ src)
+{
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src) & (Align - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst) & (Align - 1)));
+
+    const char* s = reinterpret_cast<const char*>(src);
+    char* d = reinterpret_cast<char*>(dst);
+    size_t remaining = CopySize;
+
+    while (remaining) {
+        if ((Align >= 16) && (remaining >= 16)) {
+            pipeline_copy_strict<16, 16>(dst, src);
+            d += 16;
+            s += 16;
+            remaining -= 16;
+        } else if ((Align >= 8) && (remaining >= 8)) {
+            pipeline_copy_strict<8, 8>(dst, src);
+            d += 8;
+            s += 8;
+            remaining -= 8;
+        } else if ((Align >= 4) && (remaining >= 4)) {
+            pipeline_copy_strict<4, 4>(dst, src);
+            d += 4;
+            s += 4;
+            remaining -= 4;
+        } else if ((Align >= 2) && (remaining >= 2)) {
+            *reinterpret_cast<short*>(d) = *reinterpret_cast<const short*>(s);
+            d += 2;
+            s += 2;
+            remaining -= 2;
+        } else {
+            *d = *s;
+            d += 1;
+            s += 1;
+            remaining -= 1;
+        }
+    }
+}
+
+_CUDA_PIPELINE_END_INTERNAL_NAMESPACE
+
+#endif /* !_CUDA_PIPELINE_HELPERS_H_ */
diff --git a/ext/cudart/include/cuda_pipeline_primitives.h b/ext/cudart/include/cuda_pipeline_primitives.h
new file mode 100644
index 00000000..eaba0cfb
--- /dev/null
+++ b/ext/cudart/include/cuda_pipeline_primitives.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright 1993-2019 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef _CUDA_PIPELINE_PRIMITIVES_H_
+# define _CUDA_PIPELINE_PRIMITIVES_H_
+
+# include "cuda_pipeline_helpers.h"
+
+_CUDA_PIPELINE_STATIC_QUALIFIER
+void __pipeline_memcpy_async(void* __restrict__ dst_shared, const void* __restrict__ src_global, size_t size_and_align,
+                             size_t zfill = 0)
+{
+    _CUDA_PIPELINE_ASSERT(size_and_align == 4 || size_and_align == 8 || size_and_align == 16);
+    _CUDA_PIPELINE_ASSERT(zfill <= size_and_align);
+    _CUDA_PIPELINE_ASSERT(__isShared(dst_shared));
+    _CUDA_PIPELINE_ASSERT(__isGlobal(src_global));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(dst_shared) & (size_and_align - 1)));
+    _CUDA_PIPELINE_ASSERT(!(reinterpret_cast<uintptr_t>(src_global) & (size_and_align - 1)));
+
+    switch (size_and_align) {
+    case 16:
+        switch (zfill) {
+        case  0: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 16>(dst_shared, src_global); return;
+        case  1: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 15>(dst_shared, src_global); return;
+        case  2: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 14>(dst_shared, src_global); return;
+        case  3: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 13>(dst_shared, src_global); return;
+        case  4: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 12>(dst_shared, src_global); return;
+        case  5: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 11>(dst_shared, src_global); return;
+        case  6: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16, 10>(dst_shared, src_global); return;
+        case  7: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  9>(dst_shared, src_global); return;
+        case  8: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  8>(dst_shared, src_global); return;
+        case  9: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  7>(dst_shared, src_global); return;
+        case 10: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  6>(dst_shared, src_global); return;
+        case 11: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  5>(dst_shared, src_global); return;
+        case 12: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  4>(dst_shared, src_global); return;
+        case 13: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  3>(dst_shared, src_global); return;
+        case 14: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  2>(dst_shared, src_global); return;
+        case 15: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  1>(dst_shared, src_global); return;
+        case 16: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async<16,  0>(dst_shared, src_global); return;
+        default: _CUDA_PIPELINE_ABORT();                                                                   return;
+        }
+    case 8:
+        switch (zfill) {
+        case  0: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  8>(dst_shared, src_global); return;
+        case  1: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  7>(dst_shared, src_global); return;
+        case  2: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  6>(dst_shared, src_global); return;
+        case  3: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  5>(dst_shared, src_global); return;
+        case  4: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  4>(dst_shared, src_global); return;
+        case  5: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  3>(dst_shared, src_global); return;
+        case  6: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  2>(dst_shared, src_global); return;
+        case  7: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  1>(dst_shared, src_global); return;
+        case  8: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 8,  0>(dst_shared, src_global); return;
+        default: _CUDA_PIPELINE_ABORT();                                                                   return;
+        }
+    case 4:
+        switch (zfill) {
+        case  0: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 4,  4>(dst_shared, src_global); return;
+        case  1: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 4,  3>(dst_shared, src_global); return;
+        case  2: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 4,  2>(dst_shared, src_global); return;
+        case  3: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 4,  1>(dst_shared, src_global); return;
+        case  4: _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_memcpy_async< 4,  0>(dst_shared, src_global); return;
+        default: _CUDA_PIPELINE_ABORT();                                                                   return;
+        }
+    default:
+        _CUDA_PIPELINE_ABORT();
+        return;
+    }
+}
+
+_CUDA_PIPELINE_STATIC_QUALIFIER
+void __pipeline_commit()
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_commit();
+}
+
+_CUDA_PIPELINE_STATIC_QUALIFIER
+void __pipeline_wait_prior(size_t prior)
+{
+    switch (prior) {
+    case  0 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<0>(); return;
+    case  1 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<1>(); return;
+    case  2 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<2>(); return;
+    case  3 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<3>(); return;
+    case  4 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<4>(); return;
+    case  5 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<5>(); return;
+    case  6 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<6>(); return;
+    case  7 : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<7>(); return;
+    default : _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_wait_prior<8>(); return;
+    }
+}
+
+# if defined(_CUDA_PIPELINE_ARCH_700_OR_LATER)
+#  include "cuda_awbarrier_primitives.h"
+
+_CUDA_PIPELINE_STATIC_QUALIFIER
+void __pipeline_arrive_on(__mbarrier_t* barrier)
+{
+    _CUDA_PIPELINE_INTERNAL_NAMESPACE::pipeline_arrive_on(barrier);
+}
+# endif
+
+#endif /* !_CUDA_PIPELINE_PRIMITIVES_H_ */
diff --git a/ext/cudart/include/cuda_runtime.h b/ext/cudart/include/cuda_runtime.h
new file mode 100644
index 00000000..8d297bb6
--- /dev/null
+++ b/ext/cudart/include/cuda_runtime.h
@@ -0,0 +1,2725 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_RUNTIME_H__)
+#define __CUDA_RUNTIME_H__
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_H__
+#endif
+
+#if !defined(__CUDACC_RTC__)
+#if defined(__GNUC__)
+#if defined(__clang__) || (!defined(__PGIC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic push
+#endif
+#if defined(__clang__) || (!defined(__PGIC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)))
+#pragma GCC diagnostic ignored "-Wunused-function"
+#endif
+#elif defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable: 4820)
+#endif
+#endif
+
+#ifdef __QNX__
+#if (__GNUC__ == 4 && __GNUC_MINOR__ >= 7)
+typedef unsigned size_t;
+#endif
+#endif
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "crt/host_config.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "builtin_types.h"
+#include "library_types.h"
+#if !defined(__CUDACC_RTC__)
+#define EXCLUDE_FROM_RTC
+#include "channel_descriptor.h"
+#include "cuda_runtime_api.h"
+#include "driver_functions.h"
+#undef EXCLUDE_FROM_RTC
+#endif /* !__CUDACC_RTC__ */
+#include "crt/host_defines.h"
+#include "vector_functions.h"
+
+#if defined(__CUDACC__)
+
+#if defined(__CUDACC_RTC__)
+#include "nvrtc_device_runtime.h"
+#include "crt/device_functions.h"
+#include "crt/common_functions.h"
+#include "cuda_surface_types.h"
+#include "cuda_texture_types.h"
+#include "device_launch_parameters.h"
+
+#else /* !__CUDACC_RTC__ */
+#define EXCLUDE_FROM_RTC
+#include "crt/common_functions.h"
+#include "cuda_surface_types.h"
+#include "cuda_texture_types.h"
+#include "crt/device_functions.h"
+#include "device_launch_parameters.h"
+
+#if defined(__CUDACC_EXTENDED_LAMBDA__)
+#include <functional>
+#include <utility>
+struct  __device_builtin__ __nv_lambda_preheader_injection { };
+#endif /* defined(__CUDACC_EXTENDED_LAMBDA__) */
+
+#undef EXCLUDE_FROM_RTC
+#endif /* __CUDACC_RTC__ */
+
+#endif /* __CUDACC__ */
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus) && !defined(__CUDACC_RTC__)
+
+#if __cplusplus >= 201103
+#include <utility>
+#endif
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+/**
+ * \addtogroup CUDART_HIGHLEVEL
+ * @{
+ */
+
+/**
+ *\brief Launches a device function
+ *
+ * The function invokes kernel \p func on \p gridDim (\p gridDim.x &times; \p gridDim.y
+ * &times; \p gridDim.z) grid of blocks. Each block contains \p blockDim (\p blockDim.x &times;
+ * \p blockDim.y &times; \p blockDim.z) threads.
+ *
+ * If the kernel has N parameters the \p args should point to array of N pointers.
+ * Each pointer, from <tt>args[0]</tt> to <tt>args[N - 1]</tt>, point to the region
+ * of memory from which the actual parameter will be copied.
+ *
+ * \p sharedMem sets the amount of dynamic shared memory that will be available to
+ * each thread block.
+ *
+ * \p stream specifies a stream the invocation is associated to.
+ *
+ * \param func        - Device function symbol
+ * \param gridDim     - Grid dimentions
+ * \param blockDim    - Block dimentions
+ * \param args        - Arguments
+ * \param sharedMem   - Shared memory (defaults to 0)
+ * \param stream      - Stream identifier (defaults to NULL)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorSharedObjectInitFailed,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C API)"
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaLaunchKernel(
+  const T *func,
+  dim3 gridDim,
+  dim3 blockDim,
+  void **args,
+  size_t sharedMem = 0,
+  cudaStream_t stream = 0
+)
+{
+    return ::cudaLaunchKernel((const void *)func, gridDim, blockDim, args, sharedMem, stream);
+}
+
+
+#if __cplusplus >= 201103 || defined(__DOXYGEN_ONLY__)
+/**
+ * \brief Launches a CUDA function with launch-time configuration
+ *
+ * Invokes the kernel \p func on \p config->gridDim (\p config->gridDim.x
+ * &times; \p config->gridDim.y &times; \p config->gridDim.z) grid of blocks.
+ * Each block contains \p config->blockDim (\p config->blockDim.x &times;
+ * \p config->blockDim.y &times; \p config->blockDim.z) threads.
+ *
+ * \p config->dynamicSmemBytes sets the amount of dynamic shared memory that
+ * will be available to each thread block.
+ *
+ * \p config->stream specifies a stream the invocation is associated to.
+ *
+ * Configuration beyond grid and block dimensions, dynamic shared memory size,
+ * and stream can be provided with the following two fields of \p config:
+ *
+ * \p config->attrs is an array of \p config->numAttrs contiguous
+ * ::cudaLaunchAttribute elements. The value of this pointer is not considered
+ * if \p config->numAttrs is zero. However, in that case, it is recommended to
+ * set the pointer to NULL.
+ * \p config->numAttrs is the number of attributes populating the first
+ * \p config->numAttrs positions of the \p config->attrs array.
+ *
+ * The kernel arguments should be passed as arguments to this function via the
+ * \p args parameter pack.
+ *
+ * The C API version of this function, \p cudaLaunchKernelExC, is also available
+ * for pre-C++11 compilers and for use cases where the ability to pass kernel
+ * parameters via void* array is preferable.
+ *
+ * \param config - Launch configuration
+ * \param func   - Kernel to launch
+ * \param args   - Parameter pack of kernel parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorSharedObjectInitFailed,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaLaunchKernelExC(const cudaLaunchConfig_t *config, const void *func, void **args) "cudaLaunchKernelEx (C API)",
+ * ::cuLaunchKernelEx
+ */
+template<typename... ExpTypes, typename... ActTypes>
+static __inline__ __host__ cudaError_t cudaLaunchKernelEx(
+  const cudaLaunchConfig_t *config,
+  void (*kernel)(ExpTypes...),
+  ActTypes &&... args
+)
+{
+    return [&](ExpTypes... coercedArgs){
+        void *pArgs[] = { &coercedArgs... };
+        return ::cudaLaunchKernelExC(config, (const void *)kernel, pArgs);
+    }(std::forward<ActTypes>(args)...);
+}
+# endif
+
+/**
+ *\brief Launches a device function
+ *
+ * The function invokes kernel \p func on \p gridDim (\p gridDim.x &times; \p gridDim.y
+ * &times; \p gridDim.z) grid of blocks. Each block contains \p blockDim (\p blockDim.x &times;
+ * \p blockDim.y &times; \p blockDim.z) threads.
+ *
+ * The device on which this kernel is invoked must have a non-zero value for
+ * the device attribute ::cudaDevAttrCooperativeLaunch.
+ *
+ * The total number of blocks launched cannot exceed the maximum number of blocks per
+ * multiprocessor as returned by ::cudaOccupancyMaxActiveBlocksPerMultiprocessor (or
+ * ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ * as specified by the device attribute ::cudaDevAttrMultiProcessorCount.
+ *
+ * The kernel cannot make use of CUDA dynamic parallelism.
+ *
+ * If the kernel has N parameters the \p args should point to array of N pointers.
+ * Each pointer, from <tt>args[0]</tt> to <tt>args[N - 1]</tt>, point to the region
+ * of memory from which the actual parameter will be copied.
+ *
+ * \p sharedMem sets the amount of dynamic shared memory that will be available to
+ * each thread block.
+ *
+ * \p stream specifies a stream the invocation is associated to.
+ *
+ * \param func        - Device function symbol
+ * \param gridDim     - Grid dimentions
+ * \param blockDim    - Block dimentions
+ * \param args        - Arguments
+ * \param sharedMem   - Shared memory (defaults to 0)
+ * \param stream      - Stream identifier (defaults to NULL)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorSharedObjectInitFailed
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchCooperativeKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchCooperativeKernel (C API)"
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaLaunchCooperativeKernel(
+  const T *func,
+  dim3 gridDim,
+  dim3 blockDim,
+  void **args,
+  size_t sharedMem = 0,
+  cudaStream_t stream = 0
+)
+{
+    return ::cudaLaunchCooperativeKernel((const void *)func, gridDim, blockDim, args, sharedMem, stream);
+}
+
+/**
+ * \brief \hl Creates an event object with the specified flags
+ *
+ * Creates an event object with the specified flags. Valid flags include:
+ * - ::cudaEventDefault: Default event creation flag.
+ * - ::cudaEventBlockingSync: Specifies that event should use blocking
+ *   synchronization. A host thread that uses ::cudaEventSynchronize() to wait
+ *   on an event created with this flag will block until the event actually
+ *   completes.
+ * - ::cudaEventDisableTiming: Specifies that the created event does not need
+ *   to record timing data.  Events created with this flag specified and
+ *   the ::cudaEventBlockingSync flag not specified will provide the best
+ *   performance when used with ::cudaStreamWaitEvent() and ::cudaEventQuery().
+ *
+ * \param event - Newly created event
+ * \param flags - Flags for new event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventRecord, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cudaStreamWaitEvent
+ */
+static __inline__ __host__ cudaError_t cudaEventCreate(
+  cudaEvent_t  *event,
+  unsigned int  flags
+)
+{
+  return ::cudaEventCreateWithFlags(event, flags);
+}
+
+/**
+ * \brief \hl Allocates page-locked memory on the host
+ *
+ * Allocates \p size bytes of host memory that is page-locked and accessible
+ * to the device. The driver tracks the virtual memory ranges allocated with
+ * this function and automatically accelerates calls to functions such as
+ * ::cudaMemcpy(). Since the memory can be accessed directly by the device, it
+ * can be read or written with much higher bandwidth than pageable memory
+ * obtained with functions such as ::malloc(). Allocating excessive amounts of
+ * pinned memory may degrade system performance, since it reduces the amount
+ * of memory available to the system for paging. As a result, this function is
+ * best used sparingly to allocate staging areas for data exchange between host
+ * and device.
+ *
+ * The \p flags parameter enables different options to be specified that affect
+ * the allocation, as follows.
+ * - ::cudaHostAllocDefault: This flag's value is defined to be 0.
+ * - ::cudaHostAllocPortable: The memory returned by this call will be
+ * considered as pinned memory by all CUDA contexts, not just the one that
+ * performed the allocation.
+ * - ::cudaHostAllocMapped: Maps the allocation into the CUDA address space.
+ * The device pointer to the memory may be obtained by calling
+ * ::cudaHostGetDevicePointer().
+ * - ::cudaHostAllocWriteCombined: Allocates the memory as write-combined (WC).
+ * WC memory can be transferred across the PCI Express bus more quickly on some
+ * system configurations, but cannot be read efficiently by most CPUs.  WC
+ * memory is a good option for buffers that will be written by the CPU and read
+ * by the device via mapped pinned memory or host->device transfers.
+ *
+ * All of these flags are orthogonal to one another: a developer may allocate
+ * memory that is portable, mapped and/or write-combined with no restrictions.
+ *
+ * ::cudaSetDeviceFlags() must have been called with the ::cudaDeviceMapHost
+ * flag in order for the ::cudaHostAllocMapped flag to have any effect.
+ *
+ * The ::cudaHostAllocMapped flag may be specified on CUDA contexts for devices
+ * that do not support mapped pinned memory. The failure is deferred to
+ * ::cudaHostGetDevicePointer() because the memory may be mapped into other
+ * CUDA contexts via the ::cudaHostAllocPortable flag.
+ *
+ * Memory allocated by this function must be freed with ::cudaFreeHost().
+ *
+ * \param ptr   - Device pointer to allocated memory
+ * \param size  - Requested allocation size in bytes
+ * \param flags - Requested properties of allocated memory
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaSetDeviceFlags,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc
+ */
+static __inline__ __host__ cudaError_t cudaMallocHost(
+  void         **ptr,
+  size_t         size,
+  unsigned int   flags
+)
+{
+  return ::cudaHostAlloc(ptr, size, flags);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaHostAlloc(
+  T            **ptr,
+  size_t         size,
+  unsigned int   flags
+)
+{
+  return ::cudaHostAlloc((void**)(void*)ptr, size, flags);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaHostGetDevicePointer(
+  T            **pDevice,
+  void          *pHost,
+  unsigned int   flags
+)
+{
+  return ::cudaHostGetDevicePointer((void**)(void*)pDevice, pHost, flags);
+}
+
+/**
+ * \brief Allocates memory that will be automatically managed by the Unified Memory system
+ *
+ * Allocates \p size bytes of managed memory on the device and returns in
+ * \p *devPtr a pointer to the allocated memory. If the device doesn't support
+ * allocating managed memory, ::cudaErrorNotSupported is returned. Support
+ * for managed memory can be queried using the device attribute
+ * ::cudaDevAttrManagedMemory. The allocated memory is suitably
+ * aligned for any kind of variable. The memory is not cleared. If \p size
+ * is 0, ::cudaMallocManaged returns ::cudaErrorInvalidValue. The pointer
+ * is valid on the CPU and on all GPUs in the system that support managed memory.
+ * All accesses to this pointer must obey the Unified Memory programming model.
+ *
+ * \p flags specifies the default stream association for this allocation.
+ * \p flags must be one of ::cudaMemAttachGlobal or ::cudaMemAttachHost. The
+ * default value for \p flags is ::cudaMemAttachGlobal.
+ * If ::cudaMemAttachGlobal is specified, then this memory is accessible from
+ * any stream on any device. If ::cudaMemAttachHost is specified, then the
+ * allocation should not be accessed from devices that have a zero value for the
+ * device attribute ::cudaDevAttrConcurrentManagedAccess; an explicit call to
+ * ::cudaStreamAttachMemAsync will be required to enable access on such devices.
+ *
+ * If the association is later changed via ::cudaStreamAttachMemAsync to
+ * a single stream, the default association, as specifed during ::cudaMallocManaged,
+ * is restored when that stream is destroyed. For __managed__ variables, the
+ * default association is always ::cudaMemAttachGlobal. Note that destroying a
+ * stream is an asynchronous operation, and as a result, the change to default
+ * association won't happen until all work in the stream has completed.
+ *
+ * Memory allocated with ::cudaMallocManaged should be released with ::cudaFree.
+ *
+ * Device memory oversubscription is possible for GPUs that have a non-zero value for the
+ * device attribute ::cudaDevAttrConcurrentManagedAccess. Managed memory on
+ * such GPUs may be evicted from device memory to host memory at any time by the Unified
+ * Memory driver in order to make room for other allocations.
+ *
+ * In a multi-GPU system where all GPUs have a non-zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess, managed memory may not be populated when this
+ * API returns and instead may be populated on access. In such systems, managed memory can
+ * migrate to any processor's memory at any time. The Unified Memory driver will employ heuristics to
+ * maintain data locality and prevent excessive page faults to the extent possible. The application
+ * can also guide the driver about memory usage patterns via ::cudaMemAdvise. The application
+ * can also explicitly migrate memory to a desired processor's memory via
+ * ::cudaMemPrefetchAsync.
+ *
+ * In a multi-GPU system where all of the GPUs have a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess and all the GPUs have peer-to-peer support
+ * with each other, the physical storage for managed memory is created on the GPU which is active
+ * at the time ::cudaMallocManaged is called. All other GPUs will reference the data at reduced
+ * bandwidth via peer mappings over the PCIe bus. The Unified Memory driver does not migrate
+ * memory among such GPUs.
+ *
+ * In a multi-GPU system where not all GPUs have peer-to-peer support with each other and
+ * where the value of the device attribute ::cudaDevAttrConcurrentManagedAccess
+ * is zero for at least one of those GPUs, the location chosen for physical storage of managed
+ * memory is system-dependent.
+ * - On Linux, the location chosen will be device memory as long as the current set of active
+ * contexts are on devices that either have peer-to-peer support with each other or have a
+ * non-zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ * If there is an active context on a GPU that does not have a non-zero value for that device
+ * attribute and it does not have peer-to-peer support with the other devices that have active
+ * contexts on them, then the location for physical storage will be 'zero-copy' or host memory.
+ * Note that this means that managed memory that is located in device memory is migrated to
+ * host memory if a new context is created on a GPU that doesn't have a non-zero value for
+ * the device attribute and does not support peer-to-peer with at least one of the other devices
+ * that has an active context. This in turn implies that context creation may fail if there is
+ * insufficient host memory to migrate all managed allocations.
+ * - On Windows, the physical storage is always created in 'zero-copy' or host memory.
+ * All GPUs will reference the data at reduced bandwidth over the PCIe bus. In these
+ * circumstances, use of the environment variable CUDA_VISIBLE_DEVICES is recommended to
+ * restrict CUDA to only use those GPUs that have peer-to-peer support.
+ * Alternatively, users can also set CUDA_MANAGED_FORCE_DEVICE_ALLOC to a non-zero
+ * value to force the driver to always use device memory for physical storage.
+ * When this environment variable is set to a non-zero value, all devices used in
+ * that process that support managed memory have to be peer-to-peer compatible
+ * with each other. The error ::cudaErrorInvalidDevice will be returned if a device
+ * that supports managed memory is used and it is not peer-to-peer compatible with
+ * any of the other managed memory supporting devices that were previously used in
+ * that process, even if ::cudaDeviceReset has been called on those devices. These
+ * environment variables are described in the CUDA programming guide under the
+ * "CUDA environment variables" section.
+ * - On ARM, managed memory is not available on discrete gpu with Drive PX-2.
+ *
+ * \param devPtr - Pointer to allocated device memory
+ * \param size   - Requested allocation size in bytes
+ * \param flags  - Must be either ::cudaMemAttachGlobal or ::cudaMemAttachHost (defaults to ::cudaMemAttachGlobal)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray, ::cudaFreeArray,
+ * ::cudaMalloc3D, ::cudaMalloc3DArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc, ::cudaDeviceGetAttribute, ::cudaStreamAttachMemAsync
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocManaged(
+  T            **devPtr,
+  size_t         size,
+  unsigned int   flags = cudaMemAttachGlobal
+)
+{
+  return ::cudaMallocManaged((void**)(void*)devPtr, size, flags);
+}
+
+/**
+ * \brief Attach memory to a stream asynchronously
+ *
+ * Enqueues an operation in \p stream to specify stream association of
+ * \p length bytes of memory starting from \p devPtr. This function is a
+ * stream-ordered operation, meaning that it is dependent on, and will
+ * only take effect when, previous work in stream has completed. Any
+ * previous association is automatically replaced.
+ *
+ * \p devPtr must point to an one of the following types of memories:
+ * - managed memory declared using the __managed__ keyword or allocated with
+ *   ::cudaMallocManaged.
+ * - a valid host-accessible region of system-allocated pageable memory. This
+ *   type of memory may only be specified if the device associated with the
+ *   stream reports a non-zero value for the device attribute
+ *   ::cudaDevAttrPageableMemoryAccess.
+ *
+ * For managed allocations, \p length must be either zero or the entire
+ * allocation's size. Both indicate that the entire allocation's stream
+ * association is being changed. Currently, it is not possible to change stream
+ * association for a portion of a managed allocation.
+ *
+ * For pageable allocations, \p length must be non-zero.
+ *
+ * The stream association is specified using \p flags which must be
+ * one of ::cudaMemAttachGlobal, ::cudaMemAttachHost or ::cudaMemAttachSingle.
+ * The default value for \p flags is ::cudaMemAttachSingle
+ * If the ::cudaMemAttachGlobal flag is specified, the memory can be accessed
+ * by any stream on any device.
+ * If the ::cudaMemAttachHost flag is specified, the program makes a guarantee
+ * that it won't access the memory on the device from any stream on a device that
+ * has a zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ * If the ::cudaMemAttachSingle flag is specified and \p stream is associated with
+ * a device that has a zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess,
+ * the program makes a guarantee that it will only access the memory on the device
+ * from \p stream. It is illegal to attach singly to the NULL stream, because the
+ * NULL stream is a virtual global stream and not a specific stream. An error will
+ * be returned in this case.
+ *
+ * When memory is associated with a single stream, the Unified Memory system will
+ * allow CPU access to this memory region so long as all operations in \p stream
+ * have completed, regardless of whether other streams are active. In effect,
+ * this constrains exclusive ownership of the managed memory region by
+ * an active GPU to per-stream activity instead of whole-GPU activity.
+ *
+ * Accessing memory on the device from streams that are not associated with
+ * it will produce undefined results. No error checking is performed by the
+ * Unified Memory system to ensure that kernels launched into other streams
+ * do not access this region.
+ *
+ * It is a program's responsibility to order calls to ::cudaStreamAttachMemAsync
+ * via events, synchronization or other means to ensure legal access to memory
+ * at all times. Data visibility and coherency will be changed appropriately
+ * for all kernels which follow a stream-association change.
+ *
+ * If \p stream is destroyed while data is associated with it, the association is
+ * removed and the association reverts to the default visibility of the allocation
+ * as specified at ::cudaMallocManaged. For __managed__ variables, the default
+ * association is always ::cudaMemAttachGlobal. Note that destroying a stream is an
+ * asynchronous operation, and as a result, the change to default association won't
+ * happen until all work in the stream has completed.
+ *
+ * \param stream  - Stream in which to enqueue the attach operation
+ * \param devPtr  - Pointer to memory (must be a pointer to managed memory or
+ *                  to a valid host-accessible region of system-allocated
+ *                  memory)
+ * \param length  - Length of memory (defaults to zero)
+ * \param flags   - Must be one of ::cudaMemAttachGlobal, ::cudaMemAttachHost or ::cudaMemAttachSingle (defaults to ::cudaMemAttachSingle)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotReady,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamWaitEvent, ::cudaStreamSynchronize, ::cudaStreamAddCallback, ::cudaStreamDestroy, ::cudaMallocManaged
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaStreamAttachMemAsync(
+  cudaStream_t   stream,
+  T              *devPtr,
+  size_t         length = 0,
+  unsigned int   flags  = cudaMemAttachSingle
+)
+{
+  return ::cudaStreamAttachMemAsync(stream, (void*)devPtr, length, flags);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMalloc(
+  T      **devPtr,
+  size_t   size
+)
+{
+  return ::cudaMalloc((void**)(void*)devPtr, size);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocHost(
+  T            **ptr,
+  size_t         size,
+  unsigned int   flags = 0
+)
+{
+  return cudaMallocHost((void**)(void*)ptr, size, flags);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocPitch(
+  T      **devPtr,
+  size_t  *pitch,
+  size_t   width,
+  size_t   height
+)
+{
+  return ::cudaMallocPitch((void**)(void*)devPtr, pitch, width, height);
+}
+
+/**
+ * \brief Allocate from a pool
+ *
+ * This is an alternate spelling for cudaMallocFromPoolAsync
+ * made available through operator overloading.
+ *
+ * \sa ::cudaMallocFromPoolAsync,
+ * \ref ::cudaMallocAsync(void** ptr, size_t size, cudaStream_t hStream)  "cudaMallocAsync (C API)"
+ */
+static __inline__ __host__ cudaError_t cudaMallocAsync(
+  void        **ptr,
+  size_t        size,
+  cudaMemPool_t memPool,
+  cudaStream_t  stream
+)
+{
+  return ::cudaMallocFromPoolAsync(ptr, size, memPool, stream);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocAsync(
+  T           **ptr,
+  size_t        size,
+  cudaMemPool_t memPool,
+  cudaStream_t  stream
+)
+{
+  return ::cudaMallocFromPoolAsync((void**)(void*)ptr, size, memPool, stream);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocAsync(
+  T           **ptr,
+  size_t        size,
+  cudaStream_t  stream
+)
+{
+  return ::cudaMallocAsync((void**)(void*)ptr, size, stream);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaMallocFromPoolAsync(
+  T           **ptr,
+  size_t        size,
+  cudaMemPool_t memPool,
+  cudaStream_t  stream
+)
+{
+  return ::cudaMallocFromPoolAsync((void**)(void*)ptr, size, memPool, stream);
+}
+
+#if defined(__CUDACC__)
+
+/**
+ * \brief \hl Copies data to the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src
+ * to the memory area \p offset bytes from the start of symbol
+ * \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToDevice.
+ *
+ * \param symbol - Device symbol reference
+ * \param src    - Source memory address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_sync
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaMemcpyToSymbol(
+  const T                   &symbol,
+  const void                *src,
+        size_t               count,
+        size_t               offset = 0,
+        enum cudaMemcpyKind  kind   = cudaMemcpyHostToDevice
+)
+{
+  return ::cudaMemcpyToSymbol((const void*)&symbol, src, count, offset, kind);
+}
+
+/**
+ * \brief \hl Copies data to the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src
+ * to the memory area \p offset bytes from the start of symbol
+ * \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToDevice.
+ *
+ * ::cudaMemcpyToSymbolAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If
+ * \p kind is ::cudaMemcpyHostToDevice and \p stream is non-zero, the copy
+ * may overlap with operations in other streams.
+ *
+ * \param symbol - Device symbol reference
+ * \param src    - Source memory address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_async
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyFromSymbolAsync
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaMemcpyToSymbolAsync(
+  const T                   &symbol,
+  const void                *src,
+        size_t               count,
+        size_t               offset = 0,
+        enum cudaMemcpyKind  kind   = cudaMemcpyHostToDevice,
+        cudaStream_t         stream = 0
+)
+{
+  return ::cudaMemcpyToSymbolAsync((const void*)&symbol, src, count, offset, kind, stream);
+}
+
+/**
+ * \brief \hl Copies data from the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area \p offset bytes
+ * from the start of symbol \p symbol to the memory area pointed to by \p dst.
+ * The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost or ::cudaMemcpyDeviceToDevice.
+ *
+ * \param dst    - Destination memory address
+ * \param symbol - Device symbol reference
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_sync
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaMemcpyFromSymbol(
+        void                *dst,
+  const T                   &symbol,
+        size_t               count,
+        size_t               offset = 0,
+        enum cudaMemcpyKind  kind   = cudaMemcpyDeviceToHost
+)
+{
+  return ::cudaMemcpyFromSymbol(dst, (const void*)&symbol, count, offset, kind);
+}
+
+/**
+ * \brief \hl Copies data from the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area \p offset bytes
+ * from the start of symbol \p symbol to the memory area pointed to by \p dst.
+ * The memory areas may not overlap. \p symbol is a variable that resides in
+ * global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost or ::cudaMemcpyDeviceToDevice.
+ *
+ * ::cudaMemcpyFromSymbolAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally be
+ * associated to a stream by passing a non-zero \p stream argument. If \p kind
+ * is ::cudaMemcpyDeviceToHost and \p stream is non-zero, the copy may overlap
+ * with operations in other streams.
+ *
+ * \param dst    - Destination memory address
+ * \param symbol - Device symbol reference
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_async
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaMemcpyFromSymbolAsync(
+        void                *dst,
+  const T                   &symbol,
+        size_t               count,
+        size_t               offset = 0,
+        enum cudaMemcpyKind  kind   = cudaMemcpyDeviceToHost,
+        cudaStream_t         stream = 0
+)
+{
+  return ::cudaMemcpyFromSymbolAsync(dst, (const void*)&symbol, count, offset, kind, stream);
+}
+
+/**
+ * \brief Creates a memcpy node to copy to a symbol on the device and adds it to a graph
+ *
+ * Creates a new memcpy node to copy to \p symbol and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p src to the memory area pointed to by \p offset bytes from the start
+ * of symbol \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyToSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeFromSymbol,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphAddMemcpyNodeToSymbol(
+    cudaGraphNode_t *pGraphNode,
+    cudaGraph_t graph,
+    const cudaGraphNode_t *pDependencies,
+    size_t numDependencies,
+    const T &symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+  return ::cudaGraphAddMemcpyNodeToSymbol(pGraphNode, graph, pDependencies, numDependencies, (const void*)&symbol, src, count, offset, kind);
+}
+
+/**
+ * \brief Creates a memcpy node to copy from a symbol on the device and adds it to a graph
+ *
+ * Creates a new memcpy node to copy from \p symbol and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p offset bytes from the start of symbol \p symbol to the memory area
+ *  pointed to by \p dst. The memory areas may not overlap. \p symbol is a variable
+ *  that resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyFromSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeToSymbol,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphAddMemcpyNodeFromSymbol(
+    cudaGraphNode_t* pGraphNode,
+    cudaGraph_t graph,
+    const cudaGraphNode_t* pDependencies,
+    size_t numDependencies,
+    void* dst,
+    const T &symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+  return ::cudaGraphAddMemcpyNodeFromSymbol(pGraphNode, graph, pDependencies, numDependencies, dst, (const void*)&symbol, count, offset, kind);
+}
+
+/**
+ * \brief Sets a memcpy node's parameters to copy to a symbol on the device
+ *
+ * Sets the parameters of memcpy node \p node to the copy described by the provided parameters.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p src to the memory area pointed to by \p offset bytes from the start
+ * of symbol \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * \param node            - Node to set the parameters for
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyToSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphMemcpyNodeSetParamsToSymbol(
+    cudaGraphNode_t node,
+    const T &symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+  return ::cudaGraphMemcpyNodeSetParamsToSymbol(node, (const void*)&symbol, src, count, offset, kind);
+}
+
+/**
+ * \brief Sets a memcpy node's parameters to copy from a symbol on the device
+ *
+ * Sets the parameters of memcpy node \p node to the copy described by the provided parameters.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p offset bytes from the start of symbol \p symbol to the memory area
+ *  pointed to by \p dst. The memory areas may not overlap. \p symbol is a variable
+ *  that resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * \param node            - Node to set the parameters for
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphMemcpyNodeSetParamsFromSymbol(
+    cudaGraphNode_t node,
+    void* dst,
+    const T &symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+  return ::cudaGraphMemcpyNodeSetParamsFromSymbol(node, dst, (const void*)&symbol, count, offset, kind);
+}
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec to copy to a symbol on the device
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained the given params at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * \p src and \p symbol must be allocated from the same contexts as the original source and
+ * destination memory.  The instantiation-time memory operands must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * the original memory operands are multidimensional.
+ *
+ * \param hGraphExec      - The executable graph in which to set the specified node
+ * \param node            - Memcpy node from the graph which was used to instantiate graphExec
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeToSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphExecMemcpyNodeSetParamsToSymbol(
+    cudaGraphExec_t hGraphExec,
+    cudaGraphNode_t node,
+    const T &symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+    return ::cudaGraphExecMemcpyNodeSetParamsToSymbol(hGraphExec, node, (const void*)&symbol, src, count, offset, kind);
+}
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec to copy from a symbol on the device
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained the given params at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * \p symbol and \p dst must be allocated from the same contexts as the original source and
+ * destination memory.  The instantiation-time memory operands must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * the original memory operands are multidimensional.
+ *
+ * \param hGraphExec      - The executable graph in which to set the specified node
+ * \param node            - Memcpy node from the graph which was used to instantiate graphExec
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGraphExecMemcpyNodeSetParamsFromSymbol(
+    cudaGraphExec_t hGraphExec,
+    cudaGraphNode_t node,
+    void* dst,
+    const T &symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind)
+{
+  return ::cudaGraphExecMemcpyNodeSetParamsFromSymbol(hGraphExec, node, dst, (const void*)&symbol, count, offset, kind);
+}
+
+#if __cplusplus >= 201103
+
+/**
+ * \brief Creates a user object by wrapping a C++ object
+ *
+ * TODO detail
+ *
+ * \param object_out      - Location to return the user object handle
+ * \param objectToWrap    - This becomes the \ptr argument to ::cudaUserObjectCreate. A
+ *                          lambda will be passed for the \p destroy argument, which calls
+ *                          delete on this object pointer.
+ * \param initialRefcount - The initial refcount to create the object with, typically 1. The
+ *                          initial references are owned by the calling thread.
+ * \param flags           - Currently it is required to pass cudaUserObjectNoDestructorSync,
+ *                          which is the only defined flag. This indicates that the destroy
+ *                          callback cannot be waited on by any CUDA API. Users requiring
+ *                          synchronization of the callback should signal its completion
+ *                          manually.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectCreate
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaUserObjectCreate(
+    cudaUserObject_t *object_out,
+    T *objectToWrap,
+    unsigned int initialRefcount,
+    unsigned int flags)
+{
+    return ::cudaUserObjectCreate(
+            object_out,
+            objectToWrap,
+            [](void *vpObj) { delete reinterpret_cast<T *>(vpObj); },
+            initialRefcount,
+            flags);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaUserObjectCreate(
+    cudaUserObject_t *object_out,
+    T *objectToWrap,
+    unsigned int initialRefcount,
+    cudaUserObjectFlags flags)
+{
+    return cudaUserObjectCreate(object_out, objectToWrap, initialRefcount, (unsigned int)flags);
+}
+
+#endif
+
+/**
+ * \brief \hl Finds the address associated with a CUDA symbol
+ *
+ * Returns in \p *devPtr the address of symbol \p symbol on the device.
+ * \p symbol can either be a variable that resides in global or constant memory space.
+ * If \p symbol cannot be found, or if \p symbol is not declared
+ * in the global or constant memory space, \p *devPtr is unchanged and the error
+ * ::cudaErrorInvalidSymbol is returned.
+ *
+ * \param devPtr - Return device pointer associated with symbol
+ * \param symbol - Device symbol reference
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaGetSymbolAddress(void**, const void*) "cudaGetSymbolAddress (C API)",
+ * \ref ::cudaGetSymbolSize(size_t*, const T&) "cudaGetSymbolSize (C++ API)"
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGetSymbolAddress(
+        void **devPtr,
+  const T     &symbol
+)
+{
+  return ::cudaGetSymbolAddress(devPtr, (const void*)&symbol);
+}
+
+/**
+ * \brief \hl Finds the size of the object associated with a CUDA symbol
+ *
+ * Returns in \p *size the size of symbol \p symbol. \p symbol must be a
+ * variable that resides in global or constant memory space.
+ * If \p symbol cannot be found, or if \p symbol is not declared
+ * in global or constant memory space, \p *size is unchanged and the error
+ * ::cudaErrorInvalidSymbol is returned.
+ *
+ * \param size   - Size of object associated with symbol
+ * \param symbol - Device symbol reference
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaGetSymbolAddress(void**, const T&) "cudaGetSymbolAddress (C++ API)",
+ * \ref ::cudaGetSymbolSize(size_t*, const void*) "cudaGetSymbolSize (C API)"
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaGetSymbolSize(
+        size_t *size,
+  const T      &symbol
+)
+{
+  return ::cudaGetSymbolSize(size, (const void*)&symbol);
+}
+
+/**
+ * \brief \hl Binds a memory area to a texture
+ *
+ * Binds \p size bytes of the memory area pointed to by \p devPtr to texture
+ * reference \p tex. \p desc describes how the memory is interpreted when
+ * fetching values from the texture. The \p offset parameter is an optional
+ * byte offset as with the low-level
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture()"
+ * function. Any memory previously bound to \p tex is unbound.
+ *
+ * \param offset - Offset in bytes
+ * \param tex    - Texture to bind
+ * \param devPtr - Memory area on device
+ * \param desc   - Channel format
+ * \param size   - Size of the memory area pointed to by devPtr
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode>&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTexture(
+        size_t                           *offset,
+  const struct texture<T, dim, readMode> &tex,
+  const void                             *devPtr,
+  const struct cudaChannelFormatDesc     &desc,
+        size_t                            size = UINT_MAX
+)
+{
+  return ::cudaBindTexture(offset, &tex, devPtr, &desc, size);
+}
+
+/**
+ * \brief \hl Binds a memory area to a texture
+ *
+ * Binds \p size bytes of the memory area pointed to by \p devPtr to texture
+ * reference \p tex. The channel descriptor is inherited from the texture
+ * reference type. The \p offset parameter is an optional byte offset as with
+ * the low-level
+ * ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t)
+ * function. Any memory previously bound to \p tex is unbound.
+ *
+ * \param offset - Offset in bytes
+ * \param tex    - Texture to bind
+ * \param devPtr - Memory area on device
+ * \param size   - Size of the memory area pointed to by devPtr
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode>&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTexture(
+        size_t                           *offset,
+  const struct texture<T, dim, readMode> &tex,
+  const void                             *devPtr,
+        size_t                            size = UINT_MAX
+)
+{
+  return cudaBindTexture(offset, tex, devPtr, tex.channelDesc, size);
+}
+
+/**
+ * \brief \hl Binds a 2D memory area to a texture
+ *
+ * Binds the 2D memory area pointed to by \p devPtr to the
+ * texture reference \p tex. The size of the area is constrained by
+ * \p width in texel units, \p height in texel units, and \p pitch in byte
+ * units. \p desc describes how the memory is interpreted when fetching values
+ * from the texture. Any memory previously bound to \p tex is unbound.
+ *
+ * Since the hardware enforces an alignment requirement on texture base
+ * addresses,
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D()"
+ * returns in \p *offset a byte offset that
+ * must be applied to texture fetches in order to read from the desired memory.
+ * This offset must be divided by the texel size and passed to kernels that
+ * read from the texture so they can be applied to the ::tex2D() function.
+ * If the device memory pointer was returned from ::cudaMalloc(), the offset is
+ * guaranteed to be 0 and NULL may be passed as the \p offset parameter.
+ *
+ * \param offset - Offset in bytes
+ * \param tex    - Texture reference to bind
+ * \param devPtr - 2D memory area on device
+ * \param desc   - Channel format
+ * \param width  - Width in texel units
+ * \param height - Height in texel units
+ * \param pitch  - Pitch in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode>&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTexture2D(
+        size_t                           *offset,
+  const struct texture<T, dim, readMode> &tex,
+  const void                             *devPtr,
+  const struct cudaChannelFormatDesc     &desc,
+  size_t                                  width,
+  size_t                                  height,
+  size_t                                  pitch
+)
+{
+  return ::cudaBindTexture2D(offset, &tex, devPtr, &desc, width, height, pitch);
+}
+
+/**
+ * \brief \hl Binds a 2D memory area to a texture
+ *
+ * Binds the 2D memory area pointed to by \p devPtr to the
+ * texture reference \p tex. The size of the area is constrained by
+ * \p width in texel units, \p height in texel units, and \p pitch in byte
+ * units. The channel descriptor is inherited from the texture reference
+ * type. Any memory previously bound to \p tex is unbound.
+ *
+ * Since the hardware enforces an alignment requirement on texture base
+ * addresses,
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D()"
+ * returns in \p *offset a byte offset that
+ * must be applied to texture fetches in order to read from the desired memory.
+ * This offset must be divided by the texel size and passed to kernels that
+ * read from the texture so they can be applied to the ::tex2D() function.
+ * If the device memory pointer was returned from ::cudaMalloc(), the offset is
+ * guaranteed to be 0 and NULL may be passed as the \p offset parameter.
+ *
+ * \param offset - Offset in bytes
+ * \param tex    - Texture reference to bind
+ * \param devPtr - 2D memory area on device
+ * \param width  - Width in texel units
+ * \param height - Height in texel units
+ * \param pitch  - Pitch in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode>&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTexture2D(
+        size_t                           *offset,
+  const struct texture<T, dim, readMode> &tex,
+  const void                             *devPtr,
+  size_t                                  width,
+  size_t                                  height,
+  size_t                                  pitch
+)
+{
+  return ::cudaBindTexture2D(offset, &tex, devPtr, &tex.channelDesc, width, height, pitch);
+}
+
+/**
+ * \brief \hl Binds an array to a texture
+ *
+ * Binds the CUDA array \p array to the texture reference \p tex.
+ * \p desc describes how the memory is interpreted when fetching values from
+ * the texture. Any CUDA array previously bound to \p tex is unbound.
+ *
+ * \param tex   - Texture to bind
+ * \param array - Memory array on device
+ * \param desc  - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode >&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTextureToArray(
+  const struct texture<T, dim, readMode> &tex,
+  cudaArray_const_t                       array,
+  const struct cudaChannelFormatDesc     &desc
+)
+{
+  return ::cudaBindTextureToArray(&tex, array, &desc);
+}
+
+/**
+ * \brief \hl Binds an array to a texture
+ *
+ * Binds the CUDA array \p array to the texture reference \p tex.
+ * The channel descriptor is inherited from the CUDA array. Any CUDA array
+ * previously bound to \p tex is unbound.
+ *
+ * \param tex   - Texture to bind
+ * \param array - Memory array on device
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode >&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTextureToArray(
+  const struct texture<T, dim, readMode> &tex,
+  cudaArray_const_t                       array
+)
+{
+  struct cudaChannelFormatDesc desc;
+  cudaError_t                  err = ::cudaGetChannelDesc(&desc, array);
+
+  return err == cudaSuccess ? cudaBindTextureToArray(tex, array, desc) : err;
+}
+
+/**
+ * \brief \hl Binds a mipmapped array to a texture
+ *
+ * Binds the CUDA mipmapped array \p mipmappedArray to the texture reference \p tex.
+ * \p desc describes how the memory is interpreted when fetching values from
+ * the texture. Any CUDA mipmapped array previously bound to \p tex is unbound.
+ *
+ * \param tex            - Texture to bind
+ * \param mipmappedArray - Memory mipmapped array on device
+ * \param desc           - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode >&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTextureToMipmappedArray(
+  const struct texture<T, dim, readMode> &tex,
+  cudaMipmappedArray_const_t              mipmappedArray,
+  const struct cudaChannelFormatDesc     &desc
+)
+{
+  return ::cudaBindTextureToMipmappedArray(&tex, mipmappedArray, &desc);
+}
+
+/**
+ * \brief \hl Binds a mipmapped array to a texture
+ *
+ * Binds the CUDA mipmapped array \p mipmappedArray to the texture reference \p tex.
+ * The channel descriptor is inherited from the CUDA array. Any CUDA mipmapped array
+ * previously bound to \p tex is unbound.
+ *
+ * \param tex            - Texture to bind
+ * \param mipmappedArray - Memory mipmapped array on device
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode >&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindTextureToMipmappedArray(
+  const struct texture<T, dim, readMode> &tex,
+  cudaMipmappedArray_const_t              mipmappedArray
+)
+{
+  struct cudaChannelFormatDesc desc;
+  cudaArray_t                  levelArray;
+  cudaError_t                  err = ::cudaGetMipmappedArrayLevel(&levelArray, mipmappedArray, 0);
+  
+  if (err != cudaSuccess) {
+      return err;
+  }
+  err = ::cudaGetChannelDesc(&desc, levelArray);
+
+  return err == cudaSuccess ? cudaBindTextureToMipmappedArray(tex, mipmappedArray, desc) : err;
+}
+
+/**
+ * \brief \hl Unbinds a texture
+ *
+ * Unbinds the texture bound to \p tex. If \p texref is not currently bound, no operation is performed.
+ *
+ * \param tex - Texture to unbind
+ *
+ * \return 
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture<T, dim, readMode >&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaUnbindTexture(
+  const struct texture<T, dim, readMode> &tex
+)
+{
+  return ::cudaUnbindTexture(&tex);
+}
+
+/**
+ * \brief \hl Get the alignment offset of a texture
+ *
+ * Returns in \p *offset the offset that was returned when texture reference
+ * \p tex was bound.
+ *
+ * \param offset - Offset of texture reference in bytes
+ * \param tex    - Texture to get offset of
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidTexture,
+ * ::cudaErrorInvalidTextureBinding
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t) "cudaBindTexture (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaBindTextureToArray(const struct texture<T, dim, readMode>&, cudaArray_const_t) "cudaBindTextureToArray (C++ API, inherited channel descriptor)",
+ * \ref ::cudaUnbindTexture(const struct texture<T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)"
+ */
+template<class T, int dim, enum cudaTextureReadMode readMode>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaGetTextureAlignmentOffset(
+        size_t                           *offset,
+  const struct texture<T, dim, readMode> &tex
+)
+{
+  return ::cudaGetTextureAlignmentOffset(offset, &tex);
+}
+
+/**
+ * \brief \hl Sets the preferred cache configuration for a device function
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p cacheConfig the preferred cache configuration
+ * for the function specified via \p func. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute \p func.
+ *
+ * \p func must be a pointer to a function that executes on the device.
+ * The parameter specified by \p func must be declared as a \p __global__
+ * function. If the specified function does not exist,
+ * then ::cudaErrorInvalidDeviceFunction is returned.
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ *
+ * \param func        - device function pointer
+ * \param cacheConfig - Requested cache configuration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C++ API)",
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, T*) "cudaFuncGetAttributes (C++ API)",
+ * ::cudaSetDoubleForDevice,
+ * ::cudaSetDoubleForHost,
+ * ::cudaThreadGetCacheConfig,
+ * ::cudaThreadSetCacheConfig
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaFuncSetCacheConfig(
+  T                  *func,
+  enum cudaFuncCache  cacheConfig
+)
+{
+  return ::cudaFuncSetCacheConfig((const void*)func, cacheConfig);
+}
+
+template<class T>
+static __inline__ __host__ cudaError_t cudaFuncSetSharedMemConfig(
+  T                        *func,
+  enum cudaSharedMemConfig  config
+)
+{
+  return ::cudaFuncSetSharedMemConfig((const void*)func, config);
+}
+
+#endif // __CUDACC__
+
+/**
+ * \brief Returns occupancy for a device function
+ *
+ * Returns in \p *numBlocks the maximum number of active blocks per
+ * streaming multiprocessor for the device function.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel function for which occupancy is calulated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessor(
+    int   *numBlocks,
+    T      func,
+    int    blockSize,
+    size_t dynamicSMemSize)
+{
+    return ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(numBlocks, (const void*)func, blockSize, dynamicSMemSize, cudaOccupancyDefault);
+}
+
+/**
+ * \brief Returns occupancy for a device function with the specified flags
+ *
+ * Returns in \p *numBlocks the maximum number of active blocks per
+ * streaming multiprocessor for the device function.
+ *
+ * The \p flags parameter controls how special cases are handled. Valid flags include:
+ *
+ * - ::cudaOccupancyDefault: keeps the default behavior as
+ *   ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ *
+ * - ::cudaOccupancyDisableCachingOverride: suppresses the default behavior
+ *   on platform where global caching affects occupancy. On such platforms, if caching
+ *   is enabled, but per-block SM resource usage would result in zero occupancy, the
+ *   occupancy calculator will calculate the occupancy as if caching is disabled.
+ *   Setting this flag makes the occupancy calculator to return 0 in such cases.
+ *   More information can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel function for which occupancy is calulated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ * \param flags           - Requested behavior for the occupancy calculator
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(
+    int         *numBlocks,
+    T            func,
+    int          blockSize,
+    size_t       dynamicSMemSize,
+    unsigned int flags)
+{
+    return ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(numBlocks, (const void*)func, blockSize, dynamicSMemSize, flags);
+}
+
+/**
+ * Helper functor for cudaOccupancyMaxPotentialBlockSize
+ */
+class __cudaOccupancyB2DHelper {
+  size_t n;
+public:
+  inline __host__ CUDART_DEVICE __cudaOccupancyB2DHelper(size_t n_) : n(n_) {}
+  inline __host__ CUDART_DEVICE size_t operator()(int)
+  {
+      return n;
+  }
+};
+
+/**
+ * \brief Returns grid and block size that achieves maximum potential occupancy for a device function
+ *
+ * Returns in \p *minGridSize and \p *blocksize a suggested grid /
+ * block size pair that achieves the best potential occupancy
+ * (i.e. the maximum number of active warps with the smallest number
+ * of blocks).
+ *
+ * The \p flags parameter controls how special cases are handled. Valid flags include:
+ *
+ * - ::cudaOccupancyDefault: keeps the default behavior as
+ *   ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ *
+ * - ::cudaOccupancyDisableCachingOverride: This flag suppresses the default behavior
+ *   on platform where global caching affects occupancy. On such platforms, if caching
+ *   is enabled, but per-block SM resource usage would result in zero occupancy, the
+ *   occupancy calculator will calculate the occupancy as if caching is disabled.
+ *   Setting this flag makes the occupancy calculator to return 0 in such cases.
+ *   More information can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the best potential occupancy
+ * \param blockSize   - Returned block size
+ * \param func        - Device function symbol
+ * \param blockSizeToDynamicSMemSize - A unary function / functor that takes block size, and returns the size, in bytes, of dynamic shared memory needed for a block
+ * \param blockSizeLimit  - The maximum block size \p func is designed to work with. 0 means no limit.
+ * \param flags       - Requested behavior for the occupancy calculator
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+
+template<typename UnaryFunction, class T>
+static __inline__ __host__ CUDART_DEVICE cudaError_t cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(
+    int           *minGridSize,
+    int           *blockSize,
+    T              func,
+    UnaryFunction  blockSizeToDynamicSMemSize,
+    int            blockSizeLimit = 0,
+    unsigned int   flags = 0)
+{
+    cudaError_t status;
+
+    // Device and function properties
+    int                       device;
+    struct cudaFuncAttributes attr;
+
+    // Limits
+    int maxThreadsPerMultiProcessor;
+    int warpSize;
+    int devMaxThreadsPerBlock;
+    int multiProcessorCount;
+    int funcMaxThreadsPerBlock;
+    int occupancyLimit;
+    int granularity;
+
+    // Recorded maximum
+    int maxBlockSize = 0;
+    int numBlocks    = 0;
+    int maxOccupancy = 0;
+
+    // Temporary
+    int blockSizeToTryAligned;
+    int blockSizeToTry;
+    int blockSizeLimitAligned;
+    int occupancyInBlocks;
+    int occupancyInThreads;
+    size_t dynamicSMemSize;
+
+    ///////////////////////////
+    // Check user input
+    ///////////////////////////
+
+    if (!minGridSize || !blockSize || !func) {
+        return cudaErrorInvalidValue;
+    }
+
+    //////////////////////////////////////////////
+    // Obtain device and function properties
+    //////////////////////////////////////////////
+
+    status = ::cudaGetDevice(&device);
+    if (status != cudaSuccess) {
+        return status;
+    }
+
+    status = cudaDeviceGetAttribute(
+        &maxThreadsPerMultiProcessor,
+        cudaDevAttrMaxThreadsPerMultiProcessor,
+        device);
+    if (status != cudaSuccess) {
+        return status;
+    }
+
+    status = cudaDeviceGetAttribute(
+        &warpSize,
+        cudaDevAttrWarpSize,
+        device);
+    if (status != cudaSuccess) {
+        return status;
+    }
+
+    status = cudaDeviceGetAttribute(
+        &devMaxThreadsPerBlock,
+        cudaDevAttrMaxThreadsPerBlock,
+        device);
+    if (status != cudaSuccess) {
+        return status;
+    }
+
+    status = cudaDeviceGetAttribute(
+        &multiProcessorCount,
+        cudaDevAttrMultiProcessorCount,
+        device);
+    if (status != cudaSuccess) {
+        return status;
+    }
+
+    status = cudaFuncGetAttributes(&attr, func);
+    if (status != cudaSuccess) {
+        return status;
+    }
+    
+    funcMaxThreadsPerBlock = attr.maxThreadsPerBlock;
+
+    /////////////////////////////////////////////////////////////////////////////////
+    // Try each block size, and pick the block size with maximum occupancy
+    /////////////////////////////////////////////////////////////////////////////////
+
+    occupancyLimit = maxThreadsPerMultiProcessor;
+    granularity    = warpSize;
+
+    if (blockSizeLimit == 0) {
+        blockSizeLimit = devMaxThreadsPerBlock;
+    }
+
+    if (devMaxThreadsPerBlock < blockSizeLimit) {
+        blockSizeLimit = devMaxThreadsPerBlock;
+    }
+
+    if (funcMaxThreadsPerBlock < blockSizeLimit) {
+        blockSizeLimit = funcMaxThreadsPerBlock;
+    }
+
+    blockSizeLimitAligned = ((blockSizeLimit + (granularity - 1)) / granularity) * granularity;
+
+    for (blockSizeToTryAligned = blockSizeLimitAligned; blockSizeToTryAligned > 0; blockSizeToTryAligned -= granularity) {
+        // This is needed for the first iteration, because
+        // blockSizeLimitAligned could be greater than blockSizeLimit
+        //
+        if (blockSizeLimit < blockSizeToTryAligned) {
+            blockSizeToTry = blockSizeLimit;
+        } else {
+            blockSizeToTry = blockSizeToTryAligned;
+        }
+        
+        dynamicSMemSize = blockSizeToDynamicSMemSize(blockSizeToTry);
+
+        status = cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(
+            &occupancyInBlocks,
+            func,
+            blockSizeToTry,
+            dynamicSMemSize,
+            flags);
+
+        if (status != cudaSuccess) {
+            return status;
+        }
+
+        occupancyInThreads = blockSizeToTry * occupancyInBlocks;
+
+        if (occupancyInThreads > maxOccupancy) {
+            maxBlockSize = blockSizeToTry;
+            numBlocks    = occupancyInBlocks;
+            maxOccupancy = occupancyInThreads;
+        }
+
+        // Early out if we have reached the maximum
+        //
+        if (occupancyLimit == maxOccupancy) {
+            break;
+        }
+    }
+
+    ///////////////////////////
+    // Return best available
+    ///////////////////////////
+
+    // Suggested min grid size to achieve a full machine launch
+    //
+    *minGridSize = numBlocks * multiProcessorCount;
+    *blockSize = maxBlockSize;
+
+    return status;
+}
+
+/**
+ * \brief Returns grid and block size that achieves maximum potential occupancy for a device function
+ *
+ * Returns in \p *minGridSize and \p *blocksize a suggested grid /
+ * block size pair that achieves the best potential occupancy
+ * (i.e. the maximum number of active warps with the smallest number
+ * of blocks).
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the best potential occupancy
+ * \param blockSize   - Returned block size
+ * \param func        - Device function symbol
+ * \param blockSizeToDynamicSMemSize - A unary function / functor that takes block size, and returns the size, in bytes, of dynamic shared memory needed for a block
+ * \param blockSizeLimit  - The maximum block size \p func is designed to work with. 0 means no limit.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+
+template<typename UnaryFunction, class T>
+static __inline__ __host__ CUDART_DEVICE cudaError_t cudaOccupancyMaxPotentialBlockSizeVariableSMem(
+    int           *minGridSize,
+    int           *blockSize,
+    T              func,
+    UnaryFunction  blockSizeToDynamicSMemSize,
+    int            blockSizeLimit = 0)
+{
+    return cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(minGridSize, blockSize, func, blockSizeToDynamicSMemSize, blockSizeLimit, cudaOccupancyDefault);
+}
+
+/**
+ * \brief Returns grid and block size that achieves maximum potential occupancy for a device function
+ *
+ * Returns in \p *minGridSize and \p *blocksize a suggested grid /
+ * block size pair that achieves the best potential occupancy
+ * (i.e. the maximum number of active warps with the smallest number
+ * of blocks).
+ *
+ * Use \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem if the
+ * amount of per-block dynamic shared memory changes with different
+ * block sizes.
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the best potential occupancy
+ * \param blockSize   - Returned block size
+ * \param func        - Device function symbol
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ * \param blockSizeLimit  - The maximum block size \p func is designed to work with. 0 means no limit.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+template<class T>
+static __inline__ __host__ CUDART_DEVICE cudaError_t cudaOccupancyMaxPotentialBlockSize(
+    int    *minGridSize,
+    int    *blockSize,
+    T       func,
+    size_t  dynamicSMemSize = 0,
+    int     blockSizeLimit = 0)
+{
+  return cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(minGridSize, blockSize, func, __cudaOccupancyB2DHelper(dynamicSMemSize), blockSizeLimit, cudaOccupancyDefault);
+}
+
+/**
+ * \brief Returns dynamic shared memory available per block when launching \p numBlocks blocks on SM.
+ *
+ * Returns in \p *dynamicSmemSize the maximum size of dynamic shared memory to allow \p numBlocks blocks per SM. 
+ *
+ * \param dynamicSmemSize - Returned maximum dynamic shared memory 
+ * \param func            - Kernel function for which occupancy is calculated
+ * \param numBlocks       - Number of blocks to fit on SM 
+ * \param blockSize       - Size of the block
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeWithFlags
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaOccupancyAvailableDynamicSMemPerBlock(
+    size_t *dynamicSmemSize,
+    T      func,
+    int    numBlocks,
+    int    blockSize)
+{
+    return ::cudaOccupancyAvailableDynamicSMemPerBlock(dynamicSmemSize, (const void*)func, numBlocks, blockSize);
+}
+
+/**
+ * \brief Returns grid and block size that achived maximum potential occupancy for a device function with the specified flags
+ *
+ * Returns in \p *minGridSize and \p *blocksize a suggested grid /
+ * block size pair that achieves the best potential occupancy
+ * (i.e. the maximum number of active warps with the smallest number
+ * of blocks).
+ *
+ * The \p flags parameter controls how special cases are handle. Valid flags include:
+ *
+ * - ::cudaOccupancyDefault: keeps the default behavior as
+ *   ::cudaOccupancyMaxPotentialBlockSize
+ *
+ * - ::cudaOccupancyDisableCachingOverride: This flag suppresses the default behavior
+ *   on platform where global caching affects occupancy. On such platforms, if caching
+ *   is enabled, but per-block SM resource usage would result in zero occupancy, the
+ *   occupancy calculator will calculate the occupancy as if caching is disabled.
+ *   Setting this flag makes the occupancy calculator to return 0 in such cases.
+ *   More information can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * Use \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem if the
+ * amount of per-block dynamic shared memory changes with different
+ * block sizes.
+ *
+ * \param minGridSize - Returned minimum grid size needed to achieve the best potential occupancy
+ * \param blockSize   - Returned block size
+ * \param func        - Device function symbol
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ * \param blockSizeLimit  - The maximum block size \p func is designed to work with. 0 means no limit.
+ * \param flags       - Requested behavior for the occupancy calculator
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxPotentialBlockSize
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMem
+ * \sa ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags
+ * \sa ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+template<class T>
+static __inline__ __host__ CUDART_DEVICE cudaError_t cudaOccupancyMaxPotentialBlockSizeWithFlags(
+    int    *minGridSize,
+    int    *blockSize,
+    T      func,
+    size_t dynamicSMemSize = 0,
+    int    blockSizeLimit = 0,
+    unsigned int flags = 0)
+{
+    return cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(minGridSize, blockSize, func, __cudaOccupancyB2DHelper(dynamicSMemSize), blockSizeLimit, flags);
+}
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum cluster size in \p *clusterSize.
+ *
+ * The cluster dimensions in \p config are ignored. If func has a required
+ * cluster size set (see ::cudaFuncGetAttributes),\p *clusterSize will reflect 
+ * the required cluster size.
+ *
+ * By default this function will always return a value that's portable on
+ * future hardware. A higher value may be returned if the kernel function
+ * allows non-portable cluster sizes.
+ *
+ * This function will respect the compile time launch bounds.
+ *
+ * \param clusterSize - Returned maximum cluster size that can be launched
+ *                      for the given kernel function and launch configuration
+ * \param func        - Kernel function for which maximum cluster
+ *                      size is calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaFuncGetAttributes
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaOccupancyMaxPotentialClusterSize(
+    int *clusterSize,
+    T *func,
+    const cudaLaunchConfig_t *config)
+{
+    return ::cudaOccupancyMaxPotentialClusterSize(clusterSize, (const void*)func, config);
+}
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum number of clusters that could co-exist
+ * on the target device in \p *numClusters.
+ *
+ * If the function has required cluster size already set (see
+ * ::cudaFuncGetAttributes), the cluster size from config must either be
+ * unspecified or match the required size.
+ * Without required sizes, the cluster size must be specified in config,
+ * else the function will return an error.
+ *
+ * Note that various attributes of the kernel function may affect occupancy
+ * calculation. Runtime environment may affect how the hardware schedules
+ * the clusters, so the calculated occupancy is not guaranteed to be achievable.
+ *
+ * \param numClusters - Returned maximum number of clusters that
+ *                      could co-exist on the target device
+ * \param func        - Kernel function for which maximum number
+ *                      of clusters are calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidClusterSize,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaFuncGetAttributes
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaOccupancyMaxActiveClusters(
+    int *numClusters,
+    T *func,
+    const cudaLaunchConfig_t *config)
+{
+    return ::cudaOccupancyMaxActiveClusters(numClusters, (const void*)func, config);
+}
+
+#if defined __CUDACC__
+
+/**
+ * \brief \hl Find out attributes for a given function
+ *
+ * This function obtains the attributes of a function specified via \p entry.
+ * The parameter \p entry must be a pointer to a function that executes
+ * on the device. The parameter specified by \p entry must be declared as a \p __global__
+ * function. The fetched attributes are placed in \p attr. If the specified
+ * function does not exist, then ::cudaErrorInvalidDeviceFunction is returned.
+ *
+ * Note that some function attributes such as
+ * \ref ::cudaFuncAttributes::maxThreadsPerBlock "maxThreadsPerBlock"
+ * may vary based on the device that is currently being used.
+ *
+ * \param attr  - Return pointer to function's attributes
+ * \param entry - Function to get attributes of
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C++ API)",
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ * ::cudaSetDoubleForDevice,
+ * ::cudaSetDoubleForHost
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaFuncGetAttributes(
+  struct cudaFuncAttributes *attr,
+  T                         *entry
+)
+{
+  return ::cudaFuncGetAttributes(attr, (const void*)entry);
+}
+
+/**
+ * \brief \hl Set attributes for a given function
+ *
+ * This function sets the attributes of a function specified via \p entry.
+ * The parameter \p entry must be a pointer to a function that executes
+ * on the device. The parameter specified by \p entry must be declared as a \p __global__
+ * function. The enumeration defined by \p attr is set to the value defined by \p value.
+ * If the specified function does not exist, then ::cudaErrorInvalidDeviceFunction is returned.
+ * If the specified attribute cannot be written, or if the value is incorrect, 
+ * then ::cudaErrorInvalidValue is returned.
+ *
+ * Valid values for \p attr are:
+ * - ::cudaFuncAttributeMaxDynamicSharedMemorySize - The requested maximum size in bytes of dynamically-allocated shared memory. The sum of this value and the function attribute ::sharedSizeBytes
+ *   cannot exceed the device attribute ::cudaDevAttrMaxSharedMemoryPerBlockOptin. The maximal size of requestable dynamic shared memory may differ by GPU architecture.
+ * - ::cudaFuncAttributePreferredSharedMemoryCarveout - On devices where the L1 cache and shared memory use the same hardware resources, 
+ *   this sets the shared memory carveout preference, in percent of the total shared memory. See ::cudaDevAttrMaxSharedMemoryPerMultiprocessor.
+ *   This is only a hint, and the driver can choose a different ratio if required to execute the function.
+ * - ::cudaFuncAttributeRequiredClusterWidth: The required cluster width in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return cudaErrorNotPermitted.
+ * - ::cudaFuncAttributeRequiredClusterHeight: The required cluster height in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return cudaErrorNotPermitted.
+ * - ::cudaFuncAttributeRequiredClusterDepth: The required cluster depth in
+ *   blocks. The width, height, and depth values must either all be 0 or all be
+ *   positive. The validity of the cluster dimensions is checked at launch time.
+ *   If the value is set during compile time, it cannot be set at runtime.
+ *   Setting it at runtime will return cudaErrorNotPermitted.
+ * - ::cudaFuncAttributeClusterSchedulingPolicyPreference: The block
+ *   scheduling policy of a function. The value type is cudaClusterSchedulingPolicy.
+ *
+ * \param entry - Function to get attributes of
+ * \param attr  - Attribute to set
+ * \param value - Value to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C++ API)",
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ * ::cudaSetDoubleForDevice,
+ * ::cudaSetDoubleForHost
+ */
+template<class T>
+static __inline__ __host__ cudaError_t cudaFuncSetAttribute(
+  T                         *entry,
+  enum cudaFuncAttribute    attr,
+  int                       value
+)
+{
+  return ::cudaFuncSetAttribute((const void*)entry, attr, value);
+}
+
+/**
+ * \brief \hl Binds an array to a surface
+ *
+ * Binds the CUDA array \p array to the surface reference \p surf.
+ * \p desc describes how the memory is interpreted when dealing with
+ * the surface. Any CUDA array previously bound to \p surf is unbound.
+ *
+ * \param surf  - Surface to bind
+ * \param array - Memory array on device
+ * \param desc  - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSurface
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaBindSurfaceToArray(const struct surfaceReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindSurfaceToArray (C API)",
+ * \ref ::cudaBindSurfaceToArray(const struct surface<T, dim>&, cudaArray_const_t) "cudaBindSurfaceToArray (C++ API, inherited channel descriptor)"
+ */
+template<class T, int dim>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindSurfaceToArray(
+  const struct surface<T, dim>       &surf,
+  cudaArray_const_t                   array,
+  const struct cudaChannelFormatDesc &desc
+)
+{
+  return ::cudaBindSurfaceToArray(&surf, array, &desc);
+}
+
+/**
+ * \brief \hl Binds an array to a surface
+ *
+ * Binds the CUDA array \p array to the surface reference \p surf.
+ * The channel descriptor is inherited from the CUDA array. Any CUDA array
+ * previously bound to \p surf is unbound.
+ *
+ * \param surf  - Surface to bind
+ * \param array - Memory array on device
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSurface
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaBindSurfaceToArray(const struct surfaceReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindSurfaceToArray (C API)",
+ * \ref ::cudaBindSurfaceToArray(const struct surface<T, dim>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindSurfaceToArray (C++ API)"
+ */
+template<class T, int dim>
+static __CUDA_DEPRECATED __inline__ __host__ cudaError_t cudaBindSurfaceToArray(
+  const struct surface<T, dim> &surf,
+  cudaArray_const_t             array
+)
+{
+  struct cudaChannelFormatDesc desc;
+  cudaError_t                  err = ::cudaGetChannelDesc(&desc, array);
+
+  return err == cudaSuccess ? cudaBindSurfaceToArray(surf, array, desc) : err;
+}
+
+#endif /* __CUDACC__ */
+
+/** @} */ /* END CUDART_HIGHLEVEL */
+
+#endif /* __cplusplus && !__CUDACC_RTC__ */
+
+#if !defined(__CUDACC_RTC__)
+#if defined(__GNUC__)
+#if defined(__clang__) || (!defined(__PGIC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)))
+#pragma GCC diagnostic pop
+#endif
+#elif defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_H__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_H__
+#endif
+
+#endif /* !__CUDA_RUNTIME_H__ */
diff --git a/ext/cudart/include/cuda_runtime_api.h b/ext/cudart/include/cuda_runtime_api.h
new file mode 100644
index 00000000..9e5501ac
--- /dev/null
+++ b/ext/cudart/include/cuda_runtime_api.h
@@ -0,0 +1,13380 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+
+
+#if !defined(__CUDA_RUNTIME_API_H__)
+#define __CUDA_RUNTIME_API_H__
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_API_H__
+#endif
+
+/**
+ * \latexonly
+ * \page sync_async API synchronization behavior
+ *
+ * \section memcpy_sync_async_behavior Memcpy
+ * The API provides memcpy/memset functions in both synchronous and asynchronous forms,
+ * the latter having an \e "Async" suffix. This is a misnomer as each function
+ * may exhibit synchronous or asynchronous behavior depending on the arguments
+ * passed to the function. In the reference documentation, each memcpy function is
+ * categorized as \e synchronous or \e asynchronous, corresponding to the definitions
+ * below.
+ * 
+ * \subsection MemcpySynchronousBehavior Synchronous
+ * 
+ * <ol>
+ * <li> For transfers from pageable host memory to device memory, a stream sync is performed
+ * before the copy is initiated. The function will return once the pageable
+ * buffer has been copied to the staging memory for DMA transfer to device memory,
+ * but the DMA to final destination may not have completed.
+ * 
+ * <li> For transfers from pinned host memory to device memory, the function is synchronous
+ * with respect to the host.
+ *
+ * <li> For transfers from device to either pageable or pinned host memory, the function returns
+ * only once the copy has completed.
+ * 
+ * <li> For transfers from device memory to device memory, no host-side synchronization is
+ * performed.
+ *
+ * <li> For transfers from any host memory to any host memory, the function is fully
+ * synchronous with respect to the host.
+ * </ol>
+ * 
+ * \subsection MemcpyAsynchronousBehavior Asynchronous
+ *
+ * <ol>
+ * <li> For transfers from device memory to pageable host memory, the function
+ * will return only once the copy has completed.
+ *
+ * <li> For transfers from any host memory to any host memory, the function is fully
+ * synchronous with respect to the host.
+ * 
+ * <li> For all other transfers, the function is fully asynchronous. If pageable
+ * memory must first be staged to pinned memory, this will be handled
+ * asynchronously with a worker thread.
+ * </ol>
+ *
+ * \section memset_sync_async_behavior Memset
+ * The cudaMemset functions are asynchronous with respect to the host
+ * except when the target memory is pinned host memory. The \e Async
+ * versions are always asynchronous with respect to the host.
+ *
+ * \section kernel_launch_details Kernel Launches
+ * Kernel launches are asynchronous with respect to the host. Details of
+ * concurrent kernel execution and data transfers can be found in the CUDA
+ * Programmers Guide.
+ *
+ * \endlatexonly
+ */
+
+/**
+ * There are two levels for the runtime API.
+ *
+ * The C API (<i>cuda_runtime_api.h</i>) is
+ * a C-style interface that does not require compiling with \p nvcc.
+ *
+ * The \ref CUDART_HIGHLEVEL "C++ API" (<i>cuda_runtime.h</i>) is a
+ * C++-style interface built on top of the C API. It wraps some of the
+ * C API routines, using overloading, references and default arguments.
+ * These wrappers can be used from C++ code and can be compiled with any C++
+ * compiler. The C++ API also has some CUDA-specific wrappers that wrap
+ * C API routines that deal with symbols, textures, and device functions.
+ * These wrappers require the use of \p nvcc because they depend on code being
+ * generated by the compiler. For example, the execution configuration syntax
+ * to invoke kernels is only available in source code compiled with \p nvcc.
+ */
+
+/** CUDA Runtime API Version */
+#define CUDART_VERSION  11080
+
+#if defined(__CUDA_API_VER_MAJOR__) && defined(__CUDA_API_VER_MINOR__)
+# define __CUDART_API_VERSION ((__CUDA_API_VER_MAJOR__ * 1000) + (__CUDA_API_VER_MINOR__ * 10))
+#else
+# define __CUDART_API_VERSION CUDART_VERSION
+#endif
+
+#ifndef __DOXYGEN_ONLY__
+#include "crt/host_defines.h"
+#endif
+#include "builtin_types.h"
+
+#include "cuda_device_runtime_api.h"
+
+#if defined(CUDA_API_PER_THREAD_DEFAULT_STREAM) || defined(__CUDA_API_VERSION_INTERNAL)
+    #define __CUDART_API_PER_THREAD_DEFAULT_STREAM
+    #define __CUDART_API_PTDS(api) api ## _ptds
+    #define __CUDART_API_PTSZ(api) api ## _ptsz
+#else
+    #define __CUDART_API_PTDS(api) api
+    #define __CUDART_API_PTSZ(api) api
+#endif
+
+#define cudaSignalExternalSemaphoresAsync  __CUDART_API_PTSZ(cudaSignalExternalSemaphoresAsync_v2)
+#define cudaWaitExternalSemaphoresAsync    __CUDART_API_PTSZ(cudaWaitExternalSemaphoresAsync_v2)
+
+#if defined(__CUDART_API_PER_THREAD_DEFAULT_STREAM)
+    #define cudaMemcpy                     __CUDART_API_PTDS(cudaMemcpy)
+    #define cudaMemcpyToSymbol             __CUDART_API_PTDS(cudaMemcpyToSymbol)
+    #define cudaMemcpyFromSymbol           __CUDART_API_PTDS(cudaMemcpyFromSymbol)
+    #define cudaMemcpy2D                   __CUDART_API_PTDS(cudaMemcpy2D)
+    #define cudaMemcpyToArray              __CUDART_API_PTDS(cudaMemcpyToArray)
+    #define cudaMemcpy2DToArray            __CUDART_API_PTDS(cudaMemcpy2DToArray)
+    #define cudaMemcpyFromArray            __CUDART_API_PTDS(cudaMemcpyFromArray)
+    #define cudaMemcpy2DFromArray          __CUDART_API_PTDS(cudaMemcpy2DFromArray)
+    #define cudaMemcpyArrayToArray         __CUDART_API_PTDS(cudaMemcpyArrayToArray)
+    #define cudaMemcpy2DArrayToArray       __CUDART_API_PTDS(cudaMemcpy2DArrayToArray)
+    #define cudaMemcpy3D                   __CUDART_API_PTDS(cudaMemcpy3D)
+    #define cudaMemcpy3DPeer               __CUDART_API_PTDS(cudaMemcpy3DPeer)
+    #define cudaMemset                     __CUDART_API_PTDS(cudaMemset)
+    #define cudaMemset2D                   __CUDART_API_PTDS(cudaMemset2D)
+    #define cudaMemset3D                   __CUDART_API_PTDS(cudaMemset3D)
+    #define cudaGraphUpload                __CUDART_API_PTSZ(cudaGraphUpload)
+    #define cudaGraphLaunch                __CUDART_API_PTSZ(cudaGraphLaunch)
+    #define cudaStreamBeginCapture         __CUDART_API_PTSZ(cudaStreamBeginCapture)
+    #define cudaStreamEndCapture           __CUDART_API_PTSZ(cudaStreamEndCapture)
+    #define cudaStreamGetCaptureInfo       __CUDART_API_PTSZ(cudaStreamGetCaptureInfo)
+    #define cudaStreamGetCaptureInfo_v2    __CUDART_API_PTSZ(cudaStreamGetCaptureInfo_v2)
+    #define cudaStreamIsCapturing          __CUDART_API_PTSZ(cudaStreamIsCapturing)
+    #define cudaMemcpyAsync                __CUDART_API_PTSZ(cudaMemcpyAsync)
+    #define cudaMemcpyToSymbolAsync        __CUDART_API_PTSZ(cudaMemcpyToSymbolAsync)
+    #define cudaMemcpyFromSymbolAsync      __CUDART_API_PTSZ(cudaMemcpyFromSymbolAsync)
+    #define cudaMemcpy2DAsync              __CUDART_API_PTSZ(cudaMemcpy2DAsync)
+    #define cudaMemcpyToArrayAsync         __CUDART_API_PTSZ(cudaMemcpyToArrayAsync)
+    #define cudaMemcpy2DToArrayAsync       __CUDART_API_PTSZ(cudaMemcpy2DToArrayAsync)
+    #define cudaMemcpyFromArrayAsync       __CUDART_API_PTSZ(cudaMemcpyFromArrayAsync)
+    #define cudaMemcpy2DFromArrayAsync     __CUDART_API_PTSZ(cudaMemcpy2DFromArrayAsync)
+    #define cudaMemcpy3DAsync              __CUDART_API_PTSZ(cudaMemcpy3DAsync)
+    #define cudaMemcpy3DPeerAsync          __CUDART_API_PTSZ(cudaMemcpy3DPeerAsync)
+    #define cudaMemsetAsync                __CUDART_API_PTSZ(cudaMemsetAsync)
+    #define cudaMemset2DAsync              __CUDART_API_PTSZ(cudaMemset2DAsync)
+    #define cudaMemset3DAsync              __CUDART_API_PTSZ(cudaMemset3DAsync)
+    #define cudaStreamQuery                __CUDART_API_PTSZ(cudaStreamQuery)
+    #define cudaStreamGetFlags             __CUDART_API_PTSZ(cudaStreamGetFlags)
+    #define cudaStreamGetPriority          __CUDART_API_PTSZ(cudaStreamGetPriority)
+    #define cudaEventRecord                __CUDART_API_PTSZ(cudaEventRecord)
+    #define cudaEventRecordWithFlags       __CUDART_API_PTSZ(cudaEventRecordWithFlags)
+    #define cudaStreamWaitEvent            __CUDART_API_PTSZ(cudaStreamWaitEvent)
+    #define cudaStreamAddCallback          __CUDART_API_PTSZ(cudaStreamAddCallback)
+    #define cudaStreamAttachMemAsync       __CUDART_API_PTSZ(cudaStreamAttachMemAsync)
+    #define cudaStreamSynchronize          __CUDART_API_PTSZ(cudaStreamSynchronize)
+    #define cudaLaunchKernel               __CUDART_API_PTSZ(cudaLaunchKernel)
+    #define cudaLaunchKernelExC            __CUDART_API_PTSZ(cudaLaunchKernelExC)
+    #define cudaLaunchHostFunc             __CUDART_API_PTSZ(cudaLaunchHostFunc)
+    #define cudaMemPrefetchAsync           __CUDART_API_PTSZ(cudaMemPrefetchAsync)
+    #define cudaLaunchCooperativeKernel    __CUDART_API_PTSZ(cudaLaunchCooperativeKernel)
+    #define cudaStreamCopyAttributes       __CUDART_API_PTSZ(cudaStreamCopyAttributes)
+    #define cudaStreamGetAttribute         __CUDART_API_PTSZ(cudaStreamGetAttribute)
+    #define cudaStreamSetAttribute         __CUDART_API_PTSZ(cudaStreamSetAttribute)
+    #define cudaMallocAsync                __CUDART_API_PTSZ(cudaMallocAsync)
+    #define cudaFreeAsync                  __CUDART_API_PTSZ(cudaFreeAsync)
+    #define cudaMallocFromPoolAsync        __CUDART_API_PTSZ(cudaMallocFromPoolAsync)
+    #define cudaGetDriverEntryPoint        __CUDART_API_PTSZ(cudaGetDriverEntryPoint)
+#endif
+
+/** \cond impl_private */
+#if !defined(__dv)
+
+#if defined(__cplusplus)
+
+#define __dv(v) \
+        = v
+
+#else /* __cplusplus */
+
+#define __dv(v)
+
+#endif /* __cplusplus */
+
+#endif /* !__dv */
+/** \endcond impl_private */
+
+#if (!defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 350))   /** Visible to SM>=3.5 and "__host__ __device__" only **/
+
+#define CUDART_DEVICE __device__ 
+
+#else
+
+#define CUDART_DEVICE
+
+#endif /** CUDART_DEVICE */
+
+#if !defined(__CUDACC_RTC__)
+#define EXCLUDE_FROM_RTC
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+/**
+ * \defgroup CUDART_DEVICE Device Management
+ *
+ * ___MANBRIEF___ device management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the device management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Destroy all allocations and reset all state on the current device
+ * in the current process.
+ *
+ * Explicitly destroys and cleans up all resources associated with the current
+ * device in the current process. It is the caller's responsibility to ensure
+ * that the resources are not accessed or passed in subsequent API calls and
+ * doing so will result in undefined behavior. These resources include CUDA types
+ * such as ::cudaStream_t, ::cudaEvent_t, ::cudaArray_t, ::cudaMipmappedArray_t,
+ * ::cudaTextureObject_t, ::cudaSurfaceObject_t, ::textureReference, ::surfaceReference,
+ * ::cudaExternalMemory_t, ::cudaExternalSemaphore_t and ::cudaGraphicsResource_t.
+ * Any subsequent API call to this device will reinitialize the device.
+ *
+ * Note that this function will reset the device immediately.  It is the caller's
+ * responsibility to ensure that the device is not being accessed by any 
+ * other host threads from the process when this function is called.
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSynchronize
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceReset(void);
+
+/**
+ * \brief Wait for compute device to finish
+ *
+ * Blocks until the device has completed all preceding requested tasks.
+ * ::cudaDeviceSynchronize() returns an error if one of the preceding tasks
+ * has failed. If the ::cudaDeviceScheduleBlockingSync flag was set for 
+ * this device, the host thread will block until the device has finished 
+ * its work.
+ *
+ * \return
+ * ::cudaSuccess
+ * \note_device_sync_deprecated
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceReset,
+ * ::cuCtxSynchronize
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceSynchronize(void);
+
+/**
+ * \brief Set resource limits
+ *
+ * Setting \p limit to \p value is a request by the application to update
+ * the current limit maintained by the device.  The driver is free to
+ * modify the requested value to meet h/w requirements (this could be
+ * clamping to minimum or maximum values, rounding up to nearest element
+ * size, etc).  The application can use ::cudaDeviceGetLimit() to find out
+ * exactly what the limit has been set to.
+ *
+ * Setting each ::cudaLimit has its own specific restrictions, so each is
+ * discussed here.
+ *
+ * - ::cudaLimitStackSize controls the stack size in bytes of each GPU thread.
+ *
+ * - ::cudaLimitPrintfFifoSize controls the size in bytes of the shared FIFO
+ *   used by the ::printf() device system call. Setting
+ *   ::cudaLimitPrintfFifoSize must not be performed after launching any kernel
+ *   that uses the ::printf() device system call - in such case
+ *   ::cudaErrorInvalidValue will be returned.
+ *
+ * - ::cudaLimitMallocHeapSize controls the size in bytes of the heap used by
+ *   the ::malloc() and ::free() device system calls. Setting
+ *   ::cudaLimitMallocHeapSize must not be performed after launching any kernel
+ *   that uses the ::malloc() or ::free() device system calls - in such case
+ *   ::cudaErrorInvalidValue will be returned.
+ *
+ * - ::cudaLimitDevRuntimeSyncDepth controls the maximum nesting depth of a
+ *   grid at which a thread can safely call ::cudaDeviceSynchronize(). Setting
+ *   this limit must be performed before any launch of a kernel that uses the
+ *   device runtime and calls ::cudaDeviceSynchronize() above the default sync
+ *   depth, two levels of grids. Calls to ::cudaDeviceSynchronize() will fail
+ *   with error code ::cudaErrorSyncDepthExceeded if the limitation is
+ *   violated. This limit can be set smaller than the default or up the maximum
+ *   launch depth of 24. When setting this limit, keep in mind that additional
+ *   levels of sync depth require the runtime to reserve large amounts of
+ *   device memory which can no longer be used for user allocations. If these
+ *   reservations of device memory fail, ::cudaDeviceSetLimit will return
+ *   ::cudaErrorMemoryAllocation, and the limit can be reset to a lower value.
+ *   This limit is only applicable to devices of compute capability 3.5 and
+ *   higher. Attempting to set this limit on devices of compute capability less
+ *   than 3.5 will result in the error ::cudaErrorUnsupportedLimit being
+ *   returned.
+ *
+ * - ::cudaLimitDevRuntimePendingLaunchCount controls the maximum number of
+ *   outstanding device runtime launches that can be made from the current
+ *   device. A grid is outstanding from the point of launch up until the grid
+ *   is known to have been completed. Device runtime launches which violate 
+ *   this limitation fail and return ::cudaErrorLaunchPendingCountExceeded when
+ *   ::cudaGetLastError() is called after launch. If more pending launches than
+ *   the default (2048 launches) are needed for a module using the device
+ *   runtime, this limit can be increased. Keep in mind that being able to
+ *   sustain additional pending launches will require the runtime to reserve
+ *   larger amounts of device memory upfront which can no longer be used for
+ *   allocations. If these reservations fail, ::cudaDeviceSetLimit will return
+ *   ::cudaErrorMemoryAllocation, and the limit can be reset to a lower value.
+ *   This limit is only applicable to devices of compute capability 3.5 and
+ *   higher. Attempting to set this limit on devices of compute capability less
+ *   than 3.5 will result in the error ::cudaErrorUnsupportedLimit being
+ *   returned. 
+ *
+ * - ::cudaLimitMaxL2FetchGranularity controls the L2 cache fetch granularity.
+ *   Values can range from 0B to 128B. This is purely a performance hint and
+ *   it can be ignored or clamped depending on the platform.
+ *
+ * - ::cudaLimitPersistingL2CacheSize controls size in bytes available
+ *   for persisting L2 cache. This is purely a performance hint and it
+ *   can be ignored or clamped depending on the platform.
+ *
+ * \param limit - Limit to set
+ * \param value - Size of limit
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnsupportedLimit,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceGetLimit,
+ * ::cuCtxSetLimit
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceSetLimit(enum cudaLimit limit, size_t value);
+
+/**
+ * \brief Returns resource limits
+ *  * Returns in \p *pValue the current size of \p limit. The following ::cudaLimit values are supported. 
+ * - ::cudaLimitStackSize is the stack size in bytes of each GPU thread.
+ * - ::cudaLimitPrintfFifoSize is the size in bytes of the shared FIFO used by the
+ *   ::printf() device system call.
+ * - ::cudaLimitMallocHeapSize is the size in bytes of the heap used by the
+ *   ::malloc() and ::free() device system calls.
+ * - ::cudaLimitDevRuntimeSyncDepth is the maximum grid depth at which a
+ *   thread can isssue the device runtime call ::cudaDeviceSynchronize()
+ *   to wait on child grid launches to complete.
+ * - ::cudaLimitDevRuntimePendingLaunchCount is the maximum number of outstanding
+ *   device runtime launches.
+ * - ::cudaLimitMaxL2FetchGranularity is the L2 cache fetch granularity.
+ * - ::cudaLimitPersistingL2CacheSize is the persisting L2 cache size in bytes.
+ *
+ * \param limit  - Limit to query
+ * \param pValue - Returned size of the limit
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnsupportedLimit,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceSetLimit,
+ * ::cuCtxGetLimit
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetLimit(size_t *pValue, enum cudaLimit limit);
+
+/**
+ * \brief Returns the maximum number of elements allocatable in a 1D linear texture for a given element size.
+ *
+ * Returns in \p maxWidthInElements the maximum number of elements allocatable in a 1D linear texture
+ * for given format descriptor \p fmtDesc.
+ *
+ * \param maxWidthInElements    - Returns maximum number of texture elements allocatable for given \p fmtDesc.
+ * \param fmtDesc               - Texture format description.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnsupportedLimit,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuDeviceGetMaxTexture1DLinear,
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetTexture1DLinearMaxWidth(size_t *maxWidthInElements, const struct cudaChannelFormatDesc *fmtDesc, int device);
+#endif
+
+/**
+ * \brief Returns the preferred cache configuration for the current device.
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this returns through \p pCacheConfig the preferred cache
+ * configuration for the current device. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute functions.
+ *
+ * This will return a \p pCacheConfig of ::cudaFuncCachePreferNone on devices
+ * where the size of the L1 cache and shared memory are fixed.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ * - ::cudaFuncCachePreferEqual: prefer equal size L1 cache and shared memory
+ *
+ * \param pCacheConfig - Returned cache configuration
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetCacheConfig,
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * ::cuCtxGetCacheConfig
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetCacheConfig(enum cudaFuncCache *pCacheConfig);
+
+/**
+ * \brief Returns numerical values that correspond to the least and
+ * greatest stream priorities.
+ *
+ * Returns in \p *leastPriority and \p *greatestPriority the numerical values that correspond
+ * to the least and greatest stream priorities respectively. Stream priorities
+ * follow a convention where lower numbers imply greater priorities. The range of
+ * meaningful stream priorities is given by [\p *greatestPriority, \p *leastPriority].
+ * If the user attempts to create a stream with a priority value that is
+ * outside the the meaningful range as specified by this API, the priority is
+ * automatically clamped down or up to either \p *leastPriority or \p *greatestPriority
+ * respectively. See ::cudaStreamCreateWithPriority for details on creating a
+ * priority stream.
+ * A NULL may be passed in for \p *leastPriority or \p *greatestPriority if the value
+ * is not desired.
+ *
+ * This function will return '0' in both \p *leastPriority and \p *greatestPriority if
+ * the current context's device does not support stream priorities
+ * (see ::cudaDeviceGetAttribute).
+ *
+ * \param leastPriority    - Pointer to an int in which the numerical value for least
+ *                           stream priority is returned
+ * \param greatestPriority - Pointer to an int in which the numerical value for greatest
+ *                           stream priority is returned
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreateWithPriority,
+ * ::cudaStreamGetPriority,
+ * ::cuCtxGetStreamPriorityRange
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetStreamPriorityRange(int *leastPriority, int *greatestPriority);
+
+/**
+ * \brief Sets the preferred cache configuration for the current device.
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p cacheConfig the preferred cache
+ * configuration for the current device. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute the function. Any
+ * function preference set via
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)"
+ * or
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)"
+ * will be preferred over this device-wide setting. Setting the device-wide
+ * cache configuration to ::cudaFuncCachePreferNone will cause subsequent
+ * kernel launches to prefer to not change the cache configuration unless
+ * required to launch the kernel.
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ * - ::cudaFuncCachePreferEqual: prefer equal size L1 cache and shared memory
+ *
+ * \param cacheConfig - Requested cache configuration
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceGetCacheConfig,
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * ::cuCtxSetCacheConfig
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceSetCacheConfig(enum cudaFuncCache cacheConfig);
+
+/**
+ * \brief Returns the shared memory configuration for the current device.
+ *
+ * This function will return in \p pConfig the current size of shared memory banks
+ * on the current device. On devices with configurable shared memory banks, 
+ * ::cudaDeviceSetSharedMemConfig can be used to change this setting, so that all 
+ * subsequent kernel launches will by default use the new bank size. When 
+ * ::cudaDeviceGetSharedMemConfig is called on devices without configurable shared 
+ * memory, it will return the fixed bank size of the hardware.
+ *
+ * The returned bank configurations can be either:
+ * - ::cudaSharedMemBankSizeFourByte - shared memory bank width is four bytes.
+ * - ::cudaSharedMemBankSizeEightByte - shared memory bank width is eight bytes.
+ *
+ * \param pConfig - Returned cache configuration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetCacheConfig,
+ * ::cudaDeviceGetCacheConfig,
+ * ::cudaDeviceSetSharedMemConfig,
+ * ::cudaFuncSetCacheConfig,
+ * ::cuCtxGetSharedMemConfig
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetSharedMemConfig(enum cudaSharedMemConfig *pConfig);
+
+/**
+ * \brief Sets the shared memory configuration for the current device.
+ *
+ * On devices with configurable shared memory banks, this function will set
+ * the shared memory bank size which is used for all subsequent kernel launches.
+ * Any per-function setting of shared memory set via ::cudaFuncSetSharedMemConfig
+ * will override the device wide setting.
+ *
+ * Changing the shared memory configuration between launches may introduce
+ * a device side synchronization point.
+ *
+ * Changing the shared memory bank size will not increase shared memory usage
+ * or affect occupancy of kernels, but may have major effects on performance. 
+ * Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ * but will change what kinds of accesses to shared memory will result in bank 
+ * conflicts.
+ *
+ * This function will do nothing on devices with fixed shared memory bank size.
+ *
+ * The supported bank configurations are:
+ * - ::cudaSharedMemBankSizeDefault: set bank width the device default (currently,
+ *   four bytes)
+ * - ::cudaSharedMemBankSizeFourByte: set shared memory bank width to be four bytes
+ *   natively.
+ * - ::cudaSharedMemBankSizeEightByte: set shared memory bank width to be eight 
+ *   bytes natively.
+ *
+ * \param config - Requested cache configuration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetCacheConfig,
+ * ::cudaDeviceGetCacheConfig,
+ * ::cudaDeviceGetSharedMemConfig,
+ * ::cudaFuncSetCacheConfig,
+ * ::cuCtxSetSharedMemConfig
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceSetSharedMemConfig(enum cudaSharedMemConfig config);
+
+/**
+ * \brief Returns a handle to a compute device
+ *
+ * Returns in \p *device a device ordinal given a PCI bus ID string.
+ *
+ * \param device   - Returned device ordinal
+ *
+ * \param pciBusId - String in one of the following forms: 
+ * [domain]:[bus]:[device].[function]
+ * [domain]:[bus]:[device]
+ * [bus]:[device].[function]
+ * where \p domain, \p bus, \p device, and \p function are all hexadecimal values
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceGetPCIBusId,
+ * ::cuDeviceGetByPCIBusId
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetByPCIBusId(int *device, const char *pciBusId);
+
+/**
+ * \brief Returns a PCI Bus Id string for the device
+ *
+ * Returns an ASCII string identifying the device \p dev in the NULL-terminated
+ * string pointed to by \p pciBusId. \p len specifies the maximum length of the
+ * string that may be returned.
+ *
+ * \param pciBusId - Returned identifier string for the device in the following format
+ * [domain]:[bus]:[device].[function]
+ * where \p domain, \p bus, \p device, and \p function are all hexadecimal values.
+ * pciBusId should be large enough to store 13 characters including the NULL-terminator.
+ *
+ * \param len      - Maximum length of string to store in \p name
+ *
+ * \param device   - Device to get identifier string for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceGetByPCIBusId,
+ * ::cuDeviceGetPCIBusId
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetPCIBusId(char *pciBusId, int len, int device);
+
+/**
+ * \brief Gets an interprocess handle for a previously allocated event
+ *
+ * Takes as input a previously allocated event. This event must have been 
+ * created with the ::cudaEventInterprocess and ::cudaEventDisableTiming
+ * flags set. This opaque handle may be copied into other processes and
+ * opened with ::cudaIpcOpenEventHandle to allow efficient hardware
+ * synchronization between GPU work in different processes.
+ *
+ * After the event has been been opened in the importing process, 
+ * ::cudaEventRecord, ::cudaEventSynchronize, ::cudaStreamWaitEvent and 
+ * ::cudaEventQuery may be used in either process. Performing operations 
+ * on the imported event after the exported event has been freed 
+ * with ::cudaEventDestroy will result in undefined behavior.
+ *
+ * IPC functionality is restricted to devices with support for unified 
+ * addressing on Linux operating systems. IPC functionality is not supported
+ * on Tegra platforms.
+ *
+ * \param handle - Pointer to a user allocated cudaIpcEventHandle
+ *                    in which to return the opaque event handle
+ * \param event   - Event allocated with ::cudaEventInterprocess and 
+ *                    ::cudaEventDisableTiming flags.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorMapBufferObjectFailed,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaEventCreate,
+ * ::cudaEventDestroy,
+ * ::cudaEventSynchronize,
+ * ::cudaEventQuery,
+ * ::cudaStreamWaitEvent,
+ * ::cudaIpcOpenEventHandle,
+ * ::cudaIpcGetMemHandle,
+ * ::cudaIpcOpenMemHandle,
+ * ::cudaIpcCloseMemHandle,
+ * ::cuIpcGetEventHandle
+ */
+extern __host__ cudaError_t CUDARTAPI cudaIpcGetEventHandle(cudaIpcEventHandle_t *handle, cudaEvent_t event);
+
+/**
+ * \brief Opens an interprocess event handle for use in the current process
+ *
+ * Opens an interprocess event handle exported from another process with 
+ * ::cudaIpcGetEventHandle. This function returns a ::cudaEvent_t that behaves like 
+ * a locally created event with the ::cudaEventDisableTiming flag specified. 
+ * This event must be freed with ::cudaEventDestroy.
+ *
+ * Performing operations on the imported event after the exported event has 
+ * been freed with ::cudaEventDestroy will result in undefined behavior.
+ *
+ * IPC functionality is restricted to devices with support for unified 
+ * addressing on Linux operating systems. IPC functionality is not supported
+ * on Tegra platforms.
+ *
+ * \param event - Returns the imported event
+ * \param handle  - Interprocess handle to open
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorMapBufferObjectFailed,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorDeviceUninitialized
+ * \note_init_rt
+ * \note_callback
+ *
+  * \sa
+ * ::cudaEventCreate,
+ * ::cudaEventDestroy,
+ * ::cudaEventSynchronize,
+ * ::cudaEventQuery,
+ * ::cudaStreamWaitEvent,
+ * ::cudaIpcGetEventHandle,
+ * ::cudaIpcGetMemHandle,
+ * ::cudaIpcOpenMemHandle,
+ * ::cudaIpcCloseMemHandle,
+ * ::cuIpcOpenEventHandle
+ */
+extern __host__ cudaError_t CUDARTAPI cudaIpcOpenEventHandle(cudaEvent_t *event, cudaIpcEventHandle_t handle);
+
+
+/**
+ * \brief Gets an interprocess memory handle for an existing device memory
+ *          allocation
+ *
+ * Takes a pointer to the base of an existing device memory allocation created 
+ * with ::cudaMalloc and exports it for use in another process. This is a 
+ * lightweight operation and may be called multiple times on an allocation
+ * without adverse effects. 
+ *
+ * If a region of memory is freed with ::cudaFree and a subsequent call
+ * to ::cudaMalloc returns memory with the same device address,
+ * ::cudaIpcGetMemHandle will return a unique handle for the
+ * new memory. 
+ *
+ * IPC functionality is restricted to devices with support for unified 
+ * addressing on Linux operating systems. IPC functionality is not supported
+ * on Tegra platforms.
+ *
+ * \param handle - Pointer to user allocated ::cudaIpcMemHandle to return
+ *                    the handle in.
+ * \param devPtr - Base pointer to previously allocated device memory 
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorMapBufferObjectFailed,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMalloc,
+ * ::cudaFree,
+ * ::cudaIpcGetEventHandle,
+ * ::cudaIpcOpenEventHandle,
+ * ::cudaIpcOpenMemHandle,
+ * ::cudaIpcCloseMemHandle,
+ * ::cuIpcGetMemHandle
+ */
+extern __host__ cudaError_t CUDARTAPI cudaIpcGetMemHandle(cudaIpcMemHandle_t *handle, void *devPtr);
+
+/**
+ * \brief Opens an interprocess memory handle exported from another process
+ *          and returns a device pointer usable in the local process.
+ *
+ * Maps memory exported from another process with ::cudaIpcGetMemHandle into
+ * the current device address space. For contexts on different devices 
+ * ::cudaIpcOpenMemHandle can attempt to enable peer access between the
+ * devices as if the user called ::cudaDeviceEnablePeerAccess. This behavior is 
+ * controlled by the ::cudaIpcMemLazyEnablePeerAccess flag. 
+ * ::cudaDeviceCanAccessPeer can determine if a mapping is possible.
+ *
+ * ::cudaIpcOpenMemHandle can open handles to devices that may not be visible
+ * in the process calling the API.
+ *
+ * Contexts that may open ::cudaIpcMemHandles are restricted in the following way.
+ * ::cudaIpcMemHandles from each device in a given process may only be opened 
+ * by one context per device per other process.
+ *
+ * If the memory handle has already been opened by the current context, the
+ * reference count on the handle is incremented by 1 and the existing device pointer
+ * is returned.
+ *
+ * Memory returned from ::cudaIpcOpenMemHandle must be freed with
+ * ::cudaIpcCloseMemHandle.
+ *
+ * Calling ::cudaFree on an exported memory region before calling
+ * ::cudaIpcCloseMemHandle in the importing context will result in undefined
+ * behavior.
+ * 
+ * IPC functionality is restricted to devices with support for unified 
+ * addressing on Linux operating systems. IPC functionality is not supported
+ * on Tegra platforms.
+ *
+ * \param devPtr - Returned device pointer
+ * \param handle - ::cudaIpcMemHandle to open
+ * \param flags  - Flags for this operation. Must be specified as ::cudaIpcMemLazyEnablePeerAccess
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorMapBufferObjectFailed,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorDeviceUninitialized,
+ * ::cudaErrorTooManyPeers,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \note No guarantees are made about the address returned in \p *devPtr.  
+ * In particular, multiple processes may not receive the same address for the same \p handle.
+ *
+ * \sa
+ * ::cudaMalloc,
+ * ::cudaFree,
+ * ::cudaIpcGetEventHandle,
+ * ::cudaIpcOpenEventHandle,
+ * ::cudaIpcGetMemHandle,
+ * ::cudaIpcCloseMemHandle,
+ * ::cudaDeviceEnablePeerAccess,
+ * ::cudaDeviceCanAccessPeer,
+ * ::cuIpcOpenMemHandle
+ */
+extern __host__ cudaError_t CUDARTAPI cudaIpcOpenMemHandle(void **devPtr, cudaIpcMemHandle_t handle, unsigned int flags);
+
+/**
+ * \brief Attempts to close memory mapped with cudaIpcOpenMemHandle
+ * 
+ * Decrements the reference count of the memory returnd by ::cudaIpcOpenMemHandle by 1.
+ * When the reference count reaches 0, this API unmaps the memory. The original allocation
+ * in the exporting process as well as imported mappings in other processes
+ * will be unaffected.
+ *
+ * Any resources used to enable peer access will be freed if this is the
+ * last mapping using them.
+ *
+ * IPC functionality is restricted to devices with support for unified 
+ * addressing on Linux operating systems. IPC functionality is not supported
+ * on Tegra platforms.
+ *
+ * \param devPtr - Device pointer returned by ::cudaIpcOpenMemHandle
+ * 
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorMapBufferObjectFailed,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMalloc,
+ * ::cudaFree,
+ * ::cudaIpcGetEventHandle,
+ * ::cudaIpcOpenEventHandle,
+ * ::cudaIpcGetMemHandle,
+ * ::cudaIpcOpenMemHandle,
+ * ::cuIpcCloseMemHandle
+ */
+extern __host__ cudaError_t CUDARTAPI cudaIpcCloseMemHandle(void *devPtr);
+
+/**
+ * \brief Blocks until remote writes are visible to the specified scope
+ *
+ * Blocks until remote writes to the target context via mappings created
+ * through GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see
+ * https://docs.nvidia.com/cuda/gpudirect-rdma for more information), are
+ * visible to the specified scope.
+ *
+ * If the scope equals or lies within the scope indicated by
+ * ::cudaDevAttrGPUDirectRDMAWritesOrdering, the call will be a no-op and
+ * can be safely omitted for performance. This can be determined by
+ * comparing the numerical values between the two enums, with smaller
+ * scopes having smaller values.
+ *
+ * Users may query support for this API via ::cudaDevAttrGPUDirectRDMAFlushWritesOptions.
+ *
+ * \param target - The target of the operation, see cudaFlushGPUDirectRDMAWritesTarget
+ * \param scope  - The scope of the operation, see cudaFlushGPUDirectRDMAWritesScope
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotSupported,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuFlushGPUDirectRDMAWrites
+ */
+#if __CUDART_API_VERSION >= 11030
+extern __host__ cudaError_t CUDARTAPI cudaDeviceFlushGPUDirectRDMAWrites(enum cudaFlushGPUDirectRDMAWritesTarget target, enum cudaFlushGPUDirectRDMAWritesScope scope);
+#endif
+
+/** @} */ /* END CUDART_DEVICE */
+
+/**
+ * \defgroup CUDART_THREAD_DEPRECATED Thread Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated thread management functions of the CUDA runtime
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated thread management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Exit and clean up from CUDA launches
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is identical to the 
+ * non-deprecated function ::cudaDeviceReset(), which should be used
+ * instead.
+ *
+ * Explicitly destroys all cleans up all resources associated with the current
+ * device in the current process.  Any subsequent API call to this device will 
+ * reinitialize the device.  
+ *
+ * Note that this function will reset the device immediately.  It is the caller's
+ * responsibility to ensure that the device is not being accessed by any 
+ * other host threads from the process when this function is called.
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceReset
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadExit(void);
+
+/**
+ * \brief Wait for compute device to finish
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is similar to the 
+ * non-deprecated function ::cudaDeviceSynchronize(), which should be used
+ * instead.
+ *
+ * Blocks until the device has completed all preceding requested tasks.
+ * ::cudaThreadSynchronize() returns an error if one of the preceding tasks
+ * has failed. If the ::cudaDeviceScheduleBlockingSync flag was set for 
+ * this device, the host thread will block until the device has finished 
+ * its work.
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSynchronize
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadSynchronize(void);
+
+/**
+ * \brief Set resource limits
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is identical to the 
+ * non-deprecated function ::cudaDeviceSetLimit(), which should be used
+ * instead.
+ *
+ * Setting \p limit to \p value is a request by the application to update
+ * the current limit maintained by the device.  The driver is free to
+ * modify the requested value to meet h/w requirements (this could be
+ * clamping to minimum or maximum values, rounding up to nearest element
+ * size, etc).  The application can use ::cudaThreadGetLimit() to find out
+ * exactly what the limit has been set to.
+ *
+ * Setting each ::cudaLimit has its own specific restrictions, so each is
+ * discussed here.
+ *
+ * - ::cudaLimitStackSize controls the stack size of each GPU thread.
+ *
+ * - ::cudaLimitPrintfFifoSize controls the size of the shared FIFO
+ *   used by the ::printf() device system call.
+ *   Setting ::cudaLimitPrintfFifoSize must be performed before
+ *   launching any kernel that uses the ::printf() device
+ *   system call, otherwise ::cudaErrorInvalidValue will be returned.
+ *
+ * - ::cudaLimitMallocHeapSize controls the size of the heap used
+ *   by the ::malloc() and ::free() device system calls.  Setting
+ *   ::cudaLimitMallocHeapSize must be performed before launching
+ *   any kernel that uses the ::malloc() or ::free() device system calls,
+ *   otherwise ::cudaErrorInvalidValue will be returned.
+ *
+ * \param limit - Limit to set
+ * \param value - Size in bytes of limit
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnsupportedLimit,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetLimit
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadSetLimit(enum cudaLimit limit, size_t value);
+
+/**
+ * \brief Returns resource limits
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is identical to the 
+ * non-deprecated function ::cudaDeviceGetLimit(), which should be used
+ * instead.
+ *
+ * Returns in \p *pValue the current size of \p limit.  The supported
+ * ::cudaLimit values are:
+ * - ::cudaLimitStackSize: stack size of each GPU thread;
+ * - ::cudaLimitPrintfFifoSize: size of the shared FIFO used by the
+ *   ::printf() device system call.
+ * - ::cudaLimitMallocHeapSize: size of the heap used by the
+ *   ::malloc() and ::free() device system calls;
+ *
+ * \param limit  - Limit to query
+ * \param pValue - Returned size in bytes of limit
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorUnsupportedLimit,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceGetLimit
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadGetLimit(size_t *pValue, enum cudaLimit limit);
+
+/**
+ * \brief Returns the preferred cache configuration for the current device.
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is identical to the 
+ * non-deprecated function ::cudaDeviceGetCacheConfig(), which should be 
+ * used instead.
+ * 
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this returns through \p pCacheConfig the preferred cache
+ * configuration for the current device. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute functions.
+ *
+ * This will return a \p pCacheConfig of ::cudaFuncCachePreferNone on devices
+ * where the size of the L1 cache and shared memory are fixed.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ *
+ * \param pCacheConfig - Returned cache configuration
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceGetCacheConfig
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadGetCacheConfig(enum cudaFuncCache *pCacheConfig);
+
+/**
+ * \brief Sets the preferred cache configuration for the current device.
+ *
+ * \deprecated
+ *
+ * Note that this function is deprecated because its name does not 
+ * reflect its behavior.  Its functionality is identical to the 
+ * non-deprecated function ::cudaDeviceSetCacheConfig(), which should be 
+ * used instead.
+ * 
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p cacheConfig the preferred cache
+ * configuration for the current device. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute the function. Any
+ * function preference set via
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)"
+ * or
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)"
+ * will be preferred over this device-wide setting. Setting the device-wide
+ * cache configuration to ::cudaFuncCachePreferNone will cause subsequent
+ * kernel launches to prefer to not change the cache configuration unless
+ * required to launch the kernel.
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ *
+ * \param cacheConfig - Requested cache configuration
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetCacheConfig
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaThreadSetCacheConfig(enum cudaFuncCache cacheConfig);
+
+/** @} */ /* END CUDART_THREAD_DEPRECATED */
+
+/**
+ * \defgroup CUDART_ERROR Error Handling
+ *
+ * ___MANBRIEF___ error handling functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the error handling functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the last error from a runtime call
+ *
+ * Returns the last error that has been produced by any of the runtime calls
+ * in the same host thread and resets it to ::cudaSuccess.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMissingConfiguration,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorUnmapBufferObjectFailed,
+ * ::cudaErrorInvalidDevicePointer,
+ * ::cudaErrorInvalidTexture,
+ * ::cudaErrorInvalidTextureBinding,
+ * ::cudaErrorInvalidChannelDescriptor,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorInvalidFilterSetting,
+ * ::cudaErrorInvalidNormSetting,
+ * ::cudaErrorUnknown,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorInsufficientDriver,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorSetOnActiveProcess,
+ * ::cudaErrorStartupFailure,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaPeekAtLastError, ::cudaGetErrorName, ::cudaGetErrorString, ::cudaError
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetLastError(void);
+
+/**
+ * \brief Returns the last error from a runtime call
+ *
+ * Returns the last error that has been produced by any of the runtime calls
+ * in the same host thread. Note that this call does not reset the error to
+ * ::cudaSuccess like ::cudaGetLastError().
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMissingConfiguration,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorUnmapBufferObjectFailed,
+ * ::cudaErrorInvalidDevicePointer,
+ * ::cudaErrorInvalidTexture,
+ * ::cudaErrorInvalidTextureBinding,
+ * ::cudaErrorInvalidChannelDescriptor,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorInvalidFilterSetting,
+ * ::cudaErrorInvalidNormSetting,
+ * ::cudaErrorUnknown,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorInsufficientDriver,
+ * ::cudaErrorNoDevice,
+ * ::cudaErrorSetOnActiveProcess,
+ * ::cudaErrorStartupFailure,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetLastError, ::cudaGetErrorName, ::cudaGetErrorString, ::cudaError
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaPeekAtLastError(void);
+
+/**
+ * \brief Returns the string representation of an error code enum name
+ *
+ * Returns a string containing the name of an error code in the enum.  If the error
+ * code is not recognized, "unrecognized error code" is returned.
+ *
+ * \param error - Error code to convert to string
+ *
+ * \return
+ * \p char* pointer to a NULL-terminated string
+ *
+ * \sa ::cudaGetErrorString, ::cudaGetLastError, ::cudaPeekAtLastError, ::cudaError,
+ * ::cuGetErrorName
+ */
+extern __host__ __cudart_builtin__ const char* CUDARTAPI cudaGetErrorName(cudaError_t error);
+
+/**
+ * \brief Returns the description string for an error code
+ *
+ * Returns the description string for an error code.  If the error
+ * code is not recognized, "unrecognized error code" is returned.
+ *
+ * \param error - Error code to convert to string
+ *
+ * \return
+ * \p char* pointer to a NULL-terminated string
+ *
+ * \sa ::cudaGetErrorName, ::cudaGetLastError, ::cudaPeekAtLastError, ::cudaError,
+ * ::cuGetErrorString
+ */
+extern __host__ __cudart_builtin__ const char* CUDARTAPI cudaGetErrorString(cudaError_t error);
+/** @} */ /* END CUDART_ERROR */
+
+/**
+ * \addtogroup CUDART_DEVICE 
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the number of compute-capable devices
+ *
+ * Returns in \p *count the number of devices with compute capability greater
+ * or equal to 2.0 that are available for execution.
+ *
+ * \param count - Returns the number of devices with compute capability
+ * greater or equal to 2.0
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDevice, ::cudaSetDevice, ::cudaGetDeviceProperties,
+ * ::cudaChooseDevice,
+ * ::cuDeviceGetCount
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetDeviceCount(int *count);
+
+/**
+ * \brief Returns information about the compute-device
+ *
+ * Returns in \p *prop the properties of device \p dev. The ::cudaDeviceProp
+ * structure is defined as:
+ * \code
+    struct cudaDeviceProp {
+        char name[256];
+        cudaUUID_t uuid;
+        size_t totalGlobalMem;
+        size_t sharedMemPerBlock;
+        int regsPerBlock;
+        int warpSize;
+        size_t memPitch;
+        int maxThreadsPerBlock;
+        int maxThreadsDim[3];
+        int maxGridSize[3];
+        int clockRate;
+        size_t totalConstMem;
+        int major;
+        int minor;
+        size_t textureAlignment;
+        size_t texturePitchAlignment;
+        int deviceOverlap;
+        int multiProcessorCount;
+        int kernelExecTimeoutEnabled;
+        int integrated;
+        int canMapHostMemory;
+        int computeMode;
+        int maxTexture1D;
+        int maxTexture1DMipmap;
+        int maxTexture1DLinear;
+        int maxTexture2D[2];
+        int maxTexture2DMipmap[2];
+        int maxTexture2DLinear[3];
+        int maxTexture2DGather[2];
+        int maxTexture3D[3];
+        int maxTexture3DAlt[3];
+        int maxTextureCubemap;
+        int maxTexture1DLayered[2];
+        int maxTexture2DLayered[3];
+        int maxTextureCubemapLayered[2];
+        int maxSurface1D;
+        int maxSurface2D[2];
+        int maxSurface3D[3];
+        int maxSurface1DLayered[2];
+        int maxSurface2DLayered[3];
+        int maxSurfaceCubemap;
+        int maxSurfaceCubemapLayered[2];
+        size_t surfaceAlignment;
+        int concurrentKernels;
+        int ECCEnabled;
+        int pciBusID;
+        int pciDeviceID;
+        int pciDomainID;
+        int tccDriver;
+        int asyncEngineCount;
+        int unifiedAddressing;
+        int memoryClockRate;
+        int memoryBusWidth;
+        int l2CacheSize;
+        int persistingL2CacheMaxSize;
+        int maxThreadsPerMultiProcessor;
+        int streamPrioritiesSupported;
+        int globalL1CacheSupported;
+        int localL1CacheSupported;
+        size_t sharedMemPerMultiprocessor;
+        int regsPerMultiprocessor;
+        int managedMemory;
+        int isMultiGpuBoard;
+        int multiGpuBoardGroupID;
+        int singleToDoublePrecisionPerfRatio;
+        int pageableMemoryAccess;
+        int concurrentManagedAccess;
+        int computePreemptionSupported;
+        int canUseHostPointerForRegisteredMem;
+        int cooperativeLaunch;
+        int cooperativeMultiDeviceLaunch;
+        int pageableMemoryAccessUsesHostPageTables;
+        int directManagedMemAccessFromHost;
+        int accessPolicyMaxWindowSize;
+    }
+ \endcode
+ * where:
+ * - \ref ::cudaDeviceProp::name "name[256]" is an ASCII string identifying
+ *   the device.
+ * - \ref ::cudaDeviceProp::uuid "uuid" is a 16-byte unique identifier.
+ * - \ref ::cudaDeviceProp::totalGlobalMem "totalGlobalMem" is the total
+ *   amount of global memory available on the device in bytes.
+ * - \ref ::cudaDeviceProp::sharedMemPerBlock "sharedMemPerBlock" is the
+ *   maximum amount of shared memory available to a thread block in bytes.
+ * - \ref ::cudaDeviceProp::regsPerBlock "regsPerBlock" is the maximum number
+ *   of 32-bit registers available to a thread block.
+ * - \ref ::cudaDeviceProp::warpSize "warpSize" is the warp size in threads.
+ * - \ref ::cudaDeviceProp::memPitch "memPitch" is the maximum pitch in
+ *   bytes allowed by the memory copy functions that involve memory regions
+ *   allocated through ::cudaMallocPitch().
+ * - \ref ::cudaDeviceProp::maxThreadsPerBlock "maxThreadsPerBlock" is the
+ *   maximum number of threads per block.
+ * - \ref ::cudaDeviceProp::maxThreadsDim "maxThreadsDim[3]" contains the
+ *   maximum size of each dimension of a block.
+ * - \ref ::cudaDeviceProp::maxGridSize "maxGridSize[3]" contains the
+ *   maximum size of each dimension of a grid.
+ * - \ref ::cudaDeviceProp::clockRate "clockRate" is the clock frequency in
+ *   kilohertz.
+ * - \ref ::cudaDeviceProp::totalConstMem "totalConstMem" is the total amount
+ *   of constant memory available on the device in bytes.
+ * - \ref ::cudaDeviceProp::major "major",
+ *   \ref ::cudaDeviceProp::minor "minor" are the major and minor revision
+ *   numbers defining the device's compute capability.
+ * - \ref ::cudaDeviceProp::textureAlignment "textureAlignment" is the
+ *   alignment requirement; texture base addresses that are aligned to
+ *   \ref ::cudaDeviceProp::textureAlignment "textureAlignment" bytes do not
+ *   need an offset applied to texture fetches.
+ * - \ref ::cudaDeviceProp::texturePitchAlignment "texturePitchAlignment" is the
+ *   pitch alignment requirement for 2D texture references that are bound to 
+ *   pitched memory.
+ * - \ref ::cudaDeviceProp::deviceOverlap "deviceOverlap" is 1 if the device
+ *   can concurrently copy memory between host and device while executing a
+ *   kernel, or 0 if not.  Deprecated, use instead asyncEngineCount.
+ * - \ref ::cudaDeviceProp::multiProcessorCount "multiProcessorCount" is the
+ *   number of multiprocessors on the device.
+ * - \ref ::cudaDeviceProp::kernelExecTimeoutEnabled "kernelExecTimeoutEnabled"
+ *   is 1 if there is a run time limit for kernels executed on the device, or
+ *   0 if not.
+ * - \ref ::cudaDeviceProp::integrated "integrated" is 1 if the device is an
+ *   integrated (motherboard) GPU and 0 if it is a discrete (card) component.
+ * - \ref ::cudaDeviceProp::canMapHostMemory "canMapHostMemory" is 1 if the
+ *   device can map host memory into the CUDA address space for use with
+ *   ::cudaHostAlloc()/::cudaHostGetDevicePointer(), or 0 if not.
+ * - \ref ::cudaDeviceProp::computeMode "computeMode" is the compute mode
+ *   that the device is currently in. Available modes are as follows:
+ *   - cudaComputeModeDefault: Default mode - Device is not restricted and
+ *     multiple threads can use ::cudaSetDevice() with this device.
+ *   - cudaComputeModeProhibited: Compute-prohibited mode - No threads can use
+ *     ::cudaSetDevice() with this device.
+ *   - cudaComputeModeExclusiveProcess: Compute-exclusive-process mode - Many 
+ *     threads in one process will be able to use ::cudaSetDevice() with this device.
+ *   <br> When an occupied exclusive mode device is chosen with ::cudaSetDevice,
+ *   all subsequent non-device management runtime functions will return
+ *   ::cudaErrorDevicesUnavailable.
+ * - \ref ::cudaDeviceProp::maxTexture1D "maxTexture1D" is the maximum 1D
+ *   texture size.
+ * - \ref ::cudaDeviceProp::maxTexture1DMipmap "maxTexture1DMipmap" is the maximum
+ *   1D mipmapped texture texture size.
+ * - \ref ::cudaDeviceProp::maxTexture1DLinear "maxTexture1DLinear" is the maximum
+ *   1D texture size for textures bound to linear memory.
+ * - \ref ::cudaDeviceProp::maxTexture2D "maxTexture2D[2]" contains the maximum
+ *   2D texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTexture2DMipmap "maxTexture2DMipmap[2]" contains the
+ *   maximum 2D mipmapped texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTexture2DLinear "maxTexture2DLinear[3]" contains the 
+ *   maximum 2D texture dimensions for 2D textures bound to pitch linear memory.
+ * - \ref ::cudaDeviceProp::maxTexture2DGather "maxTexture2DGather[2]" contains the 
+ *   maximum 2D texture dimensions if texture gather operations have to be performed.
+ * - \ref ::cudaDeviceProp::maxTexture3D "maxTexture3D[3]" contains the maximum
+ *   3D texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTexture3DAlt "maxTexture3DAlt[3]"
+ *   contains the maximum alternate 3D texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTextureCubemap "maxTextureCubemap" is the 
+ *   maximum cubemap texture width or height.
+ * - \ref ::cudaDeviceProp::maxTexture1DLayered "maxTexture1DLayered[2]" contains
+ *   the maximum 1D layered texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTexture2DLayered "maxTexture2DLayered[3]" contains
+ *   the maximum 2D layered texture dimensions.
+ * - \ref ::cudaDeviceProp::maxTextureCubemapLayered "maxTextureCubemapLayered[2]"
+ *   contains the maximum cubemap layered texture dimensions.
+ * - \ref ::cudaDeviceProp::maxSurface1D "maxSurface1D" is the maximum 1D
+ *   surface size.
+ * - \ref ::cudaDeviceProp::maxSurface2D "maxSurface2D[2]" contains the maximum
+ *   2D surface dimensions.
+ * - \ref ::cudaDeviceProp::maxSurface3D "maxSurface3D[3]" contains the maximum
+ *   3D surface dimensions.
+ * - \ref ::cudaDeviceProp::maxSurface1DLayered "maxSurface1DLayered[2]" contains
+ *   the maximum 1D layered surface dimensions.
+ * - \ref ::cudaDeviceProp::maxSurface2DLayered "maxSurface2DLayered[3]" contains
+ *   the maximum 2D layered surface dimensions.
+ * - \ref ::cudaDeviceProp::maxSurfaceCubemap "maxSurfaceCubemap" is the maximum 
+ *   cubemap surface width or height.
+ * - \ref ::cudaDeviceProp::maxSurfaceCubemapLayered "maxSurfaceCubemapLayered[2]"
+ *   contains the maximum cubemap layered surface dimensions.
+ * - \ref ::cudaDeviceProp::surfaceAlignment "surfaceAlignment" specifies the
+ *   alignment requirements for surfaces.
+ * - \ref ::cudaDeviceProp::concurrentKernels "concurrentKernels" is 1 if the
+ *   device supports executing multiple kernels within the same context
+ *   simultaneously, or 0 if not. It is not guaranteed that multiple kernels
+ *   will be resident on the device concurrently so this feature should not be
+ *   relied upon for correctness.
+ * - \ref ::cudaDeviceProp::ECCEnabled "ECCEnabled" is 1 if the device has ECC
+ *   support turned on, or 0 if not.
+ * - \ref ::cudaDeviceProp::pciBusID "pciBusID" is the PCI bus identifier of
+ *   the device.
+ * - \ref ::cudaDeviceProp::pciDeviceID "pciDeviceID" is the PCI device
+ *   (sometimes called slot) identifier of the device.
+ * - \ref ::cudaDeviceProp::pciDomainID "pciDomainID" is the PCI domain identifier
+ *   of the device.
+ * - \ref ::cudaDeviceProp::tccDriver "tccDriver" is 1 if the device is using a
+ *   TCC driver or 0 if not.
+ * - \ref ::cudaDeviceProp::asyncEngineCount "asyncEngineCount" is 1 when the
+ *   device can concurrently copy memory between host and device while executing
+ *   a kernel. It is 2 when the device can concurrently copy memory between host
+ *   and device in both directions and execute a kernel at the same time. It is
+ *   0 if neither of these is supported.
+ * - \ref ::cudaDeviceProp::unifiedAddressing "unifiedAddressing" is 1 if the device 
+ *   shares a unified address space with the host and 0 otherwise.
+ * - \ref ::cudaDeviceProp::memoryClockRate "memoryClockRate" is the peak memory 
+ *   clock frequency in kilohertz.
+ * - \ref ::cudaDeviceProp::memoryBusWidth "memoryBusWidth" is the memory bus width  
+ *   in bits.
+ * - \ref ::cudaDeviceProp::l2CacheSize "l2CacheSize" is L2 cache size in bytes. 
+ * - \ref ::cudaDeviceProp::persistingL2CacheMaxSize "persistingL2CacheMaxSize" is L2 cache's maximum persisting lines size in bytes.
+ * - \ref ::cudaDeviceProp::maxThreadsPerMultiProcessor "maxThreadsPerMultiProcessor"  
+ *   is the number of maximum resident threads per multiprocessor.
+ * - \ref ::cudaDeviceProp::streamPrioritiesSupported "streamPrioritiesSupported"
+ *   is 1 if the device supports stream priorities, or 0 if it is not supported.
+ * - \ref ::cudaDeviceProp::globalL1CacheSupported "globalL1CacheSupported"
+ *   is 1 if the device supports caching of globals in L1 cache, or 0 if it is not supported.
+ * - \ref ::cudaDeviceProp::localL1CacheSupported "localL1CacheSupported"
+ *   is 1 if the device supports caching of locals in L1 cache, or 0 if it is not supported.
+ * - \ref ::cudaDeviceProp::sharedMemPerMultiprocessor "sharedMemPerMultiprocessor" is the
+ *   maximum amount of shared memory available to a multiprocessor in bytes; this amount is
+ *   shared by all thread blocks simultaneously resident on a multiprocessor.
+ * - \ref ::cudaDeviceProp::regsPerMultiprocessor "regsPerMultiprocessor" is the maximum number
+ *   of 32-bit registers available to a multiprocessor; this number is shared
+ *   by all thread blocks simultaneously resident on a multiprocessor.
+ * - \ref ::cudaDeviceProp::managedMemory "managedMemory"
+ *   is 1 if the device supports allocating managed memory on this system, or 0 if it is not supported.
+ * - \ref ::cudaDeviceProp::isMultiGpuBoard "isMultiGpuBoard"
+ *   is 1 if the device is on a multi-GPU board (e.g. Gemini cards), and 0 if not;
+ * - \ref ::cudaDeviceProp::multiGpuBoardGroupID "multiGpuBoardGroupID" is a unique identifier
+ *   for a group of devices associated with the same board.
+ *   Devices on the same multi-GPU board will share the same identifier.
+ * - \ref ::cudaDeviceProp::singleToDoublePrecisionPerfRatio "singleToDoublePrecisionPerfRatio"  
+ *   is the ratio of single precision performance (in floating-point operations per second)
+ *   to double precision performance.
+ * - \ref ::cudaDeviceProp::pageableMemoryAccess "pageableMemoryAccess" is 1 if the device supports
+ *   coherently accessing pageable memory without calling cudaHostRegister on it, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::concurrentManagedAccess "concurrentManagedAccess" is 1 if the device can
+ *   coherently access managed memory concurrently with the CPU, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::computePreemptionSupported "computePreemptionSupported" is 1 if the device
+ *   supports Compute Preemption, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::canUseHostPointerForRegisteredMem "canUseHostPointerForRegisteredMem" is 1 if
+ *   the device can access host registered memory at the same virtual address as the CPU, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::cooperativeLaunch "cooperativeLaunch" is 1 if the device supports launching
+ *   cooperative kernels via ::cudaLaunchCooperativeKernel, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::cooperativeMultiDeviceLaunch "cooperativeMultiDeviceLaunch" is 1 if the device
+ *   supports launching cooperative kernels via ::cudaLaunchCooperativeKernelMultiDevice, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::pageableMemoryAccessUsesHostPageTables "pageableMemoryAccessUsesHostPageTables" is 1 if the device accesses
+ *   pageable memory via the host's page tables, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::directManagedMemAccessFromHost "directManagedMemAccessFromHost" is 1 if the host can directly access managed
+ *   memory on the device without migration, and 0 otherwise.
+ * - \ref ::cudaDeviceProp::maxBlocksPerMultiProcessor "maxBlocksPerMultiProcessor" is the maximum number of thread blocks
+ *   that can reside on a multiprocessor.
+ * - \ref ::cudaDeviceProp::accessPolicyMaxWindowSize "accessPolicyMaxWindowSize" is
+ *   the maximum value of ::cudaAccessPolicyWindow::num_bytes.
+ *
+ * \param prop   - Properties for the specified device
+ * \param device - Device number to get properties for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaSetDevice, ::cudaChooseDevice,
+ * ::cudaDeviceGetAttribute,
+ * ::cuDeviceGetAttribute,
+ * ::cuDeviceGetName
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetDeviceProperties(struct cudaDeviceProp *prop, int device);
+
+/**
+ * \brief Returns information about the device
+ *
+ * Returns in \p *value the integer value of the attribute \p attr on device
+ * \p device. The supported attributes are:
+ * - ::cudaDevAttrMaxThreadsPerBlock: Maximum number of threads per block
+ * - ::cudaDevAttrMaxBlockDimX: Maximum x-dimension of a block
+ * - ::cudaDevAttrMaxBlockDimY: Maximum y-dimension of a block
+ * - ::cudaDevAttrMaxBlockDimZ: Maximum z-dimension of a block
+ * - ::cudaDevAttrMaxGridDimX: Maximum x-dimension of a grid
+ * - ::cudaDevAttrMaxGridDimY: Maximum y-dimension of a grid
+ * - ::cudaDevAttrMaxGridDimZ: Maximum z-dimension of a grid
+ * - ::cudaDevAttrMaxSharedMemoryPerBlock: Maximum amount of shared memory
+ *   available to a thread block in bytes
+ * - ::cudaDevAttrTotalConstantMemory: Memory available on device for
+ *   __constant__ variables in a CUDA C kernel in bytes
+ * - ::cudaDevAttrWarpSize: Warp size in threads
+ * - ::cudaDevAttrMaxPitch: Maximum pitch in bytes allowed by the memory copy
+ *   functions that involve memory regions allocated through ::cudaMallocPitch()
+ * - ::cudaDevAttrMaxTexture1DWidth: Maximum 1D texture width
+ * - ::cudaDevAttrMaxTexture1DLinearWidth: Maximum width for a 1D texture bound
+ *   to linear memory
+ * - ::cudaDevAttrMaxTexture1DMipmappedWidth: Maximum mipmapped 1D texture width
+ * - ::cudaDevAttrMaxTexture2DWidth: Maximum 2D texture width
+ * - ::cudaDevAttrMaxTexture2DHeight: Maximum 2D texture height
+ * - ::cudaDevAttrMaxTexture2DLinearWidth: Maximum width for a 2D texture
+ *   bound to linear memory
+ * - ::cudaDevAttrMaxTexture2DLinearHeight: Maximum height for a 2D texture
+ *   bound to linear memory
+ * - ::cudaDevAttrMaxTexture2DLinearPitch: Maximum pitch in bytes for a 2D
+ *   texture bound to linear memory
+ * - ::cudaDevAttrMaxTexture2DMipmappedWidth: Maximum mipmapped 2D texture
+ *   width
+ * - ::cudaDevAttrMaxTexture2DMipmappedHeight: Maximum mipmapped 2D texture
+ *   height
+ * - ::cudaDevAttrMaxTexture3DWidth: Maximum 3D texture width
+ * - ::cudaDevAttrMaxTexture3DHeight: Maximum 3D texture height
+ * - ::cudaDevAttrMaxTexture3DDepth: Maximum 3D texture depth
+ * - ::cudaDevAttrMaxTexture3DWidthAlt: Alternate maximum 3D texture width,
+ *   0 if no alternate maximum 3D texture size is supported
+ * - ::cudaDevAttrMaxTexture3DHeightAlt: Alternate maximum 3D texture height,
+ *   0 if no alternate maximum 3D texture size is supported
+ * - ::cudaDevAttrMaxTexture3DDepthAlt: Alternate maximum 3D texture depth,
+ *   0 if no alternate maximum 3D texture size is supported
+ * - ::cudaDevAttrMaxTextureCubemapWidth: Maximum cubemap texture width or
+ *   height
+ * - ::cudaDevAttrMaxTexture1DLayeredWidth: Maximum 1D layered texture width
+ * - ::cudaDevAttrMaxTexture1DLayeredLayers: Maximum layers in a 1D layered
+ *   texture
+ * - ::cudaDevAttrMaxTexture2DLayeredWidth: Maximum 2D layered texture width
+ * - ::cudaDevAttrMaxTexture2DLayeredHeight: Maximum 2D layered texture height
+ * - ::cudaDevAttrMaxTexture2DLayeredLayers: Maximum layers in a 2D layered
+ *   texture
+ * - ::cudaDevAttrMaxTextureCubemapLayeredWidth: Maximum cubemap layered
+ *   texture width or height
+ * - ::cudaDevAttrMaxTextureCubemapLayeredLayers: Maximum layers in a cubemap
+ *   layered texture
+ * - ::cudaDevAttrMaxSurface1DWidth: Maximum 1D surface width
+ * - ::cudaDevAttrMaxSurface2DWidth: Maximum 2D surface width
+ * - ::cudaDevAttrMaxSurface2DHeight: Maximum 2D surface height
+ * - ::cudaDevAttrMaxSurface3DWidth: Maximum 3D surface width
+ * - ::cudaDevAttrMaxSurface3DHeight: Maximum 3D surface height
+ * - ::cudaDevAttrMaxSurface3DDepth: Maximum 3D surface depth
+ * - ::cudaDevAttrMaxSurface1DLayeredWidth: Maximum 1D layered surface width
+ * - ::cudaDevAttrMaxSurface1DLayeredLayers: Maximum layers in a 1D layered
+ *   surface
+ * - ::cudaDevAttrMaxSurface2DLayeredWidth: Maximum 2D layered surface width
+ * - ::cudaDevAttrMaxSurface2DLayeredHeight: Maximum 2D layered surface height
+ * - ::cudaDevAttrMaxSurface2DLayeredLayers: Maximum layers in a 2D layered
+ *   surface
+ * - ::cudaDevAttrMaxSurfaceCubemapWidth: Maximum cubemap surface width
+ * - ::cudaDevAttrMaxSurfaceCubemapLayeredWidth: Maximum cubemap layered
+ *   surface width
+ * - ::cudaDevAttrMaxSurfaceCubemapLayeredLayers: Maximum layers in a cubemap
+ *   layered surface
+ * - ::cudaDevAttrMaxRegistersPerBlock: Maximum number of 32-bit registers 
+ *   available to a thread block
+ * - ::cudaDevAttrClockRate: Peak clock frequency in kilohertz
+ * - ::cudaDevAttrTextureAlignment: Alignment requirement; texture base
+ *   addresses aligned to ::textureAlign bytes do not need an offset applied
+ *   to texture fetches
+ * - ::cudaDevAttrTexturePitchAlignment: Pitch alignment requirement for 2D
+ *   texture references bound to pitched memory
+ * - ::cudaDevAttrGpuOverlap: 1 if the device can concurrently copy memory
+ *   between host and device while executing a kernel, or 0 if not
+ * - ::cudaDevAttrMultiProcessorCount: Number of multiprocessors on the device
+ * - ::cudaDevAttrKernelExecTimeout: 1 if there is a run time limit for kernels
+ *   executed on the device, or 0 if not
+ * - ::cudaDevAttrIntegrated: 1 if the device is integrated with the memory
+ *   subsystem, or 0 if not
+ * - ::cudaDevAttrCanMapHostMemory: 1 if the device can map host memory into
+ *   the CUDA address space, or 0 if not
+ * - ::cudaDevAttrComputeMode: Compute mode is the compute mode that the device
+ *   is currently in. Available modes are as follows:
+ *   - ::cudaComputeModeDefault: Default mode - Device is not restricted and
+ *     multiple threads can use ::cudaSetDevice() with this device.
+ *   - ::cudaComputeModeProhibited: Compute-prohibited mode - No threads can use
+ *     ::cudaSetDevice() with this device.
+ *   - ::cudaComputeModeExclusiveProcess: Compute-exclusive-process mode - Many 
+ *     threads in one process will be able to use ::cudaSetDevice() with this
+ *     device.
+ * - ::cudaDevAttrConcurrentKernels: 1 if the device supports executing
+ *   multiple kernels within the same context simultaneously, or 0 if
+ *   not. It is not guaranteed that multiple kernels will be resident on the
+ *   device concurrently so this feature should not be relied upon for
+ *   correctness.
+ * - ::cudaDevAttrEccEnabled: 1 if error correction is enabled on the device,
+ *   0 if error correction is disabled or not supported by the device
+ * - ::cudaDevAttrPciBusId: PCI bus identifier of the device
+ * - ::cudaDevAttrPciDeviceId: PCI device (also known as slot) identifier of
+ *   the device
+ * - ::cudaDevAttrTccDriver: 1 if the device is using a TCC driver. TCC is only
+ *   available on Tesla hardware running Windows Vista or later.
+ * - ::cudaDevAttrMemoryClockRate: Peak memory clock frequency in kilohertz
+ * - ::cudaDevAttrGlobalMemoryBusWidth: Global memory bus width in bits
+ * - ::cudaDevAttrL2CacheSize: Size of L2 cache in bytes. 0 if the device
+ *   doesn't have L2 cache.
+ * - ::cudaDevAttrMaxThreadsPerMultiProcessor: Maximum resident threads per 
+ *   multiprocessor
+ * - ::cudaDevAttrUnifiedAddressing: 1 if the device shares a unified address
+ *   space with the host, or 0 if not
+ * - ::cudaDevAttrComputeCapabilityMajor: Major compute capability version
+ *   number
+ * - ::cudaDevAttrComputeCapabilityMinor: Minor compute capability version
+ *   number
+ * - ::cudaDevAttrStreamPrioritiesSupported: 1 if the device supports stream
+ *   priorities, or 0 if not
+ * - ::cudaDevAttrGlobalL1CacheSupported: 1 if device supports caching globals 
+ *    in L1 cache, 0 if not
+ * - ::cudaDevAttrLocalL1CacheSupported: 1 if device supports caching locals 
+ *    in L1 cache, 0 if not
+ * - ::cudaDevAttrMaxSharedMemoryPerMultiprocessor: Maximum amount of shared memory
+ *   available to a multiprocessor in bytes; this amount is shared by all 
+ *   thread blocks simultaneously resident on a multiprocessor
+ * - ::cudaDevAttrMaxRegistersPerMultiprocessor: Maximum number of 32-bit registers 
+ *   available to a multiprocessor; this number is shared by all thread blocks
+ *   simultaneously resident on a multiprocessor
+ * - ::cudaDevAttrManagedMemory: 1 if device supports allocating
+ *   managed memory, 0 if not
+ * - ::cudaDevAttrIsMultiGpuBoard: 1 if device is on a multi-GPU board, 0 if not
+ * - ::cudaDevAttrMultiGpuBoardGroupID: Unique identifier for a group of devices on the
+ *   same multi-GPU board
+ * - ::cudaDevAttrHostNativeAtomicSupported: 1 if the link between the device and the
+ *   host supports native atomic operations
+ * - ::cudaDevAttrSingleToDoublePrecisionPerfRatio: Ratio of single precision performance
+ *   (in floating-point operations per second) to double precision performance
+ * - ::cudaDevAttrPageableMemoryAccess: 1 if the device supports coherently accessing
+ *   pageable memory without calling cudaHostRegister on it, and 0 otherwise
+ * - ::cudaDevAttrConcurrentManagedAccess: 1 if the device can coherently access managed
+ *   memory concurrently with the CPU, and 0 otherwise
+ * - ::cudaDevAttrComputePreemptionSupported: 1 if the device supports
+ *   Compute Preemption, 0 if not
+ * - ::cudaDevAttrCanUseHostPointerForRegisteredMem: 1 if the device can access host
+ *   registered memory at the same virtual address as the CPU, and 0 otherwise
+ * - ::cudaDevAttrCooperativeLaunch: 1 if the device supports launching cooperative kernels
+ *   via ::cudaLaunchCooperativeKernel, and 0 otherwise
+ * - ::cudaDevAttrCooperativeMultiDeviceLaunch: 1 if the device supports launching cooperative
+ *   kernels via ::cudaLaunchCooperativeKernelMultiDevice, and 0 otherwise
+ * - ::cudaDevAttrCanFlushRemoteWrites: 1 if the device supports flushing of outstanding 
+ *   remote writes, and 0 otherwise
+ * - ::cudaDevAttrHostRegisterSupported: 1 if the device supports host memory registration
+ *   via ::cudaHostRegister, and 0 otherwise
+ * - ::cudaDevAttrPageableMemoryAccessUsesHostPageTables: 1 if the device accesses pageable memory via the
+ *   host's page tables, and 0 otherwise
+ * - ::cudaDevAttrDirectManagedMemAccessFromHost: 1 if the host can directly access managed memory on the device
+ *   without migration, and 0 otherwise
+ * - ::cudaDevAttrMaxSharedMemoryPerBlockOptin: Maximum per block shared memory size on the device. This value can
+ *   be opted into when using ::cudaFuncSetAttribute
+ * - ::cudaDevAttrMaxBlocksPerMultiprocessor: Maximum number of thread blocks that can reside on a multiprocessor
+ * - ::cudaDevAttrMaxPersistingL2CacheSize: Maximum L2 persisting lines capacity setting in bytes
+ * - ::cudaDevAttrMaxAccessPolicyWindowSize: Maximum value of cudaAccessPolicyWindow::num_bytes
+ * - ::cudaDevAttrReservedSharedMemoryPerBlock: Shared memory reserved by CUDA driver per block in bytes
+ * - ::cudaDevAttrSparseCudaArraySupported: 1 if the device supports sparse CUDA arrays and sparse CUDA mipmapped arrays.
+ * - ::cudaDevAttrHostRegisterReadOnlySupported: Device supports using the ::cudaHostRegister flag cudaHostRegisterReadOnly
+ *   to register memory that must be mapped as read-only to the GPU
+ * - ::cudaDevAttrMemoryPoolsSupported: 1 if the device supports using the cudaMallocAsync and cudaMemPool family of APIs, and 0 otherwise
+ * - ::cudaDevAttrGPUDirectRDMASupported: 1 if the device supports GPUDirect RDMA APIs, and 0 otherwise
+ * - ::cudaDevAttrGPUDirectRDMAFlushWritesOptions: bitmask to be interpreted according to the ::cudaFlushGPUDirectRDMAWritesOptions enum 
+ * - ::cudaDevAttrGPUDirectRDMAWritesOrdering: see the ::cudaGPUDirectRDMAWritesOrdering enum for numerical values
+ * - ::cudaDevAttrMemoryPoolSupportedHandleTypes: Bitmask of handle types supported with mempool based IPC
+ * - ::cudaDevAttrDeferredMappingCudaArraySupported : 1 if the device supports deferred mapping CUDA arrays and CUDA mipmapped arrays.
+ *
+ * \param value  - Returned device attribute value
+ * \param attr   - Device attribute to query
+ * \param device - Device number to query 
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaSetDevice, ::cudaChooseDevice,
+ * ::cudaGetDeviceProperties,
+ * ::cuDeviceGetAttribute
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetAttribute(int *value, enum cudaDeviceAttr attr, int device);
+
+/**
+ * \brief Returns the default mempool of a device
+ *
+ * The default mempool of a device contains device memory from that device.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cuDeviceGetDefaultMemPool, ::cudaMallocAsync, ::cudaMemPoolTrimTo, ::cudaMemPoolGetAttribute, ::cudaDeviceSetMemPool, ::cudaMemPoolSetAttribute, ::cudaMemPoolSetAccess
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetDefaultMemPool(cudaMemPool_t *memPool, int device);
+
+
+/**
+ * \brief Sets the current memory pool of a device
+ *
+ * The memory pool must be local to the specified device.
+ * Unless a mempool is specified in the ::cudaMallocAsync call,
+ * ::cudaMallocAsync allocates from the current mempool of the provided stream's device.
+ * By default, a device's current memory pool is its default memory pool.
+ *
+ * \note Use ::cudaMallocFromPoolAsync to specify asynchronous allocations from a device different
+ * than the one the stream runs on.
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * ::cudaErrorInvalidDevice
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ * \note_callback
+ *
+ * \sa ::cuDeviceSetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaDeviceGetDefaultMemPool, ::cudaMemPoolCreate, ::cudaMemPoolDestroy, ::cudaMallocFromPoolAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceSetMemPool(int device, cudaMemPool_t memPool);
+
+/**
+ * \brief Gets the current mempool for a device
+ *
+ * Returns the last pool provided to ::cudaDeviceSetMemPool for this device
+ * or the device's default memory pool if ::cudaDeviceSetMemPool has never been called.
+ * By default the current mempool is the default mempool for a device,
+ * otherwise the returned pool must have been set with ::cuDeviceSetMemPool or ::cudaDeviceSetMemPool.
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cuDeviceGetMemPool, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceSetMemPool
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetMemPool(cudaMemPool_t *memPool, int device);
+
+/**
+ * \brief Return NvSciSync attributes that this device can support.
+ *
+ * Returns in \p nvSciSyncAttrList, the properties of NvSciSync that
+ * this CUDA device, \p dev can support. The returned \p nvSciSyncAttrList
+ * can be used to create an NvSciSync that matches this device's capabilities.
+ * 
+ * If NvSciSyncAttrKey_RequiredPerm field in \p nvSciSyncAttrList is
+ * already set this API will return ::cudaErrorInvalidValue.
+ * 
+ * The applications should set \p nvSciSyncAttrList to a valid 
+ * NvSciSyncAttrList failing which this API will return
+ * ::cudaErrorInvalidHandle.
+ * 
+ * The \p flags controls how applications intends to use
+ * the NvSciSync created from the \p nvSciSyncAttrList. The valid flags are:
+ * - ::cudaNvSciSyncAttrSignal, specifies that the applications intends to 
+ * signal an NvSciSync on this CUDA device.
+ * - ::cudaNvSciSyncAttrWait, specifies that the applications intends to 
+ * wait on an NvSciSync on this CUDA device.
+ *
+ * At least one of these flags must be set, failing which the API
+ * returns ::cudaErrorInvalidValue. Both the flags are orthogonal
+ * to one another: a developer may set both these flags that allows to
+ * set both wait and signal specific attributes in the same \p nvSciSyncAttrList.
+ *
+ * \param nvSciSyncAttrList     - Return NvSciSync attributes supported.
+ * \param device                - Valid Cuda Device to get NvSciSync attributes for.
+ * \param flags                 - flags describing NvSciSync usage.
+ *
+ * \return
+ *
+ * ::cudaSuccess,
+ * ::cudaErrorDeviceUninitialized,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidHandle,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorMemoryAllocation
+ *
+ * \sa
+ * ::cudaImportExternalSemaphore,
+ * ::cudaDestroyExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetNvSciSyncAttributes(void *nvSciSyncAttrList, int device, int flags);
+
+/**
+ * \brief Queries attributes of the link between two devices.
+ *
+ * Returns in \p *value the value of the requested attribute \p attrib of the
+ * link between \p srcDevice and \p dstDevice. The supported attributes are:
+ * - ::cudaDevP2PAttrPerformanceRank: A relative value indicating the
+ *   performance of the link between two devices. Lower value means better
+ *   performance (0 being the value used for most performant link).
+ * - ::cudaDevP2PAttrAccessSupported: 1 if peer access is enabled.
+ * - ::cudaDevP2PAttrNativeAtomicSupported: 1 if native atomic operations over
+ *   the link are supported.
+ * - ::cudaDevP2PAttrCudaArrayAccessSupported: 1 if accessing CUDA arrays over
+ *   the link is supported.
+ *
+ * Returns ::cudaErrorInvalidDevice if \p srcDevice or \p dstDevice are not valid
+ * or if they represent the same device.
+ *
+ * Returns ::cudaErrorInvalidValue if \p attrib is not valid or if \p value is
+ * a null pointer.
+ *
+ * \param value         - Returned value of the requested attribute
+ * \param attrib        - The requested attribute of the link between \p srcDevice and \p dstDevice.
+ * \param srcDevice     - The source device of the target link.
+ * \param dstDevice     - The destination device of the target link.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaCtxEnablePeerAccess,
+ * ::cudaCtxDisablePeerAccess,
+ * ::cudaCtxCanAccessPeer,
+ * ::cuDeviceGetP2PAttribute
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaDeviceGetP2PAttribute(int *value, enum cudaDeviceP2PAttr attr, int srcDevice, int dstDevice);
+
+/**
+ * \brief Select compute-device which best matches criteria
+ *
+ * Returns in \p *device the device which has properties that best match
+ * \p *prop.
+ *
+ * \param device - Device with best match
+ * \param prop   - Desired device properties
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaSetDevice,
+ * ::cudaGetDeviceProperties
+ */
+extern __host__ cudaError_t CUDARTAPI cudaChooseDevice(int *device, const struct cudaDeviceProp *prop);
+
+/**
+ * \brief Set device to be used for GPU executions
+ *
+ * Sets \p device as the current device for the calling host thread.
+ * Valid device id's are 0 to (::cudaGetDeviceCount() - 1).
+ *
+ * Any device memory subsequently allocated from this host thread
+ * using ::cudaMalloc(), ::cudaMallocPitch() or ::cudaMallocArray()
+ * will be physically resident on \p device.  Any host memory allocated
+ * from this host thread using ::cudaMallocHost() or ::cudaHostAlloc() 
+ * or ::cudaHostRegister() will have its lifetime associated  with
+ * \p device.  Any streams or events created from this host thread will 
+ * be associated with \p device.  Any kernels launched from this host
+ * thread using the <<<>>> operator or ::cudaLaunchKernel() will be executed
+ * on \p device.
+ *
+ * This call may be made from any host thread, to any device, and at 
+ * any time.  This function will do no synchronization with the previous 
+ * or new device, and should be considered a very low overhead call.
+ * If the current context bound to the calling thread is not the primary context,
+ * this call will bind the primary context to the calling thread and all the
+ * subsequent memory allocations, stream and event creations, and kernel launches
+ * will be associated with the primary context. This function will not initialize 
+ * the context until a runtime API requiring the context (such as ::cudaMalloc()) 
+ * is used. This function will not return an error if the device is in 
+ * ::cudaComputeModeExclusiveProcess and is occupied by another process or
+ * if the device is in ::cudaComputeModeProhibited.
+ *
+ * \param device - Device on which the active host thread should execute the
+ * device code.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaGetDeviceProperties,
+ * ::cudaChooseDevice,
+ * ::cuCtxSetCurrent
+ */
+extern __host__ cudaError_t CUDARTAPI cudaSetDevice(int device);
+
+/**
+ * \brief Returns which device is currently being used
+ *
+ * Returns in \p *device the current device for the calling host thread.
+ *
+ * \param device - Returns the device on which the active host thread
+ * executes the device code.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaSetDevice, ::cudaGetDeviceProperties,
+ * ::cudaChooseDevice,
+ * ::cuCtxGetCurrent
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaGetDevice(int *device);
+
+/**
+ * \brief Set a list of devices that can be used for CUDA
+ *
+ * Sets a list of devices for CUDA execution in priority order using
+ * \p device_arr. The parameter \p len specifies the number of elements in the
+ * list.  CUDA will try devices from the list sequentially until it finds one
+ * that works.  If this function is not called, or if it is called with a \p len
+ * of 0, then CUDA will go back to its default behavior of trying devices
+ * sequentially from a default list containing all of the available CUDA
+ * devices in the system. If a specified device ID in the list does not exist,
+ * this function will return ::cudaErrorInvalidDevice. If \p len is not 0 and
+ * \p device_arr is NULL or if \p len exceeds the number of devices in
+ * the system, then ::cudaErrorInvalidValue is returned.
+ *
+ * \param device_arr - List of devices to try
+ * \param len        - Number of devices in specified list
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaSetDevice, ::cudaGetDeviceProperties,
+ * ::cudaSetDeviceFlags,
+ * ::cudaChooseDevice
+ */
+extern __host__ cudaError_t CUDARTAPI cudaSetValidDevices(int *device_arr, int len);
+
+/**
+ * \brief Sets flags to be used for device executions
+ * 
+ * Records \p flags as the flags for the current device. If the current device
+ * has been set and that device has already been initialized, the previous flags
+ * are overwritten. If the current device has not been initialized, it is
+ * initialized with the provided flags. If no device has been made current to
+ * the calling thread, a default device is selected and initialized with the
+ * provided flags.
+ * 
+ * The two LSBs of the \p flags parameter can be used to control how the CPU
+ * thread interacts with the OS scheduler when waiting for results from the
+ * device.
+ *
+ * - ::cudaDeviceScheduleAuto: The default value if the \p flags parameter is
+ * zero, uses a heuristic based on the number of active CUDA contexts in the
+ * process \p C and the number of logical processors in the system \p P. If
+ * \p C \> \p P, then CUDA will yield to other OS threads when waiting for the
+ * device, otherwise CUDA will not yield while waiting for results and
+ * actively spin on the processor. Additionally, on Tegra devices,
+ * ::cudaDeviceScheduleAuto uses a heuristic based on the power profile of
+ * the platform and may choose ::cudaDeviceScheduleBlockingSync for low-powered
+ * devices.
+ * - ::cudaDeviceScheduleSpin: Instruct CUDA to actively spin when waiting for
+ * results from the device. This can decrease latency when waiting for the
+ * device, but may lower the performance of CPU threads if they are performing
+ * work in parallel with the CUDA thread.
+ * - ::cudaDeviceScheduleYield: Instruct CUDA to yield its thread when waiting
+ * for results from the device. This can increase latency when waiting for the
+ * device, but can increase the performance of CPU threads performing work in
+ * parallel with the device.
+ * - ::cudaDeviceScheduleBlockingSync: Instruct CUDA to block the CPU thread 
+ * on a synchronization primitive when waiting for the device to finish work.
+ * - ::cudaDeviceBlockingSync: Instruct CUDA to block the CPU thread on a 
+ * synchronization primitive when waiting for the device to finish work. <br>
+ * \ref deprecated "Deprecated:" This flag was deprecated as of CUDA 4.0 and
+ * replaced with ::cudaDeviceScheduleBlockingSync.
+ * - ::cudaDeviceMapHost: This flag enables allocating pinned
+ * host memory that is accessible to the device. It is implicit for the
+ * runtime but may be absent if a context is created using the driver API.
+ * If this flag is not set, ::cudaHostGetDevicePointer() will always return
+ * a failure code.
+ * - ::cudaDeviceLmemResizeToMax: Instruct CUDA to not reduce local memory
+ * after resizing local memory for a kernel. This can prevent thrashing by
+ * local memory allocations when launching many kernels with high local
+ * memory usage at the cost of potentially increased memory usage. <br>
+ * \ref deprecated "Deprecated:" This flag is deprecated and the behavior enabled          
+ * by this flag is now the default and cannot be disabled.
+ *
+ * \param flags - Parameters for device operation
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceFlags, ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaGetDeviceProperties,
+ * ::cudaSetDevice, ::cudaSetValidDevices,
+ * ::cudaChooseDevice,
+ * ::cuDevicePrimaryCtxSetFlags
+ */
+extern __host__ cudaError_t CUDARTAPI cudaSetDeviceFlags( unsigned int flags );
+
+/**
+ * \brief Gets the flags for the current device
+ *
+ * 
+ * Returns in \p flags the flags for the current device. If there is a current
+ * device for the calling thread, the flags for the device are returned. If
+ * there is no current device, the flags for the first device are returned,
+ * which may be the default flags.  Compare to the behavior of
+ * ::cudaSetDeviceFlags.
+ *
+ * Typically, the flags returned should match the behavior that will be seen
+ * if the calling thread uses a device after this call, without any change to
+ * the flags or current device inbetween by this or another thread.  Note that
+ * if the device is not initialized, it is possible for another thread to
+ * change the flags for the current device before it is initialized.
+ * Additionally, when using exclusive mode, if this thread has not requested a
+ * specific device, it may use a device other than the first device, contrary
+ * to the assumption made by this function.
+ *
+ * If a context has been created via the driver API and is current to the
+ * calling thread, the flags for that context are always returned.
+ *
+ * Flags returned by this function may specifically include ::cudaDeviceMapHost
+ * even though it is not accepted by ::cudaSetDeviceFlags because it is
+ * implicit in runtime API flags.  The reason for this is that the current
+ * context may have been created via the driver API in which case the flag is
+ * not implicit and may be unset.
+ *
+ * \param flags - Pointer to store the device flags
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDevice, ::cudaGetDeviceProperties,
+ * ::cudaSetDevice, ::cudaSetDeviceFlags,
+ * ::cuCtxGetFlags,
+ * ::cuDevicePrimaryCtxGetState
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetDeviceFlags( unsigned int *flags );
+/** @} */ /* END CUDART_DEVICE */
+
+/**
+ * \defgroup CUDART_STREAM Stream Management
+ *
+ * ___MANBRIEF___ stream management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the stream management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Create an asynchronous stream
+ *
+ * Creates a new asynchronous stream.
+ *
+ * \param pStream - Pointer to new stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreateWithPriority,
+ * ::cudaStreamCreateWithFlags,
+ * ::cudaStreamGetPriority,
+ * ::cudaStreamGetFlags,
+ * ::cudaStreamQuery,
+ * ::cudaStreamSynchronize,
+ * ::cudaStreamWaitEvent,
+ * ::cudaStreamAddCallback,
+ * ::cudaStreamDestroy,
+ * ::cuStreamCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamCreate(cudaStream_t *pStream);
+
+/**
+ * \brief Create an asynchronous stream
+ *
+ * Creates a new asynchronous stream.  The \p flags argument determines the 
+ * behaviors of the stream.  Valid values for \p flags are
+ * - ::cudaStreamDefault: Default stream creation flag.
+ * - ::cudaStreamNonBlocking: Specifies that work running in the created 
+ *   stream may run concurrently with work in stream 0 (the NULL stream), and that
+ *   the created stream should perform no implicit synchronization with stream 0.
+ *
+ * \param pStream - Pointer to new stream identifier
+ * \param flags   - Parameters for stream creation
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate,
+ * ::cudaStreamCreateWithPriority,
+ * ::cudaStreamGetFlags,
+ * ::cudaStreamQuery,
+ * ::cudaStreamSynchronize,
+ * ::cudaStreamWaitEvent,
+ * ::cudaStreamAddCallback,
+ * ::cudaStreamDestroy,
+ * ::cuStreamCreate
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamCreateWithFlags(cudaStream_t *pStream, unsigned int flags);
+
+/**
+ * \brief Create an asynchronous stream with the specified priority
+ *
+ * Creates a stream with the specified priority and returns a handle in \p pStream.
+ * This API alters the scheduler priority of work in the stream. Work in a higher
+ * priority stream may preempt work already executing in a low priority stream.
+ *
+ * \p priority follows a convention where lower numbers represent higher priorities.
+ * '0' represents default priority. The range of meaningful numerical priorities can
+ * be queried using ::cudaDeviceGetStreamPriorityRange. If the specified priority is
+ * outside the numerical range returned by ::cudaDeviceGetStreamPriorityRange,
+ * it will automatically be clamped to the lowest or the highest number in the range.
+ *
+ * \param pStream  - Pointer to new stream identifier
+ * \param flags    - Flags for stream creation. See ::cudaStreamCreateWithFlags for a list of valid flags that can be passed
+ * \param priority - Priority of the stream. Lower numbers represent higher priorities.
+ *                   See ::cudaDeviceGetStreamPriorityRange for more information about
+ *                   the meaningful stream priorities that can be passed.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \note Stream priorities are supported only on GPUs
+ * with compute capability 3.5 or higher.
+ *
+ * \note In the current implementation, only compute kernels launched in
+ * priority streams are affected by the stream's priority. Stream priorities have
+ * no effect on host-to-device and device-to-host memory operations.
+ *
+ * \sa ::cudaStreamCreate,
+ * ::cudaStreamCreateWithFlags,
+ * ::cudaDeviceGetStreamPriorityRange,
+ * ::cudaStreamGetPriority,
+ * ::cudaStreamQuery,
+ * ::cudaStreamWaitEvent,
+ * ::cudaStreamAddCallback,
+ * ::cudaStreamSynchronize,
+ * ::cudaStreamDestroy,
+ * ::cuStreamCreateWithPriority
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamCreateWithPriority(cudaStream_t *pStream, unsigned int flags, int priority);
+
+/**
+ * \brief Query the priority of a stream
+ *
+ * Query the priority of a stream. The priority is returned in in \p priority.
+ * Note that if the stream was created with a priority outside the meaningful
+ * numerical range returned by ::cudaDeviceGetStreamPriorityRange,
+ * this function returns the clamped priority.
+ * See ::cudaStreamCreateWithPriority for details about priority clamping.
+ *
+ * \param hStream    - Handle to the stream to be queried
+ * \param priority   - Pointer to a signed integer in which the stream's priority is returned
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreateWithPriority,
+ * ::cudaDeviceGetStreamPriorityRange,
+ * ::cudaStreamGetFlags,
+ * ::cuStreamGetPriority
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamGetPriority(cudaStream_t hStream, int *priority);
+
+/**
+ * \brief Query the flags of a stream
+ *
+ * Query the flags of a stream. The flags are returned in \p flags.
+ * See ::cudaStreamCreateWithFlags for a list of valid flags.
+ *
+ * \param hStream - Handle to the stream to be queried
+ * \param flags   - Pointer to an unsigned integer in which the stream's flags are returned
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreateWithPriority,
+ * ::cudaStreamCreateWithFlags,
+ * ::cudaStreamGetPriority,
+ * ::cuStreamGetFlags
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamGetFlags(cudaStream_t hStream, unsigned int *flags);
+
+/**
+ * \brief Resets all persisting lines in cache to normal status.
+ *
+ * Resets all persisting lines in cache to normal status.
+ * Takes effect on function return.
+ *
+ * \return
+ * ::cudaSuccess,
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ cudaError_t CUDARTAPI cudaCtxResetPersistingL2Cache(void);
+
+/**
+ * \brief Copies attributes from source stream to destination stream.
+ *
+ * Copies attributes from source stream \p src to destination stream \p dst.
+ * Both streams must have the same context.
+ *
+ * \param[out] dst Destination stream
+ * \param[in] src Source stream
+ * For attributes see ::cudaStreamAttrID
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamCopyAttributes(cudaStream_t dst, cudaStream_t src);
+
+ /**
+ * \brief Queries stream attribute.
+ *
+ * Queries attribute \p attr from \p hStream and stores it in corresponding
+ * member of \p value_out.
+ *
+ * \param[in] hStream
+ * \param[in] attr
+ * \param[out] value_out
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamGetAttribute(
+        cudaStream_t hStream, cudaStreamAttrID attr,
+        cudaStreamAttrValue *value_out);
+
+ /**
+ * \brief Sets stream attribute.
+ *
+ * Sets attribute \p attr on \p hStream from corresponding attribute of
+ * \p value. The updated attribute will be applied to subsequent work
+ * submitted to the stream. It will not affect previously submitted work.
+ *
+ * \param[out] hStream
+ * \param[in] attr
+ * \param[in] value
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamSetAttribute(
+        cudaStream_t hStream, cudaStreamAttrID attr,
+        const cudaStreamAttrValue *value);
+
+ /**
+ * \brief Destroys and cleans up an asynchronous stream
+ *
+ * Destroys and cleans up the asynchronous stream specified by \p stream.
+ *
+ * In case the device is still doing work in the stream \p stream
+ * when ::cudaStreamDestroy() is called, the function will return immediately 
+ * and the resources associated with \p stream will be released automatically 
+ * once the device has completed all work in \p stream.
+ *
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa ::cudaStreamCreate,
+ * ::cudaStreamCreateWithFlags,
+ * ::cudaStreamQuery,
+ * ::cudaStreamWaitEvent,
+ * ::cudaStreamSynchronize,
+ * ::cudaStreamAddCallback,
+ * ::cuStreamDestroy
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamDestroy(cudaStream_t stream);
+
+/**
+ * \brief Make a compute stream wait on an event
+ *
+ * Makes all future work submitted to \p stream wait for all work captured in
+ * \p event.  See ::cudaEventRecord() for details on what is captured by an event.
+ * The synchronization will be performed efficiently on the device when applicable.
+ * \p event may be from a different device than \p stream.
+ *
+ * flags include:
+ * - ::cudaEventWaitDefault: Default event creation flag.
+ * - ::cudaEventWaitExternal: Event is captured in the graph as an external
+ *   event node when performing stream capture.
+ *
+ * \param stream - Stream to wait
+ * \param event  - Event to wait on
+ * \param flags  - Parameters for the operation(See above)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamQuery, ::cudaStreamSynchronize, ::cudaStreamAddCallback, ::cudaStreamDestroy,
+ * ::cuStreamWaitEvent
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags __dv(0));
+
+/**
+ * Type of stream callback functions.
+ * \param stream The stream as passed to ::cudaStreamAddCallback, may be NULL.
+ * \param status ::cudaSuccess or any persistent error on the stream.
+ * \param userData User parameter provided at registration.
+ */
+typedef void (CUDART_CB *cudaStreamCallback_t)(cudaStream_t stream, cudaError_t status, void *userData);
+
+/**
+ * \brief Add a callback to a compute stream
+ *
+ * \note This function is slated for eventual deprecation and removal. If
+ * you do not require the callback to execute in case of a device error,
+ * consider using ::cudaLaunchHostFunc. Additionally, this function is not
+ * supported with ::cudaStreamBeginCapture and ::cudaStreamEndCapture, unlike
+ * ::cudaLaunchHostFunc.
+ *
+ * Adds a callback to be called on the host after all currently enqueued
+ * items in the stream have completed.  For each 
+ * cudaStreamAddCallback call, a callback will be executed exactly once.
+ * The callback will block later work in the stream until it is finished.
+ *
+ * The callback may be passed ::cudaSuccess or an error code.  In the event
+ * of a device error, all subsequently executed callbacks will receive an
+ * appropriate ::cudaError_t.
+ *
+ * Callbacks must not make any CUDA API calls.  Attempting to use CUDA APIs
+ * may result in ::cudaErrorNotPermitted.  Callbacks must not perform any
+ * synchronization that may depend on outstanding device work or other callbacks
+ * that are not mandated to run earlier.  Callbacks without a mandated order
+ * (in independent streams) execute in undefined order and may be serialized.
+ *
+ * For the purposes of Unified Memory, callback execution makes a number of
+ * guarantees:
+ * <ul>
+ *   <li>The callback stream is considered idle for the duration of the
+ *   callback.  Thus, for example, a callback may always use memory attached
+ *   to the callback stream.</li>
+ *   <li>The start of execution of a callback has the same effect as
+ *   synchronizing an event recorded in the same stream immediately prior to
+ *   the callback.  It thus synchronizes streams which have been "joined"
+ *   prior to the callback.</li>
+ *   <li>Adding device work to any stream does not have the effect of making
+ *   the stream active until all preceding callbacks have executed.  Thus, for
+ *   example, a callback might use global attached memory even if work has
+ *   been added to another stream, if it has been properly ordered with an
+ *   event.</li>
+ *   <li>Completion of a callback does not cause a stream to become
+ *   active except as described above.  The callback stream will remain idle
+ *   if no device work follows the callback, and will remain idle across
+ *   consecutive callbacks without device work in between.  Thus, for example,
+ *   stream synchronization can be done by signaling from a callback at the
+ *   end of the stream.</li>
+ * </ul>
+ *
+ * \param stream   - Stream to add callback to
+ * \param callback - The function to call once preceding stream operations are complete
+ * \param userData - User specified data to be passed to the callback function
+ * \param flags    - Reserved for future use, must be 0
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamQuery, ::cudaStreamSynchronize, ::cudaStreamWaitEvent, ::cudaStreamDestroy, ::cudaMallocManaged, ::cudaStreamAttachMemAsync,
+ * ::cudaLaunchHostFunc, ::cuStreamAddCallback
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamAddCallback(cudaStream_t stream,
+        cudaStreamCallback_t callback, void *userData, unsigned int flags);
+
+/**
+ * \brief Waits for stream tasks to complete
+ *
+ * Blocks until \p stream has completed all operations. If the
+ * ::cudaDeviceScheduleBlockingSync flag was set for this device, 
+ * the host thread will block until the stream is finished with 
+ * all of its tasks.
+ *
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamQuery, ::cudaStreamWaitEvent, ::cudaStreamAddCallback, ::cudaStreamDestroy,
+ * ::cuStreamSynchronize
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamSynchronize(cudaStream_t stream);
+
+/**
+ * \brief Queries an asynchronous stream for completion status
+ *
+ * Returns ::cudaSuccess if all operations in \p stream have
+ * completed, or ::cudaErrorNotReady if not.
+ *
+ * For the purposes of Unified Memory, a return value of ::cudaSuccess
+ * is equivalent to having called ::cudaStreamSynchronize().
+ *
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotReady,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamWaitEvent, ::cudaStreamSynchronize, ::cudaStreamAddCallback, ::cudaStreamDestroy,
+ * ::cuStreamQuery
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamQuery(cudaStream_t stream);
+
+/**
+ * \brief Attach memory to a stream asynchronously
+ *
+ * Enqueues an operation in \p stream to specify stream association of
+ * \p length bytes of memory starting from \p devPtr. This function is a
+ * stream-ordered operation, meaning that it is dependent on, and will
+ * only take effect when, previous work in stream has completed. Any
+ * previous association is automatically replaced.
+ *
+ * \p devPtr must point to an one of the following types of memories:
+ * - managed memory declared using the __managed__ keyword or allocated with
+ *   ::cudaMallocManaged.
+ * - a valid host-accessible region of system-allocated pageable memory. This
+ *   type of memory may only be specified if the device associated with the
+ *   stream reports a non-zero value for the device attribute
+ *   ::cudaDevAttrPageableMemoryAccess.
+ *
+ * For managed allocations, \p length must be either zero or the entire
+ * allocation's size. Both indicate that the entire allocation's stream
+ * association is being changed. Currently, it is not possible to change stream
+ * association for a portion of a managed allocation.
+ *
+ * For pageable allocations, \p length must be non-zero.
+ *
+ * The stream association is specified using \p flags which must be
+ * one of ::cudaMemAttachGlobal, ::cudaMemAttachHost or ::cudaMemAttachSingle.
+ * The default value for \p flags is ::cudaMemAttachSingle
+ * If the ::cudaMemAttachGlobal flag is specified, the memory can be accessed
+ * by any stream on any device.
+ * If the ::cudaMemAttachHost flag is specified, the program makes a guarantee
+ * that it won't access the memory on the device from any stream on a device that
+ * has a zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ * If the ::cudaMemAttachSingle flag is specified and \p stream is associated with
+ * a device that has a zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess,
+ * the program makes a guarantee that it will only access the memory on the device
+ * from \p stream. It is illegal to attach singly to the NULL stream, because the
+ * NULL stream is a virtual global stream and not a specific stream. An error will
+ * be returned in this case.
+ *
+ * When memory is associated with a single stream, the Unified Memory system will
+ * allow CPU access to this memory region so long as all operations in \p stream
+ * have completed, regardless of whether other streams are active. In effect,
+ * this constrains exclusive ownership of the managed memory region by
+ * an active GPU to per-stream activity instead of whole-GPU activity.
+ *
+ * Accessing memory on the device from streams that are not associated with
+ * it will produce undefined results. No error checking is performed by the
+ * Unified Memory system to ensure that kernels launched into other streams
+ * do not access this region. 
+ *
+ * It is a program's responsibility to order calls to ::cudaStreamAttachMemAsync
+ * via events, synchronization or other means to ensure legal access to memory
+ * at all times. Data visibility and coherency will be changed appropriately
+ * for all kernels which follow a stream-association change.
+ *
+ * If \p stream is destroyed while data is associated with it, the association is
+ * removed and the association reverts to the default visibility of the allocation
+ * as specified at ::cudaMallocManaged. For __managed__ variables, the default
+ * association is always ::cudaMemAttachGlobal. Note that destroying a stream is an
+ * asynchronous operation, and as a result, the change to default association won't
+ * happen until all work in the stream has completed.
+ *
+ * \param stream  - Stream in which to enqueue the attach operation
+ * \param devPtr  - Pointer to memory (must be a pointer to managed memory or
+ *                  to a valid host-accessible region of system-allocated
+ *                  memory)
+ * \param length  - Length of memory (defaults to zero)
+ * \param flags   - Must be one of ::cudaMemAttachGlobal, ::cudaMemAttachHost or ::cudaMemAttachSingle (defaults to ::cudaMemAttachSingle)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotReady,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate, ::cudaStreamCreateWithFlags, ::cudaStreamWaitEvent, ::cudaStreamSynchronize, ::cudaStreamAddCallback, ::cudaStreamDestroy, ::cudaMallocManaged,
+ * ::cuStreamAttachMemAsync
+ */
+#if defined(__cplusplus)
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamAttachMemAsync(cudaStream_t stream, void *devPtr, size_t length __dv(0), unsigned int flags = cudaMemAttachSingle);
+#else
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamAttachMemAsync(cudaStream_t stream, void *devPtr, size_t length __dv(0), unsigned int flags);
+#endif
+
+/**
+ * \brief Begins graph capture on a stream
+ *
+ * Begin graph capture on \p stream. When a stream is in capture mode, all operations
+ * pushed into the stream will not be executed, but will instead be captured into
+ * a graph, which will be returned via ::cudaStreamEndCapture. Capture may not be initiated
+ * if \p stream is ::cudaStreamLegacy. Capture must be ended on the same stream in which
+ * it was initiated, and it may only be initiated if the stream is not already in capture
+ * mode. The capture mode may be queried via ::cudaStreamIsCapturing. A unique id
+ * representing the capture sequence may be queried via ::cudaStreamGetCaptureInfo.
+ *
+ * If \p mode is not ::cudaStreamCaptureModeRelaxed, ::cudaStreamEndCapture must be
+ * called on this stream from the same thread.
+ *
+ * \note Kernels captured using this API must not use texture and surface references.
+ *       Reading or writing through any texture or surface reference is undefined
+ *       behavior. This restriction does not apply to texture and surface objects.
+ *
+ * \param stream - Stream in which to initiate capture
+ * \param mode    - Controls the interaction of this capture sequence with other API
+ *                  calls that are potentially unsafe. For more details see
+ *                  ::cudaThreadExchangeStreamCaptureMode.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamCreate,
+ * ::cudaStreamIsCapturing,
+ * ::cudaStreamEndCapture,
+ * ::cudaThreadExchangeStreamCaptureMode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamBeginCapture(cudaStream_t stream, enum cudaStreamCaptureMode mode);
+
+/**
+ * \brief Swaps the stream capture interaction mode for a thread
+ *
+ * Sets the calling thread's stream capture interaction mode to the value contained
+ * in \p *mode, and overwrites \p *mode with the previous mode for the thread. To
+ * facilitate deterministic behavior across function or module boundaries, callers
+ * are encouraged to use this API in a push-pop fashion: \code
+     cudaStreamCaptureMode mode = desiredMode;
+     cudaThreadExchangeStreamCaptureMode(&mode);
+     ...
+     cudaThreadExchangeStreamCaptureMode(&mode); // restore previous mode
+ * \endcode
+ *
+ * During stream capture (see ::cudaStreamBeginCapture), some actions, such as a call
+ * to ::cudaMalloc, may be unsafe. In the case of ::cudaMalloc, the operation is
+ * not enqueued asynchronously to a stream, and is not observed by stream capture.
+ * Therefore, if the sequence of operations captured via ::cudaStreamBeginCapture
+ * depended on the allocation being replayed whenever the graph is launched, the
+ * captured graph would be invalid.
+ *
+ * Therefore, stream capture places restrictions on API calls that can be made within
+ * or concurrently to a ::cudaStreamBeginCapture-::cudaStreamEndCapture sequence. This
+ * behavior can be controlled via this API and flags to ::cudaStreamBeginCapture.
+ *
+ * A thread's mode is one of the following:
+ * - \p cudaStreamCaptureModeGlobal: This is the default mode. If the local thread has
+ *   an ongoing capture sequence that was not initiated with
+ *   \p cudaStreamCaptureModeRelaxed at \p cuStreamBeginCapture, or if any other thread
+ *   has a concurrent capture sequence initiated with \p cudaStreamCaptureModeGlobal,
+ *   this thread is prohibited from potentially unsafe API calls.
+ * - \p cudaStreamCaptureModeThreadLocal: If the local thread has an ongoing capture
+ *   sequence not initiated with \p cudaStreamCaptureModeRelaxed, it is prohibited
+ *   from potentially unsafe API calls. Concurrent capture sequences in other threads
+ *   are ignored.
+ * - \p cudaStreamCaptureModeRelaxed: The local thread is not prohibited from potentially
+ *   unsafe API calls. Note that the thread is still prohibited from API calls which
+ *   necessarily conflict with stream capture, for example, attempting ::cudaEventQuery
+ *   on an event that was last recorded inside a capture sequence.
+ *
+ * \param mode - Pointer to mode value to swap with the current mode
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamBeginCapture
+ */
+extern __host__ cudaError_t CUDARTAPI cudaThreadExchangeStreamCaptureMode(enum cudaStreamCaptureMode *mode);
+
+/**
+ * \brief Ends capture on a stream, returning the captured graph
+ *
+ * End capture on \p stream, returning the captured graph via \p pGraph.
+ * Capture must have been initiated on \p stream via a call to ::cudaStreamBeginCapture.
+ * If capture was invalidated, due to a violation of the rules of stream capture, then
+ * a NULL graph will be returned.
+ *
+ * If the \p mode argument to ::cudaStreamBeginCapture was not
+ * ::cudaStreamCaptureModeRelaxed, this call must be from the same thread as
+ * ::cudaStreamBeginCapture.
+ *
+ * \param stream - Stream to query
+ * \param pGraph - The captured graph
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorStreamCaptureWrongThread
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamCreate,
+ * ::cudaStreamBeginCapture,
+ * ::cudaStreamIsCapturing
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t *pGraph);
+
+/**
+ * \brief Returns a stream's capture status
+ *
+ * Return the capture status of \p stream via \p pCaptureStatus. After a successful
+ * call, \p *pCaptureStatus will contain one of the following:
+ * - ::cudaStreamCaptureStatusNone: The stream is not capturing.
+ * - ::cudaStreamCaptureStatusActive: The stream is capturing.
+ * - ::cudaStreamCaptureStatusInvalidated: The stream was capturing but an error
+ *   has invalidated the capture sequence. The capture sequence must be terminated
+ *   with ::cudaStreamEndCapture on the stream where it was initiated in order to
+ *   continue using \p stream.
+ *
+ * Note that, if this is called on ::cudaStreamLegacy (the "null stream") while
+ * a blocking stream on the same device is capturing, it will return
+ * ::cudaErrorStreamCaptureImplicit and \p *pCaptureStatus is unspecified
+ * after the call. The blocking stream capture is not invalidated.
+ *
+ * When a blocking stream is capturing, the legacy stream is in an
+ * unusable state until the blocking stream capture is terminated. The legacy
+ * stream is not supported for stream capture, but attempted use would have an
+ * implicit dependency on the capturing stream(s).
+ *
+ * \param stream         - Stream to query
+ * \param pCaptureStatus - Returns the stream's capture status
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorStreamCaptureImplicit
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamCreate,
+ * ::cudaStreamBeginCapture,
+ * ::cudaStreamEndCapture
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamIsCapturing(cudaStream_t stream, enum cudaStreamCaptureStatus *pCaptureStatus);
+
+/**
+ * \brief Query capture status of a stream
+ *
+ * Note there is a later version of this API, ::cudaStreamGetCaptureInfo_v2. It will
+ * supplant this version in 12.0, which is retained for minor version compatibility.
+ *
+ * Query the capture status of a stream and get a unique id representing
+ * the capture sequence over the lifetime of the process.
+ *
+ * If called on ::cudaStreamLegacy (the "null stream") while a stream not created
+ * with ::cudaStreamNonBlocking is capturing, returns ::cudaErrorStreamCaptureImplicit.
+ *
+ * A valid id is returned only if both of the following are true:
+ * - the call returns ::cudaSuccess
+ * - captureStatus is set to ::cudaStreamCaptureStatusActive
+ *
+ * \param stream         - Stream to query
+ * \param pCaptureStatus - Returns the stream's capture status
+ * \param pId            - Returns the unique id of the capture sequence
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorStreamCaptureImplicit
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamGetCaptureInfo_v2,
+ * ::cudaStreamBeginCapture,
+ * ::cudaStreamIsCapturing
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamGetCaptureInfo(cudaStream_t stream, enum cudaStreamCaptureStatus *pCaptureStatus, unsigned long long *pId);
+
+/**
+ * \brief Query a stream's capture state (11.3+)
+ *
+ * Query stream state related to stream capture.
+ *
+ * If called on ::cudaStreamLegacy (the "null stream") while a stream not created 
+ * with ::cudaStreamNonBlocking is capturing, returns ::cudaErrorStreamCaptureImplicit.
+ *
+ * Valid data (other than capture status) is returned only if both of the following are true:
+ * - the call returns cudaSuccess
+ * - the returned capture status is ::cudaStreamCaptureStatusActive
+ *
+ * This version of cudaStreamGetCaptureInfo is introduced in CUDA 11.3 and will supplant the
+ * previous version ::cudaStreamGetCaptureInfo in 12.0. Developers requiring compatibility
+ * across minor versions to CUDA 11.0 (driver version 445) can do one of the following:
+ * - Use the older version of the API, ::cudaStreamGetCaptureInfo
+ * - Pass null for all of \p graph_out, \p dependencies_out, and \p numDependencies_out.
+ *
+ * \param stream - The stream to query
+ * \param captureStatus_out - Location to return the capture status of the stream; required
+ * \param id_out - Optional location to return an id for the capture sequence, which is
+ *           unique over the lifetime of the process
+ * \param graph_out - Optional location to return the graph being captured into. All
+ *           operations other than destroy and node removal are permitted on the graph
+ *           while the capture sequence is in progress. This API does not transfer
+ *           ownership of the graph, which is transferred or destroyed at
+ *           ::cudaStreamEndCapture. Note that the graph handle may be invalidated before
+ *           end of capture for certain errors. Nodes that are or become
+ *           unreachable from the original stream at ::cudaStreamEndCapture due to direct
+ *           actions on the graph do not trigger ::cudaErrorStreamCaptureUnjoined.
+ * \param dependencies_out - Optional location to store a pointer to an array of nodes.
+ *           The next node to be captured in the stream will depend on this set of nodes,
+ *           absent operations such as event wait which modify this set. The array pointer
+ *           is valid until the next API call which operates on the stream or until end of
+ *           capture. The node handles may be copied out and are valid until they or the
+ *           graph is destroyed. The driver-owned array may also be passed directly to
+ *           APIs that operate on the graph (not the stream) without copying.
+ * \param numDependencies_out - Optional location to store the size of the array
+ *           returned in dependencies_out.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorStreamCaptureImplicit
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamGetCaptureInfo,
+ * ::cudaStreamBeginCapture,
+ * ::cudaStreamIsCapturing,
+ * ::cudaStreamUpdateCaptureDependencies
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamGetCaptureInfo_v2(cudaStream_t stream, enum cudaStreamCaptureStatus *captureStatus_out, unsigned long long *id_out __dv(0), cudaGraph_t *graph_out __dv(0), const cudaGraphNode_t **dependencies_out __dv(0), size_t *numDependencies_out __dv(0));
+
+/**
+ * \brief Update the set of dependencies in a capturing stream (11.3+)
+ *
+ * Modifies the dependency set of a capturing stream. The dependency set is the set
+ * of nodes that the next captured node in the stream will depend on.
+ *
+ * Valid flags are ::cudaStreamAddCaptureDependencies and
+ * ::cudaStreamSetCaptureDependencies. These control whether the set passed to
+ * the API is added to the existing set or replaces it. A flags value of 0 defaults
+ * to ::cudaStreamAddCaptureDependencies.
+ *
+ * Nodes that are removed from the dependency set via this API do not result in
+ * ::cudaErrorStreamCaptureUnjoined if they are unreachable from the stream at
+ * ::cudaStreamEndCapture.
+ *
+ * Returns ::cudaErrorIllegalState if the stream is not capturing.
+ *
+ * This API is new in CUDA 11.3. Developers requiring compatibility across minor
+ * versions of the CUDA driver to 11.0 should not use this API or provide a fallback.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorIllegalState
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaStreamBeginCapture,
+ * ::cudaStreamGetCaptureInfo,
+ * ::cudaStreamGetCaptureInfo_v2
+ */
+extern __host__ cudaError_t CUDARTAPI cudaStreamUpdateCaptureDependencies(cudaStream_t stream, cudaGraphNode_t *dependencies, size_t numDependencies, unsigned int flags __dv(0));
+/** @} */ /* END CUDART_STREAM */
+
+/**
+ * \defgroup CUDART_EVENT Event Management
+ *
+ * ___MANBRIEF___ event management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the event management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates an event object
+ *
+ * Creates an event object for the current device using ::cudaEventDefault.
+ *
+ * \param event - Newly created event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*, unsigned int) "cudaEventCreate (C++ API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventRecord, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cudaStreamWaitEvent,
+ * ::cuEventCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEventCreate(cudaEvent_t *event);
+
+/**
+ * \brief Creates an event object with the specified flags
+ *
+ * Creates an event object for the current device with the specified flags. Valid
+ * flags include:
+ * - ::cudaEventDefault: Default event creation flag.
+ * - ::cudaEventBlockingSync: Specifies that event should use blocking
+ *   synchronization. A host thread that uses ::cudaEventSynchronize() to wait
+ *   on an event created with this flag will block until the event actually
+ *   completes.
+ * - ::cudaEventDisableTiming: Specifies that the created event does not need
+ *   to record timing data.  Events created with this flag specified and
+ *   the ::cudaEventBlockingSync flag not specified will provide the best
+ *   performance when used with ::cudaStreamWaitEvent() and ::cudaEventQuery().
+ * - ::cudaEventInterprocess: Specifies that the created event may be used as an
+ *   interprocess event by ::cudaIpcGetEventHandle(). ::cudaEventInterprocess must
+ *   be specified along with ::cudaEventDisableTiming.
+ *
+ * \param event - Newly created event
+ * \param flags - Flags for new event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cudaStreamWaitEvent,
+ * ::cuEventCreate
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventCreateWithFlags(cudaEvent_t *event, unsigned int flags);
+
+/**
+ * \brief Records an event
+ *
+ * Captures in \p event the contents of \p stream at the time of this call.
+ * \p event and \p stream must be on the same CUDA context.
+ * Calls such as ::cudaEventQuery() or ::cudaStreamWaitEvent() will then
+ * examine or wait for completion of the work that was captured. Uses of
+ * \p stream after this call do not modify \p event. See note on default
+ * stream behavior for what is captured in the default case.
+ *
+ * ::cudaEventRecord() can be called multiple times on the same event and
+ * will overwrite the previously captured state. Other APIs such as
+ * ::cudaStreamWaitEvent() use the most recently captured state at the time
+ * of the API call, and are not affected by later calls to
+ * ::cudaEventRecord(). Before the first call to ::cudaEventRecord(), an
+ * event represents an empty set of work, so for example ::cudaEventQuery()
+ * would return ::cudaSuccess.
+ *
+ * \param event  - Event to record
+ * \param stream - Stream in which to record event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cudaStreamWaitEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cuEventRecord
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecord(cudaEvent_t event, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Records an event
+ *
+ * Captures in \p event the contents of \p stream at the time of this call.
+ * \p event and \p stream must be on the same CUDA context.
+ * Calls such as ::cudaEventQuery() or ::cudaStreamWaitEvent() will then
+ * examine or wait for completion of the work that was captured. Uses of
+ * \p stream after this call do not modify \p event. See note on default
+ * stream behavior for what is captured in the default case.
+ *
+ * ::cudaEventRecordWithFlags() can be called multiple times on the same event and
+ * will overwrite the previously captured state. Other APIs such as
+ * ::cudaStreamWaitEvent() use the most recently captured state at the time
+ * of the API call, and are not affected by later calls to
+ * ::cudaEventRecordWithFlags(). Before the first call to ::cudaEventRecordWithFlags(), an
+ * event represents an empty set of work, so for example ::cudaEventQuery()
+ * would return ::cudaSuccess.
+ *
+ * flags include:
+ * - ::cudaEventRecordDefault: Default event creation flag.
+ * - ::cudaEventRecordExternal: Event is captured in the graph as an external
+ *   event node when performing stream capture.
+ *
+ * \param event  - Event to record
+ * \param stream - Stream in which to record event
+ * \param flags  - Parameters for the operation(See above)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cudaStreamWaitEvent,
+ * ::cudaEventRecord,
+ * ::cuEventRecord,
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream __dv(0), unsigned int flags __dv(0));
+#endif
+
+/**
+ * \brief Queries an event's status
+ *
+ * Queries the status of all work currently captured by \p event. See
+ * ::cudaEventRecord() for details on what is captured by an event.
+ *
+ * Returns ::cudaSuccess if all captured work has been completed, or
+ * ::cudaErrorNotReady if any captured work is incomplete.
+ *
+ * For the purposes of Unified Memory, a return value of ::cudaSuccess
+ * is equivalent to having called ::cudaEventSynchronize().
+ *
+ * \param event - Event to query
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotReady,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventRecord,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cuEventQuery
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEventQuery(cudaEvent_t event);
+
+/**
+ * \brief Waits for an event to complete
+ *
+ * Waits until the completion of all work currently captured in \p event.
+ * See ::cudaEventRecord() for details on what is captured by an event.
+ *
+ * Waiting for an event that was created with the ::cudaEventBlockingSync
+ * flag will cause the calling CPU thread to block until the event has
+ * been completed by the device.  If the ::cudaEventBlockingSync flag has
+ * not been set, then the CPU thread will busy-wait until the event has
+ * been completed by the device.
+ *
+ * \param event - Event to wait for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventRecord,
+ * ::cudaEventQuery, ::cudaEventDestroy, ::cudaEventElapsedTime,
+ * ::cuEventSynchronize
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEventSynchronize(cudaEvent_t event);
+
+/**
+ * \brief Destroys an event object
+ *
+ * Destroys the event specified by \p event.
+ *
+ * An event may be destroyed before it is complete (i.e., while
+ * ::cudaEventQuery() would return ::cudaErrorNotReady). In this case, the
+ * call does not block on completion of the event, and any associated
+ * resources will automatically be released asynchronously at completion.
+ *
+ * \param event - Event to destroy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventRecord, ::cudaEventElapsedTime,
+ * ::cuEventDestroy
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventDestroy(cudaEvent_t event);
+
+/**
+ * \brief Computes the elapsed time between events
+ *
+ * Computes the elapsed time between two events (in milliseconds with a
+ * resolution of around 0.5 microseconds).
+ *
+ * If either event was last recorded in a non-NULL stream, the resulting time
+ * may be greater than expected (even if both used the same stream handle). This
+ * happens because the ::cudaEventRecord() operation takes place asynchronously
+ * and there is no guarantee that the measured latency is actually just between
+ * the two events. Any number of other different stream operations could execute
+ * in between the two measured events, thus altering the timing in a significant
+ * way.
+ *
+ * If ::cudaEventRecord() has not been called on either event, then
+ * ::cudaErrorInvalidResourceHandle is returned. If ::cudaEventRecord() has been
+ * called on both events but one or both of them has not yet been completed
+ * (that is, ::cudaEventQuery() would return ::cudaErrorNotReady on at least one
+ * of the events), ::cudaErrorNotReady is returned. If either event was created
+ * with the ::cudaEventDisableTiming flag, then this function will return
+ * ::cudaErrorInvalidResourceHandle.
+ *
+ * \param ms    - Time between \p start and \p end in ms
+ * \param start - Starting event
+ * \param end   - Ending event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotReady,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaEventCreate(cudaEvent_t*) "cudaEventCreate (C API)",
+ * ::cudaEventCreateWithFlags, ::cudaEventQuery,
+ * ::cudaEventSynchronize, ::cudaEventDestroy, ::cudaEventRecord,
+ * ::cuEventElapsedTime
+ */
+extern __host__ cudaError_t CUDARTAPI cudaEventElapsedTime(float *ms, cudaEvent_t start, cudaEvent_t end);
+
+/** @} */ /* END CUDART_EVENT */
+
+/**
+ * \defgroup CUDART_EXTRES_INTEROP External Resource Interoperability
+ *
+ * ___MANBRIEF___ External resource interoperability functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the external resource interoperability functions of the CUDA
+ * runtime application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Imports an external memory object
+ *
+ * Imports an externally allocated memory object and returns
+ * a handle to that in \p extMem_out.
+ *
+ * The properties of the handle being imported must be described in
+ * \p memHandleDesc. The ::cudaExternalMemoryHandleDesc structure
+ * is defined as follows:
+ *
+ * \code
+        typedef struct cudaExternalMemoryHandleDesc_st {
+            cudaExternalMemoryHandleType type;
+            union {
+                int fd;
+                struct {
+                    void *handle;
+                    const void *name;
+                } win32;
+                const void *nvSciBufObject;
+            } handle;
+            unsigned long long size;
+            unsigned int flags;
+        } cudaExternalMemoryHandleDesc;
+ * \endcode
+ *
+ * where ::cudaExternalMemoryHandleDesc::type specifies the type
+ * of handle being imported. ::cudaExternalMemoryHandleType is
+ * defined as:
+ *
+ * \code
+        typedef enum cudaExternalMemoryHandleType_enum {
+            cudaExternalMemoryHandleTypeOpaqueFd         = 1,
+            cudaExternalMemoryHandleTypeOpaqueWin32      = 2,
+            cudaExternalMemoryHandleTypeOpaqueWin32Kmt   = 3,
+            cudaExternalMemoryHandleTypeD3D12Heap        = 4,
+            cudaExternalMemoryHandleTypeD3D12Resource    = 5,
+	        cudaExternalMemoryHandleTypeD3D11Resource    = 6,
+		    cudaExternalMemoryHandleTypeD3D11ResourceKmt = 7,
+            cudaExternalMemoryHandleTypeNvSciBuf         = 8
+        } cudaExternalMemoryHandleType;
+ * \endcode
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeOpaqueFd, then
+ * ::cudaExternalMemoryHandleDesc::handle::fd must be a valid
+ * file descriptor referencing a memory object. Ownership of
+ * the file descriptor is transferred to the CUDA driver when the
+ * handle is imported successfully. Performing any operations on the
+ * file descriptor after it is imported results in undefined behavior.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeOpaqueWin32, then exactly one
+ * of ::cudaExternalMemoryHandleDesc::handle::win32::handle and
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalMemoryHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a memory object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a memory object.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeOpaqueWin32Kmt, then
+ * ::cudaExternalMemoryHandleDesc::handle::win32::handle must
+ * be non-NULL and
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * must be NULL. The handle specified must be a globally shared KMT
+ * handle. This handle does not hold a reference to the underlying
+ * object, and thus will be invalid when all references to the
+ * memory object are destroyed.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeD3D12Heap, then exactly one
+ * of ::cudaExternalMemoryHandleDesc::handle::win32::handle and
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalMemoryHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Heap object. This handle holds a reference to the underlying
+ * object. If ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D12Heap object.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeD3D12Resource, then exactly one
+ * of ::cudaExternalMemoryHandleDesc::handle::win32::handle and
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalMemoryHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Resource object. This handle holds a reference to the
+ * underlying object. If
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D12Resource object.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeD3D11Resource,then exactly one
+ * of ::cudaExternalMemoryHandleDesc::handle::win32::handle and
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalMemoryHandleDesc::handle::win32::handle is    
+ * not NULL, then it must represent a valid shared NT handle that is  
+ * returned by  IDXGIResource1::CreateSharedHandle when referring to a 
+ * ID3D11Resource object. If
+ * ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * is not NULL, then it must point to a NULL-terminated array of
+ * UTF-16 characters that refers to a ID3D11Resource object.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeD3D11ResourceKmt, then
+ * ::cudaExternalMemoryHandleDesc::handle::win32::handle must
+ * be non-NULL and ::cudaExternalMemoryHandleDesc::handle::win32::name
+ * must be NULL. The handle specified must be a valid shared KMT
+ * handle that is returned by IDXGIResource::GetSharedHandle when
+ * referring to a ID3D11Resource object.
+ *
+ * If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeNvSciBuf, then
+ * ::cudaExternalMemoryHandleDesc::handle::nvSciBufObject must be NON-NULL
+ * and reference a valid NvSciBuf object.
+ * If the NvSciBuf object imported into CUDA is also mapped by other drivers, then the
+ * application must use ::cudaWaitExternalSemaphoresAsync or ::cudaSignalExternalSemaphoresAsync
+ * as approprriate barriers to maintain coherence between CUDA and the other drivers.
+ * See ::cudaExternalSemaphoreWaitSkipNvSciBufMemSync and ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync 
+ * for memory synchronization.
+ *
+ * The size of the memory object must be specified in
+ * ::cudaExternalMemoryHandleDesc::size.
+ *
+ * Specifying the flag ::cudaExternalMemoryDedicated in
+ * ::cudaExternalMemoryHandleDesc::flags indicates that the
+ * resource is a dedicated resource. The definition of what a
+ * dedicated resource is outside the scope of this extension.
+ * This flag must be set if ::cudaExternalMemoryHandleDesc::type
+ * is one of the following:
+ * ::cudaExternalMemoryHandleTypeD3D12Resource
+ * ::cudaExternalMemoryHandleTypeD3D11Resource
+ * ::cudaExternalMemoryHandleTypeD3D11ResourceKmt
+ *
+ * \param extMem_out    - Returned handle to an external memory object
+ * \param memHandleDesc - Memory import handle descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \note If the Vulkan memory imported into CUDA is mapped on the CPU then the
+ * application must use vkInvalidateMappedMemoryRanges/vkFlushMappedMemoryRanges
+ * as well as appropriate Vulkan pipeline barriers to maintain coherence between
+ * CPU and GPU. For more information on these APIs, please refer to "Synchronization
+ * and Cache Control" chapter from Vulkan specification.
+ *
+ *
+ * \sa ::cudaDestroyExternalMemory,
+ * ::cudaExternalMemoryGetMappedBuffer,
+ * ::cudaExternalMemoryGetMappedMipmappedArray
+ */
+extern __host__ cudaError_t CUDARTAPI cudaImportExternalMemory(cudaExternalMemory_t *extMem_out, const struct cudaExternalMemoryHandleDesc *memHandleDesc);
+
+/**
+ * \brief Maps a buffer onto an imported memory object
+ *
+ * Maps a buffer onto an imported memory object and returns a device
+ * pointer in \p devPtr.
+ *
+ * The properties of the buffer being mapped must be described in
+ * \p bufferDesc. The ::cudaExternalMemoryBufferDesc structure is
+ * defined as follows:
+ *
+ * \code
+        typedef struct cudaExternalMemoryBufferDesc_st {
+            unsigned long long offset;
+            unsigned long long size;
+            unsigned int flags;
+        } cudaExternalMemoryBufferDesc;
+ * \endcode
+ *
+ * where ::cudaExternalMemoryBufferDesc::offset is the offset in
+ * the memory object where the buffer's base address is.
+ * ::cudaExternalMemoryBufferDesc::size is the size of the buffer.
+ * ::cudaExternalMemoryBufferDesc::flags must be zero.
+ *
+ * The offset and size have to be suitably aligned to match the
+ * requirements of the external API. Mapping two buffers whose ranges
+ * overlap may or may not result in the same virtual address being
+ * returned for the overlapped portion. In such cases, the application
+ * must ensure that all accesses to that region from the GPU are
+ * volatile. Otherwise writes made via one address are not guaranteed
+ * to be visible via the other address, even if they're issued by the
+ * same thread. It is recommended that applications map the combined
+ * range instead of mapping separate buffers and then apply the
+ * appropriate offsets to the returned pointer to derive the
+ * individual buffers.
+ *
+ * The returned pointer \p devPtr must be freed using ::cudaFree.
+ *
+ * \param devPtr     - Returned device pointer to buffer
+ * \param extMem     - Handle to external memory object
+ * \param bufferDesc - Buffer descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaImportExternalMemory,
+ * ::cudaDestroyExternalMemory,
+ * ::cudaExternalMemoryGetMappedMipmappedArray
+ */
+extern __host__ cudaError_t CUDARTAPI cudaExternalMemoryGetMappedBuffer(void **devPtr, cudaExternalMemory_t extMem, const struct cudaExternalMemoryBufferDesc *bufferDesc);
+
+/**
+ * \brief Maps a CUDA mipmapped array onto an external memory object
+ *
+ * Maps a CUDA mipmapped array onto an external object and returns a
+ * handle to it in \p mipmap.
+ *
+ * The properties of the CUDA mipmapped array being mapped must be
+ * described in \p mipmapDesc. The structure
+ * ::cudaExternalMemoryMipmappedArrayDesc is defined as follows:
+ *
+ * \code
+        typedef struct cudaExternalMemoryMipmappedArrayDesc_st {
+            unsigned long long offset;
+            cudaChannelFormatDesc formatDesc;
+            cudaExtent extent;
+            unsigned int flags;
+            unsigned int numLevels;
+        } cudaExternalMemoryMipmappedArrayDesc;
+ * \endcode
+ *
+ * where ::cudaExternalMemoryMipmappedArrayDesc::offset is the
+ * offset in the memory object where the base level of the mipmap
+ * chain is.
+ * ::cudaExternalMemoryMipmappedArrayDesc::formatDesc describes the
+ * format of the data.
+ * ::cudaExternalMemoryMipmappedArrayDesc::extent specifies the
+ * dimensions of the base level of the mipmap chain.
+ * ::cudaExternalMemoryMipmappedArrayDesc::flags are flags associated
+ * with CUDA mipmapped arrays. For further details, please refer to
+ * the documentation for ::cudaMalloc3DArray. Note that if the mipmapped
+ * array is bound as a color target in the graphics API, then the flag
+ * ::cudaArrayColorAttachment must be specified in 
+ * ::cudaExternalMemoryMipmappedArrayDesc::flags.
+ * ::cudaExternalMemoryMipmappedArrayDesc::numLevels specifies
+ * the total number of levels in the mipmap chain.
+ *
+ * The returned CUDA mipmapped array must be freed using ::cudaFreeMipmappedArray.
+ *
+ * \param mipmap     - Returned CUDA mipmapped array
+ * \param extMem     - Handle to external memory object
+ * \param mipmapDesc - CUDA array descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note On Tegra devices, this API will always attempt to do a compressed mapping when the ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeOpaqueFd
+ *
+ * \sa ::cudaImportExternalMemory,
+ * ::cudaDestroyExternalMemory,
+ * ::cudaExternalMemoryGetMappedBuffer
+ *
+ * \note If ::cudaExternalMemoryHandleDesc::type is
+ * ::cudaExternalMemoryHandleTypeNvSciBuf, then
+ * ::cudaExternalMemoryMipmappedArrayDesc::numLevels must not be greater than 1.
+ */
+extern __host__ cudaError_t CUDARTAPI cudaExternalMemoryGetMappedMipmappedArray(cudaMipmappedArray_t *mipmap, cudaExternalMemory_t extMem, const struct cudaExternalMemoryMipmappedArrayDesc *mipmapDesc);
+
+/**
+ * \brief Destroys an external memory object.
+ *
+ * Destroys the specified external memory object. Any existing buffers
+ * and CUDA mipmapped arrays mapped onto this object must no longer be
+ * used and must be explicitly freed using ::cudaFree and
+ * ::cudaFreeMipmappedArray respectively.
+ *
+ * \param extMem - External memory object to be destroyed
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa ::cudaImportExternalMemory,
+ * ::cudaExternalMemoryGetMappedBuffer,
+ * ::cudaExternalMemoryGetMappedMipmappedArray
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDestroyExternalMemory(cudaExternalMemory_t extMem);
+
+/**
+ * \brief Imports an external semaphore
+ *
+ * Imports an externally allocated synchronization object and returns
+ * a handle to that in \p extSem_out.
+ *
+ * The properties of the handle being imported must be described in
+ * \p semHandleDesc. The ::cudaExternalSemaphoreHandleDesc is defined
+ * as follows:
+ *
+ * \code
+        typedef struct cudaExternalSemaphoreHandleDesc_st {
+            cudaExternalSemaphoreHandleType type;
+            union {
+                int fd;
+                struct {
+                    void *handle;
+                    const void *name;
+                } win32;
+                const void* NvSciSyncObj;
+            } handle;
+            unsigned int flags;
+        } cudaExternalSemaphoreHandleDesc;
+ * \endcode
+ *
+ * where ::cudaExternalSemaphoreHandleDesc::type specifies the type of
+ * handle being imported. ::cudaExternalSemaphoreHandleType is defined
+ * as:
+ *
+ * \code
+        typedef enum cudaExternalSemaphoreHandleType_enum {
+            cudaExternalSemaphoreHandleTypeOpaqueFd                = 1,
+            cudaExternalSemaphoreHandleTypeOpaqueWin32             = 2,
+            cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt          = 3,
+            cudaExternalSemaphoreHandleTypeD3D12Fence              = 4,
+            cudaExternalSemaphoreHandleTypeD3D11Fence              = 5,
+            cudaExternalSemaphoreHandleTypeNvSciSync               = 6,
+            cudaExternalSemaphoreHandleTypeKeyedMutex              = 7,
+            cudaExternalSemaphoreHandleTypeKeyedMutexKmt           = 8,
+            cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd     = 9,
+            cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32  = 10
+        } cudaExternalSemaphoreHandleType;
+ * \endcode
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeOpaqueFd, then
+ * ::cudaExternalSemaphoreHandleDesc::handle::fd must be a valid file
+ * descriptor referencing a synchronization object. Ownership of the
+ * file descriptor is transferred to the CUDA driver when the handle
+ * is imported successfully. Performing any operations on the file
+ * descriptor after it is imported results in undefined behavior.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32, then exactly one of
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle and
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalSemaphoreHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a synchronization object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::cudaExternalSemaphoreHandleDesc::handle::win32::name is
+ * not NULL, then it must name a valid synchronization object.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt, then
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle must be
+ * non-NULL and ::cudaExternalSemaphoreHandleDesc::handle::win32::name
+ * must be NULL. The handle specified must be a globally shared KMT
+ * handle. This handle does not hold a reference to the underlying
+ * object, and thus will be invalid when all references to the
+ * synchronization object are destroyed.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeD3D12Fence, then exactly one of
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle and
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalSemaphoreHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D12Device::CreateSharedHandle when referring to a
+ * ID3D12Fence object. This handle holds a reference to the underlying
+ * object. If ::cudaExternalSemaphoreHandleDesc::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object that
+ * refers to a valid ID3D12Fence object.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeD3D11Fence, then exactly one of
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle and
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalSemaphoreHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * is returned by ID3D11Fence::CreateSharedHandle. If 
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name
+ * is not NULL, then it must name a valid synchronization object that
+ * refers to a valid ID3D11Fence object.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeNvSciSync, then
+ * ::cudaExternalSemaphoreHandleDesc::handle::nvSciSyncObj
+ * represents a valid NvSciSyncObj.
+ *
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutex, then exactly one of
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle and
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalSemaphoreHandleDesc::handle::win32::handle
+ * is not NULL, then it represent a valid shared NT handle that
+ * is returned by IDXGIResource1::CreateSharedHandle when referring to
+ * a IDXGIKeyedMutex object.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutexKmt, then
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle must be
+ * non-NULL and ::cudaExternalSemaphoreHandleDesc::handle::win32::name
+ * must be NULL. The handle specified must represent a valid KMT
+ * handle that is returned by IDXGIResource::GetSharedHandle when
+ * referring to a IDXGIKeyedMutex object.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd, then
+ * ::cudaExternalSemaphoreHandleDesc::handle::fd must be a valid file
+ * descriptor referencing a synchronization object. Ownership of the
+ * file descriptor is transferred to the CUDA driver when the handle
+ * is imported successfully. Performing any operations on the file
+ * descriptor after it is imported results in undefined behavior.
+ *
+ * If ::cudaExternalSemaphoreHandleDesc::type is
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32, then exactly one of
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::handle and
+ * ::cudaExternalSemaphoreHandleDesc::handle::win32::name must not be
+ * NULL. If ::cudaExternalSemaphoreHandleDesc::handle::win32::handle
+ * is not NULL, then it must represent a valid shared NT handle that
+ * references a synchronization object. Ownership of this handle is
+ * not transferred to CUDA after the import operation, so the
+ * application must release the handle using the appropriate system
+ * call. If ::cudaExternalSemaphoreHandleDesc::handle::win32::name is
+ * not NULL, then it must name a valid synchronization object.
+ *
+ * \param extSem_out    - Returned handle to an external semaphore
+ * \param semHandleDesc - Semaphore import handle descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDestroyExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaImportExternalSemaphore(cudaExternalSemaphore_t *extSem_out, const struct cudaExternalSemaphoreHandleDesc *semHandleDesc);
+
+/**
+ * \brief Signals a set of external semaphore objects
+ *
+ * Enqueues a signal operation on a set of externally allocated
+ * semaphore object in the specified stream. The operations will be
+ * executed when all prior operations in the stream complete.
+ *
+ * The exact semantics of signaling a semaphore depends on the type of
+ * the object.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeOpaqueFd,
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32,
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt
+ * then signaling the semaphore will set it to the signaled state.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeD3D12Fence,
+ * ::cudaExternalSemaphoreHandleTypeD3D11Fence,
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd,
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32
+ * then the semaphore will be set to the value specified in
+ * ::cudaExternalSemaphoreSignalParams::params::fence::value.
+ *
+ * If the semaphore object is of the type ::cudaExternalSemaphoreHandleTypeNvSciSync
+ * this API sets ::cudaExternalSemaphoreSignalParams::params::nvSciSync::fence to a
+ * value that can be used by subsequent waiters of the same NvSciSync object to
+ * order operations with those currently submitted in \p stream. Such an update
+ * will overwrite previous contents of
+ * ::cudaExternalSemaphoreSignalParams::params::nvSciSync::fence. By deefault,
+ * signaling such an external semaphore object causes appropriate memory synchronization
+ * operations to be performed over all the external memory objects that are imported as
+ * ::cudaExternalMemoryHandleTypeNvSciBuf. This ensures that any subsequent accesses
+ * made by other importers of the same set of NvSciBuf memory object(s) are coherent.
+ * These operations can be skipped by specifying the flag
+ * ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync, which can be used as a
+ * performance optimization when data coherency is not required. But specifying this
+ * flag in scenarios where data coherency is required results in undefined behavior.
+ * Also, for semaphore object of the type ::cudaExternalSemaphoreHandleTypeNvSciSync,
+ * if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ * ::cudaDeviceGetNvSciSyncAttributes to cudaNvSciSyncAttrSignal, this API will return
+ * cudaErrorNotSupported.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutex,
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutexKmt,
+ * then the keyed mutex will be released with the key specified in
+ * ::cudaExternalSemaphoreSignalParams::params::keyedmutex::key.
+ *
+ * \param extSemArray - Set of external semaphores to be signaled
+ * \param paramsArray - Array of semaphore parameters
+ * \param numExtSems  - Number of semaphores to signal
+ * \param stream     - Stream to enqueue the signal operations in
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaImportExternalSemaphore,
+ * ::cudaDestroyExternalSemaphore,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreSignalParams *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Waits on a set of external semaphore objects
+ *
+ * Enqueues a wait operation on a set of externally allocated
+ * semaphore object in the specified stream. The operations will be
+ * executed when all prior operations in the stream complete.
+ *
+ * The exact semantics of waiting on a semaphore depends on the type
+ * of the object.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeOpaqueFd,
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32,
+ * ::cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt
+ * then waiting on the semaphore will wait until the semaphore reaches
+ * the signaled state. The semaphore will then be reset to the
+ * unsignaled state. Therefore for every signal operation, there can
+ * only be one wait operation.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeD3D12Fence,
+ * ::cudaExternalSemaphoreHandleTypeD3D11Fence,
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd,
+ * ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32
+ * then waiting on the semaphore will wait until the value of the
+ * semaphore is greater than or equal to
+ * ::cudaExternalSemaphoreWaitParams::params::fence::value.
+ *
+ * If the semaphore object is of the type ::cudaExternalSemaphoreHandleTypeNvSciSync
+ * then, waiting on the semaphore will wait until the
+ * ::cudaExternalSemaphoreSignalParams::params::nvSciSync::fence is signaled by the
+ * signaler of the NvSciSyncObj that was associated with this semaphore object.
+ * By default, waiting on such an external semaphore object causes appropriate
+ * memory synchronization operations to be performed over all external memory objects
+ * that are imported as ::cudaExternalMemoryHandleTypeNvSciBuf. This ensures that
+ * any subsequent accesses made by other importers of the same set of NvSciBuf memory
+ * object(s) are coherent. These operations can be skipped by specifying the flag
+ * ::cudaExternalSemaphoreWaitSkipNvSciBufMemSync, which can be used as a
+ * performance optimization when data coherency is not required. But specifying this
+ * flag in scenarios where data coherency is required results in undefined behavior.
+ * Also, for semaphore object of the type ::cudaExternalSemaphoreHandleTypeNvSciSync,
+ * if the NvSciSyncAttrList used to create the NvSciSyncObj had not set the flags in
+ * ::cudaDeviceGetNvSciSyncAttributes to cudaNvSciSyncAttrWait, this API will return
+ * cudaErrorNotSupported.
+ *
+ * If the semaphore object is any one of the following types:
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutex,
+ * ::cudaExternalSemaphoreHandleTypeKeyedMutexKmt,
+ * then the keyed mutex will be acquired when it is released with the key specified 
+ * in ::cudaExternalSemaphoreSignalParams::params::keyedmutex::key or
+ * until the timeout specified by
+ * ::cudaExternalSemaphoreSignalParams::params::keyedmutex::timeoutMs
+ * has lapsed. The timeout interval can either be a finite value
+ * specified in milliseconds or an infinite value. In case an infinite
+ * value is specified the timeout never elapses. The windows INFINITE
+ * macro must be used to specify infinite timeout
+ *
+ * \param extSemArray - External semaphores to be waited on
+ * \param paramsArray - Array of semaphore parameters
+ * \param numExtSems  - Number of semaphores to wait on
+ * \param stream      - Stream to enqueue the wait operations in
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * ::cudaErrorTimeout
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaImportExternalSemaphore,
+ * ::cudaDestroyExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreWaitParams *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Destroys an external semaphore
+ *
+ * Destroys an external semaphore object and releases any references
+ * to the underlying resource. Any outstanding signals or waits must
+ * have completed before the semaphore is destroyed.
+ *
+ * \param extSem - External semaphore to be destroyed
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa ::cudaImportExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDestroyExternalSemaphore(cudaExternalSemaphore_t extSem);
+
+/** @} */ /* END CUDART_EXTRES_INTEROP */
+
+/**
+ * \defgroup CUDART_EXECUTION Execution Control
+ *
+ * ___MANBRIEF___ execution control functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the execution control functions of the CUDA runtime
+ * application programming interface.
+ *
+ * Some functions have overloaded C++ API template versions documented separately in the
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * @{
+ */
+
+/**
+ * \brief Launches a device function
+ *
+ * The function invokes kernel \p func on \p gridDim (\p gridDim.x &times; \p gridDim.y
+ * &times; \p gridDim.z) grid of blocks. Each block contains \p blockDim (\p blockDim.x &times;
+ * \p blockDim.y &times; \p blockDim.z) threads.
+ *
+ * If the kernel has N parameters the \p args should point to array of N pointers.
+ * Each pointer, from <tt>args[0]</tt> to <tt>args[N - 1]</tt>, point to the region
+ * of memory from which the actual parameter will be copied.
+ *
+ * For templated functions, pass the function symbol as follows:
+ * func_name<template_arg_0,...,template_arg_N>
+ *
+ * \p sharedMem sets the amount of dynamic shared memory that will be available to
+ * each thread block.
+ *
+ * \p stream specifies a stream the invocation is associated to.
+ *
+ * \param func        - Device function symbol
+ * \param gridDim     - Grid dimentions
+ * \param blockDim    - Block dimentions
+ * \param args        - Arguments
+ * \param sharedMem   - Shared memory
+ * \param stream      - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorSharedObjectInitFailed,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaLaunchKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C++ API)",
+ * ::cuLaunchKernel
+ */
+extern __host__ cudaError_t CUDARTAPI cudaLaunchKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream);
+
+/**
+ * \brief Launches a CUDA function with launch-time configuration
+ *
+ * Note that the functionally equivalent variadic template ::cudaLaunchKernelEx
+ * is available for C++11 and newer.
+ *
+ * Invokes the kernel \p func on \p config->gridDim (\p config->gridDim.x
+ * &times; \p config->gridDim.y &times; \p config->gridDim.z) grid of blocks.
+ * Each block contains \p config->blockDim (\p config->blockDim.x &times;
+ * \p config->blockDim.y &times; \p config->blockDim.z) threads.
+ *
+ * \p config->dynamicSmemBytes sets the amount of dynamic shared memory that
+ * will be available to each thread block.
+ *
+ * \p config->stream specifies a stream the invocation is associated to.
+ *
+ * Configuration beyond grid and block dimensions, dynamic shared memory size,
+ * and stream can be provided with the following two fields of \p config:
+ *
+ * \p config->attrs is an array of \p config->numAttrs contiguous
+ * ::cudaLaunchAttribute elements. The value of this pointer is not considered
+ * if \p config->numAttrs is zero. However, in that case, it is recommended to
+ * set the pointer to NULL.                                  
+ * \p config->numAttrs is the number of attributes populating the first
+ * \p config->numAttrs positions of the \p config->attrs array.
+ *
+ * If the kernel has N parameters the \p args should point to array of N
+ * pointers. Each pointer, from <tt>args[0]</tt> to <tt>args[N - 1]</tt>, point
+ * to the region of memory from which the actual parameter will be copied.
+ *
+ * N.B. This function is so named to avoid unintentionally invoking the
+ *      templated version, \p cudaLaunchKernelEx, for kernels taking a single
+ *      void** or void* parameter.
+ *
+ * \param config - Launch configuration
+ * \param func   - Kernel to launch
+ * \param args   - Array of pointers to kernel parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorSharedObjectInitFailed,
+ * ::cudaErrorInvalidPtx,
+ * ::cudaErrorUnsupportedPtxVersion,
+ * ::cudaErrorNoKernelImageForDevice,
+ * ::cudaErrorJitCompilerNotFound,
+ * ::cudaErrorJitCompilationDisabled
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaLaunchKernelEx(const cudaLaunchConfig_t *config, void (*kernel)(ExpTypes...), ActTypes &&... args) "cudaLaunchKernelEx (C++ API)",
+ * ::cuLaunchKernelEx
+ */
+extern __host__ cudaError_t CUDARTAPI cudaLaunchKernelExC(const cudaLaunchConfig_t *config, const void *func, void **args);
+
+/**
+ * \brief Launches a device function where thread blocks can cooperate and synchronize as they execute
+ *
+ * The function invokes kernel \p func on \p gridDim (\p gridDim.x &times; \p gridDim.y
+ * &times; \p gridDim.z) grid of blocks. Each block contains \p blockDim (\p blockDim.x &times;
+ * \p blockDim.y &times; \p blockDim.z) threads.
+ *
+ * The device on which this kernel is invoked must have a non-zero value for
+ * the device attribute ::cudaDevAttrCooperativeLaunch.
+ *
+ * The total number of blocks launched cannot exceed the maximum number of blocks per
+ * multiprocessor as returned by ::cudaOccupancyMaxActiveBlocksPerMultiprocessor (or
+ * ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ * as specified by the device attribute ::cudaDevAttrMultiProcessorCount.
+ *
+ * The kernel cannot make use of CUDA dynamic parallelism.
+ *
+ * If the kernel has N parameters the \p args should point to array of N pointers.
+ * Each pointer, from <tt>args[0]</tt> to <tt>args[N - 1]</tt>, point to the region
+ * of memory from which the actual parameter will be copied.
+ *
+ * For templated functions, pass the function symbol as follows:
+ * func_name<template_arg_0,...,template_arg_N>
+ *
+ * \p sharedMem sets the amount of dynamic shared memory that will be available to
+ * each thread block.
+ *
+ * \p stream specifies a stream the invocation is associated to.
+ *
+ * \param func        - Device function symbol
+ * \param gridDim     - Grid dimentions
+ * \param blockDim    - Block dimentions
+ * \param args        - Arguments
+ * \param sharedMem   - Shared memory
+ * \param stream      - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorCooperativeLaunchTooLarge,
+ * ::cudaErrorSharedObjectInitFailed
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaLaunchCooperativeKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchCooperativeKernel (C++ API)",
+ * ::cudaLaunchCooperativeKernelMultiDevice,
+ * ::cuLaunchCooperativeKernel
+ */
+extern __host__ cudaError_t CUDARTAPI cudaLaunchCooperativeKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream);
+
+/**
+ * \brief Launches device functions on multiple devices where thread blocks can cooperate and synchronize as they execute
+ *
+ * \deprecated This function is deprecated as of CUDA 11.3.
+ *
+ * Invokes kernels as specified in the \p launchParamsList array where each element
+ * of the array specifies all the parameters required to perform a single kernel launch.
+ * These kernels can cooperate and synchronize as they execute. The size of the array is
+ * specified by \p numDevices.
+ *
+ * No two kernels can be launched on the same device. All the devices targeted by this
+ * multi-device launch must be identical. All devices must have a non-zero value for the
+ * device attribute ::cudaDevAttrCooperativeMultiDeviceLaunch.
+ *
+ * The same kernel must be launched on all devices. Note that any __device__ or __constant__
+ * variables are independently instantiated on every device. It is the application's
+ * responsiblity to ensure these variables are initialized and used appropriately.
+ *
+ * The size of the grids as specified in blocks, the size of the blocks themselves and the
+ * amount of shared memory used by each thread block must also match across all launched kernels.
+ *
+ * The streams used to launch these kernels must have been created via either ::cudaStreamCreate
+ * or ::cudaStreamCreateWithPriority or ::cudaStreamCreateWithPriority. The NULL stream or
+ * ::cudaStreamLegacy or ::cudaStreamPerThread cannot be used.
+ *
+ * The total number of blocks launched per kernel cannot exceed the maximum number of blocks
+ * per multiprocessor as returned by ::cudaOccupancyMaxActiveBlocksPerMultiprocessor (or
+ * ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags) times the number of multiprocessors
+ * as specified by the device attribute ::cudaDevAttrMultiProcessorCount. Since the
+ * total number of blocks launched per device has to match across all devices, the maximum
+ * number of blocks that can be launched per device will be limited by the device with the
+ * least number of multiprocessors.
+ *
+ * The kernel cannot make use of CUDA dynamic parallelism.
+ *
+ * The ::cudaLaunchParams structure is defined as:
+ * \code
+        struct cudaLaunchParams
+        {
+            void *func;
+            dim3 gridDim;
+            dim3 blockDim;
+            void **args;
+            size_t sharedMem;
+            cudaStream_t stream;
+        };
+ * \endcode
+ * where:
+ * - ::cudaLaunchParams::func specifies the kernel to be launched. This same functions must
+ *   be launched on all devices. For templated functions, pass the function symbol as follows:
+ *   func_name<template_arg_0,...,template_arg_N>
+ * - ::cudaLaunchParams::gridDim specifies the width, height and depth of the grid in blocks.
+ *   This must match across all kernels launched.
+ * - ::cudaLaunchParams::blockDim is the width, height and depth of each thread block. This
+ *   must match across all kernels launched.
+ * - ::cudaLaunchParams::args specifies the arguments to the kernel. If the kernel has
+ *   N parameters then ::cudaLaunchParams::args should point to array of N pointers. Each
+ *   pointer, from <tt>::cudaLaunchParams::args[0]</tt> to <tt>::cudaLaunchParams::args[N - 1]</tt>,
+ *   point to the region of memory from which the actual parameter will be copied.
+ * - ::cudaLaunchParams::sharedMem is the dynamic shared-memory size per thread block in bytes.
+ *   This must match across all kernels launched.
+ * - ::cudaLaunchParams::stream is the handle to the stream to perform the launch in. This cannot
+ *   be the NULL stream or ::cudaStreamLegacy or ::cudaStreamPerThread.
+ *
+ * By default, the kernel won't begin execution on any GPU until all prior work in all the specified
+ * streams has completed. This behavior can be overridden by specifying the flag
+ * ::cudaCooperativeLaunchMultiDeviceNoPreSync. When this flag is specified, each kernel
+ * will only wait for prior work in the stream corresponding to that GPU to complete before it begins
+ * execution.
+ *
+ * Similarly, by default, any subsequent work pushed in any of the specified streams will not begin
+ * execution until the kernels on all GPUs have completed. This behavior can be overridden by specifying
+ * the flag ::cudaCooperativeLaunchMultiDeviceNoPostSync. When this flag is specified,
+ * any subsequent work pushed in any of the specified streams will only wait for the kernel launched
+ * on the GPU corresponding to that stream to complete before it begins execution.
+ *
+ * \param launchParamsList - List of launch parameters, one per device
+ * \param numDevices       - Size of the \p launchParamsList array
+ * \param flags            - Flags to control launch behavior
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidConfiguration,
+ * ::cudaErrorLaunchFailure,
+ * ::cudaErrorLaunchTimeout,
+ * ::cudaErrorLaunchOutOfResources,
+ * ::cudaErrorCooperativeLaunchTooLarge,
+ * ::cudaErrorSharedObjectInitFailed
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaLaunchCooperativeKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchCooperativeKernel (C++ API)",
+ * ::cudaLaunchCooperativeKernel,
+ * ::cuLaunchCooperativeKernelMultiDevice
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaLaunchCooperativeKernelMultiDevice(struct cudaLaunchParams *launchParamsList, unsigned int numDevices, unsigned int flags  __dv(0));
+
+/**
+ * \brief Sets the preferred cache configuration for a device function
+ *
+ * On devices where the L1 cache and shared memory use the same hardware
+ * resources, this sets through \p cacheConfig the preferred cache configuration
+ * for the function specified via \p func. This is only a preference. The
+ * runtime will use the requested configuration if possible, but it is free to
+ * choose a different configuration if required to execute \p func.
+ *
+ * \p func is a device function symbol and must be declared as a
+ * \c __global__ function. If the specified function does not exist,
+ * then ::cudaErrorInvalidDeviceFunction is returned. For templated functions,
+ * pass the function symbol as follows: func_name<template_arg_0,...,template_arg_N>
+ *
+ * This setting does nothing on devices where the size of the L1 cache and
+ * shared memory are fixed.
+ *
+ * Launching a kernel with a different preference than the most recent
+ * preference setting may insert a device-side synchronization point.
+ *
+ * The supported cache configurations are:
+ * - ::cudaFuncCachePreferNone: no preference for shared memory or L1 (default)
+ * - ::cudaFuncCachePreferShared: prefer larger shared memory and smaller L1 cache
+ * - ::cudaFuncCachePreferL1: prefer larger L1 cache and smaller shared memory
+ * - ::cudaFuncCachePreferEqual: prefer equal size L1 cache and shared memory
+ *
+ * \param func        - Device function symbol
+ * \param cacheConfig - Requested cache configuration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction
+ * \notefnerr
+ * \note_string_api_deprecation2
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa 
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ * \ref ::cudaLaunchKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C API)",
+ * ::cudaThreadGetCacheConfig,
+ * ::cudaThreadSetCacheConfig,
+ * ::cuFuncSetCacheConfig
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFuncSetCacheConfig(const void *func, enum cudaFuncCache cacheConfig);
+
+/**
+ * \brief Sets the shared memory configuration for a device function
+ *
+ * On devices with configurable shared memory banks, this function will 
+ * force all subsequent launches of the specified device function to have
+ * the given shared memory bank size configuration. On any given launch of the
+ * function, the shared memory configuration of the device will be temporarily
+ * changed if needed to suit the function's preferred configuration. Changes in
+ * shared memory configuration between subsequent launches of functions, 
+ * may introduce a device side synchronization point.
+ *
+ * Any per-function setting of shared memory bank size set via 
+ * ::cudaFuncSetSharedMemConfig will override the device wide setting set by
+ * ::cudaDeviceSetSharedMemConfig.
+ *
+ * Changing the shared memory bank size will not increase shared memory usage
+ * or affect occupancy of kernels, but may have major effects on performance. 
+ * Larger bank sizes will allow for greater potential bandwidth to shared memory,
+ * but will change what kinds of accesses to shared memory will result in bank 
+ * conflicts.
+ *
+ * This function will do nothing on devices with fixed shared memory bank size.
+ *
+ * For templated functions, pass the function symbol as follows:
+ * func_name<template_arg_0,...,template_arg_N>
+ *
+ * The supported bank configurations are:
+ * - ::cudaSharedMemBankSizeDefault: use the device's shared memory configuration
+ *   when launching this function.
+ * - ::cudaSharedMemBankSizeFourByte: set shared memory bank width to be 
+ *   four bytes natively when launching this function.
+ * - ::cudaSharedMemBankSizeEightByte: set shared memory bank width to be eight 
+ *   bytes natively when launching this function.
+ *
+ * \param func   - Device function symbol
+ * \param config - Requested shared memory configuration
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_string_api_deprecation2
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceSetSharedMemConfig,
+ * ::cudaDeviceGetSharedMemConfig,
+ * ::cudaDeviceSetCacheConfig,
+ * ::cudaDeviceGetCacheConfig,
+ * ::cudaFuncSetCacheConfig,
+ * ::cuFuncSetSharedMemConfig
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFuncSetSharedMemConfig(const void *func, enum cudaSharedMemConfig config);
+
+/**
+ * \brief Find out attributes for a given function
+ *
+ * This function obtains the attributes of a function specified via \p func.
+ * \p func is a device function symbol and must be declared as a
+ * \c __global__ function. The fetched attributes are placed in \p attr.
+ * If the specified function does not exist, then
+ * ::cudaErrorInvalidDeviceFunction is returned. For templated functions, pass
+ * the function symbol as follows: func_name<template_arg_0,...,template_arg_N>
+ *
+ * Note that some function attributes such as
+ * \ref ::cudaFuncAttributes::maxThreadsPerBlock "maxThreadsPerBlock"
+ * may vary based on the device that is currently being used.
+ *
+ * \param attr - Return pointer to function's attributes
+ * \param func - Device function symbol
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction
+ * \notefnerr
+ * \note_string_api_deprecation2
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa 
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, T*) "cudaFuncGetAttributes (C++ API)",
+ * \ref ::cudaLaunchKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C API)",
+ * ::cuFuncGetAttribute
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFuncGetAttributes(struct cudaFuncAttributes *attr, const void *func);
+
+
+/**
+ * \brief Set attributes for a given function
+ *
+ * This function sets the attributes of a function specified via \p func.
+ * The parameter \p func must be a pointer to a function that executes
+ * on the device. The parameter specified by \p func must be declared as a \p __global__
+ * function. The enumeration defined by \p attr is set to the value defined by \p value.
+ * If the specified function does not exist, then ::cudaErrorInvalidDeviceFunction is returned.
+ * If the specified attribute cannot be written, or if the value is incorrect, 
+ * then ::cudaErrorInvalidValue is returned.
+ *
+ * Valid values for \p attr are:
+ * - ::cudaFuncAttributeMaxDynamicSharedMemorySize - The requested maximum size in bytes of dynamically-allocated shared memory. The sum of this value and the function attribute ::sharedSizeBytes
+ *   cannot exceed the device attribute ::cudaDevAttrMaxSharedMemoryPerBlockOptin. The maximal size of requestable dynamic shared memory may differ by GPU architecture.
+ * - ::cudaFuncAttributePreferredSharedMemoryCarveout - On devices where the L1 cache and shared memory use the same hardware resources, 
+ *   this sets the shared memory carveout preference, in percent of the total shared memory. See ::cudaDevAttrMaxSharedMemoryPerMultiprocessor.
+ *   This is only a hint, and the driver can choose a different ratio if required to execute the function.
+ *
+ * \param func  - Function to get attributes of
+ * \param attr  - Attribute to set
+ * \param value - Value to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \ref ::cudaLaunchKernel(const T *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream) "cudaLaunchKernel (C++ API)",
+ * \ref ::cudaFuncSetCacheConfig(T*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C++ API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFuncSetAttribute(const void *func, enum cudaFuncAttribute attr, int value);
+
+/**
+ * \brief Converts a double argument to be executed on a device
+ *
+ * \param d - Double to convert
+ *
+ * \deprecated This function is deprecated as of CUDA 7.5
+ *
+ * Converts the double value of \p d to an internal float representation if
+ * the device does not support double arithmetic. If the device does natively
+ * support doubles, then this function does nothing.
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ * ::cudaSetDoubleForHost
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaSetDoubleForDevice(double *d);
+
+/**
+ * \brief Converts a double argument after execution on a device
+ *
+ * \deprecated This function is deprecated as of CUDA 7.5
+ *
+ * Converts the double value of \p d from a potentially internal float
+ * representation if the device does not support double arithmetic. If the
+ * device does natively support doubles, then this function does nothing.
+ *
+ * \param d - Double to convert
+ *
+ * \return
+ * ::cudaSuccess
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaFuncSetCacheConfig(const void*, enum cudaFuncCache) "cudaFuncSetCacheConfig (C API)",
+ * \ref ::cudaFuncGetAttributes(struct cudaFuncAttributes*, const void*) "cudaFuncGetAttributes (C API)",
+ * ::cudaSetDoubleForDevice
+ */
+extern __CUDA_DEPRECATED  __host__ cudaError_t CUDARTAPI cudaSetDoubleForHost(double *d);
+
+/**
+ * \brief Enqueues a host function call in a stream
+ *
+ * Enqueues a host function to run in a stream.  The function will be called
+ * after currently enqueued work and will block work added after it.
+ *
+ * The host function must not make any CUDA API calls.  Attempting to use a
+ * CUDA API may result in ::cudaErrorNotPermitted, but this is not required.
+ * The host function must not perform any synchronization that may depend on
+ * outstanding CUDA work not mandated to run earlier.  Host functions without a
+ * mandated order (such as in independent streams) execute in undefined order
+ * and may be serialized.
+ *
+ * For the purposes of Unified Memory, execution makes a number of guarantees:
+ * <ul>
+ *   <li>The stream is considered idle for the duration of the function's
+ *   execution.  Thus, for example, the function may always use memory attached
+ *   to the stream it was enqueued in.</li>
+ *   <li>The start of execution of the function has the same effect as
+ *   synchronizing an event recorded in the same stream immediately prior to
+ *   the function.  It thus synchronizes streams which have been "joined"
+ *   prior to the function.</li>
+ *   <li>Adding device work to any stream does not have the effect of making
+ *   the stream active until all preceding host functions and stream callbacks
+ *   have executed.  Thus, for
+ *   example, a function might use global attached memory even if work has
+ *   been added to another stream, if the work has been ordered behind the
+ *   function call with an event.</li>
+ *   <li>Completion of the function does not cause a stream to become
+ *   active except as described above.  The stream will remain idle
+ *   if no device work follows the function, and will remain idle across
+ *   consecutive host functions or stream callbacks without device work in
+ *   between.  Thus, for example,
+ *   stream synchronization can be done by signaling from a host function at the
+ *   end of the stream.</li>
+ * </ul>
+ *
+ * Note that, in constrast to ::cuStreamAddCallback, the function will not be
+ * called in the event of an error in the CUDA context.
+ *
+ * \param hStream  - Stream to enqueue function call in
+ * \param fn       - The function to call once preceding stream operations are complete
+ * \param userData - User-specified data to be passed to the function
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaStreamCreate,
+ * ::cudaStreamQuery,
+ * ::cudaStreamSynchronize,
+ * ::cudaStreamWaitEvent,
+ * ::cudaStreamDestroy,
+ * ::cudaMallocManaged,
+ * ::cudaStreamAttachMemAsync,
+ * ::cudaStreamAddCallback,
+ * ::cuLaunchHostFunc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void *userData);
+
+/** @} */ /* END CUDART_EXECUTION */
+
+/**
+ * \defgroup CUDART_OCCUPANCY Occupancy
+ *
+ * ___MANBRIEF___ occupancy calculation functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the occupancy calculation functions of the CUDA runtime
+ * application programming interface.
+ *
+ * Besides the occupancy calculator functions
+ * (\ref ::cudaOccupancyMaxActiveBlocksPerMultiprocessor and \ref ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags),
+ * there are also C++ only occupancy-based launch configuration functions documented in
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * See
+ * \ref ::cudaOccupancyMaxPotentialBlockSize(int*, int*, T, size_t, int) "cudaOccupancyMaxPotentialBlockSize (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeWithFlags(int*, int*, T, size_t, int, unsigned int) "cudaOccupancyMaxPotentialBlockSize (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMem(int*, int*, T, UnaryFunction, int) "cudaOccupancyMaxPotentialBlockSizeVariableSMem (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(int*, int*, T, UnaryFunction, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeVariableSMem (C++ API)"
+ * \ref ::cudaOccupancyAvailableDynamicSMemPerBlock(size_t*, T, int, int) "cudaOccupancyAvailableDynamicSMemPerBlock (C++ API)",
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns occupancy for a device function
+ *
+ * Returns in \p *numBlocks the maximum number of active blocks per
+ * streaming multiprocessor for the device function.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel function for which occupancy is calculated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags,
+ * \ref ::cudaOccupancyMaxPotentialBlockSize(int*, int*, T, size_t, int) "cudaOccupancyMaxPotentialBlockSize (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeWithFlags(int*, int*, T, size_t, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeWithFlags (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMem(int*, int*, T, UnaryFunction, int) "cudaOccupancyMaxPotentialBlockSizeVariableSMem (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(int*, int*, T, UnaryFunction, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags (C++ API)",
+ * \ref ::cudaOccupancyAvailableDynamicSMemPerBlock(size_t*, T, int, int) "cudaOccupancyAvailableDynamicSMemPerBlock (C++ API)",
+ * ::cuOccupancyMaxActiveBlocksPerMultiprocessor
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessor(int *numBlocks, const void *func, int blockSize, size_t dynamicSMemSize);
+
+/**
+ * \brief Returns dynamic shared memory available per block when launching \p numBlocks blocks on SM.
+ *
+ * Returns in \p *dynamicSmemSize the maximum size of dynamic shared memory to allow \p numBlocks blocks per SM. 
+ *
+ * \param dynamicSmemSize - Returned maximum dynamic shared memory 
+ * \param func            - Kernel function for which occupancy is calculated
+ * \param numBlocks       - Number of blocks to fit on SM 
+ * \param blockSize       - Size of the block
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags,
+ * \ref ::cudaOccupancyMaxPotentialBlockSize(int*, int*, T, size_t, int) "cudaOccupancyMaxPotentialBlockSize (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeWithFlags(int*, int*, T, size_t, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeWithFlags (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMem(int*, int*, T, UnaryFunction, int) "cudaOccupancyMaxPotentialBlockSizeVariableSMem (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(int*, int*, T, UnaryFunction, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags (C++ API)",
+ * ::cudaOccupancyAvailableDynamicSMemPerBlock
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyAvailableDynamicSMemPerBlock(size_t *dynamicSmemSize, const void *func, int numBlocks, int blockSize);
+
+/**
+ * \brief Returns occupancy for a device function with the specified flags
+ *
+ * Returns in \p *numBlocks the maximum number of active blocks per
+ * streaming multiprocessor for the device function.
+ *
+ * The \p flags parameter controls how special cases are handled. Valid flags include:
+ *
+ * - ::cudaOccupancyDefault: keeps the default behavior as
+ *   ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+ *
+ * - ::cudaOccupancyDisableCachingOverride: This flag suppresses the default behavior
+ *   on platform where global caching affects occupancy. On such platforms, if caching
+ *   is enabled, but per-block SM resource usage would result in zero occupancy, the
+ *   occupancy calculator will calculate the occupancy as if caching is disabled.
+ *   Setting this flag makes the occupancy calculator to return 0 in such cases.
+ *   More information can be found about this feature in the "Unified L1/Texture Cache"
+ *   section of the Maxwell tuning guide.
+ *
+ * \param numBlocks       - Returned occupancy
+ * \param func            - Kernel function for which occupancy is calculated
+ * \param blockSize       - Block size the kernel is intended to be launched with
+ * \param dynamicSMemSize - Per-block dynamic shared memory usage intended, in bytes
+ * \param flags           - Requested behavior for the occupancy calculator
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaOccupancyMaxActiveBlocksPerMultiprocessor,
+ * \ref ::cudaOccupancyMaxPotentialBlockSize(int*, int*, T, size_t, int) "cudaOccupancyMaxPotentialBlockSize (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeWithFlags(int*, int*, T, size_t, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeWithFlags (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMem(int*, int*, T, UnaryFunction, int) "cudaOccupancyMaxPotentialBlockSizeVariableSMem (C++ API)",
+ * \ref ::cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags(int*, int*, T, UnaryFunction, int, unsigned int) "cudaOccupancyMaxPotentialBlockSizeVariableSMemWithFlags (C++ API)",
+ * \ref ::cudaOccupancyAvailableDynamicSMemPerBlock(size_t*, T, int, int) "cudaOccupancyAvailableDynamicSMemPerBlock (C++ API)",
+ * ::cuOccupancyMaxActiveBlocksPerMultiprocessorWithFlags
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags(int *numBlocks, const void *func, int blockSize, size_t dynamicSMemSize, unsigned int flags);
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum cluster size in \p *clusterSize.
+ *
+ * The cluster dimensions in \p config are ignored. If func has a required
+ * cluster size set (see ::cudaFuncGetAttributes),\p *clusterSize will reflect 
+ * the required cluster size.
+ *
+ * By default this function will always return a value that's portable on
+ * future hardware. A higher value may be returned if the kernel function
+ * allows non-portable cluster sizes.
+ *
+ * This function will respect the compile time launch bounds.
+ *
+ * \param clusterSize - Returned maximum cluster size that can be launched
+ *                      for the given kernel function and launch configuration
+ * \param func        - Kernel function for which maximum cluster
+ *                      size is calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaFuncGetAttributes
+ * \ref ::cudaOccupancyMaxPotentialClusterSize(int*, T, const cudaLaunchConfig_t*) "cudaOccupancyMaxPotentialClusterSize (C++ API)",
+ * ::cuOccupancyMaxPotentialClusterSize
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxPotentialClusterSize(int *clusterSize, const void *func, const cudaLaunchConfig_t *launchConfig);
+
+
+/**
+ * \brief Given the kernel function (\p func) and launch configuration
+ * (\p config), return the maximum number of clusters that could co-exist
+ * on the target device in \p *numClusters.
+ *
+ * If the function has required cluster size already set (see
+ * ::cudaFuncGetAttributes), the cluster size from config must either be
+ * unspecified or match the required size.
+ * Without required sizes, the cluster size must be specified in config,
+ * else the function will return an error.
+ *
+ * Note that various attributes of the kernel function may affect occupancy
+ * calculation. Runtime environment may affect how the hardware schedules
+ * the clusters, so the calculated occupancy is not guaranteed to be achievable.
+ *
+ * \param numClusters - Returned maximum number of clusters that
+ *                      could co-exist on the target device
+ * \param func        - Kernel function for which maximum number
+ *                      of clusters are calculated
+ * \param config      - Launch configuration for the given kernel function
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDeviceFunction,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidClusterSize,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaFuncGetAttributes
+ * \ref ::cudaOccupancyMaxActiveClusters(int*, T, const cudaLaunchConfig_t*) "cudaOccupancyMaxActiveClusters (C++ API)",
+ * ::cuOccupancyMaxActiveClusters
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaOccupancyMaxActiveClusters(int *numClusters, const void *func, const cudaLaunchConfig_t *launchConfig);
+/** @} */ /* END CUDA_OCCUPANCY */
+
+/**
+ * \defgroup CUDART_MEMORY Memory Management
+ *
+ * ___MANBRIEF___ memory management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the memory management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * Some functions have overloaded C++ API template versions documented separately in the
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * @{
+ */
+
+/**
+ * \brief Allocates memory that will be automatically managed by the Unified Memory system
+ *
+ * Allocates \p size bytes of managed memory on the device and returns in
+ * \p *devPtr a pointer to the allocated memory. If the device doesn't support
+ * allocating managed memory, ::cudaErrorNotSupported is returned. Support
+ * for managed memory can be queried using the device attribute
+ * ::cudaDevAttrManagedMemory. The allocated memory is suitably
+ * aligned for any kind of variable. The memory is not cleared. If \p size
+ * is 0, ::cudaMallocManaged returns ::cudaErrorInvalidValue. The pointer
+ * is valid on the CPU and on all GPUs in the system that support managed memory.
+ * All accesses to this pointer must obey the Unified Memory programming model.
+ *
+ * \p flags specifies the default stream association for this allocation.
+ * \p flags must be one of ::cudaMemAttachGlobal or ::cudaMemAttachHost. The
+ * default value for \p flags is ::cudaMemAttachGlobal.
+ * If ::cudaMemAttachGlobal is specified, then this memory is accessible from
+ * any stream on any device. If ::cudaMemAttachHost is specified, then the
+ * allocation should not be accessed from devices that have a zero value for the
+ * device attribute ::cudaDevAttrConcurrentManagedAccess; an explicit call to
+ * ::cudaStreamAttachMemAsync will be required to enable access on such devices.
+ *
+ * If the association is later changed via ::cudaStreamAttachMemAsync to
+ * a single stream, the default association, as specifed during ::cudaMallocManaged,
+ * is restored when that stream is destroyed. For __managed__ variables, the
+ * default association is always ::cudaMemAttachGlobal. Note that destroying a
+ * stream is an asynchronous operation, and as a result, the change to default
+ * association won't happen until all work in the stream has completed.
+ *
+ * Memory allocated with ::cudaMallocManaged should be released with ::cudaFree.
+ *
+ * Device memory oversubscription is possible for GPUs that have a non-zero value for the
+ * device attribute ::cudaDevAttrConcurrentManagedAccess. Managed memory on
+ * such GPUs may be evicted from device memory to host memory at any time by the Unified
+ * Memory driver in order to make room for other allocations.
+ *
+ * In a multi-GPU system where all GPUs have a non-zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess, managed memory may not be populated when this
+ * API returns and instead may be populated on access. In such systems, managed memory can
+ * migrate to any processor's memory at any time. The Unified Memory driver will employ heuristics to
+ * maintain data locality and prevent excessive page faults to the extent possible. The application
+ * can also guide the driver about memory usage patterns via ::cudaMemAdvise. The application
+ * can also explicitly migrate memory to a desired processor's memory via
+ * ::cudaMemPrefetchAsync.
+ *
+ * In a multi-GPU system where all of the GPUs have a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess and all the GPUs have peer-to-peer support
+ * with each other, the physical storage for managed memory is created on the GPU which is active
+ * at the time ::cudaMallocManaged is called. All other GPUs will reference the data at reduced
+ * bandwidth via peer mappings over the PCIe bus. The Unified Memory driver does not migrate
+ * memory among such GPUs.
+ *
+ * In a multi-GPU system where not all GPUs have peer-to-peer support with each other and
+ * where the value of the device attribute ::cudaDevAttrConcurrentManagedAccess
+ * is zero for at least one of those GPUs, the location chosen for physical storage of managed
+ * memory is system-dependent.
+ * - On Linux, the location chosen will be device memory as long as the current set of active
+ * contexts are on devices that either have peer-to-peer support with each other or have a
+ * non-zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ * If there is an active context on a GPU that does not have a non-zero value for that device
+ * attribute and it does not have peer-to-peer support with the other devices that have active
+ * contexts on them, then the location for physical storage will be 'zero-copy' or host memory.
+ * Note that this means that managed memory that is located in device memory is migrated to
+ * host memory if a new context is created on a GPU that doesn't have a non-zero value for
+ * the device attribute and does not support peer-to-peer with at least one of the other devices
+ * that has an active context. This in turn implies that context creation may fail if there is
+ * insufficient host memory to migrate all managed allocations.
+ * - On Windows, the physical storage is always created in 'zero-copy' or host memory.
+ * All GPUs will reference the data at reduced bandwidth over the PCIe bus. In these
+ * circumstances, use of the environment variable CUDA_VISIBLE_DEVICES is recommended to
+ * restrict CUDA to only use those GPUs that have peer-to-peer support.
+ * Alternatively, users can also set CUDA_MANAGED_FORCE_DEVICE_ALLOC to a non-zero
+ * value to force the driver to always use device memory for physical storage.
+ * When this environment variable is set to a non-zero value, all devices used in
+ * that process that support managed memory have to be peer-to-peer compatible
+ * with each other. The error ::cudaErrorInvalidDevice will be returned if a device
+ * that supports managed memory is used and it is not peer-to-peer compatible with
+ * any of the other managed memory supporting devices that were previously used in
+ * that process, even if ::cudaDeviceReset has been called on those devices. These
+ * environment variables are described in the CUDA programming guide under the
+ * "CUDA environment variables" section.
+ *
+ * \param devPtr - Pointer to allocated device memory
+ * \param size   - Requested allocation size in bytes
+ * \param flags  - Must be either ::cudaMemAttachGlobal or ::cudaMemAttachHost (defaults to ::cudaMemAttachGlobal)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray, ::cudaFreeArray,
+ * ::cudaMalloc3D, ::cudaMalloc3DArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc, ::cudaDeviceGetAttribute, ::cudaStreamAttachMemAsync,
+ * ::cuMemAllocManaged
+ */
+#if defined(__cplusplus)
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMallocManaged(void **devPtr, size_t size, unsigned int flags = cudaMemAttachGlobal);
+#else
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMallocManaged(void **devPtr, size_t size, unsigned int flags);
+#endif
+
+/**
+ * \brief Allocate memory on the device
+ *
+ * Allocates \p size bytes of linear memory on the device and returns in
+ * \p *devPtr a pointer to the allocated memory. The allocated memory is
+ * suitably aligned for any kind of variable. The memory is not cleared.
+ * ::cudaMalloc() returns ::cudaErrorMemoryAllocation in case of failure.
+ *
+ * The device version of ::cudaFree cannot be used with a \p *devPtr
+ * allocated using the host API, and vice versa.
+ *
+ * \param devPtr - Pointer to allocated device memory
+ * \param size   - Requested allocation size in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray, ::cudaFreeArray,
+ * ::cudaMalloc3D, ::cudaMalloc3DArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::cuMemAlloc
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMalloc(void **devPtr, size_t size);
+
+/**
+ * \brief Allocates page-locked memory on the host
+ *
+ * Allocates \p size bytes of host memory that is page-locked and accessible
+ * to the device. The driver tracks the virtual memory ranges allocated with
+ * this function and automatically accelerates calls to functions such as
+ * ::cudaMemcpy*(). Since the memory can be accessed directly by the device,
+ * it can be read or written with much higher bandwidth than pageable memory
+ * obtained with functions such as ::malloc(). Allocating excessive amounts of
+ * memory with ::cudaMallocHost() may degrade system performance, since it
+ * reduces the amount of memory available to the system for paging. As a
+ * result, this function is best used sparingly to allocate staging areas for
+ * data exchange between host and device.
+ *
+ * \param ptr  - Pointer to allocated host memory
+ * \param size - Requested allocation size in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaMallocArray, ::cudaMalloc3D,
+ * ::cudaMalloc3DArray, ::cudaHostAlloc, ::cudaFree, ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t, unsigned int) "cudaMallocHost (C++ API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::cuMemAllocHost
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocHost(void **ptr, size_t size);
+
+/**
+ * \brief Allocates pitched memory on the device
+ *
+ * Allocates at least \p width (in bytes) * \p height bytes of linear memory
+ * on the device and returns in \p *devPtr a pointer to the allocated memory.
+ * The function may pad the allocation to ensure that corresponding pointers
+ * in any given row will continue to meet the alignment requirements for
+ * coalescing as the address is updated from row to row. The pitch returned in
+ * \p *pitch by ::cudaMallocPitch() is the width in bytes of the allocation.
+ * The intended usage of \p pitch is as a separate parameter of the allocation,
+ * used to compute addresses within the 2D array. Given the row and column of
+ * an array element of type \p T, the address is computed as:
+ * \code
+    T* pElement = (T*)((char*)BaseAddress + Row * pitch) + Column;
+   \endcode
+ *
+ * For allocations of 2D arrays, it is recommended that programmers consider
+ * performing pitch allocations using ::cudaMallocPitch(). Due to pitch
+ * alignment restrictions in the hardware, this is especially true if the
+ * application will be performing 2D memory copies between different regions
+ * of device memory (whether linear memory or CUDA arrays).
+ *
+ * \param devPtr - Pointer to allocated pitched device memory
+ * \param pitch  - Pitch for allocation
+ * \param width  - Requested pitched allocation width (in bytes)
+ * \param height - Requested pitched allocation height
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaFree, ::cudaMallocArray, ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaMalloc3D, ::cudaMalloc3DArray,
+ * ::cudaHostAlloc,
+ * ::cuMemAllocPitch
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocPitch(void **devPtr, size_t *pitch, size_t width, size_t height);
+
+/**
+ * \brief Allocate an array on the device
+ *
+ * Allocates a CUDA array according to the ::cudaChannelFormatDesc structure
+ * \p desc and returns a handle to the new CUDA array in \p *array.
+ *
+ * The ::cudaChannelFormatDesc is defined as:
+ * \code
+    struct cudaChannelFormatDesc {
+        int x, y, z, w;
+    enum cudaChannelFormatKind f;
+    };
+    \endcode
+ * where ::cudaChannelFormatKind is one of ::cudaChannelFormatKindSigned,
+ * ::cudaChannelFormatKindUnsigned, or ::cudaChannelFormatKindFloat.
+ *
+ * The \p flags parameter enables different options to be specified that affect
+ * the allocation, as follows.
+ * - ::cudaArrayDefault: This flag's value is defined to be 0 and provides default array allocation
+ * - ::cudaArraySurfaceLoadStore: Allocates an array that can be read from or written to using a surface reference
+ * - ::cudaArrayTextureGather: This flag indicates that texture gather operations will be performed on the array.
+ * - ::cudaArraySparse: Allocates a CUDA array without physical backing memory. The subregions within this sparse array
+ *   can later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. 
+ *   The physical backing memory must be allocated via ::cuMemCreate.
+ * - ::cudaArrayDeferredMapping: Allocates a CUDA array without physical backing memory. The entire array can 
+ *   later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. 
+ *   The physical backing memory must be allocated via ::cuMemCreate.
+ *
+ * \p width and \p height must meet certain size requirements. See ::cudaMalloc3DArray() for more details.
+ *
+ * \param array  - Pointer to allocated array in device memory
+ * \param desc   - Requested channel format
+ * \param width  - Requested array allocation width
+ * \param height - Requested array allocation height
+ * \param flags  - Requested properties of allocated array
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaFree, ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaMalloc3D, ::cudaMalloc3DArray,
+ * ::cudaHostAlloc,
+ * ::cuArrayCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocArray(cudaArray_t *array, const struct cudaChannelFormatDesc *desc, size_t width, size_t height __dv(0), unsigned int flags __dv(0));
+
+/**
+ * \brief Frees memory on the device
+ *
+ * Frees the memory space pointed to by \p devPtr, which must have been
+ * returned by a previous call to one of the following memory allocation APIs -
+ * ::cudaMalloc(), ::cudaMallocPitch(), ::cudaMallocManaged(), ::cudaMallocAsync(),
+ * ::cudaMallocFromPoolAsync().
+ * 
+ * Note - This API will not perform any implicit synchronization when the pointer was
+ * allocated with ::cudaMallocAsync or ::cudaMallocFromPoolAsync. Callers must ensure
+ * that all accesses to the pointer have completed before invoking ::cudaFree. For
+ * best performance and memory reuse, users should use ::cudaFreeAsync to free memory
+ * allocated via the stream ordered memory allocator.
+ * 
+ * If ::cudaFree(\p devPtr) has already been called before,
+ * an error is returned. If \p devPtr is 0, no operation is performed.
+ * ::cudaFree() returns ::cudaErrorValue in case of failure.
+ *
+ * The device version of ::cudaFree cannot be used with a \p *devPtr
+ * allocated using the host API, and vice versa.
+ *
+ * \param devPtr - Device pointer to memory to free
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaMallocManaged, ::cudaMallocArray, ::cudaFreeArray, ::cudaMallocAsync, ::cudaMallocFromPoolAsync
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaMalloc3D, ::cudaMalloc3DArray, ::cudaFreeAsync
+ * ::cudaHostAlloc,
+ * ::cuMemFree
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaFree(void *devPtr);
+
+/**
+ * \brief Frees page-locked memory
+ *
+ * Frees the memory space pointed to by \p hostPtr, which must have been
+ * returned by a previous call to ::cudaMallocHost() or ::cudaHostAlloc().
+ *
+ * \param ptr - Pointer to memory to free
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray,
+ * ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaMalloc3D, ::cudaMalloc3DArray, ::cudaHostAlloc,
+ * ::cuMemFreeHost
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFreeHost(void *ptr);
+
+/**
+ * \brief Frees an array on the device
+ *
+ * Frees the CUDA array \p array, which must have been returned by a
+ * previous call to ::cudaMallocArray(). If \p devPtr is 0,
+ * no operation is performed.
+ *
+ * \param array - Pointer to array to free
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::cuArrayDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFreeArray(cudaArray_t array);
+
+/**
+ * \brief Frees a mipmapped array on the device
+ *
+ * Frees the CUDA mipmapped array \p mipmappedArray, which must have been 
+ * returned by a previous call to ::cudaMallocMipmappedArray(). If \p devPtr
+ * is 0, no operation is performed.
+ *
+ * \param mipmappedArray - Pointer to mipmapped array to free
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc, ::cudaMallocPitch, ::cudaFree, ::cudaMallocArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::cuMipmappedArrayDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFreeMipmappedArray(cudaMipmappedArray_t mipmappedArray);
+
+
+/**
+ * \brief Allocates page-locked memory on the host
+ *
+ * Allocates \p size bytes of host memory that is page-locked and accessible
+ * to the device. The driver tracks the virtual memory ranges allocated with
+ * this function and automatically accelerates calls to functions such as
+ * ::cudaMemcpy(). Since the memory can be accessed directly by the device, it
+ * can be read or written with much higher bandwidth than pageable memory
+ * obtained with functions such as ::malloc(). Allocating excessive amounts of
+ * pinned memory may degrade system performance, since it reduces the amount
+ * of memory available to the system for paging. As a result, this function is
+ * best used sparingly to allocate staging areas for data exchange between host
+ * and device.
+ *
+ * The \p flags parameter enables different options to be specified that affect
+ * the allocation, as follows.
+ * - ::cudaHostAllocDefault: This flag's value is defined to be 0 and causes
+ * ::cudaHostAlloc() to emulate ::cudaMallocHost().
+ * - ::cudaHostAllocPortable: The memory returned by this call will be
+ * considered as pinned memory by all CUDA contexts, not just the one that
+ * performed the allocation.
+ * - ::cudaHostAllocMapped: Maps the allocation into the CUDA address space.
+ * The device pointer to the memory may be obtained by calling
+ * ::cudaHostGetDevicePointer().
+ * - ::cudaHostAllocWriteCombined: Allocates the memory as write-combined (WC).
+ * WC memory can be transferred across the PCI Express bus more quickly on some
+ * system configurations, but cannot be read efficiently by most CPUs.  WC
+ * memory is a good option for buffers that will be written by the CPU and read
+ * by the device via mapped pinned memory or host->device transfers.
+ *
+ * All of these flags are orthogonal to one another: a developer may allocate
+ * memory that is portable, mapped and/or write-combined with no restrictions.
+ *
+ * In order for the ::cudaHostAllocMapped flag to have any effect, the CUDA context
+ * must support the ::cudaDeviceMapHost flag, which can be checked via
+ * ::cudaGetDeviceFlags(). The ::cudaDeviceMapHost flag is implicitly set for
+ * contexts created via the runtime API.
+ *
+ * The ::cudaHostAllocMapped flag may be specified on CUDA contexts for devices
+ * that do not support mapped pinned memory. The failure is deferred to
+ * ::cudaHostGetDevicePointer() because the memory may be mapped into other
+ * CUDA contexts via the ::cudaHostAllocPortable flag.
+ *
+ * Memory allocated by this function must be freed with ::cudaFreeHost().
+ *
+ * \param pHost - Device pointer to allocated memory
+ * \param size  - Requested allocation size in bytes
+ * \param flags - Requested properties of allocated memory
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaSetDeviceFlags,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost,
+ * ::cudaGetDeviceFlags,
+ * ::cuMemHostAlloc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaHostAlloc(void **pHost, size_t size, unsigned int flags);
+
+/**
+ * \brief Registers an existing host memory range for use by CUDA
+ *
+ * Page-locks the memory range specified by \p ptr and \p size and maps it
+ * for the device(s) as specified by \p flags. This memory range also is added
+ * to the same tracking mechanism as ::cudaHostAlloc() to automatically accelerate
+ * calls to functions such as ::cudaMemcpy(). Since the memory can be accessed 
+ * directly by the device, it can be read or written with much higher bandwidth 
+ * than pageable memory that has not been registered.  Page-locking excessive
+ * amounts of memory may degrade system performance, since it reduces the amount
+ * of memory available to the system for paging. As a result, this function is
+ * best used sparingly to register staging areas for data exchange between
+ * host and device.
+ *
+ * ::cudaHostRegister is supported only on I/O coherent devices that have a non-zero
+ * value for the device attribute ::cudaDevAttrHostRegisterSupported.
+ *
+ * The \p flags parameter enables different options to be specified that
+ * affect the allocation, as follows.
+ *
+ * - ::cudaHostRegisterDefault: On a system with unified virtual addressing,
+ *   the memory will be both mapped and portable.  On a system with no unified
+ *   virtual addressing, the memory will be neither mapped nor portable.
+ *
+ * - ::cudaHostRegisterPortable: The memory returned by this call will be
+ *   considered as pinned memory by all CUDA contexts, not just the one that
+ *   performed the allocation.
+ *
+ * - ::cudaHostRegisterMapped: Maps the allocation into the CUDA address
+ *   space. The device pointer to the memory may be obtained by calling
+ *   ::cudaHostGetDevicePointer().
+ *
+ * - ::cudaHostRegisterIoMemory: The passed memory pointer is treated as
+ *   pointing to some memory-mapped I/O space, e.g. belonging to a
+ *   third-party PCIe device, and it will marked as non cache-coherent and
+ *   contiguous.
+ *
+ * - ::cudaHostRegisterReadOnly: The passed memory pointer is treated as
+ *   pointing to memory that is considered read-only by the device.  On
+ *   platforms without ::cudaDevAttrPageableMemoryAccessUsesHostPageTables, this
+ *   flag is required in order to register memory mapped to the CPU as
+ *   read-only.  Support for the use of this flag can be queried from the device
+ *   attribute cudaDeviceAttrReadOnlyHostRegisterSupported.  Using this flag with
+ *   a current context associated with a device that does not have this attribute
+ *   set will cause ::cudaHostRegister to error with cudaErrorNotSupported.
+ *
+ * All of these flags are orthogonal to one another: a developer may page-lock
+ * memory that is portable or mapped with no restrictions.
+ *
+ * The CUDA context must have been created with the ::cudaMapHost flag in
+ * order for the ::cudaHostRegisterMapped flag to have any effect.
+ *
+ * The ::cudaHostRegisterMapped flag may be specified on CUDA contexts for
+ * devices that do not support mapped pinned memory. The failure is deferred
+ * to ::cudaHostGetDevicePointer() because the memory may be mapped into
+ * other CUDA contexts via the ::cudaHostRegisterPortable flag.
+ *
+ * For devices that have a non-zero value for the device attribute
+ * ::cudaDevAttrCanUseHostPointerForRegisteredMem, the memory
+ * can also be accessed from the device using the host pointer \p ptr.
+ * The device pointer returned by ::cudaHostGetDevicePointer() may or may not
+ * match the original host pointer \p ptr and depends on the devices visible to the
+ * application. If all devices visible to the application have a non-zero value for the
+ * device attribute, the device pointer returned by ::cudaHostGetDevicePointer()
+ * will match the original pointer \p ptr. If any device visible to the application
+ * has a zero value for the device attribute, the device pointer returned by
+ * ::cudaHostGetDevicePointer() will not match the original host pointer \p ptr,
+ * but it will be suitable for use on all devices provided Unified Virtual Addressing
+ * is enabled. In such systems, it is valid to access the memory using either pointer
+ * on devices that have a non-zero value for the device attribute. Note however that
+ * such devices should access the memory using only of the two pointers and not both.
+ *
+ * The memory page-locked by this function must be unregistered with ::cudaHostUnregister().
+ *
+ * \param ptr   - Host pointer to memory to page-lock
+ * \param size  - Size in bytes of the address range to page-lock in bytes
+ * \param flags - Flags for allocation request
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation,
+ * ::cudaErrorHostMemoryAlreadyRegistered,
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaHostUnregister, ::cudaHostGetFlags, ::cudaHostGetDevicePointer,
+ * ::cuMemHostRegister
+ */
+extern __host__ cudaError_t CUDARTAPI cudaHostRegister(void *ptr, size_t size, unsigned int flags);
+
+/**
+ * \brief Unregisters a memory range that was registered with cudaHostRegister
+ *
+ * Unmaps the memory range whose base address is specified by \p ptr, and makes
+ * it pageable again.
+ *
+ * The base address must be the same one specified to ::cudaHostRegister().
+ *
+ * \param ptr - Host pointer to memory to unregister
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorHostMemoryNotRegistered
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaHostUnregister,
+ * ::cuMemHostUnregister
+ */
+extern __host__ cudaError_t CUDARTAPI cudaHostUnregister(void *ptr);
+
+/**
+ * \brief Passes back device pointer of mapped host memory allocated by
+ * cudaHostAlloc or registered by cudaHostRegister
+ *
+ * Passes back the device pointer corresponding to the mapped, pinned host
+ * buffer allocated by ::cudaHostAlloc() or registered by ::cudaHostRegister().
+ *
+ * ::cudaHostGetDevicePointer() will fail if the ::cudaDeviceMapHost flag was
+ * not specified before deferred context creation occurred, or if called on a
+ * device that does not support mapped, pinned memory.
+ *
+ * For devices that have a non-zero value for the device attribute
+ * ::cudaDevAttrCanUseHostPointerForRegisteredMem, the memory
+ * can also be accessed from the device using the host pointer \p pHost.
+ * The device pointer returned by ::cudaHostGetDevicePointer() may or may not
+ * match the original host pointer \p pHost and depends on the devices visible to the
+ * application. If all devices visible to the application have a non-zero value for the
+ * device attribute, the device pointer returned by ::cudaHostGetDevicePointer()
+ * will match the original pointer \p pHost. If any device visible to the application
+ * has a zero value for the device attribute, the device pointer returned by
+ * ::cudaHostGetDevicePointer() will not match the original host pointer \p pHost,
+ * but it will be suitable for use on all devices provided Unified Virtual Addressing
+ * is enabled. In such systems, it is valid to access the memory using either pointer
+ * on devices that have a non-zero value for the device attribute. Note however that
+ * such devices should access the memory using only of the two pointers and not both.
+ *
+ * \p flags provides for future releases.  For now, it must be set to 0.
+ *
+ * \param pDevice - Returned device pointer for mapped memory
+ * \param pHost   - Requested host pointer mapping
+ * \param flags   - Flags for extensions (must be 0 for now)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaSetDeviceFlags, ::cudaHostAlloc,
+ * ::cuMemHostGetDevicePointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaHostGetDevicePointer(void **pDevice, void *pHost, unsigned int flags);
+
+/**
+ * \brief Passes back flags used to allocate pinned host memory allocated by
+ * cudaHostAlloc
+ *
+ * ::cudaHostGetFlags() will fail if the input pointer does not
+ * reside in an address range allocated by ::cudaHostAlloc().
+ *
+ * \param pFlags - Returned flags word
+ * \param pHost - Host pointer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaHostAlloc,
+ * ::cuMemHostGetFlags
+ */
+extern __host__ cudaError_t CUDARTAPI cudaHostGetFlags(unsigned int *pFlags, void *pHost);
+
+/**
+ * \brief Allocates logical 1D, 2D, or 3D memory objects on the device
+ *
+ * Allocates at least \p width * \p height * \p depth bytes of linear memory
+ * on the device and returns a ::cudaPitchedPtr in which \p ptr is a pointer
+ * to the allocated memory. The function may pad the allocation to ensure
+ * hardware alignment requirements are met. The pitch returned in the \p pitch
+ * field of \p pitchedDevPtr is the width in bytes of the allocation.
+ *
+ * The returned ::cudaPitchedPtr contains additional fields \p xsize and
+ * \p ysize, the logical width and height of the allocation, which are
+ * equivalent to the \p width and \p height \p extent parameters provided by
+ * the programmer during allocation.
+ *
+ * For allocations of 2D and 3D objects, it is highly recommended that
+ * programmers perform allocations using ::cudaMalloc3D() or
+ * ::cudaMallocPitch(). Due to alignment restrictions in the hardware, this is
+ * especially true if the application will be performing memory copies
+ * involving 2D or 3D objects (whether linear memory or CUDA arrays).
+ *
+ * \param pitchedDevPtr  - Pointer to allocated pitched device memory
+ * \param extent         - Requested allocation size (\p width field in bytes)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMallocPitch, ::cudaFree, ::cudaMemcpy3D, ::cudaMemset3D,
+ * ::cudaMalloc3DArray, ::cudaMallocArray, ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc, ::make_cudaPitchedPtr, ::make_cudaExtent,
+ * ::cuMemAllocPitch
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMalloc3D(struct cudaPitchedPtr* pitchedDevPtr, struct cudaExtent extent);
+
+/**
+ * \brief Allocate an array on the device
+ *
+ * Allocates a CUDA array according to the ::cudaChannelFormatDesc structure
+ * \p desc and returns a handle to the new CUDA array in \p *array.
+ *
+ * The ::cudaChannelFormatDesc is defined as:
+ * \code
+    struct cudaChannelFormatDesc {
+        int x, y, z, w;
+        enum cudaChannelFormatKind f;
+    };
+    \endcode
+ * where ::cudaChannelFormatKind is one of ::cudaChannelFormatKindSigned,
+ * ::cudaChannelFormatKindUnsigned, or ::cudaChannelFormatKindFloat.
+ *
+ * ::cudaMalloc3DArray() can allocate the following:
+ *
+ * - A 1D array is allocated if the height and depth extents are both zero.
+ * - A 2D array is allocated if only the depth extent is zero.
+ * - A 3D array is allocated if all three extents are non-zero.
+ * - A 1D layered CUDA array is allocated if only the height extent is zero and
+ * the cudaArrayLayered flag is set. Each layer is a 1D array. The number of layers is 
+ * determined by the depth extent.
+ * - A 2D layered CUDA array is allocated if all three extents are non-zero and 
+ * the cudaArrayLayered flag is set. Each layer is a 2D array. The number of layers is 
+ * determined by the depth extent.
+ * - A cubemap CUDA array is allocated if all three extents are non-zero and the
+ * cudaArrayCubemap flag is set. Width must be equal to height, and depth must be six. A cubemap is
+ * a special type of 2D layered CUDA array, where the six layers represent the six faces of a cube. 
+ * The order of the six layers in memory is the same as that listed in ::cudaGraphicsCubeFace.
+ * - A cubemap layered CUDA array is allocated if all three extents are non-zero, and both,
+ * cudaArrayCubemap and cudaArrayLayered flags are set. Width must be equal to height, and depth must be 
+ * a multiple of six. A cubemap layered CUDA array is a special type of 2D layered CUDA array that consists 
+ * of a collection of cubemaps. The first six layers represent the first cubemap, the next six layers form 
+ * the second cubemap, and so on.
+ *
+ *
+ * The \p flags parameter enables different options to be specified that affect
+ * the allocation, as follows.
+ * - ::cudaArrayDefault: This flag's value is defined to be 0 and provides default array allocation
+ * - ::cudaArrayLayered: Allocates a layered CUDA array, with the depth extent indicating the number of layers
+ * - ::cudaArrayCubemap: Allocates a cubemap CUDA array. Width must be equal to height, and depth must be six.
+ *   If the cudaArrayLayered flag is also set, depth must be a multiple of six.
+ * - ::cudaArraySurfaceLoadStore: Allocates a CUDA array that could be read from or written to using a surface
+ *   reference.
+ * - ::cudaArrayTextureGather: This flag indicates that texture gather operations will be performed on the CUDA 
+ *   array. Texture gather can only be performed on 2D CUDA arrays.
+ * - ::cudaArraySparse: Allocates a CUDA array without physical backing memory. The subregions within this sparse array 
+ *   can later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. This flag can only be used for 
+ *   creating 2D, 3D or 2D layered sparse CUDA arrays. The physical backing memory must be allocated via ::cuMemCreate.
+ * - ::cudaArrayDeferredMapping: Allocates a CUDA array without physical backing memory. The entire array can
+ *   later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. The physical backing memory must be allocated
+ *   via ::cuMemCreate.
+ *
+ * The width, height and depth extents must meet certain size requirements as listed in the following table.
+ * All values are specified in elements.
+ *
+ * Note that 2D CUDA arrays have different size requirements if the ::cudaArrayTextureGather flag is set. In that
+ * case, the valid range for (width, height, depth) is ((1,maxTexture2DGather[0]), (1,maxTexture2DGather[1]), 0).
+ *
+ * \xmlonly
+ * <table outputclass="xmlonly">
+ * <tgroup cols="3" colsep="1" rowsep="1">
+ * <colspec colname="c1" colwidth="1.0*"/>
+ * <colspec colname="c2" colwidth="3.0*"/>
+ * <colspec colname="c3" colwidth="3.0*"/>
+ * <thead>
+ * <row>
+ * <entry>CUDA array type</entry>
+ * <entry>Valid extents that must always be met {(width range in elements),
+ * (height range), (depth range)}</entry>
+ * <entry>Valid extents with cudaArraySurfaceLoadStore set {(width range in
+ * elements), (height range), (depth range)}</entry>
+ * </row>
+ * </thead>
+ * <tbody>
+ * <row>
+ * <entry>1D</entry>
+ * <entry>{ (1,maxTexture1D), 0, 0 }</entry>
+ * <entry>{ (1,maxSurface1D), 0, 0 }</entry>
+ * </row>
+ * <row>
+ * <entry>2D</entry>
+ * <entry>{ (1,maxTexture2D[0]), (1,maxTexture2D[1]), 0 }</entry>
+ * <entry>{ (1,maxSurface2D[0]), (1,maxSurface2D[1]), 0 }</entry>
+ * </row>
+ * <row>
+ * <entry>3D</entry>
+ * <entry>{ (1,maxTexture3D[0]), (1,maxTexture3D[1]), (1,maxTexture3D[2]) }
+ * OR { (1,maxTexture3DAlt[0]), (1,maxTexture3DAlt[1]),
+ * (1,maxTexture3DAlt[2]) }</entry>
+ * <entry>{ (1,maxSurface3D[0]), (1,maxSurface3D[1]), (1,maxSurface3D[2]) }</entry>
+ * </row>
+ * <row>
+ * <entry>1D Layered</entry>
+ * <entry>{ (1,maxTexture1DLayered[0]), 0, (1,maxTexture1DLayered[1]) }</entry>
+ * <entry>{ (1,maxSurface1DLayered[0]), 0, (1,maxSurface1DLayered[1]) }</entry>
+ * </row>
+ * <row>
+ * <entry>2D Layered</entry>
+ * <entry>{ (1,maxTexture2DLayered[0]), (1,maxTexture2DLayered[1]),
+ * (1,maxTexture2DLayered[2]) }</entry>
+ * <entry>{ (1,maxSurface2DLayered[0]), (1,maxSurface2DLayered[1]),
+ * (1,maxSurface2DLayered[2]) }</entry>
+ * </row>
+ * <row>
+ * <entry>Cubemap</entry>
+ * <entry>{ (1,maxTextureCubemap), (1,maxTextureCubemap), 6 }</entry>
+ * <entry>{ (1,maxSurfaceCubemap), (1,maxSurfaceCubemap), 6 }</entry>
+ * </row>
+ * <row>
+ * <entry>Cubemap Layered</entry>
+ * <entry>{ (1,maxTextureCubemapLayered[0]), (1,maxTextureCubemapLayered[0]),
+ * (1,maxTextureCubemapLayered[1]) }</entry>
+ * <entry>{ (1,maxSurfaceCubemapLayered[0]), (1,maxSurfaceCubemapLayered[0]),
+ * (1,maxSurfaceCubemapLayered[1]) }</entry>
+ * </row>
+ * </tbody>
+ * </tgroup>
+ * </table>
+ * \endxmlonly
+ *
+ * \param array  - Pointer to allocated array in device memory
+ * \param desc   - Requested channel format
+ * \param extent - Requested allocation size (\p width field in elements)
+ * \param flags  - Flags for extensions
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc3D, ::cudaMalloc, ::cudaMallocPitch, ::cudaFree,
+ * ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::make_cudaExtent,
+ * ::cuArray3DCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMalloc3DArray(cudaArray_t *array, const struct cudaChannelFormatDesc* desc, struct cudaExtent extent, unsigned int flags __dv(0));
+
+/**
+ * \brief Allocate a mipmapped array on the device
+ *
+ * Allocates a CUDA mipmapped array according to the ::cudaChannelFormatDesc structure
+ * \p desc and returns a handle to the new CUDA mipmapped array in \p *mipmappedArray.
+ * \p numLevels specifies the number of mipmap levels to be allocated. This value is
+ * clamped to the range [1, 1 + floor(log2(max(width, height, depth)))].
+ *
+ * The ::cudaChannelFormatDesc is defined as:
+ * \code
+    struct cudaChannelFormatDesc {
+        int x, y, z, w;
+        enum cudaChannelFormatKind f;
+    };
+    \endcode
+ * where ::cudaChannelFormatKind is one of ::cudaChannelFormatKindSigned,
+ * ::cudaChannelFormatKindUnsigned, or ::cudaChannelFormatKindFloat.
+ *
+ * ::cudaMallocMipmappedArray() can allocate the following:
+ *
+ * - A 1D mipmapped array is allocated if the height and depth extents are both zero.
+ * - A 2D mipmapped array is allocated if only the depth extent is zero.
+ * - A 3D mipmapped array is allocated if all three extents are non-zero.
+ * - A 1D layered CUDA mipmapped array is allocated if only the height extent is zero and
+ * the cudaArrayLayered flag is set. Each layer is a 1D mipmapped array. The number of layers is 
+ * determined by the depth extent.
+ * - A 2D layered CUDA mipmapped array is allocated if all three extents are non-zero and 
+ * the cudaArrayLayered flag is set. Each layer is a 2D mipmapped array. The number of layers is 
+ * determined by the depth extent.
+ * - A cubemap CUDA mipmapped array is allocated if all three extents are non-zero and the
+ * cudaArrayCubemap flag is set. Width must be equal to height, and depth must be six.
+ * The order of the six layers in memory is the same as that listed in ::cudaGraphicsCubeFace.
+ * - A cubemap layered CUDA mipmapped array is allocated if all three extents are non-zero, and both,
+ * cudaArrayCubemap and cudaArrayLayered flags are set. Width must be equal to height, and depth must be 
+ * a multiple of six. A cubemap layered CUDA mipmapped array is a special type of 2D layered CUDA mipmapped
+ * array that consists of a collection of cubemap mipmapped arrays. The first six layers represent the 
+ * first cubemap mipmapped array, the next six layers form the second cubemap mipmapped array, and so on.
+ *
+ *
+ * The \p flags parameter enables different options to be specified that affect
+ * the allocation, as follows.
+ * - ::cudaArrayDefault: This flag's value is defined to be 0 and provides default mipmapped array allocation
+ * - ::cudaArrayLayered: Allocates a layered CUDA mipmapped array, with the depth extent indicating the number of layers
+ * - ::cudaArrayCubemap: Allocates a cubemap CUDA mipmapped array. Width must be equal to height, and depth must be six.
+ *   If the cudaArrayLayered flag is also set, depth must be a multiple of six.
+ * - ::cudaArraySurfaceLoadStore: This flag indicates that individual mipmap levels of the CUDA mipmapped array 
+ *   will be read from or written to using a surface reference.
+ * - ::cudaArrayTextureGather: This flag indicates that texture gather operations will be performed on the CUDA 
+ *   array. Texture gather can only be performed on 2D CUDA mipmapped arrays, and the gather operations are
+ *   performed only on the most detailed mipmap level.
+ * - ::cudaArraySparse: Allocates a CUDA mipmapped array without physical backing memory. The subregions within this sparse array
+ *   can later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. This flag can only be used for creating 
+ *   2D, 3D or 2D layered sparse CUDA mipmapped arrays. The physical backing memory must be allocated via ::cuMemCreate.
+ * - ::cudaArrayDeferredMapping: Allocates a CUDA mipmapped array without physical backing memory. The entire array can
+ *   later be mapped onto a physical memory allocation by calling ::cuMemMapArrayAsync. The physical backing memory must be allocated
+ *   via ::cuMemCreate.
+ *
+ * The width, height and depth extents must meet certain size requirements as listed in the following table.
+ * All values are specified in elements.
+ *
+ * \xmlonly
+ * <table outputclass="xmlonly">
+ * <tgroup cols="3" colsep="1" rowsep="1">
+ * <colspec colname="c1" colwidth="1.0*"/>
+ * <colspec colname="c2" colwidth="3.0*"/>
+ * <colspec colname="c3" colwidth="3.0*"/>
+ * <thead>
+ * <row>
+ * <entry>CUDA array type</entry>
+ * <entry>Valid extents that must always be met {(width range in elements),
+ * (height range), (depth range)}</entry>
+ * <entry>Valid extents with cudaArraySurfaceLoadStore set {(width range in
+ * elements), (height range), (depth range)}</entry>
+ * </row>
+ * </thead>
+ * <tbody>
+ * <row>
+ * <entry>1D</entry>
+ * <entry>{ (1,maxTexture1DMipmap), 0, 0 }</entry>
+ * <entry>{ (1,maxSurface1D), 0, 0 }</entry>
+ * </row>
+ * <row>
+ * <entry>2D</entry>
+ * <entry>{ (1,maxTexture2DMipmap[0]), (1,maxTexture2DMipmap[1]), 0 }</entry>
+ * <entry>{ (1,maxSurface2D[0]), (1,maxSurface2D[1]), 0 }</entry>
+ * </row>
+ * <row>
+ * <entry>3D</entry>
+ * <entry>{ (1,maxTexture3D[0]), (1,maxTexture3D[1]), (1,maxTexture3D[2]) }
+ * OR { (1,maxTexture3DAlt[0]), (1,maxTexture3DAlt[1]),
+ * (1,maxTexture3DAlt[2]) }</entry>
+ * <entry>{ (1,maxSurface3D[0]), (1,maxSurface3D[1]), (1,maxSurface3D[2]) }</entry>
+ * </row>
+ * <row>
+ * <entry>1D Layered</entry>
+ * <entry>{ (1,maxTexture1DLayered[0]), 0, (1,maxTexture1DLayered[1]) }</entry>
+ * <entry>{ (1,maxSurface1DLayered[0]), 0, (1,maxSurface1DLayered[1]) }</entry>
+ * </row>
+ * <row>
+ * <entry>2D Layered</entry>
+ * <entry>{ (1,maxTexture2DLayered[0]), (1,maxTexture2DLayered[1]),
+ * (1,maxTexture2DLayered[2]) }</entry>
+ * <entry>{ (1,maxSurface2DLayered[0]), (1,maxSurface2DLayered[1]),
+ * (1,maxSurface2DLayered[2]) }</entry>
+ * </row>
+ * <row>
+ * <entry>Cubemap</entry>
+ * <entry>{ (1,maxTextureCubemap), (1,maxTextureCubemap), 6 }</entry>
+ * <entry>{ (1,maxSurfaceCubemap), (1,maxSurfaceCubemap), 6 }</entry>
+ * </row>
+ * <row>
+ * <entry>Cubemap Layered</entry>
+ * <entry>{ (1,maxTextureCubemapLayered[0]), (1,maxTextureCubemapLayered[0]),
+ * (1,maxTextureCubemapLayered[1]) }</entry>
+ * <entry>{ (1,maxSurfaceCubemapLayered[0]), (1,maxSurfaceCubemapLayered[0]),
+ * (1,maxSurfaceCubemapLayered[1]) }</entry>
+ * </row>
+ * </tbody>
+ * </tgroup>
+ * </table>
+ * \endxmlonly
+ *
+ * \param mipmappedArray  - Pointer to allocated mipmapped array in device memory
+ * \param desc            - Requested channel format
+ * \param extent          - Requested allocation size (\p width field in elements)
+ * \param numLevels       - Number of mipmap levels to allocate
+ * \param flags           - Flags for extensions
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc3D, ::cudaMalloc, ::cudaMallocPitch, ::cudaFree,
+ * ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::make_cudaExtent,
+ * ::cuMipmappedArrayCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocMipmappedArray(cudaMipmappedArray_t *mipmappedArray, const struct cudaChannelFormatDesc* desc, struct cudaExtent extent, unsigned int numLevels, unsigned int flags __dv(0));
+
+/**
+ * \brief Gets a mipmap level of a CUDA mipmapped array
+ *
+ * Returns in \p *levelArray a CUDA array that represents a single mipmap level
+ * of the CUDA mipmapped array \p mipmappedArray.
+ *
+ * If \p level is greater than the maximum number of levels in this mipmapped array,
+ * ::cudaErrorInvalidValue is returned.
+ *
+ * If \p mipmappedArray is NULL,
+ * ::cudaErrorInvalidResourceHandle is returned.
+ *
+ * \param levelArray     - Returned mipmap level CUDA array
+ * \param mipmappedArray - CUDA mipmapped array
+ * \param level          - Mipmap level
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc3D, ::cudaMalloc, ::cudaMallocPitch, ::cudaFree,
+ * ::cudaFreeArray,
+ * \ref ::cudaMallocHost(void**, size_t) "cudaMallocHost (C API)",
+ * ::cudaFreeHost, ::cudaHostAlloc,
+ * ::make_cudaExtent,
+ * ::cuMipmappedArrayGetLevel
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetMipmappedArrayLevel(cudaArray_t *levelArray, cudaMipmappedArray_const_t mipmappedArray, unsigned int level);
+
+/**
+ * \brief Copies data between 3D objects
+ *
+\code
+struct cudaExtent {
+  size_t width;
+  size_t height;
+  size_t depth;
+};
+struct cudaExtent make_cudaExtent(size_t w, size_t h, size_t d);
+
+struct cudaPos {
+  size_t x;
+  size_t y;
+  size_t z;
+};
+struct cudaPos make_cudaPos(size_t x, size_t y, size_t z);
+
+struct cudaMemcpy3DParms {
+  cudaArray_t           srcArray;
+  struct cudaPos        srcPos;
+  struct cudaPitchedPtr srcPtr;
+  cudaArray_t           dstArray;
+  struct cudaPos        dstPos;
+  struct cudaPitchedPtr dstPtr;
+  struct cudaExtent     extent;
+  enum cudaMemcpyKind   kind;
+};
+\endcode
+ *
+ * ::cudaMemcpy3D() copies data betwen two 3D objects. The source and
+ * destination objects may be in either host memory, device memory, or a CUDA
+ * array. The source, destination, extent, and kind of copy performed is
+ * specified by the ::cudaMemcpy3DParms struct which should be initialized to
+ * zero before use:
+\code
+cudaMemcpy3DParms myParms = {0};
+\endcode
+ *
+ * The struct passed to ::cudaMemcpy3D() must specify one of \p srcArray or
+ * \p srcPtr and one of \p dstArray or \p dstPtr. Passing more than one
+ * non-zero source or destination will cause ::cudaMemcpy3D() to return an
+ * error.
+ *
+ * The \p srcPos and \p dstPos fields are optional offsets into the source and
+ * destination objects and are defined in units of each object's elements. The
+ * element for a host or device pointer is assumed to be <b>unsigned char</b>.
+ *
+ * The \p extent field defines the dimensions of the transferred area in
+ * elements. If a CUDA array is participating in the copy, the extent is
+ * defined in terms of that array's elements. If no CUDA array is
+ * participating in the copy then the extents are defined in elements of
+ * <b>unsigned char</b>.
+ *
+ * The \p kind field defines the direction of the copy. It must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * For ::cudaMemcpyHostToHost or ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost
+ * passed as kind and cudaArray type passed as source or destination, if the kind
+ * implies cudaArray type to be present on the host, ::cudaMemcpy3D() will
+ * disregard that implication and silently correct the kind based on the fact that
+ * cudaArray type can only be present on the device.
+ *
+ * If the source and destination are both arrays, ::cudaMemcpy3D() will return
+ * an error if they do not have the same element size.
+ *
+ * The source and destination object may not overlap. If overlapping source
+ * and destination objects are specified, undefined behavior will result.
+ *
+ * The source object must entirely contain the region defined by \p srcPos
+ * and \p extent. The destination object must entirely contain the region
+ * defined by \p dstPos and \p extent.
+ *
+ * ::cudaMemcpy3D() returns an error if the pitch of \p srcPtr or \p dstPtr
+ * exceeds the maximum allowed. The pitch of a ::cudaPitchedPtr allocated
+ * with ::cudaMalloc3D() will always be valid.
+ *
+ * \param p - 3D memory copy parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc3D, ::cudaMalloc3DArray, ::cudaMemset3D, ::cudaMemcpy3DAsync,
+ * ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::make_cudaExtent, ::make_cudaPos,
+ * ::cuMemcpy3D
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy3D(const struct cudaMemcpy3DParms *p);
+
+/**
+ * \brief Copies memory between devices
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p p.  See the definition of the ::cudaMemcpy3DPeerParms structure
+ * for documentation of its parameters.
+ *
+ * Note that this function is synchronous with respect to the host only if
+ * the source or destination of the transfer is host memory.  Note also 
+ * that this copy is serialized with respect to all pending and future 
+ * asynchronous work in to the current device, the copy's source device,
+ * and the copy's destination device (use ::cudaMemcpy3DPeerAsync to avoid 
+ * this synchronization).
+ *
+ * \param p - Parameters for the memory copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyPeer, ::cudaMemcpyAsync, ::cudaMemcpyPeerAsync,
+ * ::cudaMemcpy3DPeerAsync,
+ * ::cuMemcpy3DPeer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy3DPeer(const struct cudaMemcpy3DPeerParms *p);
+
+/**
+ * \brief Copies data between 3D objects
+ *
+\code
+struct cudaExtent {
+  size_t width;
+  size_t height;
+  size_t depth;
+};
+struct cudaExtent make_cudaExtent(size_t w, size_t h, size_t d);
+
+struct cudaPos {
+  size_t x;
+  size_t y;
+  size_t z;
+};
+struct cudaPos make_cudaPos(size_t x, size_t y, size_t z);
+
+struct cudaMemcpy3DParms {
+  cudaArray_t           srcArray;
+  struct cudaPos        srcPos;
+  struct cudaPitchedPtr srcPtr;
+  cudaArray_t           dstArray;
+  struct cudaPos        dstPos;
+  struct cudaPitchedPtr dstPtr;
+  struct cudaExtent     extent;
+  enum cudaMemcpyKind   kind;
+};
+\endcode
+ *
+ * ::cudaMemcpy3DAsync() copies data betwen two 3D objects. The source and
+ * destination objects may be in either host memory, device memory, or a CUDA
+ * array. The source, destination, extent, and kind of copy performed is
+ * specified by the ::cudaMemcpy3DParms struct which should be initialized to
+ * zero before use:
+\code
+cudaMemcpy3DParms myParms = {0};
+\endcode
+ *
+ * The struct passed to ::cudaMemcpy3DAsync() must specify one of \p srcArray
+ * or \p srcPtr and one of \p dstArray or \p dstPtr. Passing more than one
+ * non-zero source or destination will cause ::cudaMemcpy3DAsync() to return an
+ * error.
+ *
+ * The \p srcPos and \p dstPos fields are optional offsets into the source and
+ * destination objects and are defined in units of each object's elements. The
+ * element for a host or device pointer is assumed to be <b>unsigned char</b>.
+ * For CUDA arrays, positions must be in the range [0, 2048) for any
+ * dimension.
+ *
+ * The \p extent field defines the dimensions of the transferred area in
+ * elements. If a CUDA array is participating in the copy, the extent is
+ * defined in terms of that array's elements. If no CUDA array is
+ * participating in the copy then the extents are defined in elements of
+ * <b>unsigned char</b>.
+ *
+ * The \p kind field defines the direction of the copy. It must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * For ::cudaMemcpyHostToHost or ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost
+ * passed as kind and cudaArray type passed as source or destination, if the kind
+ * implies cudaArray type to be present on the host, ::cudaMemcpy3DAsync() will
+ * disregard that implication and silently correct the kind based on the fact that
+ * cudaArray type can only be present on the device.
+ *
+ * If the source and destination are both arrays, ::cudaMemcpy3DAsync() will
+ * return an error if they do not have the same element size.
+ *
+ * The source and destination object may not overlap. If overlapping source
+ * and destination objects are specified, undefined behavior will result.
+ *
+ * The source object must lie entirely within the region defined by \p srcPos
+ * and \p extent. The destination object must lie entirely within the region
+ * defined by \p dstPos and \p extent.
+ *
+ * ::cudaMemcpy3DAsync() returns an error if the pitch of \p srcPtr or
+ * \p dstPtr exceeds the maximum allowed. The pitch of a
+ * ::cudaPitchedPtr allocated with ::cudaMalloc3D() will always be valid.
+ *
+ * ::cudaMemcpy3DAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If
+ * \p kind is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and \p stream
+ * is non-zero, the copy may overlap with operations in other streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param p      - 3D memory copy parameters
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMalloc3D, ::cudaMalloc3DArray, ::cudaMemset3D, ::cudaMemcpy3D,
+ * ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, :::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::make_cudaExtent, ::make_cudaPos,
+ * ::cuMemcpy3DAsync
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy3DAsync(const struct cudaMemcpy3DParms *p, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies memory between devices asynchronously.
+ *
+ * Perform a 3D memory copy according to the parameters specified in
+ * \p p.  See the definition of the ::cudaMemcpy3DPeerParms structure
+ * for documentation of its parameters.
+ *
+ * \param p      - Parameters for the memory copy
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyPeer, ::cudaMemcpyAsync, ::cudaMemcpyPeerAsync,
+ * ::cudaMemcpy3DPeerAsync,
+ * ::cuMemcpy3DPeerAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy3DPeerAsync(const struct cudaMemcpy3DPeerParms *p, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Gets free and total device memory
+ *
+ * Returns in \p *total the total amount of memory available to the the current context.
+ * Returns in \p *free the amount of memory on the device that is free according to the OS.
+ * CUDA is not guaranteed to be able to allocate all of the memory that the OS reports as free.
+ * In a multi-tenet situation, free estimate returned is prone to race condition where
+ * a new allocation/free done by a different process or a different thread in the same
+ * process between the time when free memory was estimated and reported, will result in
+ * deviation in free value reported and actual free memory.
+ *
+ * The integrated GPU on Tegra shares memory with CPU and other component
+ * of the SoC. The free and total values returned by the API excludes
+ * the SWAP memory space maintained by the OS on some platforms.
+ * The OS may move some of the memory pages into swap area as the GPU or
+ * CPU allocate or access memory. See Tegra app note on how to calculate
+ * total and free memory on Tegra.
+ *
+ * \param free  - Returned free memory in bytes
+ * \param total - Returned total memory in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorLaunchFailure
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuMemGetInfo
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemGetInfo(size_t *free, size_t *total);
+
+/**
+ * \brief Gets info about the specified cudaArray
+ * 
+ * Returns in \p *desc, \p *extent and \p *flags respectively, the type, shape 
+ * and flags of \p array.
+ *
+ * Any of \p *desc, \p *extent and \p *flags may be specified as NULL.
+ *
+ * \param desc   - Returned array type
+ * \param extent - Returned array shape. 2D arrays will have depth of zero
+ * \param flags  - Returned array flags
+ * \param array  - The ::cudaArray to get info for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuArrayGetDescriptor,
+ * ::cuArray3DGetDescriptor
+ */
+extern __host__ cudaError_t CUDARTAPI cudaArrayGetInfo(struct cudaChannelFormatDesc *desc, struct cudaExtent *extent, unsigned int *flags, cudaArray_t array);
+
+/**
+ * \brief Gets a CUDA array plane from a CUDA array
+ *
+ * Returns in \p pPlaneArray a CUDA array that represents a single format plane
+ * of the CUDA array \p hArray.
+ *
+ * If \p planeIdx is greater than the maximum number of planes in this array or if the array does
+ * not have a multi-planar format e.g: ::cudaChannelFormatKindNV12, then ::cudaErrorInvalidValue is returned.
+ *
+ * Note that if the \p hArray has format ::cudaChannelFormatKindNV12, then passing in 0 for \p planeIdx returns
+ * a CUDA array of the same size as \p hArray but with one 8-bit channel and ::cudaChannelFormatKindUnsigned as its format kind.
+ * If 1 is passed for \p planeIdx, then the returned CUDA array has half the height and width
+ * of \p hArray with two 8-bit channels and ::cudaChannelFormatKindUnsigned as its format kind.
+ *
+ * \param pPlaneArray   - Returned CUDA array referenced by the \p planeIdx
+ * \param hArray        - CUDA array
+ * \param planeIdx      - Plane index
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ *
+ * \sa
+ * ::cuArrayGetPlane
+ */
+extern __host__ cudaError_t CUDARTAPI cudaArrayGetPlane(cudaArray_t *pPlaneArray, cudaArray_t hArray, unsigned int planeIdx);
+
+/**
+ * \brief Returns the memory requirements of a CUDA array
+ *
+ * Returns the memory requirements of a CUDA array in \p memoryRequirements
+ * If the CUDA array is not allocated with flag ::cudaArrayDeferredMapping
+ * ::cudaErrorInvalidValue will be returned.
+ *
+ * The returned value in ::cudaArrayMemoryRequirements::size
+ * represents the total size of the CUDA array.
+ * The returned value in ::cudaArrayMemoryRequirements::alignment
+ * represents the alignment necessary for mapping the CUDA array.
+ *
+ * \return
+ * ::cudaSuccess
+ * ::cudaErrorInvalidValue
+ *
+ * \param[out] memoryRequirements - Pointer to ::cudaArrayMemoryRequirements
+ * \param[in] array - CUDA array to get the memory requirements of
+ * \param[in] device - Device to get the memory requirements for
+ * \sa ::cudaMipmappedArrayGetMemoryRequirements
+ */
+extern __host__ cudaError_t CUDARTAPI cudaArrayGetMemoryRequirements(struct cudaArrayMemoryRequirements  *memoryRequirements, cudaArray_t array, int device);
+
+/**
+ * \brief Returns the memory requirements of a CUDA mipmapped array
+ *
+ * Returns the memory requirements of a CUDA mipmapped array in \p memoryRequirements
+ * If the CUDA mipmapped array is not allocated with flag ::cudaArrayDeferredMapping
+ * ::cudaErrorInvalidValue will be returned.
+ *
+ * The returned value in ::cudaArrayMemoryRequirements::size
+ * represents the total size of the CUDA mipmapped array.
+ * The returned value in ::cudaArrayMemoryRequirements::alignment
+ * represents the alignment necessary for mapping the CUDA mipmapped
+ * array.
+ *
+ * \return
+ * ::cudaSuccess
+ * ::cudaErrorInvalidValue
+ *
+ * \param[out] memoryRequirements - Pointer to ::cudaArrayMemoryRequirements
+ * \param[in] mipmap - CUDA mipmapped array to get the memory requirements of
+ * \param[in] device - Device to get the memory requirements for
+ * \sa ::cudaArrayGetMemoryRequirements
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMipmappedArrayGetMemoryRequirements(struct cudaArrayMemoryRequirements *memoryRequirements, cudaMipmappedArray_t mipmap, int device);
+
+/**
+ * \brief Returns the layout properties of a sparse CUDA array
+ *
+ * Returns the layout properties of a sparse CUDA array in \p sparseProperties.
+ * If the CUDA array is not allocated with flag ::cudaArraySparse
+ * ::cudaErrorInvalidValue will be returned.
+ *
+ * If the returned value in ::cudaArraySparseProperties::flags contains ::cudaArraySparsePropertiesSingleMipTail,
+ * then ::cudaArraySparseProperties::miptailSize represents the total size of the array. Otherwise, it will be zero.
+ * Also, the returned value in ::cudaArraySparseProperties::miptailFirstLevel is always zero.
+ * Note that the \p array must have been allocated using ::cudaMallocArray or ::cudaMalloc3DArray. For CUDA arrays obtained
+ * using ::cudaMipmappedArrayGetLevel, ::cudaErrorInvalidValue will be returned. Instead, ::cudaMipmappedArrayGetSparseProperties
+ * must be used to obtain the sparse properties of the entire CUDA mipmapped array to which \p array belongs to.
+ *
+ * \return
+ * ::cudaSuccess
+ * ::cudaErrorInvalidValue
+ *
+ * \param[out] sparseProperties - Pointer to return the ::cudaArraySparseProperties
+ * \param[in] array             - The CUDA array to get the sparse properties of 
+ *
+ * \sa
+ * ::cudaMipmappedArrayGetSparseProperties,
+ * ::cuMemMapArrayAsync
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaArrayGetSparseProperties(struct cudaArraySparseProperties *sparseProperties, cudaArray_t array);
+#endif
+
+/**
+ * \brief Returns the layout properties of a sparse CUDA mipmapped array
+ *
+ * Returns the sparse array layout properties in \p sparseProperties.
+ * If the CUDA mipmapped array is not allocated with flag ::cudaArraySparse
+ * ::cudaErrorInvalidValue will be returned.
+ *
+ * For non-layered CUDA mipmapped arrays, ::cudaArraySparseProperties::miptailSize returns the
+ * size of the mip tail region. The mip tail region includes all mip levels whose width, height or depth
+ * is less than that of the tile.
+ * For layered CUDA mipmapped arrays, if ::cudaArraySparseProperties::flags contains ::cudaArraySparsePropertiesSingleMipTail,
+ * then ::cudaArraySparseProperties::miptailSize specifies the size of the mip tail of all layers combined.
+ * Otherwise, ::cudaArraySparseProperties::miptailSize specifies mip tail size per layer.
+ * The returned value of ::cudaArraySparseProperties::miptailFirstLevel is valid only if ::cudaArraySparseProperties::miptailSize is non-zero.
+ *
+ * \return
+ * ::cudaSuccess
+ * ::cudaErrorInvalidValue
+ *
+ * \param[out] sparseProperties - Pointer to return ::cudaArraySparseProperties
+ * \param[in] mipmap            - The CUDA mipmapped array to get the sparse properties of
+ *
+ * \sa
+ * ::cudaArrayGetSparseProperties,
+ * ::cuMemMapArrayAsync
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaMipmappedArrayGetSparseProperties(struct cudaArraySparseProperties *sparseProperties, cudaMipmappedArray_t mipmap);
+#endif
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src to the
+ * memory area pointed to by \p dst, where \p kind specifies the direction
+ * of the copy, and must be one of ::cudaMemcpyHostToHost,
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing. Calling
+ * ::cudaMemcpy() with dst and src pointers that do not match the direction of
+ * the copy results in an undefined behavior.
+ *
+ * \param dst   - Destination memory address
+ * \param src   - Source memory address
+ * \param count - Size in bytes to copy
+ * \param kind  - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \note_sync
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyDtoH,
+ * ::cuMemcpyHtoD,
+ * ::cuMemcpyDtoD,
+ * ::cuMemcpy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies memory between two devices
+ *
+ * Copies memory from one device to memory on another device.  \p dst is the 
+ * base device pointer of the destination memory and \p dstDevice is the 
+ * destination device.  \p src is the base device pointer of the source memory 
+ * and \p srcDevice is the source device.  \p count specifies the number of bytes 
+ * to copy.
+ *
+ * Note that this function is asynchronous with respect to the host, but 
+ * serialized with respect all pending and future asynchronous work in to the 
+ * current device, \p srcDevice, and \p dstDevice (use ::cudaMemcpyPeerAsync 
+ * to avoid this synchronization).
+ *
+ * \param dst       - Destination device pointer
+ * \param dstDevice - Destination device
+ * \param src       - Source device pointer
+ * \param srcDevice - Source device
+ * \param count     - Size of memory copy in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyAsync, ::cudaMemcpyPeerAsync,
+ * ::cudaMemcpy3DPeerAsync,
+ * ::cuMemcpyPeer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyPeer(void *dst, int dstDevice, const void *src, int srcDevice, size_t count);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the memory
+ * area pointed to by \p src to the memory area pointed to by \p dst, where
+ * \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing. \p dpitch and
+ * \p spitch are the widths in memory in bytes of the 2D arrays pointed to by
+ * \p dst and \p src, including any padding added to the end of each row. The
+ * memory areas may not overlap. \p width must not exceed either \p dpitch or
+ * \p spitch. Calling ::cudaMemcpy2D() with \p dst and \p src pointers that do
+ * not match the direction of the copy results in an undefined behavior.
+ * ::cudaMemcpy2D() returns an error if \p dpitch or \p spitch exceeds
+ * the maximum allowed.
+ *
+ * \param dst    - Destination memory address
+ * \param dpitch - Pitch of destination memory
+ * \param src    - Source memory address
+ * \param spitch - Pitch of source memory
+ * \param width  - Width of matrix transfer (columns in bytes)
+ * \param height - Height of matrix transfer (rows)
+ * \param kind   - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2D,
+ * ::cuMemcpy2DUnaligned
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2D(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the memory
+ * area pointed to by \p src to the CUDA array \p dst starting at
+ * \p hOffset rows and \p wOffset bytes from the upper left corner,
+ * where \p kind specifies the direction of the copy, and must be one
+ * of ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * \p spitch is the width in memory in bytes of the 2D array pointed to by
+ * \p src, including any padding added to the end of each row. \p wOffset +
+ * \p width must not exceed the width of the CUDA array \p dst. \p width must
+ * not exceed \p spitch. ::cudaMemcpy2DToArray() returns an error if \p spitch
+ * exceeds the maximum allowed.
+ *
+ * \param dst     - Destination memory address
+ * \param wOffset - Destination starting X offset (columns in bytes)
+ * \param hOffset - Destination starting Y offset (rows)
+ * \param src     - Source memory address
+ * \param spitch  - Pitch of source memory
+ * \param width   - Width of matrix transfer (columns in bytes)
+ * \param height  - Height of matrix transfer (rows)
+ * \param kind    - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2D,
+ * ::cuMemcpy2DUnaligned
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the CUDA
+ * array \p src starting at \p hOffset rows and \p wOffset bytes from the
+ * upper left corner to the memory area pointed to by \p dst, where
+ * \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing. \p dpitch is the
+ * width in memory in bytes of the 2D array pointed to by \p dst, including any
+ * padding added to the end of each row. \p wOffset + \p width must not exceed
+ * the width of the CUDA array \p src. \p width must not exceed \p dpitch.
+ * ::cudaMemcpy2DFromArray() returns an error if \p dpitch exceeds the maximum
+ * allowed.
+ *
+ * \param dst     - Destination memory address
+ * \param dpitch  - Pitch of destination memory
+ * \param src     - Source memory address
+ * \param wOffset - Source starting X offset (columns in bytes)
+ * \param hOffset - Source starting Y offset (rows)
+ * \param width   - Width of matrix transfer (columns in bytes)
+ * \param height  - Height of matrix transfer (rows)
+ * \param kind    - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2D,
+ * ::cuMemcpy2DUnaligned
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DFromArray(void *dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the CUDA
+ * array \p src starting at \p hOffsetSrc rows and \p wOffsetSrc bytes from the
+ * upper left corner to the CUDA array \p dst starting at \p hOffsetDst rows
+ * and \p wOffsetDst bytes from the upper left corner, where \p kind
+ * specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * \p wOffsetDst + \p width must not exceed the width of the CUDA array \p dst.
+ * \p wOffsetSrc + \p width must not exceed the width of the CUDA array \p src.
+ *
+ * \param dst        - Destination memory address
+ * \param wOffsetDst - Destination starting X offset (columns in bytes)
+ * \param hOffsetDst - Destination starting Y offset (rows)
+ * \param src        - Source memory address
+ * \param wOffsetSrc - Source starting X offset (columns in bytes)
+ * \param hOffsetSrc - Source starting Y offset (rows)
+ * \param width      - Width of matrix transfer (columns in bytes)
+ * \param height     - Height of matrix transfer (rows)
+ * \param kind       - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2D,
+ * ::cuMemcpy2DUnaligned
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToDevice));
+
+/**
+ * \brief Copies data to the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src
+ * to the memory area pointed to by \p offset bytes from the start of symbol
+ * \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * \param symbol - Device symbol address
+ * \param src    - Source memory address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_sync
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray,  ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy,
+ * ::cuMemcpyHtoD,
+ * ::cuMemcpyDtoD
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyToSymbol(const void *symbol, const void *src, size_t count, size_t offset __dv(0), enum cudaMemcpyKind kind __dv(cudaMemcpyHostToDevice));
+
+/**
+ * \brief Copies data from the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p offset bytes
+ * from the start of symbol \p symbol to the memory area pointed to by \p dst.
+ * The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * \param dst    - Destination memory address
+ * \param symbol - Device symbol address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_sync
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy,
+ * ::cuMemcpyDtoH,
+ * ::cuMemcpyDtoD
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromSymbol(void *dst, const void *symbol, size_t count, size_t offset __dv(0), enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToHost));
+
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src to the
+ * memory area pointed to by \p dst, where \p kind specifies the
+ * direction of the copy, and must be one of ::cudaMemcpyHostToHost,
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * 
+ * The memory areas may not overlap. Calling ::cudaMemcpyAsync() with \p dst and
+ * \p src pointers that do not match the direction of the copy results in an
+ * undefined behavior.
+ *
+ * ::cudaMemcpyAsync() is asynchronous with respect to the host, so the call
+ * may return before the copy is complete. The copy can optionally be
+ * associated to a stream by passing a non-zero \p stream argument. If \p kind
+ * is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and the \p stream is
+ * non-zero, the copy may overlap with operations in other streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param dst    - Destination memory address
+ * \param src    - Source memory address
+ * \param count  - Size in bytes to copy
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyAsync,
+ * ::cuMemcpyDtoHAsync,
+ * ::cuMemcpyHtoDAsync,
+ * ::cuMemcpyDtoDAsync
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpyAsync(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies memory between two devices asynchronously.
+ *
+ * Copies memory from one device to memory on another device.  \p dst is the 
+ * base device pointer of the destination memory and \p dstDevice is the 
+ * destination device.  \p src is the base device pointer of the source memory 
+ * and \p srcDevice is the source device.  \p count specifies the number of bytes 
+ * to copy.
+ *
+ * Note that this function is asynchronous with respect to the host and all work
+ * on other devices.
+ *
+ * \param dst       - Destination device pointer
+ * \param dstDevice - Destination device
+ * \param src       - Source device pointer
+ * \param srcDevice - Source device
+ * \param count     - Size of memory copy in bytes
+ * \param stream    - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyPeer, ::cudaMemcpyAsync,
+ * ::cudaMemcpy3DPeerAsync,
+ * ::cuMemcpyPeerAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyPeerAsync(void *dst, int dstDevice, const void *src, int srcDevice, size_t count, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the memory
+ * area pointed to by \p src to the memory area pointed to by \p dst, where
+ * \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * \p dpitch and \p spitch are the widths in memory in bytes of the 2D arrays
+ * pointed to by \p dst and \p src, including any padding added to the end of
+ * each row. The memory areas may not overlap. \p width must not exceed either
+ * \p dpitch or \p spitch.
+ *
+ * Calling ::cudaMemcpy2DAsync() with \p dst and \p src pointers that do not
+ * match the direction of the copy results in an undefined behavior.
+ * ::cudaMemcpy2DAsync() returns an error if \p dpitch or \p spitch is greater
+ * than the maximum allowed.
+ *
+ * ::cudaMemcpy2DAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If
+ * \p kind is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and
+ * \p stream is non-zero, the copy may overlap with operations in other
+ * streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param dst    - Destination memory address
+ * \param dpitch - Pitch of destination memory
+ * \param src    - Source memory address
+ * \param spitch - Pitch of source memory
+ * \param width  - Width of matrix transfer (columns in bytes)
+ * \param height - Height of matrix transfer (rows)
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2DAsync
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy2DAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the memory
+ * area pointed to by \p src to the CUDA array \p dst starting at \p hOffset
+ * rows and \p wOffset bytes from the upper left corner, where \p kind specifies
+ * the direction of the copy, and must be one of ::cudaMemcpyHostToHost,
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * \p spitch is the width in memory in bytes of the 2D array pointed to by
+ * \p src, including any padding added to the end of each row. \p wOffset +
+ * \p width must not exceed the width of the CUDA array \p dst. \p width must
+ * not exceed \p spitch. ::cudaMemcpy2DToArrayAsync() returns an error if
+ * \p spitch exceeds the maximum allowed.
+ *
+ * ::cudaMemcpy2DToArrayAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If
+ * \p kind is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and
+ * \p stream is non-zero, the copy may overlap with operations in other
+ * streams.
+ *
+ * \param dst     - Destination memory address
+ * \param wOffset - Destination starting X offset (columns in bytes)
+ * \param hOffset - Destination starting Y offset (rows)
+ * \param src     - Source memory address
+ * \param spitch  - Pitch of source memory
+ * \param width   - Width of matrix transfer (columns in bytes)
+ * \param height  - Height of matrix transfer (rows)
+ * \param kind    - Type of transfer
+ * \param stream  - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ *
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2DAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data between host and device
+ *
+ * Copies a matrix (\p height rows of \p width bytes each) from the CUDA
+ * array \p src starting at \p hOffset rows and \p wOffset bytes from the
+ * upper left corner to the memory area pointed to by \p dst,
+ * where \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ * \p dpitch is the width in memory in bytes of the 2D
+ * array pointed to by \p dst, including any padding added to the end of each
+ * row. \p wOffset + \p width must not exceed the width of the CUDA array
+ * \p src. \p width must not exceed \p dpitch. ::cudaMemcpy2DFromArrayAsync()
+ * returns an error if \p dpitch exceeds the maximum allowed.
+ *
+ * ::cudaMemcpy2DFromArrayAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally be
+ * associated to a stream by passing a non-zero \p stream argument. If \p kind
+ * is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and \p stream is
+ * non-zero, the copy may overlap with operations in other streams.
+ *
+ * \param dst     - Destination memory address
+ * \param dpitch  - Pitch of destination memory
+ * \param src     - Source memory address
+ * \param wOffset - Source starting X offset (columns in bytes)
+ * \param hOffset - Source starting Y offset (rows)
+ * \param width   - Width of matrix transfer (columns in bytes)
+ * \param height  - Height of matrix transfer (rows)
+ * \param kind    - Type of transfer
+ * \param stream  - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidPitchValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ * \note_memcpy
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ *
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpy2DAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DFromArrayAsync(void *dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data to the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src
+ * to the memory area pointed to by \p offset bytes from the start of symbol
+ * \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * ::cudaMemcpyToSymbolAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If
+ * \p kind is ::cudaMemcpyHostToDevice and \p stream is non-zero, the copy
+ * may overlap with operations in other streams.
+ *
+ * \param symbol - Device symbol address
+ * \param src    - Source memory address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyAsync,
+ * ::cuMemcpyHtoDAsync,
+ * ::cuMemcpyDtoDAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyToSymbolAsync(const void *symbol, const void *src, size_t count, size_t offset, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data from the given symbol on the device
+ *
+ * Copies \p count bytes from the memory area pointed to by \p offset bytes
+ * from the start of symbol \p symbol to the memory area pointed to by \p dst.
+ * The memory areas may not overlap. \p symbol is a variable that resides in
+ * global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * ::cudaMemcpyFromSymbolAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally be
+ * associated to a stream by passing a non-zero \p stream argument. If \p kind
+ * is ::cudaMemcpyDeviceToHost and \p stream is non-zero, the copy may overlap
+ * with operations in other streams.
+ *
+ * \param dst    - Destination memory address
+ * \param symbol - Device symbol address
+ * \param count  - Size in bytes to copy
+ * \param offset - Offset from start of symbol in bytes
+ * \param kind   - Type of transfer
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorInvalidMemcpyDirection,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync,
+ * ::cuMemcpyAsync,
+ * ::cuMemcpyDtoHAsync,
+ * ::cuMemcpyDtoDAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromSymbolAsync(void *dst, const void *symbol, size_t count, size_t offset, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Fills the first \p count bytes of the memory area pointed to by \p devPtr
+ * with the constant byte value \p value.
+ *
+ * Note that this function is asynchronous with respect to the host unless
+ * \p devPtr refers to pinned host memory.
+ *
+ * \param devPtr - Pointer to device memory
+ * \param value  - Value to set for each byte of specified memory
+ * \param count  - Size in bytes to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuMemsetD8,
+ * ::cuMemsetD16,
+ * ::cuMemsetD32
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemset(void *devPtr, int value, size_t count);
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Sets to the specified value \p value a matrix (\p height rows of \p width
+ * bytes each) pointed to by \p dstPtr. \p pitch is the width in bytes of the
+ * 2D array pointed to by \p dstPtr, including any padding added to the end
+ * of each row. This function performs fastest when the pitch is one that has
+ * been passed back by ::cudaMallocPitch().
+ *
+ * Note that this function is asynchronous with respect to the host unless
+ * \p devPtr refers to pinned host memory.
+ *
+ * \param devPtr - Pointer to 2D device memory
+ * \param pitch  - Pitch in bytes of 2D device memory(Unused if \p height is 1)
+ * \param value  - Value to set for each byte of specified memory
+ * \param width  - Width of matrix set (columns in bytes)
+ * \param height - Height of matrix set (rows)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemset, ::cudaMemset3D, ::cudaMemsetAsync,
+ * ::cudaMemset2DAsync, ::cudaMemset3DAsync,
+ * ::cuMemsetD2D8,
+ * ::cuMemsetD2D16,
+ * ::cuMemsetD2D32
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemset2D(void *devPtr, size_t pitch, int value, size_t width, size_t height);
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Initializes each element of a 3D array to the specified value \p value.
+ * The object to initialize is defined by \p pitchedDevPtr. The \p pitch field
+ * of \p pitchedDevPtr is the width in memory in bytes of the 3D array pointed
+ * to by \p pitchedDevPtr, including any padding added to the end of each row.
+ * The \p xsize field specifies the logical width of each row in bytes, while
+ * the \p ysize field specifies the height of each 2D slice in rows.
+ * The \p pitch field of \p pitchedDevPtr is ignored when \p height and \p depth 
+ * are both equal to 1. 
+ *
+ * The extents of the initialized region are specified as a \p width in bytes,
+ * a \p height in rows, and a \p depth in slices.
+ *
+ * Extents with \p width greater than or equal to the \p xsize of
+ * \p pitchedDevPtr may perform significantly faster than extents narrower
+ * than the \p xsize. Secondarily, extents with \p height equal to the
+ * \p ysize of \p pitchedDevPtr will perform faster than when the \p height is
+ * shorter than the \p ysize.
+ *
+ * This function performs fastest when the \p pitchedDevPtr has been allocated
+ * by ::cudaMalloc3D().
+ *
+ * Note that this function is asynchronous with respect to the host unless
+ * \p pitchedDevPtr refers to pinned host memory.
+ *
+ * \param pitchedDevPtr - Pointer to pitched device memory
+ * \param value         - Value to set for each byte of specified memory
+ * \param extent        - Size parameters for where to set device memory (\p width field in bytes)
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemset, ::cudaMemset2D,
+ * ::cudaMemsetAsync, ::cudaMemset2DAsync, ::cudaMemset3DAsync,
+ * ::cudaMalloc3D, ::make_cudaPitchedPtr,
+ * ::make_cudaExtent
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemset3D(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent);
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Fills the first \p count bytes of the memory area pointed to by \p devPtr
+ * with the constant byte value \p value.
+ *
+ * ::cudaMemsetAsync() is asynchronous with respect to the host, so
+ * the call may return before the memset is complete. The operation can optionally
+ * be associated to a stream by passing a non-zero \p stream argument.
+ * If \p stream is non-zero, the operation may overlap with operations in other streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param devPtr - Pointer to device memory
+ * \param value  - Value to set for each byte of specified memory
+ * \param count  - Size in bytes to set
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemset, ::cudaMemset2D, ::cudaMemset3D,
+ * ::cudaMemset2DAsync, ::cudaMemset3DAsync,
+ * ::cuMemsetD8Async,
+ * ::cuMemsetD16Async,
+ * ::cuMemsetD32Async
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemsetAsync(void *devPtr, int value, size_t count, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Sets to the specified value \p value a matrix (\p height rows of \p width
+ * bytes each) pointed to by \p dstPtr. \p pitch is the width in bytes of the
+ * 2D array pointed to by \p dstPtr, including any padding added to the end
+ * of each row. This function performs fastest when the pitch is one that has
+ * been passed back by ::cudaMallocPitch().
+ *
+ * ::cudaMemset2DAsync() is asynchronous with respect to the host, so
+ * the call may return before the memset is complete. The operation can optionally
+ * be associated to a stream by passing a non-zero \p stream argument.
+ * If \p stream is non-zero, the operation may overlap with operations in other streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param devPtr - Pointer to 2D device memory
+ * \param pitch  - Pitch in bytes of 2D device memory(Unused if \p height is 1)
+ * \param value  - Value to set for each byte of specified memory
+ * \param width  - Width of matrix set (columns in bytes)
+ * \param height - Height of matrix set (rows)
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemset, ::cudaMemset2D, ::cudaMemset3D,
+ * ::cudaMemsetAsync, ::cudaMemset3DAsync,
+ * ::cuMemsetD2D8Async,
+ * ::cuMemsetD2D16Async,
+ * ::cuMemsetD2D32Async
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset2DAsync(void *devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Initializes or sets device memory to a value
+ *
+ * Initializes each element of a 3D array to the specified value \p value.
+ * The object to initialize is defined by \p pitchedDevPtr. The \p pitch field
+ * of \p pitchedDevPtr is the width in memory in bytes of the 3D array pointed
+ * to by \p pitchedDevPtr, including any padding added to the end of each row.
+ * The \p xsize field specifies the logical width of each row in bytes, while
+ * the \p ysize field specifies the height of each 2D slice in rows.
+ * The \p pitch field of \p pitchedDevPtr is ignored when \p height and \p depth 
+ * are both equal to 1. 
+ *
+ * The extents of the initialized region are specified as a \p width in bytes,
+ * a \p height in rows, and a \p depth in slices.
+ *
+ * Extents with \p width greater than or equal to the \p xsize of
+ * \p pitchedDevPtr may perform significantly faster than extents narrower
+ * than the \p xsize. Secondarily, extents with \p height equal to the
+ * \p ysize of \p pitchedDevPtr will perform faster than when the \p height is
+ * shorter than the \p ysize.
+ *
+ * This function performs fastest when the \p pitchedDevPtr has been allocated
+ * by ::cudaMalloc3D().
+ *
+ * ::cudaMemset3DAsync() is asynchronous with respect to the host, so
+ * the call may return before the memset is complete. The operation can optionally
+ * be associated to a stream by passing a non-zero \p stream argument.
+ * If \p stream is non-zero, the operation may overlap with operations in other streams.
+ *
+ * The device version of this function only handles device to device copies and
+ * cannot be given local or shared pointers.
+ *
+ * \param pitchedDevPtr - Pointer to pitched device memory
+ * \param value         - Value to set for each byte of specified memory
+ * \param extent        - Size parameters for where to set device memory (\p width field in bytes)
+ * \param stream - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_memset
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemset, ::cudaMemset2D, ::cudaMemset3D,
+ * ::cudaMemsetAsync, ::cudaMemset2DAsync,
+ * ::cudaMalloc3D, ::make_cudaPitchedPtr,
+ * ::make_cudaExtent
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset3DAsync(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Finds the address associated with a CUDA symbol
+ *
+ * Returns in \p *devPtr the address of symbol \p symbol on the device.
+ * \p symbol is a variable that resides in global or constant memory space.
+ * If \p symbol cannot be found, or if \p symbol is not declared in the
+ * global or constant memory space, \p *devPtr is unchanged and the error
+ * ::cudaErrorInvalidSymbol is returned.
+ *
+ * \param devPtr - Return device pointer associated with symbol
+ * \param symbol - Device symbol address
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaGetSymbolAddress(void**, const T&) "cudaGetSymbolAddress (C++ API)",
+ * \ref ::cudaGetSymbolSize(size_t*, const void*) "cudaGetSymbolSize (C API)",
+ * ::cuModuleGetGlobal
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetSymbolAddress(void **devPtr, const void *symbol);
+
+/**
+ * \brief Finds the size of the object associated with a CUDA symbol
+ *
+ * Returns in \p *size the size of symbol \p symbol. \p symbol is a variable that
+ * resides in global or constant memory space. If \p symbol cannot be found, or
+ * if \p symbol is not declared in global or constant memory space, \p *size is
+ * unchanged and the error ::cudaErrorInvalidSymbol is returned.
+ *
+ * \param size   - Size of object associated with symbol
+ * \param symbol - Device symbol address
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidSymbol,
+ * ::cudaErrorNoKernelImageForDevice
+ * \notefnerr
+ * \note_string_api_deprecation
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaGetSymbolAddress(void**, const void*) "cudaGetSymbolAddress (C API)",
+ * \ref ::cudaGetSymbolSize(size_t*, const T&) "cudaGetSymbolSize (C++ API)",
+ * ::cuModuleGetGlobal
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetSymbolSize(size_t *size, const void *symbol);
+
+/**
+ * \brief Prefetches memory to the specified destination device
+ *
+ * Prefetches memory to the specified destination device.  \p devPtr is the 
+ * base device pointer of the memory to be prefetched and \p dstDevice is the 
+ * destination device. \p count specifies the number of bytes to copy. \p stream
+ * is the stream in which the operation is enqueued. The memory range must refer
+ * to managed memory allocated via ::cudaMallocManaged or declared via __managed__ variables.
+ *
+ * Passing in cudaCpuDeviceId for \p dstDevice will prefetch the data to host memory. If
+ * \p dstDevice is a GPU, then the device attribute ::cudaDevAttrConcurrentManagedAccess
+ * must be non-zero. Additionally, \p stream must be associated with a device that has a
+ * non-zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * The start address and end address of the memory range will be rounded down and rounded up
+ * respectively to be aligned to CPU page size before the prefetch operation is enqueued
+ * in the stream.
+ *
+ * If no physical memory has been allocated for this region, then this memory region
+ * will be populated and mapped on the destination device. If there's insufficient
+ * memory to prefetch the desired region, the Unified Memory driver may evict pages from other
+ * ::cudaMallocManaged allocations to host memory in order to make room. Device memory
+ * allocated using ::cudaMalloc or ::cudaMallocArray will not be evicted.
+ *
+ * By default, any mappings to the previous location of the migrated pages are removed and
+ * mappings for the new location are only setup on \p dstDevice. The exact behavior however
+ * also depends on the settings applied to this memory range via ::cudaMemAdvise as described
+ * below:
+ *
+ * If ::cudaMemAdviseSetReadMostly was set on any subset of this memory range,
+ * then that subset will create a read-only copy of the pages on \p dstDevice.
+ *
+ * If ::cudaMemAdviseSetPreferredLocation was called on any subset of this memory
+ * range, then the pages will be migrated to \p dstDevice even if \p dstDevice is not the
+ * preferred location of any pages in the memory range.
+ *
+ * If ::cudaMemAdviseSetAccessedBy was called on any subset of this memory range,
+ * then mappings to those pages from all the appropriate processors are updated to
+ * refer to the new location if establishing such a mapping is possible. Otherwise,
+ * those mappings are cleared.
+ *
+ * Note that this API is not required for functionality and only serves to improve performance
+ * by allowing the application to migrate data to a suitable location before it is accessed.
+ * Memory accesses to this range are always coherent and are allowed even when the data is
+ * actively being migrated.
+ *
+ * Note that this function is asynchronous with respect to the host and all work
+ * on other devices.
+ *
+ * \param devPtr    - Pointer to be prefetched
+ * \param count     - Size in bytes
+ * \param dstDevice - Destination device to prefetch to
+ * \param stream    - Stream to enqueue prefetch operation
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyPeer, ::cudaMemcpyAsync,
+ * ::cudaMemcpy3DPeerAsync, ::cudaMemAdvise,
+ * ::cuMemPrefetchAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPrefetchAsync(const void *devPtr, size_t count, int dstDevice, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Advise about the usage of a given memory range
+ *
+ * Advise the Unified Memory subsystem about the usage pattern for the memory range
+ * starting at \p devPtr with a size of \p count bytes. The start address and end address of the memory
+ * range will be rounded down and rounded up respectively to be aligned to CPU page size before the
+ * advice is applied. The memory range must refer to managed memory allocated via ::cudaMallocManaged
+ * or declared via __managed__ variables. The memory range could also refer to system-allocated pageable
+ * memory provided it represents a valid, host-accessible region of memory and all additional constraints
+ * imposed by \p advice as outlined below are also satisfied. Specifying an invalid system-allocated pageable
+ * memory range results in an error being returned.
+ *
+ * The \p advice parameter can take the following values:
+ * - ::cudaMemAdviseSetReadMostly: This implies that the data is mostly going to be read
+ * from and only occasionally written to. Any read accesses from any processor to this region will create a
+ * read-only copy of at least the accessed pages in that processor's memory. Additionally, if ::cudaMemPrefetchAsync
+ * is called on this region, it will create a read-only copy of the data on the destination processor.
+ * If any processor writes to this region, all copies of the corresponding page will be invalidated
+ * except for the one where the write occurred. The \p device argument is ignored for this advice.
+ * Note that for a page to be read-duplicated, the accessing processor must either be the CPU or a GPU
+ * that has a non-zero value for the device attribute ::cudaDevAttrConcurrentManagedAccess.
+ * Also, if a context is created on a device that does not have the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess set, then read-duplication will not occur until
+ * all such contexts are destroyed.
+ * If the memory region refers to valid system-allocated pageable memory, then the accessing device must
+ * have a non-zero value for the device attribute ::cudaDevAttrPageableMemoryAccess for a read-only
+ * copy to be created on that device. Note however that if the accessing device also has a non-zero value for the
+ * device attribute ::cudaDevAttrPageableMemoryAccessUsesHostPageTables, then setting this advice
+ * will not create a read-only copy when that device accesses this memory region.
+ *
+ * - ::cudaMemAdviceUnsetReadMostly: Undoes the effect of ::cudaMemAdviceReadMostly and also prevents the
+ * Unified Memory driver from attempting heuristic read-duplication on the memory range. Any read-duplicated
+ * copies of the data will be collapsed into a single copy. The location for the collapsed
+ * copy will be the preferred location if the page has a preferred location and one of the read-duplicated
+ * copies was resident at that location. Otherwise, the location chosen is arbitrary.
+ *
+ * - ::cudaMemAdviseSetPreferredLocation: This advice sets the preferred location for the
+ * data to be the memory belonging to \p device. Passing in cudaCpuDeviceId for \p device sets the
+ * preferred location as host memory. If \p device is a GPU, then it must have a non-zero value for the
+ * device attribute ::cudaDevAttrConcurrentManagedAccess. Setting the preferred location
+ * does not cause data to migrate to that location immediately. Instead, it guides the migration policy
+ * when a fault occurs on that memory region. If the data is already in its preferred location and the
+ * faulting processor can establish a mapping without requiring the data to be migrated, then
+ * data migration will be avoided. On the other hand, if the data is not in its preferred location
+ * or if a direct mapping cannot be established, then it will be migrated to the processor accessing
+ * it. It is important to note that setting the preferred location does not prevent data prefetching
+ * done using ::cudaMemPrefetchAsync.
+ * Having a preferred location can override the page thrash detection and resolution logic in the Unified
+ * Memory driver. Normally, if a page is detected to be constantly thrashing between for example host and device
+ * memory, the page may eventually be pinned to host memory by the Unified Memory driver. But
+ * if the preferred location is set as device memory, then the page will continue to thrash indefinitely.
+ * If ::cudaMemAdviseSetReadMostly is also set on this memory region or any subset of it, then the
+ * policies associated with that advice will override the policies of this advice, unless read accesses from
+ * \p device will not result in a read-only copy being created on that device as outlined in description for
+ * the advice ::cudaMemAdviseSetReadMostly.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::cudaDevAttrPageableMemoryAccess. Additionally, if \p device has
+ * a non-zero value for the device attribute ::cudaDevAttrPageableMemoryAccessUsesHostPageTables,
+ * then this call has no effect. Note however that this behavior may change in the future.
+ *
+ * - ::cudaMemAdviseUnsetPreferredLocation: Undoes the effect of ::cudaMemAdviseSetPreferredLocation
+ * and changes the preferred location to none.
+ *
+ * - ::cudaMemAdviseSetAccessedBy: This advice implies that the data will be accessed by \p device.
+ * Passing in ::cudaCpuDeviceId for \p device will set the advice for the CPU. If \p device is a GPU, then
+ * the device attribute ::cudaDevAttrConcurrentManagedAccess must be non-zero.
+ * This advice does not cause data migration and has no impact on the location of the data per se. Instead,
+ * it causes the data to always be mapped in the specified processor's page tables, as long as the
+ * location of the data permits a mapping to be established. If the data gets migrated for any reason,
+ * the mappings are updated accordingly.
+ * This advice is recommended in scenarios where data locality is not important, but avoiding faults is.
+ * Consider for example a system containing multiple GPUs with peer-to-peer access enabled, where the
+ * data located on one GPU is occasionally accessed by peer GPUs. In such scenarios, migrating data
+ * over to the other GPUs is not as important because the accesses are infrequent and the overhead of
+ * migration may be too high. But preventing faults can still help improve performance, and so having
+ * a mapping set up in advance is useful. Note that on CPU access of this data, the data may be migrated
+ * to host memory because the CPU typically cannot access device memory directly. Any GPU that had the
+ * ::cudaMemAdviceSetAccessedBy flag set for this data will now have its mapping updated to point to the
+ * page in host memory.
+ * If ::cudaMemAdviseSetReadMostly is also set on this memory region or any subset of it, then the
+ * policies associated with that advice will override the policies of this advice. Additionally, if the
+ * preferred location of this memory region or any subset of it is also \p device, then the policies
+ * associated with ::cudaMemAdviseSetPreferredLocation will override the policies of this advice.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::cudaDevAttrPageableMemoryAccess. Additionally, if \p device has
+ * a non-zero value for the device attribute ::cudaDevAttrPageableMemoryAccessUsesHostPageTables,
+ * then this call has no effect.
+ *
+ * - ::cudaMemAdviseUnsetAccessedBy: Undoes the effect of ::cudaMemAdviseSetAccessedBy. Any mappings to
+ * the data from \p device may be removed at any time causing accesses to result in non-fatal page faults.
+ * If the memory region refers to valid system-allocated pageable memory, then \p device must have a non-zero
+ * value for the device attribute ::cudaDevAttrPageableMemoryAccess. Additionally, if \p device has
+ * a non-zero value for the device attribute ::cudaDevAttrPageableMemoryAccessUsesHostPageTables,
+ * then this call has no effect.
+ *
+ * \param devPtr - Pointer to memory to set the advice for
+ * \param count  - Size in bytes of the memory range
+ * \param advice - Advice to be applied for the specified memory range
+ * \param device - Device to apply the advice for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpyPeer, ::cudaMemcpyAsync,
+ * ::cudaMemcpy3DPeerAsync, ::cudaMemPrefetchAsync,
+ * ::cuMemAdvise
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemAdvise(const void *devPtr, size_t count, enum cudaMemoryAdvise advice, int device);
+
+/**
+* \brief Query an attribute of a given memory range
+*
+* Query an attribute about the memory range starting at \p devPtr with a size of \p count bytes. The
+* memory range must refer to managed memory allocated via ::cudaMallocManaged or declared via
+* __managed__ variables.
+*
+* The \p attribute parameter can take the following values:
+* - ::cudaMemRangeAttributeReadMostly: If this attribute is specified, \p data will be interpreted
+* as a 32-bit integer, and \p dataSize must be 4. The result returned will be 1 if all pages in the given
+* memory range have read-duplication enabled, or 0 otherwise.
+* - ::cudaMemRangeAttributePreferredLocation: If this attribute is specified, \p data will be
+* interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be a GPU device
+* id if all pages in the memory range have that GPU as their preferred location, or it will be cudaCpuDeviceId
+* if all pages in the memory range have the CPU as their preferred location, or it will be cudaInvalidDeviceId
+* if either all the pages don't have the same preferred location or some of the pages don't have a
+* preferred location at all. Note that the actual location of the pages in the memory range at the time of
+* the query may be different from the preferred location.
+* - ::cudaMemRangeAttributeAccessedBy: If this attribute is specified, \p data will be interpreted
+* as an array of 32-bit integers, and \p dataSize must be a non-zero multiple of 4. The result returned
+* will be a list of device ids that had ::cudaMemAdviceSetAccessedBy set for that entire memory range.
+* If any device does not have that advice set for the entire memory range, that device will not be included.
+* If \p data is larger than the number of devices that have that advice set for that memory range,
+* cudaInvalidDeviceId will be returned in all the extra space provided. For ex., if \p dataSize is 12
+* (i.e. \p data has 3 elements) and only device 0 has the advice set, then the result returned will be
+* { 0, cudaInvalidDeviceId, cudaInvalidDeviceId }. If \p data is smaller than the number of devices that have
+* that advice set, then only as many devices will be returned as can fit in the array. There is no
+* guarantee on which specific devices will be returned, however.
+* - ::cudaMemRangeAttributeLastPrefetchLocation: If this attribute is specified, \p data will be
+* interpreted as a 32-bit integer, and \p dataSize must be 4. The result returned will be the last location
+* to which all pages in the memory range were prefetched explicitly via ::cudaMemPrefetchAsync. This will either be
+* a GPU id or cudaCpuDeviceId depending on whether the last location for prefetch was a GPU or the CPU
+* respectively. If any page in the memory range was never explicitly prefetched or if all pages were not
+* prefetched to the same location, cudaInvalidDeviceId will be returned. Note that this simply returns the
+* last location that the applicaton requested to prefetch the memory range to. It gives no indication as to
+* whether the prefetch operation to that location has completed or even begun.
+*
+* \param data      - A pointers to a memory location where the result
+*                    of each attribute query will be written to.
+* \param dataSize  - Array containing the size of data
+* \param attribute - The attribute to query
+* \param devPtr    - Start of the range to query
+* \param count     - Size of the range to query
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemRangeGetAttributes, ::cudaMemPrefetchAsync,
+ * ::cudaMemAdvise,
+ * ::cuMemRangeGetAttribute
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemRangeGetAttribute(void *data, size_t dataSize, enum cudaMemRangeAttribute attribute, const void *devPtr, size_t count);
+
+/**
+ * \brief Query attributes of a given memory range.
+ *
+ * Query attributes of the memory range starting at \p devPtr with a size of \p count bytes. The
+ * memory range must refer to managed memory allocated via ::cudaMallocManaged or declared via
+ * __managed__ variables. The \p attributes array will be interpreted to have \p numAttributes
+ * entries. The \p dataSizes array will also be interpreted to have \p numAttributes entries.
+ * The results of the query will be stored in \p data.
+ *
+ * The list of supported attributes are given below. Please refer to ::cudaMemRangeGetAttribute for
+ * attribute descriptions and restrictions.
+ *
+ * - ::cudaMemRangeAttributeReadMostly
+ * - ::cudaMemRangeAttributePreferredLocation
+ * - ::cudaMemRangeAttributeAccessedBy
+ * - ::cudaMemRangeAttributeLastPrefetchLocation
+ *
+ * \param data          - A two-dimensional array containing pointers to memory
+ *                        locations where the result of each attribute query will be written to.
+ * \param dataSizes     - Array containing the sizes of each result
+ * \param attributes    - An array of attributes to query
+ *                        (numAttributes and the number of attributes in this array should match)
+ * \param numAttributes - Number of attributes to query
+ * \param devPtr        - Start of the range to query
+ * \param count         - Size of the range to query
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemRangeGetAttribute, ::cudaMemAdvise,
+ * ::cudaMemPrefetchAsync,
+ * ::cuMemRangeGetAttributes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemRangeGetAttributes(void **data, size_t *dataSizes, enum cudaMemRangeAttribute *attributes, size_t numAttributes, const void *devPtr, size_t count);
+
+/** @} */ /* END CUDART_MEMORY */
+
+/**
+ * \defgroup CUDART_MEMORY_DEPRECATED Memory Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ deprecated memory management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes deprecated memory management functions of the CUDA runtime
+ * application programming interface.
+ *
+ * Some functions have overloaded C++ API template versions documented separately in the
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * @{
+ */
+
+/**
+ * \brief Copies data between host and device
+ *
+ * \deprecated
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src to the
+ * CUDA array \p dst starting at \p hOffset rows and \p wOffset bytes from
+ * the upper left corner, where \p kind specifies the direction
+ * of the copy, and must be one of ::cudaMemcpyHostToHost,
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * \param dst     - Destination memory address
+ * \param wOffset - Destination starting X offset (columns in bytes)
+ * \param hOffset - Destination starting Y offset (rows)
+ * \param src     - Source memory address
+ * \param count   - Size in bytes to copy
+ * \param kind    - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpyFromArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpyArrayToArray, ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpyToArrayAsync, ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpyFromArrayAsync, ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyHtoA,
+ * ::cuMemcpyDtoA
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t count, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * \deprecated
+ *
+ * Copies \p count bytes from the CUDA array \p src starting at \p hOffset rows
+ * and \p wOffset bytes from the upper left corner to the memory area pointed to
+ * by \p dst, where \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * \param dst     - Destination memory address
+ * \param src     - Source memory address
+ * \param wOffset - Source starting X offset (columns in bytes)
+ * \param hOffset - Source starting Y offset (rows)
+ * \param count   - Size in bytes to copy
+ * \param kind    - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_sync
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D, ::cudaMemcpyToArray,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpyArrayToArray, ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpyToArrayAsync, ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpyFromArrayAsync, ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyAtoH,
+ * ::cuMemcpyAtoD
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaMemcpyFromArray(void *dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, enum cudaMemcpyKind kind);
+
+/**
+ * \brief Copies data between host and device
+ *
+ * \deprecated
+ *
+ * Copies \p count bytes from the CUDA array \p src starting at \p hOffsetSrc
+ * rows and \p wOffsetSrc bytes from the upper left corner to the CUDA array
+ * \p dst starting at \p hOffsetDst rows and \p wOffsetDst bytes from the upper
+ * left corner, where \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * \param dst        - Destination memory address
+ * \param wOffsetDst - Destination starting X offset (columns in bytes)
+ * \param hOffsetDst - Destination starting Y offset (rows)
+ * \param src        - Source memory address
+ * \param wOffsetSrc - Source starting X offset (columns in bytes)
+ * \param hOffsetSrc - Source starting Y offset (rows)
+ * \param count      - Size in bytes to copy
+ * \param kind       - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D, ::cudaMemcpyToArray,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpyFromArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpyToArrayAsync, ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpyFromArrayAsync, ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyAtoA
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToDevice));
+
+/**
+ * \brief Copies data between host and device
+ *
+ * \deprecated
+ *
+ * Copies \p count bytes from the memory area pointed to by \p src to the
+ * CUDA array \p dst starting at \p hOffset rows and \p wOffset bytes from
+ * the upper left corner, where \p kind specifies the
+ * direction of the copy, and must be one of ::cudaMemcpyHostToHost,
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * ::cudaMemcpyToArrayAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If \p
+ * kind is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and \p stream
+ * is non-zero, the copy may overlap with operations in other streams.
+ *
+ * \param dst     - Destination memory address
+ * \param wOffset - Destination starting X offset (columns in bytes)
+ * \param hOffset - Destination starting Y offset (rows)
+ * \param src     - Source memory address
+ * \param count   - Size in bytes to copy
+ * \param kind    - Type of transfer
+ * \param stream  - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D, ::cudaMemcpyToArray,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpyFromArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpyArrayToArray, ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpyFromArrayAsync, ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyHtoAAsync,
+ * ::cuMemcpy2DAsync
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Copies data between host and device
+ *
+ * \deprecated
+ *
+ * Copies \p count bytes from the CUDA array \p src starting at \p hOffset rows
+ * and \p wOffset bytes from the upper left corner to the memory area pointed to
+ * by \p dst, where \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * ::cudaMemcpyFromArrayAsync() is asynchronous with respect to the host, so
+ * the call may return before the copy is complete. The copy can optionally
+ * be associated to a stream by passing a non-zero \p stream argument. If \p
+ * kind is ::cudaMemcpyHostToDevice or ::cudaMemcpyDeviceToHost and \p stream
+ * is non-zero, the copy may overlap with operations in other streams.
+ *
+ * \param dst     - Destination memory address
+ * \param src     - Source memory address
+ * \param wOffset - Source starting X offset (columns in bytes)
+ * \param hOffset - Source starting Y offset (rows)
+ * \param count   - Size in bytes to copy
+ * \param kind    - Type of transfer
+ * \param stream  - Stream identifier
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidMemcpyDirection
+ * \notefnerr
+ * \note_async
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaMemcpy, ::cudaMemcpy2D, ::cudaMemcpyToArray,
+ * ::cudaMemcpy2DToArray, ::cudaMemcpyFromArray, ::cudaMemcpy2DFromArray,
+ * ::cudaMemcpyArrayToArray, ::cudaMemcpy2DArrayToArray, ::cudaMemcpyToSymbol,
+ * ::cudaMemcpyFromSymbol, ::cudaMemcpyAsync, ::cudaMemcpy2DAsync,
+ * ::cudaMemcpyToArrayAsync, ::cudaMemcpy2DToArrayAsync,
+ * ::cudaMemcpy2DFromArrayAsync,
+ * ::cudaMemcpyToSymbolAsync, ::cudaMemcpyFromSymbolAsync,
+ * ::cuMemcpyAtoHAsync,
+ * ::cuMemcpy2DAsync
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaMemcpyFromArrayAsync(void *dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+
+/** @} */ /* END CUDART_MEMORY_DEPRECATED */
+
+/**
+ * \defgroup CUDART_MEMORY_POOLS Stream Ordered Memory Allocator 
+ *
+ * ___MANBRIEF___ Functions for performing allocation and free operations in stream order.
+ *                Functions for controlling the behavior of the underlying allocator.
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ * 
+ *
+ * @{
+ *
+ * \section CUDART_MEMORY_POOLS_overview overview
+ *
+ * The asynchronous allocator allows the user to allocate and free in stream order.
+ * All asynchronous accesses of the allocation must happen between
+ * the stream executions of the allocation and the free. If the memory is accessed
+ * outside of the promised stream order, a use before allocation / use after free error
+ * will cause undefined behavior.
+ *
+ * The allocator is free to reallocate the memory as long as it can guarantee
+ * that compliant memory accesses will not overlap temporally.
+ * The allocator may refer to internal stream ordering as well as inter-stream dependencies
+ * (such as CUDA events and null stream dependencies) when establishing the temporal guarantee.
+ * The allocator may also insert inter-stream dependencies to establish the temporal guarantee.
+ *
+ * \section CUDART_MEMORY_POOLS_support Supported Platforms
+ *
+ * Whether or not a device supports the integrated stream ordered memory allocator
+ * may be queried by calling ::cudaDeviceGetAttribute() with the device attribute
+ * ::cudaDevAttrMemoryPoolsSupported.
+ */
+
+/**
+ * \brief Allocates memory with stream ordered semantics
+ *
+ * Inserts an allocation operation into \p hStream.
+ * A pointer to the allocated memory is returned immediately in *dptr.
+ * The allocation must not be accessed until the the allocation operation completes.
+ * The allocation comes from the memory pool associated with the stream's device.
+ *
+ * \note The default memory pool of a device contains device memory from that device.
+ * \note Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ *       Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ *       operation completes before work submitted in a separate stream runs.
+ * \note During stream capture, this function results in the creation of an allocation node.  In this case,
+ *       the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ *       are used to set the node's creation parameters.
+ *
+ * \param[out] devPtr  - Returned device pointer
+ * \param[in] size     - Number of bytes to allocate
+ * \param[in] hStream  - The stream establishing the stream ordering contract and the memory pool to allocate from
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorOutOfMemory,
+ * \notefnerr
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cuMemAllocAsync,
+ * \ref ::cudaMallocAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream)  "cudaMallocAsync (C++ API)", 
+ * ::cudaMallocFromPoolAsync, ::cudaFreeAsync, ::cudaDeviceSetMemPool, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaMemPoolSetAccess, ::cudaMemPoolSetAttribute, ::cudaMemPoolGetAttribute
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocAsync(void **devPtr, size_t size, cudaStream_t hStream);
+
+/**
+ * \brief Frees memory with stream ordered semantics
+ *
+ * Inserts a free operation into \p hStream.
+ * The allocation must not be accessed after stream execution reaches the free.
+ * After this API returns, accessing the memory from any subsequent work launched on the GPU
+ * or querying its pointer attributes results in undefined behavior.
+ *
+ * \note During stream capture, this function results in the creation of a free node and
+ *       must therefore be passed the address of a graph allocation.
+ *
+ * \param dptr - memory to free
+ * \param hStream - The stream establishing the stream ordering promise
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported
+ * \notefnerr
+ * \note_null_stream
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cuMemFreeAsync, ::cudaMallocAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaFreeAsync(void *devPtr, cudaStream_t hStream);
+
+/**
+ * \brief Tries to release memory back to the OS
+ *
+ * Releases memory back to the OS until the pool contains fewer than minBytesToKeep
+ * reserved bytes, or there is no more memory that the allocator can safely release.
+ * The allocator cannot release OS allocations that back outstanding asynchronous allocations.
+ * The OS allocations may happen at different granularity from the user allocations.
+ *
+ * \note: Allocations that have not been freed count as outstanding.
+ * \note: Allocations that have been asynchronously freed but whose completion has
+ *        not been observed on the host (eg. by a synchronize) can count as outstanding.
+ *
+ * \param[in] pool           - The memory pool to trim
+ * \param[in] minBytesToKeep - If the pool has less than minBytesToKeep reserved,
+ * the TrimTo operation is a no-op.  Otherwise the pool will be guaranteed to have
+ * at least minBytesToKeep bytes reserved after the operation.
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_callback
+ *
+ * \sa ::cuMemPoolTrimTo, ::cudaMallocAsync, ::cudaFreeAsync, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaMemPoolCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolTrimTo(cudaMemPool_t memPool, size_t minBytesToKeep);
+
+/**
+ * \brief Sets attributes of a memory pool
+ *
+ * Supported attributes are:
+ * - ::cudaMemPoolAttrReleaseThreshold: (value type = cuuint64_t)
+ *                    Amount of reserved memory in bytes to hold onto before trying
+ *                    to release memory back to the OS. When more than the release
+ *                    threshold bytes of memory are held by the memory pool, the
+ *                    allocator will try to release memory back to the OS on the
+ *                    next call to stream, event or context synchronize. (default 0)
+ * - ::cudaMemPoolReuseFollowEventDependencies: (value type = int)
+ *                    Allow ::cudaMallocAsync to use memory asynchronously freed
+ *                    in another stream as long as a stream ordering dependency
+ *                    of the allocating stream on the free action exists.
+ *                    Cuda events and null stream interactions can create the required
+ *                    stream ordered dependencies. (default enabled)
+ * - ::cudaMemPoolReuseAllowOpportunistic: (value type = int)
+ *                    Allow reuse of already completed frees when there is no dependency
+ *                    between the free and allocation. (default enabled)
+ * - ::cudaMemPoolReuseAllowInternalDependencies: (value type = int)
+ *                    Allow ::cudaMallocAsync to insert new stream dependencies
+ *                    in order to establish the stream ordering required to reuse
+ *                    a piece of memory released by ::cudaFreeAsync (default enabled).
+ * - ::cudaMemPoolAttrReservedMemHigh: (value type = cuuint64_t)
+ *                    Reset the high watermark that tracks the amount of backing memory that was
+ *                    allocated for the memory pool. It is illegal to set this attribute to a non-zero value.
+ * - ::cudaMemPoolAttrUsedMemHigh: (value type = cuuint64_t)
+ *                    Reset the high watermark that tracks the amount of used memory that was
+ *                    allocated for the memory pool. It is illegal to set this attribute to a non-zero value.
+ *
+ * \param[in] pool  - The memory pool to modify
+ * \param[in] attr  - The attribute to modify
+ * \param[in] value - Pointer to the value to assign
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_callback
+ *
+ * \sa ::cuMemPoolSetAttribute, ::cudaMallocAsync, ::cudaFreeAsync, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaMemPoolCreate
+
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolSetAttribute(cudaMemPool_t memPool, enum cudaMemPoolAttr attr, void *value );
+
+/**
+ * \brief Gets attributes of a memory pool
+ *
+ * Supported attributes are:
+ * - ::cudaMemPoolAttrReleaseThreshold: (value type = cuuint64_t)
+ *                    Amount of reserved memory in bytes to hold onto before trying
+ *                    to release memory back to the OS. When more than the release
+ *                    threshold bytes of memory are held by the memory pool, the
+ *                    allocator will try to release memory back to the OS on the
+ *                    next call to stream, event or context synchronize. (default 0)
+ * - ::cudaMemPoolReuseFollowEventDependencies: (value type = int)
+ *                    Allow ::cudaMallocAsync to use memory asynchronously freed
+ *                    in another stream as long as a stream ordering dependency
+ *                    of the allocating stream on the free action exists.
+ *                    Cuda events and null stream interactions can create the required
+ *                    stream ordered dependencies. (default enabled)
+ * - ::cudaMemPoolReuseAllowOpportunistic: (value type = int)
+ *                    Allow reuse of already completed frees when there is no dependency
+ *                    between the free and allocation. (default enabled)
+ * - ::cudaMemPoolReuseAllowInternalDependencies: (value type = int)
+ *                    Allow ::cudaMallocAsync to insert new stream dependencies
+ *                    in order to establish the stream ordering required to reuse
+ *                    a piece of memory released by ::cudaFreeAsync (default enabled).
+ * - ::cudaMemPoolAttrReservedMemCurrent: (value type = cuuint64_t)
+ *                    Amount of backing memory currently allocated for the mempool.
+ * - ::cudaMemPoolAttrReservedMemHigh: (value type = cuuint64_t)
+ *                    High watermark of backing memory allocated for the mempool since
+ *                    the last time it was reset.
+ * - ::cudaMemPoolAttrUsedMemCurrent: (value type = cuuint64_t)
+ *                    Amount of memory from the pool that is currently in use by the application.
+ * - ::cudaMemPoolAttrUsedMemHigh: (value type = cuuint64_t)
+ *                    High watermark of the amount of memory from the pool that was in use by the
+ *                    application since the last time it was reset.
+ *
+ * \param[in] pool  - The memory pool to get attributes of 
+ * \param[in] attr  - The attribute to get
+ * \param[in] value - Retrieved value 
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_callback
+ *
+ * \sa ::cuMemPoolGetAttribute, ::cudaMallocAsync, ::cudaFreeAsync, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaMemPoolCreate
+
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolGetAttribute(cudaMemPool_t memPool, enum cudaMemPoolAttr attr, void *value );
+
+/**
+ * \brief Controls visibility of pools between devices
+ *
+ * \param[in] pool  - The pool being modified
+ * \param[in] map   - Array of access descriptors. Each descriptor instructs the access to enable for a single gpu
+ * \param[in] count - Number of descriptors in the map array.
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa ::cuMemPoolSetAccess, ::cudaMemPoolGetAccess, ::cudaMallocAsync, cudaFreeAsync
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolSetAccess(cudaMemPool_t memPool, const struct cudaMemAccessDesc *descList, size_t count);
+
+/**
+ * \brief Returns the accessibility of a pool from a device
+ *
+ * Returns the accessibility of the pool's memory from the specified location.
+ *
+ * \param[out] flags   - the accessibility of the pool from the specified location
+ * \param[in] memPool  - the pool being queried
+ * \param[in] location - the location accessing the pool
+ *
+ * \sa ::cuMemPoolGetAccess, ::cudaMemPoolSetAccess
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolGetAccess(enum cudaMemAccessFlags *flags, cudaMemPool_t memPool, struct cudaMemLocation *location);
+
+/**
+ * \brief Creates a memory pool
+ *
+ * Creates a CUDA memory pool and returns the handle in \p pool.  The \p poolProps determines
+ * the properties of the pool such as the backing device and IPC capabilities.
+ *
+ * By default, the pool's memory will be accessible from the device it is allocated on.
+ *
+ * \note Specifying cudaMemHandleTypeNone creates a memory pool that will not support IPC.
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported
+ *
+ * \sa ::cuMemPoolCreate, ::cudaDeviceSetMemPool, ::cudaMallocFromPoolAsync, ::cudaMemPoolExportToShareableHandle, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool
+
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolCreate(cudaMemPool_t *memPool, const struct cudaMemPoolProps *poolProps);
+
+/**
+ * \brief Destroys the specified memory pool 
+ *
+ * If any pointers obtained from this pool haven't been freed or
+ * the pool has free operations that haven't completed
+ * when ::cudaMemPoolDestroy is invoked, the function will return immediately and the
+ * resources associated with the pool will be released automatically
+ * once there are no more outstanding allocations.
+ *
+ * Destroying the current mempool of a device sets the default mempool of
+ * that device as the current mempool for that device.
+ *
+ * \note A device's default memory pool cannot be destroyed.
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa cuMemPoolDestroy, ::cudaFreeAsync, ::cudaDeviceSetMemPool, ::cudaDeviceGetDefaultMemPool, ::cudaDeviceGetMemPool, ::cudaMemPoolCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolDestroy(cudaMemPool_t memPool);
+
+/**
+ * \brief Allocates memory from a specified pool with stream ordered semantics.
+ *
+ * Inserts an allocation operation into \p hStream.
+ * A pointer to the allocated memory is returned immediately in *dptr.
+ * The allocation must not be accessed until the the allocation operation completes.
+ * The allocation comes from the specified memory pool.
+ *
+ * \note
+ *    -  The specified memory pool may be from a device different than that of the specified \p hStream.
+ *
+ *    -  Basic stream ordering allows future work submitted into the same stream to use the allocation.
+ *       Stream query, stream synchronize, and CUDA events can be used to guarantee that the allocation
+ *       operation completes before work submitted in a separate stream runs.
+ *
+ * \note During stream capture, this function results in the creation of an allocation node.  In this case,
+ *       the allocation is owned by the graph instead of the memory pool. The memory pool's properties
+ *       are used to set the node's creation parameters.
+ *
+ * \param[out] ptr     - Returned device pointer
+ * \param[in] bytesize - Number of bytes to allocate
+ * \param[in] memPool  - The pool to allocate from
+ * \param[in] stream   - The stream establishing the stream ordering semantic
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorOutOfMemory
+ *
+ * \sa ::cuMemAllocFromPoolAsync,
+ * \ref ::cudaMallocAsync(void** ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream)  "cudaMallocAsync (C++ API)", 
+ * ::cudaMallocAsync, ::cudaFreeAsync, ::cudaDeviceGetDefaultMemPool, ::cudaMemPoolCreate, ::cudaMemPoolSetAccess, ::cudaMemPoolSetAttribute
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMallocFromPoolAsync(void **ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream);
+
+/**
+ * \brief Exports a memory pool to the requested handle type.
+ *
+ * Given an IPC capable mempool, create an OS handle to share the pool with another process.
+ * A recipient process can convert the shareable handle into a mempool with ::cudaMemPoolImportFromShareableHandle.
+ * Individual pointers can then be shared with the ::cudaMemPoolExportPointer and ::cudaMemPoolImportPointer APIs.
+ * The implementation of what the shareable handle is and how it can be transferred is defined by the requested
+ * handle type.
+ *
+ * \note: To create an IPC capable mempool, create a mempool with a CUmemAllocationHandleType other than cudaMemHandleTypeNone.
+ *
+ * \param[out] handle_out  - pointer to the location in which to store the requested handle 
+ * \param[in] pool         - pool to export
+ * \param[in] handleType   - the type of handle to create
+ * \param[in] flags        - must be 0
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOutOfMemory
+ *
+ * \sa ::cuMemPoolExportToShareableHandle, ::cudaMemPoolImportFromShareableHandle, ::cudaMemPoolExportPointer, ::cudaMemPoolImportPointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolExportToShareableHandle(
+    void                            *shareableHandle,
+    cudaMemPool_t                    memPool,
+    enum cudaMemAllocationHandleType handleType,
+    unsigned int                     flags);
+
+/**
+ * \brief imports a memory pool from a shared handle.
+ *
+ * Specific allocations can be imported from the imported pool with ::cudaMemPoolImportPointer.
+ *
+ * \note Imported memory pools do not support creating new allocations.
+ *       As such imported memory pools may not be used in ::cudaDeviceSetMemPool
+ *       or ::cudaMallocFromPoolAsync calls.
+ *
+ * \param[out] pool_out    - Returned memory pool
+ * \param[in] handle       - OS handle of the pool to open
+ * \param[in] handleType   - The type of handle being imported
+ * \param[in] flags        - must be 0
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOutOfMemory
+ *
+ * \sa ::cuMemPoolImportFromShareableHandle, ::cudaMemPoolExportToShareableHandle, ::cudaMemPoolExportPointer, ::cudaMemPoolImportPointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolImportFromShareableHandle(
+    cudaMemPool_t                   *memPool,
+    void                            *shareableHandle,
+    enum cudaMemAllocationHandleType handleType,
+    unsigned int                     flags);
+
+/**
+ * \brief Export data to share a memory pool allocation between processes.
+ *
+ * Constructs \p shareData_out for sharing a specific allocation from an already shared memory pool.
+ * The recipient process can import the allocation with the ::cudaMemPoolImportPointer api.
+ * The data is not a handle and may be shared through any IPC mechanism.
+ *
+ * \param[out] shareData_out - Returned export data
+ * \param[in] ptr            - pointer to memory being exported
+ *
+ * \returns
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOutOfMemory
+ *
+ * \sa ::cuMemPoolExportPointer, ::cudaMemPoolExportToShareableHandle, ::cudaMemPoolImportFromShareableHandle, ::cudaMemPoolImportPointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolExportPointer(struct cudaMemPoolPtrExportData *exportData, void *ptr);
+
+/**
+ * \brief Import a memory pool allocation from another process.
+ *
+ * Returns in \p ptr_out a pointer to the imported memory.
+ * The imported memory must not be accessed before the allocation operation completes
+ * in the exporting process. The imported memory must be freed from all importing processes before
+ * being freed in the exporting process. The pointer may be freed with cudaFree
+ * or cudaFreeAsync.  If ::cudaFreeAsync is used, the free must be completed
+ * on the importing process before the free operation on the exporting process.
+ *
+ * \note The ::cudaFreeAsync api may be used in the exporting process before
+ *       the ::cudaFreeAsync operation completes in its stream as long as the
+ *       ::cudaFreeAsync in the exporting process specifies a stream with
+ *       a stream dependency on the importing process's ::cudaFreeAsync.
+ *
+ * \param[out] ptr_out  - pointer to imported memory
+ * \param[in] pool      - pool from which to import
+ * \param[in] shareData - data specifying the memory to import
+ *
+ * \returns
+ * ::CUDA_SUCCESS,
+ * ::CUDA_ERROR_INVALID_VALUE,
+ * ::CUDA_ERROR_NOT_INITIALIZED,
+ * ::CUDA_ERROR_OUT_OF_MEMORY
+ *
+ * \sa ::cuMemPoolImportPointer, ::cudaMemPoolExportToShareableHandle, ::cudaMemPoolImportFromShareableHandle, ::cudaMemPoolExportPointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaMemPoolImportPointer(void **ptr, cudaMemPool_t memPool, struct cudaMemPoolPtrExportData *exportData);
+
+/** @} */ /* END CUDART_MEMORY_POOLS */
+
+/**
+ * \defgroup CUDART_UNIFIED Unified Addressing
+ *
+ * ___MANBRIEF___ unified addressing functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the unified addressing functions of the CUDA 
+ * runtime application programming interface.
+ *
+ * @{
+ *
+ * \section CUDART_UNIFIED_overview Overview
+ *
+ * CUDA devices can share a unified address space with the host.  
+ * For these devices there is no distinction between a device
+ * pointer and a host pointer -- the same pointer value may be 
+ * used to access memory from the host program and from a kernel 
+ * running on the device (with exceptions enumerated below).
+ *
+ * \section CUDART_UNIFIED_support Supported Platforms
+ * 
+ * Whether or not a device supports unified addressing may be 
+ * queried by calling ::cudaGetDeviceProperties() with the device 
+ * property ::cudaDeviceProp::unifiedAddressing.
+ *
+ * Unified addressing is automatically enabled in 64-bit processes .
+ *
+ * \section CUDART_UNIFIED_lookup Looking Up Information from Pointer Values
+ *
+ * It is possible to look up information about the memory which backs a 
+ * pointer value.  For instance, one may want to know if a pointer points
+ * to host or device memory.  As another example, in the case of device 
+ * memory, one may want to know on which CUDA device the memory 
+ * resides.  These properties may be queried using the function 
+ * ::cudaPointerGetAttributes()
+ *
+ * Since pointers are unique, it is not necessary to specify information
+ * about the pointers specified to ::cudaMemcpy() and other copy functions.  
+ * The copy direction ::cudaMemcpyDefault may be used to specify that the 
+ * CUDA runtime should infer the location of the pointer from its value.
+ *
+ * \section CUDART_UNIFIED_automaphost Automatic Mapping of Host Allocated Host Memory
+ *
+ * All host memory allocated through all devices using ::cudaMallocHost() and
+ * ::cudaHostAlloc() is always directly accessible from all devices that 
+ * support unified addressing.  This is the case regardless of whether or 
+ * not the flags ::cudaHostAllocPortable and ::cudaHostAllocMapped are 
+ * specified.
+ *
+ * The pointer value through which allocated host memory may be accessed 
+ * in kernels on all devices that support unified addressing is the same 
+ * as the pointer value through which that memory is accessed on the host.
+ * It is not necessary to call ::cudaHostGetDevicePointer() to get the device 
+ * pointer for these allocations.  
+ *
+ * Note that this is not the case for memory allocated using the flag
+ * ::cudaHostAllocWriteCombined, as discussed below.
+ *
+ * \section CUDART_UNIFIED_autopeerregister Direct Access of Peer Memory
+ 
+ * Upon enabling direct access from a device that supports unified addressing 
+ * to another peer device that supports unified addressing using 
+ * ::cudaDeviceEnablePeerAccess() all memory allocated in the peer device using 
+ * ::cudaMalloc() and ::cudaMallocPitch() will immediately be accessible 
+ * by the current device.  The device pointer value through 
+ * which any peer's memory may be accessed in the current device 
+ * is the same pointer value through which that memory may be 
+ * accessed from the peer device. 
+ *
+ * \section CUDART_UNIFIED_exceptions Exceptions, Disjoint Addressing
+ * 
+ * Not all memory may be accessed on devices through the same pointer
+ * value through which they are accessed on the host.  These exceptions
+ * are host memory registered using ::cudaHostRegister() and host memory
+ * allocated using the flag ::cudaHostAllocWriteCombined.  For these 
+ * exceptions, there exists a distinct host and device address for the
+ * memory.  The device address is guaranteed to not overlap any valid host
+ * pointer range and is guaranteed to have the same value across all devices
+ * that support unified addressing.  
+ * 
+ * This device address may be queried using ::cudaHostGetDevicePointer() 
+ * when a device using unified addressing is current.  Either the host 
+ * or the unified device pointer value may be used to refer to this memory 
+ * in ::cudaMemcpy() and similar functions using the ::cudaMemcpyDefault 
+ * memory direction.
+ *
+ */
+
+/**
+ * \brief Returns attributes about a specified pointer
+ *
+ * Returns in \p *attributes the attributes of the pointer \p ptr.
+ * If pointer was not allocated in, mapped by or registered with context
+ * supporting unified addressing ::cudaErrorInvalidValue is returned.
+ *
+ * \note In CUDA 11.0 forward passing host pointer will return ::cudaMemoryTypeUnregistered
+ * in ::cudaPointerAttributes::type and call will return ::cudaSuccess.
+ *
+ * The ::cudaPointerAttributes structure is defined as:
+ * \code
+    struct cudaPointerAttributes {
+        enum cudaMemoryType type;
+        int device;
+        void *devicePointer;
+        void *hostPointer;
+    }
+    \endcode
+ * In this structure, the individual fields mean
+ *
+ * - \ref ::cudaPointerAttributes::type identifies type of memory. It can be
+ *    ::cudaMemoryTypeUnregistered for unregistered host memory,
+ *    ::cudaMemoryTypeHost for registered host memory, ::cudaMemoryTypeDevice for device
+ *    memory or  ::cudaMemoryTypeManaged for managed memory.
+ *
+ * - \ref ::cudaPointerAttributes::device "device" is the device against which
+ *   \p ptr was allocated.  If \p ptr has memory type ::cudaMemoryTypeDevice
+ *   then this identifies the device on which the memory referred to by \p ptr
+ *   physically resides.  If \p ptr has memory type ::cudaMemoryTypeHost then this
+ *   identifies the device which was current when the allocation was made
+ *   (and if that device is deinitialized then this allocation will vanish
+ *   with that device's state).
+ *
+ * - \ref ::cudaPointerAttributes::devicePointer "devicePointer" is
+ *   the device pointer alias through which the memory referred to by \p ptr
+ *   may be accessed on the current device.
+ *   If the memory referred to by \p ptr cannot be accessed directly by the 
+ *   current device then this is NULL.  
+ *
+ * - \ref ::cudaPointerAttributes::hostPointer "hostPointer" is
+ *   the host pointer alias through which the memory referred to by \p ptr
+ *   may be accessed on the host.
+ *   If the memory referred to by \p ptr cannot be accessed directly by the
+ *   host then this is NULL.
+ *
+ * \param attributes - Attributes for the specified pointer
+ * \param ptr        - Pointer to get attributes for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaGetDeviceCount, ::cudaGetDevice, ::cudaSetDevice,
+ * ::cudaChooseDevice,
+ * ::cuPointerGetAttributes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaPointerGetAttributes(struct cudaPointerAttributes *attributes, const void *ptr);
+
+/** @} */ /* END CUDART_UNIFIED */
+
+/**
+ * \defgroup CUDART_PEER Peer Device Memory Access
+ *
+ * ___MANBRIEF___ peer device memory access functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the peer device memory access functions of the CUDA runtime
+ * application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Queries if a device may directly access a peer device's memory.
+ *
+ * Returns in \p *canAccessPeer a value of 1 if device \p device is capable of
+ * directly accessing memory from \p peerDevice and 0 otherwise.  If direct
+ * access of \p peerDevice from \p device is possible, then access may be
+ * enabled by calling ::cudaDeviceEnablePeerAccess().
+ *
+ * \param canAccessPeer - Returned access capability
+ * \param device        - Device from which allocations on \p peerDevice are to
+ *                        be directly accessed.
+ * \param peerDevice    - Device on which the allocations to be directly accessed 
+ *                        by \p device reside.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceEnablePeerAccess,
+ * ::cudaDeviceDisablePeerAccess,
+ * ::cuDeviceCanAccessPeer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceCanAccessPeer(int *canAccessPeer, int device, int peerDevice);
+
+/**
+ * \brief Enables direct access to memory allocations on a peer device.
+ *
+ * On success, all allocations from \p peerDevice will immediately be accessible by
+ * the current device.  They will remain accessible until access is explicitly
+ * disabled using ::cudaDeviceDisablePeerAccess() or either device is reset using
+ * ::cudaDeviceReset().
+ *
+ * Note that access granted by this call is unidirectional and that in order to access
+ * memory on the current device from \p peerDevice, a separate symmetric call 
+ * to ::cudaDeviceEnablePeerAccess() is required.
+ *
+ * Note that there are both device-wide and system-wide limitations per system
+ * configuration, as noted in the CUDA Programming Guide under the section
+ * "Peer-to-Peer Memory Access".
+ *
+ * Returns ::cudaErrorInvalidDevice if ::cudaDeviceCanAccessPeer() indicates
+ * that the current device cannot directly access memory from \p peerDevice.
+ *
+ * Returns ::cudaErrorPeerAccessAlreadyEnabled if direct access of
+ * \p peerDevice from the current device has already been enabled.
+ *
+ * Returns ::cudaErrorInvalidValue if \p flags is not 0.
+ *
+ * \param peerDevice  - Peer device to enable direct access to from the current device
+ * \param flags       - Reserved for future use and must be set to 0
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice,
+ * ::cudaErrorPeerAccessAlreadyEnabled,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceCanAccessPeer,
+ * ::cudaDeviceDisablePeerAccess,
+ * ::cuCtxEnablePeerAccess
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceEnablePeerAccess(int peerDevice, unsigned int flags);
+
+/**
+ * \brief Disables direct access to memory allocations on a peer device.
+ *
+ * Returns ::cudaErrorPeerAccessNotEnabled if direct access to memory on
+ * \p peerDevice has not yet been enabled from the current device.
+ *
+ * \param peerDevice - Peer device to disable direct access to
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorPeerAccessNotEnabled,
+ * ::cudaErrorInvalidDevice
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa ::cudaDeviceCanAccessPeer,
+ * ::cudaDeviceEnablePeerAccess,
+ * ::cuCtxDisablePeerAccess
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDeviceDisablePeerAccess(int peerDevice);
+
+/** @} */ /* END CUDART_PEER */
+
+/** \defgroup CUDART_OPENGL OpenGL Interoperability */
+
+/** \defgroup CUDART_OPENGL_DEPRECATED OpenGL Interoperability [DEPRECATED] */
+
+/** \defgroup CUDART_D3D9 Direct3D 9 Interoperability */
+
+/** \defgroup CUDART_D3D9_DEPRECATED Direct3D 9 Interoperability [DEPRECATED] */
+
+/** \defgroup CUDART_D3D10 Direct3D 10 Interoperability */
+
+/** \defgroup CUDART_D3D10_DEPRECATED Direct3D 10 Interoperability [DEPRECATED] */
+
+/** \defgroup CUDART_D3D11 Direct3D 11 Interoperability */
+
+/** \defgroup CUDART_D3D11_DEPRECATED Direct3D 11 Interoperability [DEPRECATED] */
+
+/** \defgroup CUDART_VDPAU VDPAU Interoperability */
+
+/** \defgroup CUDART_EGL EGL Interoperability */
+
+/**
+ * \defgroup CUDART_INTEROP Graphics Interoperability
+ *
+ * ___MANBRIEF___ graphics interoperability functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the graphics interoperability functions of the CUDA
+ * runtime application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Unregisters a graphics resource for access by CUDA
+ *
+ * Unregisters the graphics resource \p resource so it is not accessible by
+ * CUDA unless registered again.
+ *
+ * If \p resource is invalid then ::cudaErrorInvalidResourceHandle is
+ * returned.
+ *
+ * \param resource - Resource to unregister
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaGraphicsD3D9RegisterResource,
+ * ::cudaGraphicsD3D10RegisterResource,
+ * ::cudaGraphicsD3D11RegisterResource,
+ * ::cudaGraphicsGLRegisterBuffer,
+ * ::cudaGraphicsGLRegisterImage,
+ * ::cuGraphicsUnregisterResource
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource);
+
+/**
+ * \brief Set usage flags for mapping a graphics resource
+ *
+ * Set \p flags for mapping the graphics resource \p resource.
+ *
+ * Changes to \p flags will take effect the next time \p resource is mapped.
+ * The \p flags argument may be any of the following:
+ * - ::cudaGraphicsMapFlagsNone: Specifies no hints about how \p resource will
+ *     be used. It is therefore assumed that CUDA may read from or write to \p resource.
+ * - ::cudaGraphicsMapFlagsReadOnly: Specifies that CUDA will not write to \p resource.
+ * - ::cudaGraphicsMapFlagsWriteDiscard: Specifies CUDA will not read from \p resource and will
+ *   write over the entire contents of \p resource, so none of the data
+ *   previously stored in \p resource will be preserved.
+ *
+ * If \p resource is presently mapped for access by CUDA then ::cudaErrorUnknown is returned.
+ * If \p flags is not one of the above values then ::cudaErrorInvalidValue is returned.
+ *
+ * \param resource - Registered resource to set flags for
+ * \param flags    - Parameters for resource mapping
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown,
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsMapResources,
+ * ::cuGraphicsResourceSetMapFlags
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsResourceSetMapFlags(cudaGraphicsResource_t resource, unsigned int flags);
+
+/**
+ * \brief Map graphics resources for access by CUDA
+ *
+ * Maps the \p count graphics resources in \p resources for access by CUDA.
+ *
+ * The resources in \p resources may be accessed by CUDA until they
+ * are unmapped. The graphics API from which \p resources were registered
+ * should not access any resources while they are mapped by CUDA. If an
+ * application does so, the results are undefined.
+ *
+ * This function provides the synchronization guarantee that any graphics calls
+ * issued before ::cudaGraphicsMapResources() will complete before any subsequent CUDA
+ * work issued in \p stream begins.
+ *
+ * If \p resources contains any duplicate entries then ::cudaErrorInvalidResourceHandle
+ * is returned. If any of \p resources are presently mapped for access by
+ * CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count     - Number of resources to map
+ * \param resources - Resources to map for CUDA
+ * \param stream    - Stream for synchronization
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cudaGraphicsSubResourceGetMappedArray,
+ * ::cudaGraphicsUnmapResources,
+ * ::cuGraphicsMapResources
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsMapResources(int count, cudaGraphicsResource_t *resources, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Unmap graphics resources.
+ *
+ * Unmaps the \p count graphics resources in \p resources.
+ *
+ * Once unmapped, the resources in \p resources may not be accessed by CUDA
+ * until they are mapped again.
+ *
+ * This function provides the synchronization guarantee that any CUDA work issued
+ * in \p stream before ::cudaGraphicsUnmapResources() will complete before any
+ * subsequently issued graphics work begins.
+ *
+ * If \p resources contains any duplicate entries then ::cudaErrorInvalidResourceHandle
+ * is returned. If any of \p resources are not presently mapped for access by
+ * CUDA then ::cudaErrorUnknown is returned.
+ *
+ * \param count     - Number of resources to unmap
+ * \param resources - Resources to unmap
+ * \param stream    - Stream for synchronization
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \note_null_stream
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsMapResources,
+ * ::cuGraphicsUnmapResources
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsUnmapResources(int count, cudaGraphicsResource_t *resources, cudaStream_t stream __dv(0));
+
+/**
+ * \brief Get an device pointer through which to access a mapped graphics resource.
+ *
+ * Returns in \p *devPtr a pointer through which the mapped graphics resource
+ * \p resource may be accessed.
+ * Returns in \p *size the size of the memory in bytes which may be accessed from that pointer.
+ * The value set in \p devPtr may change every time that \p resource is mapped.
+ *
+ * If \p resource is not a buffer then it cannot be accessed via a pointer and
+ * ::cudaErrorUnknown is returned.
+ * If \p resource is not mapped then ::cudaErrorUnknown is returned.
+ * *
+ * \param devPtr     - Returned pointer through which \p resource may be accessed
+ * \param size       - Returned size of the buffer accessible starting at \p *devPtr
+ * \param resource   - Mapped resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsMapResources,
+ * ::cudaGraphicsSubResourceGetMappedArray,
+ * ::cuGraphicsResourceGetMappedPointer
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsResourceGetMappedPointer(void **devPtr, size_t *size, cudaGraphicsResource_t resource);
+
+/**
+ * \brief Get an array through which to access a subresource of a mapped graphics resource.
+ *
+ * Returns in \p *array an array through which the subresource of the mapped
+ * graphics resource \p resource which corresponds to array index \p arrayIndex
+ * and mipmap level \p mipLevel may be accessed.  The value set in \p array may
+ * change every time that \p resource is mapped.
+ *
+ * If \p resource is not a texture then it cannot be accessed via an array and
+ * ::cudaErrorUnknown is returned.
+ * If \p arrayIndex is not a valid array index for \p resource then
+ * ::cudaErrorInvalidValue is returned.
+ * If \p mipLevel is not a valid mipmap level for \p resource then
+ * ::cudaErrorInvalidValue is returned.
+ * If \p resource is not mapped then ::cudaErrorUnknown is returned.
+ *
+ * \param array       - Returned array through which a subresource of \p resource may be accessed
+ * \param resource    - Mapped resource to access
+ * \param arrayIndex  - Array index for array textures or cubemap face
+ *                      index as defined by ::cudaGraphicsCubeFace for
+ *                      cubemap textures for the subresource to access
+ * \param mipLevel    - Mipmap level for the subresource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsSubResourceGetMappedArray
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsSubResourceGetMappedArray(cudaArray_t *array, cudaGraphicsResource_t resource, unsigned int arrayIndex, unsigned int mipLevel);
+
+/**
+ * \brief Get a mipmapped array through which to access a mapped graphics resource.
+ *
+ * Returns in \p *mipmappedArray a mipmapped array through which the mapped
+ * graphics resource \p resource may be accessed. The value set in \p mipmappedArray may
+ * change every time that \p resource is mapped.
+ *
+ * If \p resource is not a texture then it cannot be accessed via an array and
+ * ::cudaErrorUnknown is returned.
+ * If \p resource is not mapped then ::cudaErrorUnknown is returned.
+ *
+ * \param mipmappedArray - Returned mipmapped array through which \p resource may be accessed
+ * \param resource       - Mapped resource to access
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorUnknown
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphicsResourceGetMappedPointer,
+ * ::cuGraphicsResourceGetMappedMipmappedArray
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphicsResourceGetMappedMipmappedArray(cudaMipmappedArray_t *mipmappedArray, cudaGraphicsResource_t resource);
+
+/** @} */ /* END CUDART_INTEROP */
+
+/**
+ * \defgroup CUDART_TEXTURE Texture Reference Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ texture reference management functions of the CUDA runtime
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the low level texture reference management functions
+ * of the CUDA runtime application programming interface.
+ *
+ * Some functions have overloaded C++ API template versions documented separately in the
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * @{
+ */
+
+/**
+ * \brief Binds a memory area to a texture
+ *
+ * \deprecated
+ *
+ * Binds \p size bytes of the memory area pointed to by \p devPtr to the
+ * texture reference \p texref. \p desc describes how the memory is interpreted
+ * when fetching values from the texture. Any memory previously bound to
+ * \p texref is unbound.
+ *
+ * Since the hardware enforces an alignment requirement on texture base
+ * addresses,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture()"
+ * returns in \p *offset a byte offset that
+ * must be applied to texture fetches in order to read from the desired memory.
+ * This offset must be divided by the texel size and passed to kernels that
+ * read from the texture so they can be applied to the ::tex1Dfetch() function.
+ * If the device memory pointer was returned from ::cudaMalloc(), the offset is
+ * guaranteed to be 0 and NULL may be passed as the \p offset parameter.
+ *
+ * The total number of elements (or texels) in the linear address range
+ * cannot exceed ::cudaDeviceProp::maxTexture1DLinear[0].
+ * The number of elements is computed as (\p size / elementSize),
+ * where elementSize is determined from \p desc.
+ *
+ * \param offset - Offset in bytes
+ * \param texref - Texture to bind
+ * \param devPtr - Memory area on device
+ * \param desc   - Channel format
+ * \param size   - Size of the memory area pointed to by devPtr
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct texture< T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t) "cudaBindTexture (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)",
+ * ::cuTexRefSetAddress,
+ * ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetFormat,
+ * ::cuTexRefSetFlags,
+ * ::cuTexRefSetBorderColor
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaBindTexture(size_t *offset, const struct textureReference *texref, const void *devPtr, const struct cudaChannelFormatDesc *desc, size_t size __dv(UINT_MAX));
+
+/**
+ * \brief Binds a 2D memory area to a texture
+ *
+ * \deprecated
+ *
+ * Binds the 2D memory area pointed to by \p devPtr to the
+ * texture reference \p texref. The size of the area is constrained by
+ * \p width in texel units, \p height in texel units, and \p pitch in byte
+ * units. \p desc describes how the memory is interpreted when fetching values
+ * from the texture. Any memory previously bound to \p texref is unbound.
+ *
+ * Since the hardware enforces an alignment requirement on texture base
+ * addresses, ::cudaBindTexture2D() returns in \p *offset a byte offset that
+ * must be applied to texture fetches in order to read from the desired memory.
+ * This offset must be divided by the texel size and passed to kernels that
+ * read from the texture so they can be applied to the ::tex2D() function.
+ * If the device memory pointer was returned from ::cudaMalloc(), the offset is
+ * guaranteed to be 0 and NULL may be passed as the \p offset parameter.
+ *
+ * \p width and \p height, which are specified in elements (or texels), cannot
+ * exceed ::cudaDeviceProp::maxTexture2DLinear[0] and ::cudaDeviceProp::maxTexture2DLinear[1]
+ * respectively. \p pitch, which is specified in bytes, cannot exceed
+ * ::cudaDeviceProp::maxTexture2DLinear[2].
+ *
+ * The driver returns ::cudaErrorInvalidValue if \p pitch is not a multiple of
+ * ::cudaDeviceProp::texturePitchAlignment.
+ *
+ * \param offset - Offset in bytes
+ * \param texref - Texture reference to bind
+ * \param devPtr - 2D memory area on device
+ * \param desc   - Channel format
+ * \param width  - Width in texel units
+ * \param height - Height in texel units
+ * \param pitch  - Pitch in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture< T, dim, readMode>&, const void*, const struct cudaChannelFormatDesc&, size_t, size_t, size_t) "cudaBindTexture2D (C++ API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct texture<T, dim, readMode>&, const void*, size_t, size_t, size_t) "cudaBindTexture2D (C++ API, inherited channel descriptor)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)",
+ * ::cuTexRefSetAddress2D,
+ * ::cuTexRefSetFormat,
+ * ::cuTexRefSetFlags,
+ * ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetBorderColor
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaBindTexture2D(size_t *offset, const struct textureReference *texref, const void *devPtr, const struct cudaChannelFormatDesc *desc, size_t width, size_t height, size_t pitch);
+
+/**
+ * \brief Binds an array to a texture
+ *
+ * \deprecated
+ *
+ * Binds the CUDA array \p array to the texture reference \p texref.
+ * \p desc describes how the memory is interpreted when fetching values from
+ * the texture. Any CUDA array previously bound to \p texref is unbound.
+ *
+ * \param texref - Texture to bind
+ * \param array  - Memory array on device
+ * \param desc   - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture< T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)",
+ * ::cuTexRefSetArray,
+ * ::cuTexRefSetFormat,
+ * ::cuTexRefSetFlags,
+ * ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetFilterMode,
+ * ::cuTexRefSetBorderColor,
+ * ::cuTexRefSetMaxAnisotropy
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaBindTextureToArray(const struct textureReference *texref, cudaArray_const_t array, const struct cudaChannelFormatDesc *desc);
+
+/**
+ * \brief Binds a mipmapped array to a texture
+ *
+ * \deprecated
+ *
+ * Binds the CUDA mipmapped array \p mipmappedArray to the texture reference \p texref.
+ * \p desc describes how the memory is interpreted when fetching values from
+ * the texture. Any CUDA mipmapped array previously bound to \p texref is unbound.
+ *
+ * \param texref         - Texture to bind
+ * \param mipmappedArray - Memory mipmapped array on device
+ * \param desc           - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct texture< T, dim, readMode>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindTextureToArray (C++ API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)",
+ * ::cuTexRefSetMipmappedArray,
+ * ::cuTexRefSetMipmapFilterMode,
+ * ::cuTexRefSetMipmapLevelClamp,
+ * ::cuTexRefSetMipmapLevelBias,
+ * ::cuTexRefSetFormat,
+ * ::cuTexRefSetFlags,
+ * ::cuTexRefSetAddressMode,
+ * ::cuTexRefSetBorderColor,
+ * ::cuTexRefSetMaxAnisotropy
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaBindTextureToMipmappedArray(const struct textureReference *texref, cudaMipmappedArray_const_t mipmappedArray, const struct cudaChannelFormatDesc *desc);
+
+/**
+ * \brief Unbinds a texture
+ *
+ * \deprecated
+ *
+ * Unbinds the texture bound to \p texref. If \p texref is not currently bound, no operation is performed.
+ *
+ * \param texref - Texture to unbind
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaUnbindTexture(const struct texture< T, dim, readMode>&) "cudaUnbindTexture (C++ API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)"
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaUnbindTexture(const struct textureReference *texref);
+
+/**
+ * \brief Get the alignment offset of a texture
+ *
+ * \deprecated
+ *
+ * Returns in \p *offset the offset that was returned when texture reference
+ * \p texref was bound.
+ *
+ * \param offset - Offset of texture reference in bytes
+ * \param texref - Texture to get offset of
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidTexture,
+ * ::cudaErrorInvalidTextureBinding
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc, ::cudaGetTextureReference,
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct texture< T, dim, readMode>&) "cudaGetTextureAlignmentOffset (C++ API)"
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGetTextureAlignmentOffset(size_t *offset, const struct textureReference *texref);
+
+/**
+ * \brief Get the texture reference associated with a symbol
+ *
+ * \deprecated
+ *
+ * Returns in \p *texref the structure associated to the texture reference
+ * defined by symbol \p symbol.
+ *
+ * \param texref - Texture reference associated with symbol
+ * \param symbol - Texture to get reference for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidTexture
+ * \notefnerr
+ * \note_string_api_deprecation_50
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaGetChannelDesc,
+ * \ref ::cudaGetTextureAlignmentOffset(size_t*, const struct textureReference*) "cudaGetTextureAlignmentOffset (C API)",
+ * \ref ::cudaBindTexture(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t) "cudaBindTexture (C API)",
+ * \ref ::cudaBindTexture2D(size_t*, const struct textureReference*, const void*, const struct cudaChannelFormatDesc*, size_t, size_t, size_t) "cudaBindTexture2D (C API)",
+ * \ref ::cudaBindTextureToArray(const struct textureReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindTextureToArray (C API)",
+ * \ref ::cudaUnbindTexture(const struct textureReference*) "cudaUnbindTexture (C API)",
+ * ::cuModuleGetTexRef
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGetTextureReference(const struct textureReference **texref, const void *symbol);
+
+/** @} */ /* END CUDART_TEXTURE */
+
+/**
+ * \defgroup CUDART_SURFACE Surface Reference Management [DEPRECATED]
+ *
+ * ___MANBRIEF___ surface reference management functions of the CUDA runtime
+ * API (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the low level surface reference management functions
+ * of the CUDA runtime application programming interface.
+ *
+ * Some functions have overloaded C++ API template versions documented separately in the
+ * \ref CUDART_HIGHLEVEL "C++ API Routines" module.
+ *
+ * @{
+ */
+
+/**
+ * \brief Binds an array to a surface
+ *
+ * \deprecated
+ *
+ * Binds the CUDA array \p array to the surface reference \p surfref.
+ * \p desc describes how the memory is interpreted when fetching values from
+ * the surface. Any CUDA array previously bound to \p surfref is unbound.
+ *
+ * \param surfref - Surface to bind
+ * \param array  - Memory array on device
+ * \param desc   - Channel format
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidSurface
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaBindSurfaceToArray(const struct surface< T, dim>&, cudaArray_const_t, const struct cudaChannelFormatDesc&) "cudaBindSurfaceToArray (C++ API)",
+ * \ref ::cudaBindSurfaceToArray(const struct surface< T, dim>&, cudaArray_const_t) "cudaBindSurfaceToArray (C++ API, inherited channel descriptor)",
+ * ::cudaGetSurfaceReference,
+ * ::cuSurfRefSetArray
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaBindSurfaceToArray(const struct surfaceReference *surfref, cudaArray_const_t array, const struct cudaChannelFormatDesc *desc);
+
+/**
+ * \brief Get the surface reference associated with a symbol
+ *
+ * \deprecated
+ *
+ * Returns in \p *surfref the structure associated to the surface reference
+ * defined by symbol \p symbol.
+ *
+ * \param surfref - Surface reference associated with symbol
+ * \param symbol - Surface to get reference for
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidSurface
+ * \notefnerr
+ * \note_string_api_deprecation_50
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * \ref ::cudaBindSurfaceToArray(const struct surfaceReference*, cudaArray_const_t, const struct cudaChannelFormatDesc*) "cudaBindSurfaceToArray (C API)",
+ * ::cuModuleGetSurfRef
+ */
+extern __CUDA_DEPRECATED __host__ cudaError_t CUDARTAPI cudaGetSurfaceReference(const struct surfaceReference **surfref, const void *symbol);
+
+/** @} */ /* END CUDART_SURFACE */
+
+/**
+ * \defgroup CUDART_TEXTURE_OBJECT Texture Object Management
+ *
+ * ___MANBRIEF___ texture object management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the low level texture object management functions
+ * of the CUDA runtime application programming interface. The texture
+ * object API is only supported on devices of compute capability 3.0 or higher.
+ *
+ * @{
+ */
+
+/**
+ * \brief Get the channel descriptor of an array
+ *
+ * Returns in \p *desc the channel descriptor of the CUDA array \p array.
+ *
+ * \param desc  - Channel format
+ * \param array - Memory array on device
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa \ref ::cudaCreateChannelDesc(int, int, int, int, cudaChannelFormatKind) "cudaCreateChannelDesc (C API)",
+ * ::cudaCreateTextureObject, ::cudaCreateSurfaceObject
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetChannelDesc(struct cudaChannelFormatDesc *desc, cudaArray_const_t array);
+
+/**
+ * \brief Returns a channel descriptor using the specified format
+ *
+ * Returns a channel descriptor with format \p f and number of bits of each
+ * component \p x, \p y, \p z, and \p w.  The ::cudaChannelFormatDesc is
+ * defined as:
+ * \code
+  struct cudaChannelFormatDesc {
+    int x, y, z, w;
+    enum cudaChannelFormatKind f;
+  };
+ * \endcode
+ *
+ * where ::cudaChannelFormatKind is one of ::cudaChannelFormatKindSigned,
+ * ::cudaChannelFormatKindUnsigned, or ::cudaChannelFormatKindFloat.
+ *
+ * \param x - X component
+ * \param y - Y component
+ * \param z - Z component
+ * \param w - W component
+ * \param f - Channel format
+ *
+ * \return
+ * Channel descriptor with format \p f
+ *
+ * \sa \ref ::cudaCreateChannelDesc(void) "cudaCreateChannelDesc (C++ API)",
+ * ::cudaGetChannelDesc, ::cudaCreateTextureObject, ::cudaCreateSurfaceObject
+ */
+extern __host__ struct cudaChannelFormatDesc CUDARTAPI cudaCreateChannelDesc(int x, int y, int z, int w, enum cudaChannelFormatKind f);
+
+/**
+ * \brief Creates a texture object
+ *
+ * Creates a texture object and returns it in \p pTexObject. \p pResDesc describes
+ * the data to texture from. \p pTexDesc describes how the data should be sampled.
+ * \p pResViewDesc is an optional argument that specifies an alternate format for
+ * the data described by \p pResDesc, and also describes the subresource region
+ * to restrict access to when texturing. \p pResViewDesc can only be specified if
+ * the type of resource is a CUDA array or a CUDA mipmapped array.
+ *
+ * Texture objects are only supported on devices of compute capability 3.0 or higher.
+ * Additionally, a texture object is an opaque value, and, as such, should only be
+ * accessed through CUDA API calls.
+ *
+ * The ::cudaResourceDesc structure is defined as:
+ * \code
+        struct cudaResourceDesc {
+            enum cudaResourceType resType;
+            
+            union {
+                struct {
+                    cudaArray_t array;
+                } array;
+                struct {
+                    cudaMipmappedArray_t mipmap;
+                } mipmap;
+                struct {
+                    void *devPtr;
+                    struct cudaChannelFormatDesc desc;
+                    size_t sizeInBytes;
+                } linear;
+                struct {
+                    void *devPtr;
+                    struct cudaChannelFormatDesc desc;
+                    size_t width;
+                    size_t height;
+                    size_t pitchInBytes;
+                } pitch2D;
+            } res;
+        };
+ * \endcode
+ * where:
+ * - ::cudaResourceDesc::resType specifies the type of resource to texture from.
+ * CUresourceType is defined as:
+ * \code
+        enum cudaResourceType {
+            cudaResourceTypeArray          = 0x00,
+            cudaResourceTypeMipmappedArray = 0x01,
+            cudaResourceTypeLinear         = 0x02,
+            cudaResourceTypePitch2D        = 0x03
+        };
+ * \endcode
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeArray, ::cudaResourceDesc::res::array::array
+ * must be set to a valid CUDA array handle.
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeMipmappedArray, ::cudaResourceDesc::res::mipmap::mipmap
+ * must be set to a valid CUDA mipmapped array handle and ::cudaTextureDesc::normalizedCoords must be set to true.
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeLinear, ::cudaResourceDesc::res::linear::devPtr
+ * must be set to a valid device pointer, that is aligned to ::cudaDeviceProp::textureAlignment.
+ * ::cudaResourceDesc::res::linear::desc describes the format and the number of components per array element. ::cudaResourceDesc::res::linear::sizeInBytes
+ * specifies the size of the array in bytes. The total number of elements in the linear address range cannot exceed 
+ * ::cudaDeviceProp::maxTexture1DLinear. The number of elements is computed as (sizeInBytes / sizeof(desc)).
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypePitch2D, ::cudaResourceDesc::res::pitch2D::devPtr
+ * must be set to a valid device pointer, that is aligned to ::cudaDeviceProp::textureAlignment.
+ * ::cudaResourceDesc::res::pitch2D::desc describes the format and the number of components per array element. ::cudaResourceDesc::res::pitch2D::width
+ * and ::cudaResourceDesc::res::pitch2D::height specify the width and height of the array in elements, and cannot exceed
+ * ::cudaDeviceProp::maxTexture2DLinear[0] and ::cudaDeviceProp::maxTexture2DLinear[1] respectively.
+ * ::cudaResourceDesc::res::pitch2D::pitchInBytes specifies the pitch between two rows in bytes and has to be aligned to 
+ * ::cudaDeviceProp::texturePitchAlignment. Pitch cannot exceed ::cudaDeviceProp::maxTexture2DLinear[2].
+ *
+ *
+ * The ::cudaTextureDesc struct is defined as
+ * \code
+        struct cudaTextureDesc {
+            enum cudaTextureAddressMode addressMode[3];
+            enum cudaTextureFilterMode  filterMode;
+            enum cudaTextureReadMode    readMode;
+            int                         sRGB;
+            float                       borderColor[4];
+            int                         normalizedCoords;
+            unsigned int                maxAnisotropy;
+            enum cudaTextureFilterMode  mipmapFilterMode;
+            float                       mipmapLevelBias;
+            float                       minMipmapLevelClamp;
+            float                       maxMipmapLevelClamp;
+            int                         disableTrilinearOptimization;
+        };
+ * \endcode
+ * where
+ * - ::cudaTextureDesc::addressMode specifies the addressing mode for each dimension of the texture data. ::cudaTextureAddressMode is defined as:
+ *   \code
+        enum cudaTextureAddressMode {
+            cudaAddressModeWrap   = 0,
+            cudaAddressModeClamp  = 1,
+            cudaAddressModeMirror = 2,
+            cudaAddressModeBorder = 3
+        };
+ *   \endcode
+ *   This is ignored if ::cudaResourceDesc::resType is ::cudaResourceTypeLinear. Also, if ::cudaTextureDesc::normalizedCoords
+ *   is set to zero, ::cudaAddressModeWrap and ::cudaAddressModeMirror won't be supported and will be switched to ::cudaAddressModeClamp.
+ *
+ * - ::cudaTextureDesc::filterMode specifies the filtering mode to be used when fetching from the texture. ::cudaTextureFilterMode is defined as:
+ *   \code
+        enum cudaTextureFilterMode {
+            cudaFilterModePoint  = 0,
+            cudaFilterModeLinear = 1
+        };
+ *   \endcode
+ *   This is ignored if ::cudaResourceDesc::resType is ::cudaResourceTypeLinear.
+ *
+ * - ::cudaTextureDesc::readMode specifies whether integer data should be converted to floating point or not. ::cudaTextureReadMode is defined as:
+ *   \code
+        enum cudaTextureReadMode {
+            cudaReadModeElementType     = 0,
+            cudaReadModeNormalizedFloat = 1
+        };
+ *   \endcode
+ *   Note that this applies only to 8-bit and 16-bit integer formats. 32-bit integer format would not be promoted, regardless of 
+ *   whether or not this ::cudaTextureDesc::readMode is set ::cudaReadModeNormalizedFloat is specified.
+ *
+ * - ::cudaTextureDesc::sRGB specifies whether sRGB to linear conversion should be performed during texture fetch.
+ *
+ * - ::cudaTextureDesc::borderColor specifies the float values of color. where:
+ *   ::cudaTextureDesc::borderColor[0] contains value of 'R', 
+ *   ::cudaTextureDesc::borderColor[1] contains value of 'G',
+ *   ::cudaTextureDesc::borderColor[2] contains value of 'B', 
+ *   ::cudaTextureDesc::borderColor[3] contains value of 'A'
+ *   Note that application using integer border color values will need to <reinterpret_cast> these values to float.
+ *   The values are set only when the addressing mode specified by ::cudaTextureDesc::addressMode is cudaAddressModeBorder.
+ *
+ * - ::cudaTextureDesc::normalizedCoords specifies whether the texture coordinates will be normalized or not.
+ *
+ * - ::cudaTextureDesc::maxAnisotropy specifies the maximum anistropy ratio to be used when doing anisotropic filtering. This value will be
+ *   clamped to the range [1,16].
+ *
+ * - ::cudaTextureDesc::mipmapFilterMode specifies the filter mode when the calculated mipmap level lies between two defined mipmap levels.
+ *
+ * - ::cudaTextureDesc::mipmapLevelBias specifies the offset to be applied to the calculated mipmap level.
+ *
+ * - ::cudaTextureDesc::minMipmapLevelClamp specifies the lower end of the mipmap level range to clamp access to.
+ *
+ * - ::cudaTextureDesc::maxMipmapLevelClamp specifies the upper end of the mipmap level range to clamp access to.
+ *
+ * - ::cudaTextureDesc::disableTrilinearOptimization specifies whether the trilinear filtering optimizations will be disabled.
+ *
+ * The ::cudaResourceViewDesc struct is defined as
+ * \code
+        struct cudaResourceViewDesc {
+            enum cudaResourceViewFormat format;
+            size_t                      width;
+            size_t                      height;
+            size_t                      depth;
+            unsigned int                firstMipmapLevel;
+            unsigned int                lastMipmapLevel;
+            unsigned int                firstLayer;
+            unsigned int                lastLayer;
+        };
+ * \endcode
+ * where:
+ * - ::cudaResourceViewDesc::format specifies how the data contained in the CUDA array or CUDA mipmapped array should
+ *   be interpreted. Note that this can incur a change in size of the texture data. If the resource view format is a block
+ *   compressed format, then the underlying CUDA array or CUDA mipmapped array has to have a 32-bit unsigned integer format
+ *   with 2 or 4 channels, depending on the block compressed format. For ex., BC1 and BC4 require the underlying CUDA array to have
+ *   a 32-bit unsigned int with 2 channels. The other BC formats require the underlying resource to have the same 32-bit unsigned int
+ *   format but with 4 channels.
+ *
+ * - ::cudaResourceViewDesc::width specifies the new width of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original width of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::cudaResourceViewDesc::height specifies the new height of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original height of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::cudaResourceViewDesc::depth specifies the new depth of the texture data. This value has to be equal to that of the
+ *   original resource.
+ *
+ * - ::cudaResourceViewDesc::firstMipmapLevel specifies the most detailed mipmap level. This will be the new mipmap level zero.
+ *   For non-mipmapped resources, this value has to be zero.::cudaTextureDesc::minMipmapLevelClamp and ::cudaTextureDesc::maxMipmapLevelClamp
+ *   will be relative to this value. For ex., if the firstMipmapLevel is set to 2, and a minMipmapLevelClamp of 1.2 is specified,
+ *   then the actual minimum mipmap level clamp will be 3.2.
+ *
+ * - ::cudaResourceViewDesc::lastMipmapLevel specifies the least detailed mipmap level. For non-mipmapped resources, this value
+ *   has to be zero.
+ *
+ * - ::cudaResourceViewDesc::firstLayer specifies the first layer index for layered textures. This will be the new layer zero.
+ *   For non-layered resources, this value has to be zero.
+ *
+ * - ::cudaResourceViewDesc::lastLayer specifies the last layer index for layered textures. For non-layered resources, 
+ *   this value has to be zero.
+ *
+ *
+ * \param pTexObject   - Texture object to create
+ * \param pResDesc     - Resource descriptor
+ * \param pTexDesc     - Texture descriptor
+ * \param pResViewDesc - Resource view descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDestroyTextureObject,
+ * ::cuTexObjectCreate
+ */
+
+extern __host__ cudaError_t CUDARTAPI cudaCreateTextureObject(cudaTextureObject_t *pTexObject, const struct cudaResourceDesc *pResDesc, const struct cudaTextureDesc *pTexDesc, const struct cudaResourceViewDesc *pResViewDesc);
+
+/**
+ * \brief Creates a texture object
+ *
+ * Creates a texture object and returns it in \p pTexObject. \p pResDesc describes
+ * the data to texture from. \p pTexDesc describes how the data should be sampled.
+ * \p pResViewDesc is an optional argument that specifies an alternate format for
+ * the data described by \p pResDesc, and also describes the subresource region
+ * to restrict access to when texturing. \p pResViewDesc can only be specified if
+ * the type of resource is a CUDA array or a CUDA mipmapped array.
+ *
+ * Texture objects are only supported on devices of compute capability 3.0 or higher.
+ * Additionally, a texture object is an opaque value, and, as such, should only be
+ * accessed through CUDA API calls.
+ *
+ * The ::cudaResourceDesc structure is defined as:
+ * \code
+        struct cudaResourceDesc {
+            enum cudaResourceType resType;
+            
+            union {
+                struct {
+                    cudaArray_t array;
+                } array;
+                struct {
+                    cudaMipmappedArray_t mipmap;
+                } mipmap;
+                struct {
+                    void *devPtr;
+                    struct cudaChannelFormatDesc desc;
+                    size_t sizeInBytes;
+                } linear;
+                struct {
+                    void *devPtr;
+                    struct cudaChannelFormatDesc desc;
+                    size_t width;
+                    size_t height;
+                    size_t pitchInBytes;
+                } pitch2D;
+            } res;
+        };
+ * \endcode
+ * where:
+ * - ::cudaResourceDesc::resType specifies the type of resource to texture from.
+ * CUresourceType is defined as:
+ * \code
+        enum cudaResourceType {
+            cudaResourceTypeArray          = 0x00,
+            cudaResourceTypeMipmappedArray = 0x01,
+            cudaResourceTypeLinear         = 0x02,
+            cudaResourceTypePitch2D        = 0x03
+        };
+ * \endcode
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeArray, ::cudaResourceDesc::res::array::array
+ * must be set to a valid CUDA array handle.
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeMipmappedArray, ::cudaResourceDesc::res::mipmap::mipmap
+ * must be set to a valid CUDA mipmapped array handle and ::cudaTextureDesc_v2::normalizedCoords must be set to true.
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypeLinear, ::cudaResourceDesc::res::linear::devPtr
+ * must be set to a valid device pointer, that is aligned to ::cudaDeviceProp::textureAlignment.
+ * ::cudaResourceDesc::res::linear::desc describes the format and the number of components per array element. ::cudaResourceDesc::res::linear::sizeInBytes
+ * specifies the size of the array in bytes. The total number of elements in the linear address range cannot exceed 
+ * ::cudaDeviceProp::maxTexture1DLinear. The number of elements is computed as (sizeInBytes / sizeof(desc)).
+ *
+ * \par
+ * If ::cudaResourceDesc::resType is set to ::cudaResourceTypePitch2D, ::cudaResourceDesc::res::pitch2D::devPtr
+ * must be set to a valid device pointer, that is aligned to ::cudaDeviceProp::textureAlignment.
+ * ::cudaResourceDesc::res::pitch2D::desc describes the format and the number of components per array element. ::cudaResourceDesc::res::pitch2D::width
+ * and ::cudaResourceDesc::res::pitch2D::height specify the width and height of the array in elements, and cannot exceed
+ * ::cudaDeviceProp::maxTexture2DLinear[0] and ::cudaDeviceProp::maxTexture2DLinear[1] respectively.
+ * ::cudaResourceDesc::res::pitch2D::pitchInBytes specifies the pitch between two rows in bytes and has to be aligned to 
+ * ::cudaDeviceProp::texturePitchAlignment. Pitch cannot exceed ::cudaDeviceProp::maxTexture2DLinear[2].
+ *
+ *
+ * The ::cudaTextureDesc_v2 struct is defined as
+ * \code
+        struct cudaTextureDesc_v2 {
+            enum cudaTextureAddressMode addressMode[3];
+            enum cudaTextureFilterMode  filterMode;
+            enum cudaTextureReadMode    readMode;
+            int                         sRGB;
+            float                       borderColor[4];
+            int                         normalizedCoords;
+            unsigned int                maxAnisotropy;
+            enum cudaTextureFilterMode  mipmapFilterMode;
+            float                       mipmapLevelBias;
+            float                       minMipmapLevelClamp;
+            float                       maxMipmapLevelClamp;
+            int                         disableTrilinearOptimization;
+            int                         seamlessCubemap;
+        };
+ * \endcode
+ * where
+ * - ::cudaTextureDesc_v2::addressMode specifies the addressing mode for each dimension of the texture data. ::cudaTextureAddressMode is defined as:
+ *   \code
+        enum cudaTextureAddressMode {
+            cudaAddressModeWrap   = 0,
+            cudaAddressModeClamp  = 1,
+            cudaAddressModeMirror = 2,
+            cudaAddressModeBorder = 3
+        };
+ *   \endcode
+ *   This is ignored if ::cudaResourceDesc::resType is ::cudaResourceTypeLinear. Also, if ::cudaTextureDesc_v2::normalizedCoords
+ *   is set to zero, ::cudaAddressModeWrap and ::cudaAddressModeMirror won't be supported and will be switched to ::cudaAddressModeClamp.
+ *
+ * - ::cudaTextureDesc_v2::filterMode specifies the filtering mode to be used when fetching from the texture. ::cudaTextureFilterMode is defined as:
+ *   \code
+        enum cudaTextureFilterMode {
+            cudaFilterModePoint  = 0,
+            cudaFilterModeLinear = 1
+        };
+ *   \endcode
+ *   This is ignored if ::cudaResourceDesc::resType is ::cudaResourceTypeLinear.
+ *
+ * - ::cudaTextureDesc_v2::readMode specifies whether integer data should be converted to floating point or not. ::cudaTextureReadMode is defined as:
+ *   \code
+        enum cudaTextureReadMode {
+            cudaReadModeElementType     = 0,
+            cudaReadModeNormalizedFloat = 1
+        };
+ *   \endcode
+ *   Note that this applies only to 8-bit and 16-bit integer formats. 32-bit integer format would not be promoted, regardless of 
+ *   whether or not this ::cudaTextureDesc_v2::readMode is set ::cudaReadModeNormalizedFloat is specified.
+ *
+ * - ::cudaTextureDesc_v2::sRGB specifies whether sRGB to linear conversion should be performed during texture fetch.
+ *
+ * - ::cudaTextureDesc_v2::borderColor specifies the float values of color. where:
+ *   ::cudaTextureDesc_v2::borderColor[0] contains value of 'R', 
+ *   ::cudaTextureDesc_v2::borderColor[1] contains value of 'G',
+ *   ::cudaTextureDesc_v2::borderColor[2] contains value of 'B', 
+ *   ::cudaTextureDesc_v2::borderColor[3] contains value of 'A'
+ *   Note that application using integer border color values will need to <reinterpret_cast> these values to float.
+ *   The values are set only when the addressing mode specified by ::cudaTextureDesc_v2::addressMode is cudaAddressModeBorder.
+ *
+ * - ::cudaTextureDesc_v2::normalizedCoords specifies whether the texture coordinates will be normalized or not.
+ *
+ * - ::cudaTextureDesc_v2::maxAnisotropy specifies the maximum anistropy ratio to be used when doing anisotropic filtering. This value will be
+ *   clamped to the range [1,16].
+ *
+ * - ::cudaTextureDesc_v2::mipmapFilterMode specifies the filter mode when the calculated mipmap level lies between two defined mipmap levels.
+ *
+ * - ::cudaTextureDesc_v2::mipmapLevelBias specifies the offset to be applied to the calculated mipmap level.
+ *
+ * - ::cudaTextureDesc_v2::minMipmapLevelClamp specifies the lower end of the mipmap level range to clamp access to.
+ *
+ * - ::cudaTextureDesc_v2::maxMipmapLevelClamp specifies the upper end of the mipmap level range to clamp access to.
+ *
+ * - ::cudaTextureDesc_v2::disableTrilinearOptimization specifies whether the trilinear filtering optimizations will be disabled.
+ *
+ * - ::cudaTextureDesc_v2::seamlessCubemap specifies whether seamless cube map filtering is enabled. This flag can only be specified if the 
+ *   underlying resource is a CUDA array or a CUDA mipmapped array that was created with the flag ::cudaArrayCubemap.
+ *   When seamless cube map filtering is enabled, texture address modes specified by ::cudaTextureDesc_v2::addressMode are ignored.
+ *   Instead, if the ::cudaTextureDesc_v2::filterMode is set to ::cudaFilterModePoint the address mode ::cudaAddressModeClamp will be applied for all dimensions.
+ *   If the ::cudaTextureDesc_v2::filterMode is set to ::cudaFilterModeLinear seamless cube map filtering will be performed when sampling along the cube face borders.
+ *
+ * The ::cudaResourceViewDesc struct is defined as
+ * \code
+        struct cudaResourceViewDesc {
+            enum cudaResourceViewFormat format;
+            size_t                      width;
+            size_t                      height;
+            size_t                      depth;
+            unsigned int                firstMipmapLevel;
+            unsigned int                lastMipmapLevel;
+            unsigned int                firstLayer;
+            unsigned int                lastLayer;
+        };
+ * \endcode
+ * where:
+ * - ::cudaResourceViewDesc::format specifies how the data contained in the CUDA array or CUDA mipmapped array should
+ *   be interpreted. Note that this can incur a change in size of the texture data. If the resource view format is a block
+ *   compressed format, then the underlying CUDA array or CUDA mipmapped array has to have a 32-bit unsigned integer format
+ *   with 2 or 4 channels, depending on the block compressed format. For ex., BC1 and BC4 require the underlying CUDA array to have
+ *   a 32-bit unsigned int with 2 channels. The other BC formats require the underlying resource to have the same 32-bit unsigned int
+ *   format but with 4 channels.
+ *
+ * - ::cudaResourceViewDesc::width specifies the new width of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original width of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::cudaResourceViewDesc::height specifies the new height of the texture data. If the resource view format is a block
+ *   compressed format, this value has to be 4 times the original height of the resource. For non block compressed formats,
+ *   this value has to be equal to that of the original resource.
+ *
+ * - ::cudaResourceViewDesc::depth specifies the new depth of the texture data. This value has to be equal to that of the
+ *   original resource.
+ *
+ * - ::cudaResourceViewDesc::firstMipmapLevel specifies the most detailed mipmap level. This will be the new mipmap level zero.
+ *   For non-mipmapped resources, this value has to be zero.::cudaTextureDesc_v2::minMipmapLevelClamp and ::cudaTextureDesc_v2::maxMipmapLevelClamp
+ *   will be relative to this value. For ex., if the firstMipmapLevel is set to 2, and a minMipmapLevelClamp of 1.2 is specified,
+ *   then the actual minimum mipmap level clamp will be 3.2.
+ *
+ * - ::cudaResourceViewDesc::lastMipmapLevel specifies the least detailed mipmap level. For non-mipmapped resources, this value
+ *   has to be zero.
+ *
+ * - ::cudaResourceViewDesc::firstLayer specifies the first layer index for layered textures. This will be the new layer zero.
+ *   For non-layered resources, this value has to be zero.
+ *
+ * - ::cudaResourceViewDesc::lastLayer specifies the last layer index for layered textures. For non-layered resources, 
+ *   this value has to be zero.
+ *
+ *
+ * \param pTexObject   - Texture object to create
+ * \param pResDesc     - Resource descriptor
+ * \param pTexDesc     - Texture descriptor
+ * \param pResViewDesc - Resource view descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDestroyTextureObject,
+ * ::cuTexObjectCreate
+ */
+
+extern __host__ cudaError_t CUDARTAPI cudaCreateTextureObject_v2(cudaTextureObject_t *pTexObject, const struct cudaResourceDesc *pResDesc, const struct cudaTextureDesc_v2 *pTexDesc, const struct cudaResourceViewDesc *pResViewDesc);
+
+/**
+ * \brief Destroys a texture object
+ *
+ * Destroys the texture object specified by \p texObject.
+ *
+ * \param texObject - Texture object to destroy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaCreateTextureObject,
+ * ::cuTexObjectDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDestroyTextureObject(cudaTextureObject_t texObject);
+
+/**
+ * \brief Returns a texture object's resource descriptor
+ *
+ * Returns the resource descriptor for the texture object specified by \p texObject.
+ *
+ * \param pResDesc  - Resource descriptor
+ * \param texObject - Texture object
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaCreateTextureObject,
+ * ::cuTexObjectGetResourceDesc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetTextureObjectResourceDesc(struct cudaResourceDesc *pResDesc, cudaTextureObject_t texObject);
+
+/**
+ * \brief Returns a texture object's texture descriptor
+ *
+ * Returns the texture descriptor for the texture object specified by \p texObject.
+ *
+ * \param pTexDesc  - Texture descriptor
+ * \param texObject - Texture object
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaCreateTextureObject,
+ * ::cuTexObjectGetTextureDesc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetTextureObjectTextureDesc(struct cudaTextureDesc *pTexDesc, cudaTextureObject_t texObject);
+
+/**
+ * \brief Returns a texture object's texture descriptor
+ *
+ * Returns the texture descriptor for the texture object specified by \p texObject.
+ *
+ * \param pTexDesc  - Texture descriptor
+ * \param texObject - Texture object
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaCreateTextureObject,
+ * ::cuTexObjectGetTextureDesc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetTextureObjectTextureDesc_v2(struct cudaTextureDesc_v2 *pTexDesc, cudaTextureObject_t texObject);
+
+/**
+ * \brief Returns a texture object's resource view descriptor
+ *
+ * Returns the resource view descriptor for the texture object specified by \p texObject.
+ * If no resource view was specified, ::cudaErrorInvalidValue is returned.
+ *
+ * \param pResViewDesc - Resource view descriptor
+ * \param texObject    - Texture object
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaCreateTextureObject,
+ * ::cuTexObjectGetResourceViewDesc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetTextureObjectResourceViewDesc(struct cudaResourceViewDesc *pResViewDesc, cudaTextureObject_t texObject);
+
+/** @} */ /* END CUDART_TEXTURE_OBJECT */
+
+/**
+ * \defgroup CUDART_SURFACE_OBJECT Surface Object Management
+ *
+ * ___MANBRIEF___ surface object management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the low level texture object management functions
+ * of the CUDA runtime application programming interface. The surface object 
+ * API is only supported on devices of compute capability 3.0 or higher.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates a surface object
+ *
+ * Creates a surface object and returns it in \p pSurfObject. \p pResDesc describes
+ * the data to perform surface load/stores on. ::cudaResourceDesc::resType must be 
+ * ::cudaResourceTypeArray and  ::cudaResourceDesc::res::array::array
+ * must be set to a valid CUDA array handle.
+ *
+ * Surface objects are only supported on devices of compute capability 3.0 or higher.
+ * Additionally, a surface object is an opaque value, and, as such, should only be
+ * accessed through CUDA API calls.
+ *
+ * \param pSurfObject - Surface object to create
+ * \param pResDesc    - Resource descriptor
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidChannelDescriptor,
+ * ::cudaErrorInvalidResourceHandle
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDestroySurfaceObject,
+ * ::cuSurfObjectCreate
+ */
+
+extern __host__ cudaError_t CUDARTAPI cudaCreateSurfaceObject(cudaSurfaceObject_t *pSurfObject, const struct cudaResourceDesc *pResDesc);
+
+/**
+ * \brief Destroys a surface object
+ *
+ * Destroys the surface object specified by \p surfObject.
+ *
+ * \param surfObject - Surface object to destroy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaCreateSurfaceObject,
+ * ::cuSurfObjectDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDestroySurfaceObject(cudaSurfaceObject_t surfObject);
+
+/**
+ * \brief Returns a surface object's resource descriptor
+ * Returns the resource descriptor for the surface object specified by \p surfObject.
+ *
+ * \param pResDesc   - Resource descriptor
+ * \param surfObject - Surface object
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaCreateSurfaceObject,
+ * ::cuSurfObjectGetResourceDesc
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetSurfaceObjectResourceDesc(struct cudaResourceDesc *pResDesc, cudaSurfaceObject_t surfObject);
+
+/** @} */ /* END CUDART_SURFACE_OBJECT */
+
+/**
+ * \defgroup CUDART__VERSION Version Management
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the latest version of CUDA supported by the driver
+ *
+ * Returns in \p *driverVersion the latest version of CUDA supported by
+ * the driver. The version is returned as (1000 &times; major + 10 &times; minor).
+ * For example, CUDA 9.2 would be represented by 9020. If no driver is installed,
+ * then 0 is returned as the driver version.
+ *
+ * This function automatically returns ::cudaErrorInvalidValue
+ * if \p driverVersion is NULL.
+ *
+ * \param driverVersion - Returns the CUDA driver version.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaRuntimeGetVersion,
+ * ::cuDriverGetVersion
+ */
+extern __host__ cudaError_t CUDARTAPI cudaDriverGetVersion(int *driverVersion);
+
+/**
+ * \brief Returns the CUDA Runtime version
+ *
+ * Returns in \p *runtimeVersion the version number of the current CUDA
+ * Runtime instance. The version is returned as
+ * (1000 &times; major + 10 &times; minor). For example,
+ * CUDA 9.2 would be represented by 9020.
+ *
+ * This function automatically returns ::cudaErrorInvalidValue if
+ * the \p runtimeVersion argument is NULL.
+ *
+ * \param runtimeVersion - Returns the CUDA Runtime version.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDriverGetVersion,
+ * ::cuDriverGetVersion
+ */
+extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaRuntimeGetVersion(int *runtimeVersion);
+
+/** @} */ /* END CUDART__VERSION */
+
+/**
+ * \defgroup CUDART_GRAPH Graph Management
+ *
+ * ___MANBRIEF___ graph management functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the graph management functions of CUDA
+ * runtime application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Creates a graph
+ *
+ * Creates an empty graph, which is returned via \p pGraph.
+ *
+ * \param pGraph - Returns newly created graph
+ * \param flags   - Graph creation flags, must be 0
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphDestroy,
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphClone
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphCreate(cudaGraph_t *pGraph, unsigned int flags);
+
+/**
+ * \brief Creates a kernel execution node and adds it to a graph
+ *
+ * Creates a new kernel execution node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies and arguments specified in \p pNodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * The cudaKernelNodeParams structure is defined as:
+ *
+ * \code
+ *  struct cudaKernelNodeParams
+ *  {
+ *      void* func;
+ *      dim3 gridDim;
+ *      dim3 blockDim;
+ *      unsigned int sharedMemBytes;
+ *      void **kernelParams;
+ *      void **extra;
+ *  };
+ * \endcode
+ *
+ * When the graph is launched, the node will invoke kernel \p func on a (\p gridDim.x x
+ * \p gridDim.y x \p gridDim.z) grid of blocks. Each block contains
+ * (\p blockDim.x x \p blockDim.y x \p blockDim.z) threads.
+ *
+ * \p sharedMem sets the amount of dynamic shared memory that will be
+ * available to each thread block.
+ *
+ * Kernel parameters to \p func can be specified in one of two ways:
+ *
+ * 1) Kernel parameters can be specified via \p kernelParams. If the kernel has N
+ * parameters, then \p kernelParams needs to be an array of N pointers. Each pointer,
+ * from \p kernelParams[0] to \p kernelParams[N-1], points to the region of memory from which the actual
+ * parameter will be copied. The number of kernel parameters and their offsets and sizes do not need
+ * to be specified as that information is retrieved directly from the kernel's image.
+ *
+ * 2) Kernel parameters can also be packaged by the application into a single buffer that is passed in
+ * via \p extra. This places the burden on the application of knowing each kernel
+ * parameter's size and alignment/padding within the buffer. The \p extra parameter exists
+ * to allow this function to take additional less commonly used arguments. \p extra specifies
+ * a list of names of extra settings and their corresponding values. Each extra setting name is
+ * immediately followed by the corresponding value. The list must be terminated with either NULL or
+ * CU_LAUNCH_PARAM_END.
+ *
+ * - ::CU_LAUNCH_PARAM_END, which indicates the end of the \p extra
+ *   array;
+ * - ::CU_LAUNCH_PARAM_BUFFER_POINTER, which specifies that the next
+ *   value in \p extra will be a pointer to a buffer
+ *   containing all the kernel parameters for launching kernel
+ *   \p func;
+ * - ::CU_LAUNCH_PARAM_BUFFER_SIZE, which specifies that the next
+ *   value in \p extra will be a pointer to a size_t
+ *   containing the size of the buffer specified with
+ *   ::CU_LAUNCH_PARAM_BUFFER_POINTER;
+ *
+ * The error ::cudaErrorInvalidValue will be returned if kernel parameters are specified with both
+ * \p kernelParams and \p extra (i.e. both \p kernelParams and
+ * \p extra are non-NULL).
+ *
+ * The \p kernelParams or \p extra array, as well as the argument values it points to,
+ * are copied during this call.
+ *
+ * \note Kernels launched using graphs must not use texture and surface references. Reading or
+ *       writing through any texture or surface reference is undefined behavior.
+ *       This restriction does not apply to texture and surface objects.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param pNodeParams      - Parameters for the GPU execution node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDeviceFunction
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchKernel,
+ * ::cudaGraphKernelNodeGetParams,
+ * ::cudaGraphKernelNodeSetParams,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddKernelNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaKernelNodeParams *pNodeParams);
+
+/**
+ * \brief Returns a kernel node's parameters
+ *
+ * Returns the parameters of kernel node \p node in \p pNodeParams.
+ * The \p kernelParams or \p extra array returned in \p pNodeParams,
+ * as well as the argument values it points to, are owned by the node.
+ * This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cudaGraphKernelNodeSetParams to update the
+ * parameters of this node.
+ *
+ * The params will contain either \p kernelParams or \p extra,
+ * according to which of these was most recently set on the node.
+ *
+ * \param node        - Node to get the parameters for
+ * \param pNodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDeviceFunction
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchKernel,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphKernelNodeSetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphKernelNodeGetParams(cudaGraphNode_t node, struct cudaKernelNodeParams *pNodeParams);
+
+/**
+ * \brief Sets a kernel node's parameters
+ *
+ * Sets the parameters of kernel node \p node to \p pNodeParams.
+ *
+ * \param node        - Node to set the parameters for
+ * \param pNodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle,
+ * ::cudaErrorMemoryAllocation
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchKernel,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphKernelNodeGetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphKernelNodeSetParams(cudaGraphNode_t node, const struct cudaKernelNodeParams *pNodeParams);
+
+/**
+ * \brief Copies attributes from source node to destination node.
+ *
+ * Copies attributes from source node \p src to destination node \p dst.
+ * Both node must have the same context.
+ *
+ * \param[out] dst Destination node
+ * \param[in] src Source node
+ * For list of attributes see ::cudaKernelNodeAttrID
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidContext
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphKernelNodeCopyAttributes(
+        cudaGraphNode_t hSrc,
+        cudaGraphNode_t hDst);
+
+/**
+ * \brief Queries node attribute.
+ *
+ * Queries attribute \p attr from node \p hNode and stores it in corresponding
+ * member of \p value_out.
+ *
+ * \param[in] hNode
+ * \param[in] attr
+ * \param[out] value_out
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphKernelNodeGetAttribute(
+    cudaGraphNode_t hNode,
+    cudaKernelNodeAttrID attr,
+    cudaKernelNodeAttrValue *value_out);
+
+/**
+ * \brief Sets node attribute.
+ *
+ * Sets attribute \p attr on node \p hNode from corresponding attribute of
+ * \p value.
+ *
+ * \param[out] hNode
+ * \param[in] attr
+ * \param[out] value
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidResourceHandle
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaAccessPolicyWindow
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphKernelNodeSetAttribute(
+    cudaGraphNode_t hNode,
+    cudaKernelNodeAttrID attr,
+    const cudaKernelNodeAttrValue *value);
+
+/**
+ * \brief Creates a memcpy node and adds it to a graph
+ *
+ * Creates a new memcpy node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will perform the memcpy described by \p pCopyParams.
+ * See ::cudaMemcpy3D() for a description of the structure and its restrictions.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param pCopyParams      - Parameters for the memory copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpy3D,
+ * ::cudaGraphAddMemcpyNodeToSymbol,
+ * ::cudaGraphAddMemcpyNodeFromSymbol,
+ * ::cudaGraphAddMemcpyNode1D,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemcpyNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaMemcpy3DParms *pCopyParams);
+
+/**
+ * \brief Creates a memcpy node to copy to a symbol on the device and adds it to a graph
+ *
+ * Creates a new memcpy node to copy to \p symbol and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p src to the memory area pointed to by \p offset bytes from the start
+ * of symbol \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyToSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeFromSymbol,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemcpyNodeToSymbol(
+    cudaGraphNode_t *pGraphNode,
+    cudaGraph_t graph,
+    const cudaGraphNode_t *pDependencies,
+    size_t numDependencies,
+    const void* symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Creates a memcpy node to copy from a symbol on the device and adds it to a graph
+ *
+ * Creates a new memcpy node to copy from \p symbol and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p offset bytes from the start of symbol \p symbol to the memory area
+ *  pointed to by \p dst. The memory areas may not overlap. \p symbol is a variable
+ *  that resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyFromSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeToSymbol,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemcpyNodeFromSymbol(
+    cudaGraphNode_t* pGraphNode,
+    cudaGraph_t graph,
+    const cudaGraphNode_t* pDependencies,
+    size_t numDependencies,
+    void* dst,
+    const void* symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Creates a 1D memcpy node and adds it to a graph
+ *
+ * Creates a new 1D memcpy node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory
+ * area pointed to by \p src to the memory area pointed to by \p dst, where
+ * \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing. Launching a
+ * memcpy node with dst and src pointers that do not match the direction of
+ * the copy results in an undefined behavior.
+ *
+ * Memcpy nodes have some additional restrictions with regards to managed memory, if the
+ * system contains at least one device which has a zero value for the device attribute
+ * ::cudaDevAttrConcurrentManagedAccess.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param dst             - Destination memory address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpy,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParams1D,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemsetNode
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemcpyNode1D(
+    cudaGraphNode_t *pGraphNode,
+    cudaGraph_t graph,
+    const cudaGraphNode_t *pDependencies,
+    size_t numDependencies,
+    void* dst,
+    const void* src,
+    size_t count,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Returns a memcpy node's parameters
+ *
+ * Returns the parameters of memcpy node \p node in \p pNodeParams.
+ *
+ * \param node        - Node to get the parameters for
+ * \param pNodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpy3D,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeSetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemcpyNodeGetParams(cudaGraphNode_t node, struct cudaMemcpy3DParms *pNodeParams);
+
+/**
+ * \brief Sets a memcpy node's parameters
+ *
+ * Sets the parameters of memcpy node \p node to \p pNodeParams.
+ *
+ * \param node        - Node to set the parameters for
+ * \param pNodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpy3D,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParams1D,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemcpyNodeSetParams(cudaGraphNode_t node, const struct cudaMemcpy3DParms *pNodeParams);
+
+/**
+ * \brief Sets a memcpy node's parameters to copy to a symbol on the device
+ *
+ * Sets the parameters of memcpy node \p node to the copy described by the provided parameters.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p src to the memory area pointed to by \p offset bytes from the start
+ * of symbol \p symbol. The memory areas may not overlap. \p symbol is a variable that
+ * resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of
+ * transfer is inferred from the pointer values. However, ::cudaMemcpyDefault
+ * is only allowed on systems that support unified virtual addressing.
+ *
+ * \param node            - Node to set the parameters for
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyToSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphMemcpyNodeSetParamsToSymbol(
+    cudaGraphNode_t node,
+    const void* symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Sets a memcpy node's parameters to copy from a symbol on the device
+ *
+ * Sets the parameters of memcpy node \p node to the copy described by the provided parameters.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory area
+ * pointed to by \p offset bytes from the start of symbol \p symbol to the memory area
+ *  pointed to by \p dst. The memory areas may not overlap. \p symbol is a variable
+ *  that resides in global or constant memory space. \p kind can be either
+ * ::cudaMemcpyDeviceToHost, ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault.
+ * Passing ::cudaMemcpyDefault is recommended, in which case the type of transfer
+ * is inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing.
+ *
+ * \param node            - Node to set the parameters for
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpyFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphMemcpyNodeSetParamsFromSymbol(
+    cudaGraphNode_t node,
+    void* dst,
+    const void* symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Sets a memcpy node's parameters to perform a 1-dimensional copy
+ *
+ * Sets the parameters of memcpy node \p node to the copy described by the provided parameters.
+ *
+ * When the graph is launched, the node will copy \p count bytes from the memory
+ * area pointed to by \p src to the memory area pointed to by \p dst, where
+ * \p kind specifies the direction of the copy, and must be one of
+ * ::cudaMemcpyHostToHost, ::cudaMemcpyHostToDevice, ::cudaMemcpyDeviceToHost,
+ * ::cudaMemcpyDeviceToDevice, or ::cudaMemcpyDefault. Passing
+ * ::cudaMemcpyDefault is recommended, in which case the type of transfer is
+ * inferred from the pointer values. However, ::cudaMemcpyDefault is only
+ * allowed on systems that support unified virtual addressing. Launching a
+ * memcpy node with dst and src pointers that do not match the direction of
+ * the copy results in an undefined behavior.
+ *
+ * \param node            - Node to set the parameters for
+ * \param dst             - Destination memory address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemcpy,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeGetParams
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphMemcpyNodeSetParams1D(
+    cudaGraphNode_t node,
+    void* dst,
+    const void* src,
+    size_t count,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Creates a memset node and adds it to a graph
+ *
+ * Creates a new memset node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * The element size must be 1, 2, or 4 bytes.
+ * When the graph is launched, the node will perform the memset described by \p pMemsetParams.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param pMemsetParams    - Parameters for the memory set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorInvalidDevice
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemset2D,
+ * ::cudaGraphMemsetNodeGetParams,
+ * ::cudaGraphMemsetNodeSetParams,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemsetNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaMemsetParams *pMemsetParams);
+
+/**
+ * \brief Returns a memset node's parameters
+ *
+ * Returns the parameters of memset node \p node in \p pNodeParams.
+ *
+ * \param node        - Node to get the parameters for
+ * \param pNodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemset2D,
+ * ::cudaGraphAddMemsetNode,
+ * ::cudaGraphMemsetNodeSetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemsetNodeGetParams(cudaGraphNode_t node, struct cudaMemsetParams *pNodeParams);
+
+/**
+ * \brief Sets a memset node's parameters
+ *
+ * Sets the parameters of memset node \p node to \p pNodeParams.
+ *
+ * \param node        - Node to set the parameters for
+ * \param pNodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaMemset2D,
+ * ::cudaGraphAddMemsetNode,
+ * ::cudaGraphMemsetNodeGetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemsetNodeSetParams(cudaGraphNode_t node, const struct cudaMemsetParams *pNodeParams);
+
+/**
+ * \brief Creates a host execution node and adds it to a graph
+ *
+ * Creates a new CPU execution node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies and arguments specified in \p pNodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * When the graph is launched, the node will invoke the specified CPU function.
+ * Host nodes are not supported under MPS with pre-Volta GPUs.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param pNodeParams      - Parameters for the host node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchHostFunc,
+ * ::cudaGraphHostNodeGetParams,
+ * ::cudaGraphHostNodeSetParams,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddHostNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaHostNodeParams *pNodeParams);
+
+/**
+ * \brief Returns a host node's parameters
+ *
+ * Returns the parameters of host node \p node in \p pNodeParams.
+ *
+ * \param node        - Node to get the parameters for
+ * \param pNodeParams - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchHostFunc,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphHostNodeSetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphHostNodeGetParams(cudaGraphNode_t node, struct cudaHostNodeParams *pNodeParams);
+
+/**
+ * \brief Sets a host node's parameters
+ *
+ * Sets the parameters of host node \p node to \p nodeParams.
+ *
+ * \param node        - Node to set the parameters for
+ * \param pNodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchHostFunc,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphHostNodeGetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphHostNodeSetParams(cudaGraphNode_t node, const struct cudaHostNodeParams *pNodeParams);
+
+/**
+ * \brief Creates a child graph node and adds it to a graph
+ *
+ * Creates a new node which executes an embedded graph, and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * If \p hGraph contains allocation or free nodes, this call will return an error.
+ *
+ * The node executes an embedded child graph. The child graph is cloned in this call.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param childGraph      - The graph to clone into this node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphChildGraphNodeGetGraph,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ * ::cudaGraphClone
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddChildGraphNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, cudaGraph_t childGraph);
+
+/**
+ * \brief Gets a handle to the embedded graph of a child graph node
+ *
+ * Gets a handle to the embedded graph in a child graph node. This call
+ * does not clone the graph. Changes to the graph will be reflected in
+ * the node, and the node retains ownership of the graph.
+ *
+ * Allocation and free nodes cannot be added to the returned graph.
+ * Attempting to do so will return an error.
+ *
+ * \param node   - Node to get the embedded graph for
+ * \param pGraph - Location to store a handle to the graph
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphNodeFindInClone
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphChildGraphNodeGetGraph(cudaGraphNode_t node, cudaGraph_t *pGraph);
+
+/**
+ * \brief Creates an empty node and adds it to a graph
+ *
+ * Creates a new node which performs no operation, and adds it to \p graph with
+ * \p numDependencies dependencies specified via \p pDependencies.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p pGraphNode.
+ *
+ * An empty node performs no operation during execution, but can be used for
+ * transitive ordering. For example, a phased execution graph with 2 groups of n
+ * nodes with a barrier between them can be represented using an empty node and
+ * 2*n dependency edges, rather than no empty node and n^2 dependency edges.
+ *
+ * \param pGraphNode     - Returns newly created node
+ * \param graph          - Graph to which to add the node
+ * \param pDependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddEmptyNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies);
+
+/**
+ * \brief Creates an event record node and adds it to a graph
+ *
+ * Creates a new event record node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and event specified in \p event.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * Each launch of the graph will record \p event to capture execution of the
+ * node's dependencies.
+ *
+ * These nodes may not be used in loops or conditionals.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param event           - Event for the node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphAddEventRecordNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Returns the event associated with an event record node
+ *
+ * Returns the event of event record node \p hNode in \p event_out.
+ *
+ * \param hNode     - Node to get the event for
+ * \param event_out - Pointer to return the event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphEventRecordNodeSetEvent,
+ * ::cudaGraphEventWaitNodeGetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphEventRecordNodeGetEvent(cudaGraphNode_t node, cudaEvent_t *event_out);
+#endif
+
+/**
+ * \brief Sets an event record node's event
+ *
+ * Sets the event of event record node \p hNode to \p event.
+ *
+ * \param hNode - Node to set the event for
+ * \param event - Event to use
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphEventRecordNodeGetEvent,
+ * ::cudaGraphEventWaitNodeSetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphEventRecordNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Creates an event wait node and adds it to a graph
+ *
+ * Creates a new event wait node and adds it to \p hGraph with \p numDependencies
+ * dependencies specified via \p dependencies and event specified in \p event.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries.
+ * A handle to the new node will be returned in \p phGraphNode.
+ *
+ * The graph node will wait for all work captured in \p event.  See ::cuEventRecord()
+ * for details on what is captured by an event.  The synchronization will be performed
+ * efficiently on the device when applicable.  \p event may be from a different context
+ * or device than the launch stream.
+ *
+ * These nodes may not be used in loops or conditionals.
+ *
+ * \param phGraphNode     - Returns newly created node
+ * \param hGraph          - Graph to which to add the node
+ * \param dependencies    - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param event           - Event for the node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphAddEventWaitNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Returns the event associated with an event wait node
+ *
+ * Returns the event of event wait node \p hNode in \p event_out.
+ *
+ * \param hNode     - Node to get the event for
+ * \param event_out - Pointer to return the event
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphEventWaitNodeSetEvent,
+ * ::cudaGraphEventRecordNodeGetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphEventWaitNodeGetEvent(cudaGraphNode_t node, cudaEvent_t *event_out);
+#endif
+
+/**
+ * \brief Sets an event wait node's event
+ *
+ * Sets the event of event wait node \p hNode to \p event.
+ *
+ * \param hNode - Node to set the event for
+ * \param event - Event to use
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphEventWaitNodeGetEvent,
+ * ::cudaGraphEventRecordNodeSetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphEventWaitNodeSetEvent(cudaGraphNode_t node, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Creates an external semaphore signal node and adds it to a graph
+ *
+ * Creates a new external semaphore signal node and adds it to \p graph with \p
+ * numDependencies dependencies specified via \p dependencies and arguments specified
+ * in \p nodeParams. It is possible for \p numDependencies to be 0, in which case the
+ * node will be placed at the root of the graph. \p dependencies may not have any
+ * duplicate entries. A handle to the new node will be returned in \p pGraphNode.
+ *
+ * Performs a signal operation on a set of externally allocated semaphore objects
+ * when the node is launched.  The operation(s) will occur after all of the node's
+ * dependencies have completed.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphExternalSemaphoresSignalNodeGetParams,
+ * ::cudaGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaImportExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddExternalSemaphoresSignalNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaExternalSemaphoreSignalNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Returns an external semaphore signal node's parameters
+ *
+ * Returns the parameters of an external semaphore signal node \p hNode in \p params_out.
+ * The \p extSemArray and \p paramsArray returned in \p params_out,
+ * are owned by the node.  This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cudaGraphExternalSemaphoresSignalNodeSetParams to update the
+ * parameters of this node.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchKernel,
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExternalSemaphoresSignalNodeGetParams(cudaGraphNode_t hNode, struct cudaExternalSemaphoreSignalNodeParams *params_out);
+#endif
+
+/**
+ * \brief Sets an external semaphore signal node's parameters
+ *
+ * Sets the parameters of an external semaphore signal node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaGraphExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExternalSemaphoresSignalNodeSetParams(cudaGraphNode_t hNode, const struct cudaExternalSemaphoreSignalNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Creates an external semaphore wait node and adds it to a graph
+ *
+ * Creates a new external semaphore wait node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p dependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p dependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p pGraphNode.
+ *
+ * Performs a wait operation on a set of externally allocated semaphore objects
+ * when the node is launched.  The node's dependencies will not be launched until
+ * the wait operation has completed.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphExternalSemaphoresWaitNodeGetParams,
+ * ::cudaGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaImportExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode,
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddExternalSemaphoresWaitNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, const struct cudaExternalSemaphoreWaitNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Returns an external semaphore wait node's parameters
+ *
+ * Returns the parameters of an external semaphore wait node \p hNode in \p params_out.
+ * The \p extSemArray and \p paramsArray returned in \p params_out,
+ * are owned by the node.  This memory remains valid until the node is destroyed or its
+ * parameters are modified, and should not be modified
+ * directly. Use ::cudaGraphExternalSemaphoresSignalNodeSetParams to update the
+ * parameters of this node.
+ *
+ * \param hNode      - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaLaunchKernel,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExternalSemaphoresWaitNodeGetParams(cudaGraphNode_t hNode, struct cudaExternalSemaphoreWaitNodeParams *params_out);
+#endif
+
+/**
+ * \brief Sets an external semaphore wait node's parameters
+ *
+ * Sets the parameters of an external semaphore wait node \p hNode to \p nodeParams.
+ *
+ * \param hNode      - Node to set the parameters for
+ * \param nodeParams - Parameters to copy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaGraphExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExternalSemaphoresWaitNodeSetParams(cudaGraphNode_t hNode, const struct cudaExternalSemaphoreWaitNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Creates an allocation node and adds it to a graph
+ *
+ * Creates a new allocation node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies and arguments specified in \p nodeParams.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p pGraphNode.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param nodeParams      - Parameters for the node
+ *
+ * When ::cudaGraphAddMemAllocNode creates an allocation node, it returns the address of the allocation in
+ * \p nodeParams.dptr.  The allocation's address remains fixed across instantiations and launches.
+ *
+ * If the allocation is freed in the same graph, by creating a free node using ::cudaGraphAddMemFreeNode,
+ * the allocation can be accessed by nodes ordered after the allocation node but before the free node.
+ * These allocations cannot be freed outside the owning graph, and they can only be freed once in the
+ * owning graph.
+ *
+ * If the allocation is not freed in the same graph, then it can be accessed not only by nodes in the
+ * graph which are ordered after the allocation node, but also by stream operations ordered after the
+ * graph's execution but before the allocation is freed.
+ *
+ * Allocations which are not freed in the same graph can be freed by:
+ * - passing the allocation to ::cudaMemFreeAsync or ::cudaMemFree;
+ * - launching a graph with a free node for that allocation; or
+ * - specifying ::cudaGraphInstantiateFlagAutoFreeOnLaunch during instantiation, which makes
+ *   each launch behave as though it called ::cudaMemFreeAsync for every unfreed allocation.
+ *
+ * It is not possible to free an allocation in both the owning graph and another graph.  If the allocation
+ * is freed in the same graph, a free node cannot be added to another graph.  If the allocation is freed
+ * in another graph, a free node can no longer be added to the owning graph.
+ *
+ * The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ * - Nodes and edges of the graph cannot be deleted.
+ * - The graph cannot be used in a child node.
+ * - Only one instantiation of the graph may exist at any point in time.
+ * - The graph cannot be cloned.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorCudartUnloading,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOutOfMemory
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaGraphAddMemFreeNode,
+ * ::cudaGraphMemAllocNodeGetParams,
+ * ::cudaDeviceGraphMemTrim,
+ * ::cudaDeviceGetGraphMemAttribute,
+ * ::cudaDeviceSetGraphMemAttribute,
+ * ::cudaMallocAsync,
+ * ::cudaFreeAsync,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemAllocNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, struct cudaMemAllocNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Returns a memory alloc node's parameters
+ *
+ * Returns the parameters of a memory alloc node \p hNode in \p params_out.
+ * The \p poolProps and \p accessDescs returned in \p params_out, are owned by the
+ * node.  This memory remains valid until the node is destroyed.  The returned
+ * parameters must not be modified.
+ *
+ * \param node       - Node to get the parameters for
+ * \param params_out - Pointer to return the parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemAllocNode,
+ * ::cudaGraphMemFreeNodeGetParams
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemAllocNodeGetParams(cudaGraphNode_t node, struct cudaMemAllocNodeParams *params_out);
+#endif
+
+/**
+ * \brief Creates a memory free node and adds it to a graph
+ *
+ * Creates a new memory free node and adds it to \p graph with \p numDependencies
+ * dependencies specified via \p pDependencies and address specified in \p dptr.
+ * It is possible for \p numDependencies to be 0, in which case the node will be placed
+ * at the root of the graph. \p pDependencies may not have any duplicate entries. A handle
+ * to the new node will be returned in \p pGraphNode.
+ *
+ * \param pGraphNode      - Returns newly created node
+ * \param graph           - Graph to which to add the node
+ * \param pDependencies   - Dependencies of the node
+ * \param numDependencies - Number of dependencies
+ * \param dptr            - Address of memory to free
+ *
+ * ::cudaGraphAddMemFreeNode will return ::cudaErrorInvalidValue if the user attempts to free:
+ * - an allocation twice in the same graph.
+ * - an address that was not returned by an allocation node.
+ * - an invalid address.
+ *
+ * The following restrictions apply to graphs which contain allocation and/or memory free nodes:
+ * - Nodes and edges of the graph cannot be deleted.
+ * - The graph cannot be used in a child node.
+ * - Only one instantiation of the graph may exist at any point in time.
+ * - The graph cannot be cloned.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorCudartUnloading,
+ * ::cudaErrorInitializationError,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOutOfMemory
+ * \note_graph_thread_safety
+ * \notefnerr
+ *
+ * \sa
+ * ::cudaGraphAddMemAllocNode,
+ * ::cudaGraphMemFreeNodeGetParams,
+ * ::cudaDeviceGraphMemTrim,
+ * ::cudaDeviceGetGraphMemAttribute,
+ * ::cudaDeviceSetGraphMemAttribute,
+ * ::cudaMallocAsync,
+ * ::cudaFreeAsync,
+ * ::cudaGraphCreate,
+ * ::cudaGraphDestroyNode,
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddMemFreeNode(cudaGraphNode_t *pGraphNode, cudaGraph_t graph, const cudaGraphNode_t *pDependencies, size_t numDependencies, void *dptr);
+#endif
+
+/**
+ * \brief Returns a memory free node's parameters
+ *
+ * Returns the address of a memory free node \p hNode in \p dptr_out.
+ *
+ * \param node     - Node to get the parameters for
+ * \param dptr_out - Pointer to return the device address
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemFreeNode,
+ * ::cudaGraphMemFreeNodeGetParams
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaGraphMemFreeNodeGetParams(cudaGraphNode_t node, void *dptr_out);
+#endif
+
+/**
+ * \brief Free unused memory that was cached on the specified device for use with graphs back to the OS.
+ *
+ * Blocks which are not in use by a graph that is either currently executing or scheduled to execute are
+ * freed back to the operating system.
+ *
+ * \param device - The device for which cached memory should be freed.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemAllocNode,
+ * ::cudaGraphAddMemFreeNode,
+ * ::cudaDeviceGetGraphMemAttribute,
+ * ::cudaDeviceSetGraphMemAttribute,
+ * ::cudaMallocAsync,
+ * ::cudaFreeAsync,
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGraphMemTrim(int device);
+#endif
+
+/**
+ * \brief Query asynchronous allocation attributes related to graphs
+ *
+ * Valid attributes are:
+ *
+ * - ::cudaGraphMemAttrUsedMemCurrent: Amount of memory, in bytes, currently associated with graphs
+ * - ::cudaGraphMemAttrUsedMemHigh: High watermark of memory, in bytes, associated with graphs since the
+ *   last time it was reset.  High watermark can only be reset to zero.
+ * - ::cudaGraphMemAttrReservedMemCurrent: Amount of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ * - ::cudaGraphMemAttrReservedMemHigh: High watermark of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ *
+ * \param device - Specifies the scope of the query
+ * \param attr - attribute to get
+ * \param value - retrieved value
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceSetGraphMemAttribute,
+ * ::cudaGraphAddMemAllocNode,
+ * ::cudaGraphAddMemFreeNode,
+ * ::cudaDeviceGraphMemTrim,
+ * ::cudaMallocAsync,
+ * ::cudaFreeAsync,
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaDeviceGetGraphMemAttribute(int device, enum cudaGraphMemAttributeType attr, void* value);
+#endif
+
+/**
+ * \brief Set asynchronous allocation attributes related to graphs
+ *
+ * Valid attributes are:
+ *
+ * - ::cudaGraphMemAttrUsedMemHigh: High watermark of memory, in bytes, associated with graphs since the
+ *   last time it was reset.  High watermark can only be reset to zero.
+ * - ::cudaGraphMemAttrReservedMemHigh: High watermark of memory, in bytes, currently allocated for use by
+ *   the CUDA graphs asynchronous allocator.
+ *
+ * \param device - Specifies the scope of the query
+ * \param attr - attribute to get
+ * \param value - pointer to value to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidDevice
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaDeviceGetGraphMemAttribute,
+ * ::cudaGraphAddMemAllocNode,
+ * ::cudaGraphAddMemFreeNode,
+ * ::cudaDeviceGraphMemTrim,
+ * ::cudaMallocAsync,
+ * ::cudaFreeAsync,
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaDeviceSetGraphMemAttribute(int device, enum cudaGraphMemAttributeType attr, void* value);
+#endif
+
+/**
+ * \brief Clones a graph
+ *
+ * This function creates a copy of \p originalGraph and returns it in \p pGraphClone.
+ * All parameters are copied into the cloned graph. The original graph may be modified 
+ * after this call without affecting the clone.
+ *
+ * Child graph nodes in the original graph are recursively copied into the clone.
+ *
+ * \param pGraphClone  - Returns newly created cloned graph
+ * \param originalGraph - Graph to clone
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorMemoryAllocation
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphCreate,
+ * ::cudaGraphNodeFindInClone
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphClone(cudaGraph_t *pGraphClone, cudaGraph_t originalGraph);
+
+/**
+ * \brief Finds a cloned version of a node
+ *
+ * This function returns the node in \p clonedGraph corresponding to \p originalNode 
+ * in the original graph.
+ *
+ * \p clonedGraph must have been cloned from \p originalGraph via ::cudaGraphClone. 
+ * \p originalNode must have been in \p originalGraph at the time of the call to 
+ * ::cudaGraphClone, and the corresponding cloned node in \p clonedGraph must not have 
+ * been removed. The cloned node is then returned via \p pClonedNode.
+ *
+ * \param pNode  - Returns handle to the cloned node
+ * \param originalNode - Handle to the original node
+ * \param clonedGraph - Cloned graph to query
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphClone
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeFindInClone(cudaGraphNode_t *pNode, cudaGraphNode_t originalNode, cudaGraph_t clonedGraph);
+
+/**
+ * \brief Returns a node's type
+ *
+ * Returns the node type of \p node in \p pType.
+ *
+ * \param node - Node to query
+ * \param pType  - Pointer to return the node type
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphChildGraphNodeGetGraph,
+ * ::cudaGraphKernelNodeGetParams,
+ * ::cudaGraphKernelNodeSetParams,
+ * ::cudaGraphHostNodeGetParams,
+ * ::cudaGraphHostNodeSetParams,
+ * ::cudaGraphMemcpyNodeGetParams,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemsetNodeGetParams,
+ * ::cudaGraphMemsetNodeSetParams
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeGetType(cudaGraphNode_t node, enum cudaGraphNodeType *pType);
+
+/**
+ * \brief Returns a graph's nodes
+ *
+ * Returns a list of \p graph's nodes. \p nodes may be NULL, in which case this
+ * function will return the number of nodes in \p numNodes. Otherwise,
+ * \p numNodes entries will be filled in. If \p numNodes is higher than the actual
+ * number of nodes, the remaining entries in \p nodes will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p numNodes.
+ *
+ * \param graph    - Graph to query
+ * \param nodes    - Pointer to return the nodes
+ * \param numNodes - See description
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphCreate,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphNodeGetType,
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphNodeGetDependentNodes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphGetNodes(cudaGraph_t graph, cudaGraphNode_t *nodes, size_t *numNodes);
+
+/**
+ * \brief Returns a graph's root nodes
+ *
+ * Returns a list of \p graph's root nodes. \p pRootNodes may be NULL, in which case this
+ * function will return the number of root nodes in \p pNumRootNodes. Otherwise,
+ * \p pNumRootNodes entries will be filled in. If \p pNumRootNodes is higher than the actual
+ * number of root nodes, the remaining entries in \p pRootNodes will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p pNumRootNodes.
+ *
+ * \param graph       - Graph to query
+ * \param pRootNodes    - Pointer to return the root nodes
+ * \param pNumRootNodes - See description
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphCreate,
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphNodeGetType,
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphNodeGetDependentNodes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphGetRootNodes(cudaGraph_t graph, cudaGraphNode_t *pRootNodes, size_t *pNumRootNodes);
+
+/**
+ * \brief Returns a graph's dependency edges
+ *
+ * Returns a list of \p graph's dependency edges. Edges are returned via corresponding
+ * indices in \p from and \p to; that is, the node in \p to[i] has a dependency on the
+ * node in \p from[i]. \p from and \p to may both be NULL, in which
+ * case this function only returns the number of edges in \p numEdges. Otherwise,
+ * \p numEdges entries will be filled in. If \p numEdges is higher than the actual
+ * number of edges, the remaining entries in \p from and \p to will be set to NULL, and
+ * the number of edges actually returned will be written to \p numEdges.
+ *
+ * \param graph    - Graph to get the edges from
+ * \param from     - Location to return edge endpoints
+ * \param to       - Location to return edge endpoints
+ * \param numEdges - See description
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphAddDependencies,
+ * ::cudaGraphRemoveDependencies,
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphNodeGetDependentNodes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphGetEdges(cudaGraph_t graph, cudaGraphNode_t *from, cudaGraphNode_t *to, size_t *numEdges);
+
+/**
+ * \brief Returns a node's dependencies
+ *
+ * Returns a list of \p node's dependencies. \p pDependencies may be NULL, in which case this
+ * function will return the number of dependencies in \p pNumDependencies. Otherwise,
+ * \p pNumDependencies entries will be filled in. If \p pNumDependencies is higher than the actual
+ * number of dependencies, the remaining entries in \p pDependencies will be set to NULL, and the
+ * number of nodes actually obtained will be returned in \p pNumDependencies.
+ *
+ * \param node           - Node to query
+ * \param pDependencies    - Pointer to return the dependencies
+ * \param pNumDependencies - See description
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphNodeGetDependentNodes,
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphAddDependencies,
+ * ::cudaGraphRemoveDependencies
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeGetDependencies(cudaGraphNode_t node, cudaGraphNode_t *pDependencies, size_t *pNumDependencies);
+
+/**
+ * \brief Returns a node's dependent nodes
+ *
+ * Returns a list of \p node's dependent nodes. \p pDependentNodes may be NULL, in which
+ * case this function will return the number of dependent nodes in \p pNumDependentNodes.
+ * Otherwise, \p pNumDependentNodes entries will be filled in. If \p pNumDependentNodes is
+ * higher than the actual number of dependent nodes, the remaining entries in
+ * \p pDependentNodes will be set to NULL, and the number of nodes actually obtained will
+ * be returned in \p pNumDependentNodes.
+ *
+ * \param node             - Node to query
+ * \param pDependentNodes    - Pointer to return the dependent nodes
+ * \param pNumDependentNodes - See description
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphGetNodes,
+ * ::cudaGraphGetRootNodes,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphAddDependencies,
+ * ::cudaGraphRemoveDependencies
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeGetDependentNodes(cudaGraphNode_t node, cudaGraphNode_t *pDependentNodes, size_t *pNumDependentNodes);
+
+/**
+ * \brief Adds dependency edges to a graph.
+ *
+ * The number of dependencies to be added is defined by \p numDependencies
+ * Elements in \p pFrom and \p pTo at corresponding indices define a dependency.
+ * Each node in \p pFrom and \p pTo must belong to \p graph.
+ *
+ * If \p numDependencies is 0, elements in \p pFrom and \p pTo will be ignored.
+ * Specifying an existing dependency will return an error.
+ *
+ * \param graph - Graph to which dependencies are added
+ * \param from - Array of nodes that provide the dependencies
+ * \param to - Array of dependent nodes
+ * \param numDependencies - Number of dependencies to be added
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphRemoveDependencies,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphNodeGetDependentNodes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphAddDependencies(cudaGraph_t graph, const cudaGraphNode_t *from, const cudaGraphNode_t *to, size_t numDependencies);
+
+/**
+ * \brief Removes dependency edges from a graph.
+ *
+ * The number of \p pDependencies to be removed is defined by \p numDependencies.
+ * Elements in \p pFrom and \p pTo at corresponding indices define a dependency.
+ * Each node in \p pFrom and \p pTo must belong to \p graph.
+ *
+ * If \p numDependencies is 0, elements in \p pFrom and \p pTo will be ignored.
+ * Specifying a non-existing dependency will return an error.
+ *
+ * \param graph - Graph from which to remove dependencies
+ * \param from - Array of nodes that provide the dependencies
+ * \param to - Array of dependent nodes
+ * \param numDependencies - Number of dependencies to be removed
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddDependencies,
+ * ::cudaGraphGetEdges,
+ * ::cudaGraphNodeGetDependencies,
+ * ::cudaGraphNodeGetDependentNodes
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphRemoveDependencies(cudaGraph_t graph, const cudaGraphNode_t *from, const cudaGraphNode_t *to, size_t numDependencies);
+
+/**
+ * \brief Remove a node from the graph
+ *
+ * Removes \p node from its graph. This operation also severs any dependencies of other nodes 
+ * on \p node and vice versa.
+ *
+ * Dependencies cannot be removed from graphs which contain allocation or free nodes.
+ * Any attempt to do so will return an error.
+ *
+ * \param node  - Node to remove
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphAddEmptyNode,
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemsetNode
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphDestroyNode(cudaGraphNode_t node);
+
+/**
+ * \brief Creates an executable graph from a graph
+ *
+ * Instantiates \p graph as an executable graph. The graph is validated for any
+ * structural constraints or intra-node constraints which were not previously
+ * validated. If instantiation is successful, a handle to the instantiated graph
+ * is returned in \p pGraphExec.
+ *
+ * If there are any errors, diagnostic information may be returned in \p pErrorNode and
+ * \p pLogBuffer. This is the primary way to inspect instantiation errors. The output
+ * will be null terminated unless the diagnostics overflow
+ * the buffer. In this case, they will be truncated, and the last byte can be
+ * inspected to determine if truncation occurred.
+ *
+ * \param pGraphExec - Returns instantiated graph
+ * \param graph      - Graph to instantiate
+ * \param pErrorNode - In case of an instantiation error, this may be modified to
+ *                      indicate a node contributing to the error
+ * \param pLogBuffer   - A character buffer to store diagnostic messages
+ * \param bufferSize  - Size of the log buffer in bytes
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphInstantiateWithFlags,
+ * ::cudaGraphCreate,
+ * ::cudaGraphUpload,
+ * ::cudaGraphLaunch,
+ * ::cudaGraphExecDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphInstantiate(cudaGraphExec_t *pGraphExec, cudaGraph_t graph, cudaGraphNode_t *pErrorNode, char *pLogBuffer, size_t bufferSize);
+
+/**
+ * \brief Creates an executable graph from a graph
+ *
+ * Instantiates \p graph as an executable graph. The graph is validated for any
+ * structural constraints or intra-node constraints which were not previously
+ * validated. If instantiation is successful, a handle to the instantiated graph
+ * is returned in \p pGraphExec.
+ *
+ * The \p flags parameter controls the behavior of instantiation and subsequent
+ * graph launches.  Valid flags are:
+ *
+ * - ::cudaGraphInstantiateFlagAutoFreeOnLaunch, which configures a
+ * graph containing memory allocation nodes to automatically free any
+ * unfreed memory allocations before the graph is relaunched.
+ *
+ * - ::cudaGraphInstantiateFlagUseNodePriority, which causes the graph
+ * to use the priorities from the per-node attributes rather than the priority
+ * of the launch stream during execution. Note that priorities are only available
+ * on kernel nodes, and are copied from stream priority during stream capture.
+ *
+ * If \p graph contains any allocation or free nodes, there can be at most one
+ * executable graph in existence for that graph at a time.
+ *
+ * An attempt to instantiate a second executable graph before destroying the first
+ * with ::cudaGraphExecDestroy will result in an error.
+ *
+ * \param pGraphExec - Returns instantiated graph
+ * \param graph      - Graph to instantiate
+ * \param flags      - Flags to control instantiation.  See ::CUgraphInstantiate_flags.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphCreate,
+ * ::cudaGraphUpload,
+ * ::cudaGraphLaunch,
+ * ::cudaGraphExecDestroy
+ */
+#if __CUDART_API_VERSION >= 11040
+extern __host__ cudaError_t CUDARTAPI cudaGraphInstantiateWithFlags(cudaGraphExec_t *pGraphExec, cudaGraph_t graph, unsigned long long flags);
+#endif
+
+/**
+ * \brief Sets the parameters for a kernel node in the given graphExec
+ *
+ * Sets the parameters of a kernel node in an executable graph \p hGraphExec. 
+ * The node is identified by the corresponding node \p node in the 
+ * non-executable graph, from which the executable graph was instantiated. 
+ *
+ * \p node must not have been removed from the original graph. The \p func field 
+ * of \p nodeParams cannot be modified and must match the original value.
+ * All other values can be modified. 
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already 
+ * enqueued or running launches of \p hGraphExec are not affected by this call. 
+ * \p node is also not modified by this call.
+ *
+ * \param hGraphExec  - The executable graph in which to set the specified node
+ * \param node        - kernel node from the graph from which graphExec was instantiated
+ * \param pNodeParams - Updated Parameters to set
+ * 
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddKernelNode,
+ * ::cudaGraphKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecKernelNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const struct cudaKernelNodeParams *pNodeParams);
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec.
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained \p pNodeParams at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * The source and destination memory in \p pNodeParams must be allocated from the same 
+ * contexts as the original source and destination memory.  Both the instantiation-time 
+ * memory operands and the memory operands in \p pNodeParams must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * either the original or new memory operands are multidimensional.
+ *
+ * \param hGraphExec  - The executable graph in which to set the specified node
+ * \param node        - Memcpy node from the graph which was used to instantiate graphExec
+ * \param pNodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphExecMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphExecMemcpyNodeSetParams1D,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecMemcpyNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const struct cudaMemcpy3DParms *pNodeParams);
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec to copy to a symbol on the device
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained the given params at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * \p src and \p symbol must be allocated from the same contexts as the original source and
+ * destination memory.  The instantiation-time memory operands must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * the original memory operands are multidimensional.
+ *
+ * \param hGraphExec      - The executable graph in which to set the specified node
+ * \param node            - Memcpy node from the graph which was used to instantiate graphExec
+ * \param symbol          - Device symbol address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeToSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecMemcpyNodeSetParamsToSymbol(
+    cudaGraphExec_t hGraphExec,
+    cudaGraphNode_t node,
+    const void* symbol,
+    const void* src,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec to copy from a symbol on the device
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained the given params at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * \p symbol and \p dst must be allocated from the same contexts as the original source and
+ * destination memory.  The instantiation-time memory operands must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * the original memory operands are multidimensional.
+ *
+ * \param hGraphExec      - The executable graph in which to set the specified node
+ * \param node            - Memcpy node from the graph which was used to instantiate graphExec
+ * \param dst             - Destination memory address
+ * \param symbol          - Device symbol address
+ * \param count           - Size in bytes to copy
+ * \param offset          - Offset from start of symbol in bytes
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNodeFromSymbol,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParamsFromSymbol,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParamsToSymbol,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecMemcpyNodeSetParamsFromSymbol(
+    cudaGraphExec_t hGraphExec,
+    cudaGraphNode_t node,
+    void* dst,
+    const void* symbol,
+    size_t count,
+    size_t offset,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Sets the parameters for a memcpy node in the given graphExec to perform a 1-dimensional copy
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained the given params at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * \p src and \p dst must be allocated from the same contexts as the original source
+ * and destination memory.  The instantiation-time memory operands must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns ::cudaErrorInvalidValue if the memory operands' mappings changed or
+ * the original memory operands are multidimensional.
+ *
+ * \param hGraphExec      - The executable graph in which to set the specified node
+ * \param node            - Memcpy node from the graph which was used to instantiate graphExec
+ * \param dst             - Destination memory address
+ * \param src             - Source memory address
+ * \param count           - Size in bytes to copy
+ * \param kind            - Type of transfer
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemcpyNode,
+ * ::cudaGraphAddMemcpyNode1D,
+ * ::cudaGraphMemcpyNodeSetParams,
+ * ::cudaGraphMemcpyNodeSetParams1D,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecMemcpyNodeSetParams1D(
+    cudaGraphExec_t hGraphExec,
+    cudaGraphNode_t node,
+    void* dst,
+    const void* src,
+    size_t count,
+    enum cudaMemcpyKind kind);
+#endif
+
+/**
+ * \brief Sets the parameters for a memset node in the given graphExec.
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained \p pNodeParams at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * The destination memory in \p pNodeParams must be allocated from the same 
+ * context as the original destination memory.  Both the instantiation-time 
+ * memory operand and the memory operand in \p pNodeParams must be 1-dimensional.
+ * Zero-length operations are not supported.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * Returns cudaErrorInvalidValue if the memory operand's mappings changed or
+ * either the original or new memory operand are multidimensional.
+ *
+ * \param hGraphExec  - The executable graph in which to set the specified node
+ * \param node        - Memset node from the graph which was used to instantiate graphExec
+ * \param pNodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddMemsetNode,
+ * ::cudaGraphMemsetNodeSetParams,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecMemsetNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const struct cudaMemsetParams *pNodeParams);
+
+/**
+ * \brief Sets the parameters for a host node in the given graphExec.
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though \p node had 
+ * contained \p pNodeParams at instantiation.  \p node must remain in the graph which was 
+ * used to instantiate \p hGraphExec.  Changed edges to and from \p node are ignored.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued 
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also 
+ * not modified by this call.
+ *
+ * \param hGraphExec  - The executable graph in which to set the specified node
+ * \param node        - Host node from the graph which was used to instantiate graphExec
+ * \param pNodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddHostNode,
+ * ::cudaGraphHostNodeSetParams,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecHostNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, const struct cudaHostNodeParams *pNodeParams);
+
+/**
+ * \brief Updates node parameters in the child graph node in the given graphExec.
+ *
+ * Updates the work represented by \p node in \p hGraphExec as though the nodes contained
+ * in \p node's graph had the parameters contained in \p childGraph's nodes at instantiation.
+ * \p node must remain in the graph which was used to instantiate \p hGraphExec.
+ * Changed edges to and from \p node are ignored.
+ *
+ * The modifications only affect future launches of \p hGraphExec.  Already enqueued
+ * or running launches of \p hGraphExec are not affected by this call.  \p node is also
+ * not modified by this call.
+ *
+ * The topology of \p childGraph, as well as the node insertion order,  must match that
+ * of the graph contained in \p node.  See ::cudaGraphExecUpdate() for a list of restrictions
+ * on what can be updated in an instantiated graph.  The update is recursive, so child graph
+ * nodes contained within the top level child graph will also be updated.
+
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param node       - Host node from the graph which was used to instantiate graphExec
+ * \param childGraph - The graph supplying the updated parameters
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddChildGraphNode,
+ * ::cudaGraphChildGraphNodeGetGraph,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecChildGraphNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t node, cudaGraph_t childGraph);
+#endif
+
+/**
+ * \brief Sets the event for an event record node in the given graphExec
+ *
+ * Sets the event of an event record node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Event record node from the graph from which graphExec was instantiated
+ * \param event      - Updated event to use
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventRecordNode,
+ * ::cudaGraphEventRecordNodeGetEvent,
+ * ::cudaGraphEventWaitNodeSetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecEventRecordNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Sets the event for an event wait node in the given graphExec
+ *
+ * Sets the event of an event wait node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Event wait node from the graph from which graphExec was instantiated
+ * \param event      - Updated event to use
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddEventWaitNode,
+ * ::cudaGraphEventWaitNodeGetEvent,
+ * ::cudaGraphEventRecordNodeSetEvent,
+ * ::cudaEventRecordWithFlags,
+ * ::cudaStreamWaitEvent,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphExecEventWaitNodeSetEvent(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, cudaEvent_t event);
+#endif
+
+/**
+ * \brief Sets the parameters for an external semaphore signal node in the given graphExec
+ *
+ * Sets the parameters of an external semaphore signal node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * Changing \p nodeParams->numExtSems is not supported.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - semaphore signal node from the graph from which graphExec was instantiated
+ * \param nodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddExternalSemaphoresSignalNode,
+ * ::cudaImportExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresWaitNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecExternalSemaphoresSignalNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const struct cudaExternalSemaphoreSignalNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Sets the parameters for an external semaphore wait node in the given graphExec
+ *
+ * Sets the parameters of an external semaphore wait node in an executable graph \p hGraphExec.
+ * The node is identified by the corresponding node \p hNode in the
+ * non-executable graph, from which the executable graph was instantiated.
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * Changing \p nodeParams->numExtSems is not supported.
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - semaphore wait node from the graph from which graphExec was instantiated
+ * \param nodeParams - Updated Parameters to set
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphAddExternalSemaphoresWaitNode,
+ * ::cudaImportExternalSemaphore,
+ * ::cudaSignalExternalSemaphoresAsync,
+ * ::cudaWaitExternalSemaphoresAsync,
+ * ::cudaGraphExecKernelNodeSetParams,
+ * ::cudaGraphExecMemcpyNodeSetParams,
+ * ::cudaGraphExecMemsetNodeSetParams,
+ * ::cudaGraphExecHostNodeSetParams,
+ * ::cudaGraphExecChildGraphNodeSetParams,
+ * ::cudaGraphExecEventRecordNodeSetEvent,
+ * ::cudaGraphExecEventWaitNodeSetEvent,
+ * ::cudaGraphExecExternalSemaphoresSignalNodeSetParams,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ */
+#if __CUDART_API_VERSION >= 11020
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecExternalSemaphoresWaitNodeSetParams(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, const struct cudaExternalSemaphoreWaitNodeParams *nodeParams);
+#endif
+
+/**
+ * \brief Enables or disables the specified node in the given graphExec
+ *
+ * Sets \p hNode to be either enabled or disabled. Disabled nodes are functionally equivalent 
+ * to empty nodes until they are reenabled. Existing node parameters are not affected by 
+ * disabling/enabling the node.
+ *  
+ * The node is identified by the corresponding node \p hNode in the non-executable 
+ * graph, from which the executable graph was instantiated.   
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * The modifications only affect future launches of \p hGraphExec. Already
+ * enqueued or running launches of \p hGraphExec are not affected by this call.
+ * \p hNode is also not modified by this call.
+ *
+ * \note Currently only kernel, memset and memcpy nodes are supported. 
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Node from the graph from which graphExec was instantiated
+ * \param isEnabled  - Node is enabled if != 0, otherwise the node is disabled
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphNodeGetEnabled,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ * ::cudaGraphLaunch
+ */
+#if __CUDART_API_VERSION >= 11060
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeSetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int isEnabled);
+#endif
+
+/**
+ * \brief Query whether a node in the given graphExec is enabled
+ *
+ * Sets isEnabled to 1 if \p hNode is enabled, or 0 if \p hNode is disabled.
+ *
+ * The node is identified by the corresponding node \p hNode in the non-executable 
+ * graph, from which the executable graph was instantiated.   
+ *
+ * \p hNode must not have been removed from the original graph.
+ *
+ * \note Currently only kernel, memset and memcpy nodes are supported. 
+ *
+ * \param hGraphExec - The executable graph in which to set the specified node
+ * \param hNode      - Node from the graph from which graphExec was instantiated
+ * \param isEnabled  - Location to return the enabled status of the node
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphNodeSetEnabled,
+ * ::cudaGraphExecUpdate,
+ * ::cudaGraphInstantiate
+ * ::cudaGraphLaunch
+ */
+#if __CUDART_API_VERSION >= 11060
+extern __host__ cudaError_t CUDARTAPI cudaGraphNodeGetEnabled(cudaGraphExec_t hGraphExec, cudaGraphNode_t hNode, unsigned int *isEnabled);
+#endif
+
+/**
+ * \brief Check whether an executable graph can be updated with a graph and perform the update if possible
+ *
+ * Updates the node parameters in the instantiated graph specified by \p hGraphExec with the
+ * node parameters in a topologically identical graph specified by \p hGraph.
+ *
+ * Limitations:
+ *
+ * - Kernel nodes:
+ *   - The owning context of the function cannot change.
+ *   - A node whose function originally did not use CUDA dynamic parallelism cannot be updated
+ *     to a function which uses CDP.
+ *   - A cooperative node cannot be updated to a non-cooperative node, and vice-versa.
+ *   - If the graph was instantiated with cudaGraphInstantiateFlagUseNodePriority, the
+ *     priority attribute cannot change. Equality is checked on the originally requested
+ *     priority values, before they are clamped to the device's supported range.
+ * - Memset and memcpy nodes:
+ *   - The CUDA device(s) to which the operand(s) was allocated/mapped cannot change.
+ *   - The source/destination memory must be allocated from the same contexts as the original
+ *     source/destination memory.
+ *   - Only 1D memsets can be changed.
+ * - Additional memcpy node restrictions:
+ *   - Changing either the source or destination memory type(i.e. CU_MEMORYTYPE_DEVICE,
+ *     CU_MEMORYTYPE_ARRAY, etc.) is not supported.
+ *
+ * Note:  The API may add further restrictions in future releases.  The return code should always be checked.
+ *
+ * cudaGraphExecUpdate sets \p updateResult_out to cudaGraphExecUpdateErrorTopologyChanged under
+ * the following conditions:
+ *
+ * - The count of nodes directly in \p hGraphExec and \p hGraph differ, in which case \p hErrorNode_out
+ *   is NULL.
+ * - A node is deleted in \p hGraph but not not its pair from \p hGraphExec, in which case \p hErrorNode_out
+ *   is NULL.
+ * - A node is deleted in \p hGraphExec but not its pair from \p hGraph, in which case \p hErrorNode_out is
+ *   the pairless node from \p hGraph.
+ * - The dependent nodes of a pair differ, in which case \p hErrorNode_out is the node from \p hGraph.
+ *
+ * cudaGraphExecUpdate sets \p updateResult_out to:
+ * - cudaGraphExecUpdateError if passed an invalid value.
+ * - cudaGraphExecUpdateErrorTopologyChanged if the graph topology changed
+ * - cudaGraphExecUpdateErrorNodeTypeChanged if the type of a node changed, in which case
+ *   \p hErrorNode_out is set to the node from \p hGraph.
+ * - cudaGraphExecUpdateErrorFunctionChanged if the function of a kernel node changed (CUDA driver < 11.2)
+ * - cudaGraphExecUpdateErrorUnsupportedFunctionChange if the func field of a kernel changed in an
+ *   unsupported way(see note above), in which case \p hErrorNode_out is set to the node from \p hGraph
+ * - cudaGraphExecUpdateErrorParametersChanged if any parameters to a node changed in a way 
+ *   that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph
+ * - cudaGraphExecUpdateErrorAttributesChanged if any attributes of a node changed in a way 
+ *   that is not supported, in which case \p hErrorNode_out is set to the node from \p hGraph
+ * - cudaGraphExecUpdateErrorNotSupported if something about a node is unsupported, like 
+ *   the node's type or configuration, in which case \p hErrorNode_out is set to the node from \p hGraph
+ *
+ * If \p updateResult_out isn't set in one of the situations described above, the update check passes
+ * and cudaGraphExecUpdate updates \p hGraphExec to match the contents of \p hGraph.  If an error happens
+ * during the update, \p updateResult_out will be set to cudaGraphExecUpdateError; otherwise,
+ * \p updateResult_out is set to cudaGraphExecUpdateSuccess.
+ *
+ * cudaGraphExecUpdate returns cudaSuccess when the updated was performed successfully.  It returns
+ * cudaErrorGraphExecUpdateFailure if the graph update was not performed because it included 
+ * changes which violated constraints specific to instantiated graph update.
+ *
+ * \param hGraphExec The instantiated graph to be updated
+ * \param hGraph The graph containing the updated parameters
+ * \param hErrorNode_out The node which caused the permissibility check to forbid the update, if any
+ * \param updateResult_out Whether the graph update was permitted.  If was forbidden, the reason why
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorGraphExecUpdateFailure,
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphInstantiate,
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecUpdate(cudaGraphExec_t hGraphExec, cudaGraph_t hGraph, cudaGraphNode_t *hErrorNode_out, enum cudaGraphExecUpdateResult *updateResult_out);
+
+/**
+ * \brief Uploads an executable graph in a stream
+ *
+ * Uploads \p hGraphExec to the device in \p hStream without executing it. Uploads of
+ * the same \p hGraphExec will be serialized. Each upload is ordered behind both any
+ * previous work in \p hStream and any previous launches of \p hGraphExec.
+ * Uses memory cached by \p stream to back the allocations owned by \p graphExec.
+ *
+ * \param hGraphExec - Executable graph to upload
+ * \param hStream    - Stream in which to upload the graph
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * \notefnerr
+ * \note_init_rt
+ *
+ * \sa
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphLaunch,
+ * ::cudaGraphExecDestroy
+ */
+#if __CUDART_API_VERSION >= 11010
+ extern __host__ cudaError_t CUDARTAPI cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream);
+#endif
+
+/**
+ * \brief Launches an executable graph in a stream
+ *
+ * Executes \p graphExec in \p stream. Only one instance of \p graphExec may be executing
+ * at a time. Each launch is ordered behind both any previous work in \p stream
+ * and any previous launches of \p graphExec. To execute a graph concurrently, it must be
+ * instantiated multiple times into multiple executable graphs.
+ *
+ * If any allocations created by \p graphExec remain unfreed (from a previous launch) and
+ * \p graphExec was not instantiated with ::cudaGraphInstantiateFlagAutoFreeOnLaunch,
+ * the launch will fail with ::cudaErrorInvalidValue.
+ *
+ * \param graphExec - Executable graph to launch
+ * \param stream    - Stream in which to launch the graph
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphUpload,
+ * ::cudaGraphExecDestroy
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream);
+
+/**
+ * \brief Destroys an executable graph
+ *
+ * Destroys the executable graph specified by \p graphExec.
+ *
+ * \param graphExec - Executable graph to destroy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaGraphInstantiate,
+ * ::cudaGraphUpload,
+ * ::cudaGraphLaunch
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphExecDestroy(cudaGraphExec_t graphExec);
+
+/**
+ * \brief Destroys a graph
+ *
+ * Destroys the graph specified by \p graph, as well as all of its nodes.
+ *
+ * \param graph - Graph to destroy
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ * \note_graph_thread_safety
+ * \notefnerr
+ * \note_init_rt
+ * \note_callback
+ * \note_destroy_ub
+ *
+ * \sa
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphDestroy(cudaGraph_t graph);
+
+/**
+ * \brief Write a DOT file describing graph structure
+ *
+ * Using the provided \p graph, write to \p path a DOT formatted description of the graph.
+ * By default this includes the graph topology, node types, node id, kernel names and memcpy direction.
+ * \p flags can be specified to write more detailed information about each node type such as
+ * parameter values, kernel attributes, node and function handles.
+ *
+ * \param graph - The graph to create a DOT file from
+ * \param path  - The path to write the DOT file to
+ * \param flags - Flags from cudaGraphDebugDotFlags for specifying which additional node information to write
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorOperatingSystem
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphDebugDotPrint(cudaGraph_t graph, const char *path, unsigned int flags);
+
+/**
+ * \brief Create a user object
+ *
+ * Create a user object with the specified destructor callback and initial reference count. The
+ * initial references are owned by the caller.
+ *
+ * Destructor callbacks cannot make CUDA API calls and should avoid blocking behavior, as they
+ * are executed by a shared internal thread. Another thread may be signaled to perform such
+ * actions, if it does not block forward progress of tasks scheduled through CUDA.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object_out      - Location to return the user object handle
+ * \param ptr             - The pointer to pass to the destroy function
+ * \param destroy         - Callback to free the user object when it is no longer in use
+ * \param initialRefcount - The initial refcount to create the object with, typically 1. The
+ *                          initial references are owned by the calling thread.
+ * \param flags           - Currently it is required to pass ::cudaUserObjectNoDestructorSync,
+ *                          which is the only defined flag. This indicates that the destroy
+ *                          callback cannot be waited on by any CUDA API. Users requiring
+ *                          synchronization of the callback should signal its completion
+ *                          manually.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectRetain,
+ * ::cudaUserObjectRelease,
+ * ::cudaGraphRetainUserObject,
+ * ::cudaGraphReleaseUserObject,
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaUserObjectCreate(cudaUserObject_t *object_out, void *ptr, cudaHostFn_t destroy, unsigned int initialRefcount, unsigned int flags);
+
+/**
+ * \brief Retain a reference to a user object
+ *
+ * Retains new references to a user object. The new references are owned by the caller.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object - The object to retain
+ * \param count  - The number of references to retain, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectCreate,
+ * ::cudaUserObjectRelease,
+ * ::cudaGraphRetainUserObject,
+ * ::cudaGraphReleaseUserObject,
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaUserObjectRetain(cudaUserObject_t object, unsigned int count __dv(1));
+
+/**
+ * \brief Release a reference to a user object
+ *
+ * Releases user object references owned by the caller. The object's destructor is invoked if
+ * the reference count reaches zero.
+ *
+ * It is undefined behavior to release references not owned by the caller, or to use a user
+ * object handle after all references are released.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param object - The object to release
+ * \param count  - The number of references to release, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectCreate,
+ * ::cudaUserObjectRetain,
+ * ::cudaGraphRetainUserObject,
+ * ::cudaGraphReleaseUserObject,
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaUserObjectRelease(cudaUserObject_t object, unsigned int count __dv(1));
+
+/**
+ * \brief Retain a reference to a user object from a graph
+ *
+ * Creates or moves user object references that will be owned by a CUDA graph.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param graph  - The graph to associate the reference with
+ * \param object - The user object to retain a reference for
+ * \param count  - The number of references to add to the graph, typically 1. Must be
+ *                 nonzero and not larger than INT_MAX.
+ * \param flags  - The optional flag ::cudaGraphUserObjectMove transfers references
+ *                 from the calling thread, rather than create new references. Pass 0
+ *                 to create new references.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectCreate
+ * ::cudaUserObjectRetain,
+ * ::cudaUserObjectRelease,
+ * ::cudaGraphReleaseUserObject,
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphRetainUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count __dv(1), unsigned int flags __dv(0));
+
+/**
+ * \brief Release a user object reference from a graph
+ *
+ * Releases user object references owned by a graph.
+ *
+ * See CUDA User Objects in the CUDA C++ Programming Guide for more information on user objects.
+ *
+ * \param graph  - The graph that will release the reference
+ * \param object - The user object to release a reference for
+ * \param count  - The number of references to release, typically 1. Must be nonzero
+ *                 and not larger than INT_MAX.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue
+ *
+ * \sa
+ * ::cudaUserObjectCreate
+ * ::cudaUserObjectRetain,
+ * ::cudaUserObjectRelease,
+ * ::cudaGraphRetainUserObject,
+ * ::cudaGraphCreate
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGraphReleaseUserObject(cudaGraph_t graph, cudaUserObject_t object, unsigned int count __dv(1));
+
+/** @} */ /* END CUDART_GRAPH */
+
+/**
+ * \defgroup CUDART_DRIVER_ENTRY_POINT Driver Entry Point Access
+ *
+ * ___MANBRIEF___ driver entry point access functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the driver entry point access functions of CUDA
+ * runtime application programming interface.
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns the requested driver API function pointer
+ *
+ * Returns in \p **funcPtr the address of the CUDA driver function for the requested flags.
+ *
+ * For a requested driver symbol, if the CUDA version in which the driver symbol was
+ * introduced is less than or equal to the CUDA runtime version, the API will return
+ * the function pointer to the corresponding versioned driver function.
+ *
+ * The pointer returned by the API should be cast to a function pointer matching the
+ * requested driver function's definition in the API header file. The function pointer
+ * typedef can be picked up from the corresponding typedefs header file. For example,
+ * cudaTypedefs.h consists of function pointer typedefs for driver APIs defined in cuda.h.
+ *
+ * The API will return ::cudaErrorSymbolNotFound if the requested driver function is not
+ * supported on the platform, no ABI compatible driver function exists for the CUDA runtime
+ * version or if the driver symbol is invalid.
+ *
+ * The requested flags can be:
+ * - ::cudaEnableDefault: This is the default mode. This is equivalent to
+ *   ::cudaEnablePerThreadDefaultStream if the code is compiled with
+ *   --default-stream per-thread compilation flag or the macro CUDA_API_PER_THREAD_DEFAULT_STREAM
+ *   is defined; ::cudaEnableLegacyStream otherwise.
+ * - ::cudaEnableLegacyStream: This will enable the search for all driver symbols
+ *   that match the requested driver symbol name except the corresponding per-thread versions.
+ * - ::cudaEnablePerThreadDefaultStream: This will enable the search for all
+ *   driver symbols that match the requested driver symbol name including the per-thread
+ *   versions. If a per-thread version is not found, the API will return the legacy version
+ *   of the driver function.
+ *
+ * \param symbol - The base name of the driver API function to look for. As an example,
+ *                 for the driver API ::cuMemAlloc_v2, \p symbol would be cuMemAlloc.
+ *                 Note that the API will use the CUDA runtime version to return the
+ *                 address to the most recent ABI compatible driver symbol, ::cuMemAlloc
+ *                 or ::cuMemAlloc_v2.
+ * \param funcPtr - Location to return the function pointer to the requested driver function
+ * \param flags -  Flags to specify search options.
+ *
+ * \return
+ * ::cudaSuccess,
+ * ::cudaErrorInvalidValue,
+ * ::cudaErrorNotSupported,
+ * ::cudaErrorSymbolNotFound
+ * \note_version_mixing
+ * \note_init_rt
+ * \note_callback
+ *
+ * \sa
+ * ::cuGetProcAddress
+ */
+extern __host__ cudaError_t CUDARTAPI cudaGetDriverEntryPoint(const char *symbol, void **funcPtr, unsigned long long flags);
+
+/** @} */ /* END CUDART_DRIVER_ENTRY_POINT */
+
+/** \cond impl_private */
+extern __host__ cudaError_t CUDARTAPI cudaGetExportTable(const void **ppExportTable, const cudaUUID_t *pExportTableId);
+/** \endcond impl_private */
+
+/**
+ * \defgroup CUDART_HIGHLEVEL C++ API Routines
+ *
+ * ___MANBRIEF___ C++ high level API functions of the CUDA runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the C++ high level API functions of the CUDA runtime
+ * application programming interface. To use these functions, your
+ * application needs to be compiled with the \p nvcc compiler.
+ *
+ * \brief C++-style interface built on top of CUDA runtime API
+ */
+
+/**
+ * \defgroup CUDART_DRIVER Interactions with the CUDA Driver API
+ *
+ * ___MANBRIEF___ interactions between CUDA Driver API and CUDA Runtime API
+ * (___CURRENT_FILE___) ___ENDMANBRIEF___
+ *
+ * This section describes the interactions between the CUDA Driver API and the CUDA Runtime API
+ *
+ * @{
+ *
+ * \section CUDART_CUDA_primary Primary Contexts
+ *
+ * There exists a one to one relationship between CUDA devices in the CUDA Runtime
+ * API and ::CUcontext s in the CUDA Driver API within a process.  The specific
+ * context which the CUDA Runtime API uses for a device is called the device's
+ * primary context.  From the perspective of the CUDA Runtime API, a device and 
+ * its primary context are synonymous.
+ *
+ * \section CUDART_CUDA_init Initialization and Tear-Down
+ *
+ * CUDA Runtime API calls operate on the CUDA Driver API ::CUcontext which is current to
+ * to the calling host thread.  
+ *
+ * The function ::cudaSetDevice() makes the primary context for the
+ * specified device current to the calling thread by calling ::cuCtxSetCurrent().
+ *
+ * The CUDA Runtime API will automatically initialize the primary context for
+ * a device at the first CUDA Runtime API call which requires an active context.
+ * If no ::CUcontext is current to the calling thread when a CUDA Runtime API call 
+ * which requires an active context is made, then the primary context for a device 
+ * will be selected, made current to the calling thread, and initialized.
+ *
+ * The context which the CUDA Runtime API initializes will be initialized using 
+ * the parameters specified by the CUDA Runtime API functions
+ * ::cudaSetDeviceFlags(), 
+ * ::cudaD3D9SetDirect3DDevice(), 
+ * ::cudaD3D10SetDirect3DDevice(), 
+ * ::cudaD3D11SetDirect3DDevice(), 
+ * ::cudaGLSetGLDevice(), and
+ * ::cudaVDPAUSetVDPAUDevice().
+ * Note that these functions will fail with ::cudaErrorSetOnActiveProcess if they are 
+ * called when the primary context for the specified device has already been initialized.
+ * (or if the current device has already been initialized, in the case of 
+ * ::cudaSetDeviceFlags()). 
+ *
+ * Primary contexts will remain active until they are explicitly deinitialized 
+ * using ::cudaDeviceReset().  The function ::cudaDeviceReset() will deinitialize the 
+ * primary context for the calling thread's current device immediately.  The context 
+ * will remain current to all of the threads that it was current to.  The next CUDA 
+ * Runtime API call on any thread which requires an active context will trigger the 
+ * reinitialization of that device's primary context.
+ *
+ * Note that primary contexts are shared resources. It is recommended that
+ * the primary context not be reset except just before exit or to recover from an
+ * unspecified launch failure.
+ * 
+ * \section CUDART_CUDA_context Context Interoperability
+ *
+ * Note that the use of multiple ::CUcontext s per device within a single process 
+ * will substantially degrade performance and is strongly discouraged.  Instead,
+ * it is highly recommended that the implicit one-to-one device-to-context mapping
+ * for the process provided by the CUDA Runtime API be used.
+ *
+ * If a non-primary ::CUcontext created by the CUDA Driver API is current to a
+ * thread then the CUDA Runtime API calls to that thread will operate on that 
+ * ::CUcontext, with some exceptions listed below.  Interoperability between data
+ * types is discussed in the following sections.
+ *
+ * The function ::cudaPointerGetAttributes() will return the error 
+ * ::cudaErrorIncompatibleDriverContext if the pointer being queried was allocated by a 
+ * non-primary context.  The function ::cudaDeviceEnablePeerAccess() and the rest of 
+ * the peer access API may not be called when a non-primary ::CUcontext is current.  
+ * To use the pointer query and peer access APIs with a context created using the 
+ * CUDA Driver API, it is necessary that the CUDA Driver API be used to access
+ * these features.
+ *
+ * All CUDA Runtime API state (e.g, global variables' addresses and values) travels
+ * with its underlying ::CUcontext.  In particular, if a ::CUcontext is moved from one 
+ * thread to another then all CUDA Runtime API state will move to that thread as well.
+ *
+ * Please note that attaching to legacy contexts (those with a version of 3010 as returned
+ * by ::cuCtxGetApiVersion()) is not possible. The CUDA Runtime will return
+ * ::cudaErrorIncompatibleDriverContext in such cases.
+ *
+ * \section CUDART_CUDA_stream Interactions between CUstream and cudaStream_t
+ *
+ * The types ::CUstream and ::cudaStream_t are identical and may be used interchangeably.
+ *
+ * \section CUDART_CUDA_event Interactions between CUevent and cudaEvent_t
+ *
+ * The types ::CUevent and ::cudaEvent_t are identical and may be used interchangeably.
+ *
+ * \section CUDART_CUDA_array Interactions between CUarray and cudaArray_t 
+ *
+ * The types ::CUarray and struct ::cudaArray * represent the same data type and may be used
+ * interchangeably by casting the two types between each other.
+ *
+ * In order to use a ::CUarray in a CUDA Runtime API function which takes a struct ::cudaArray *,
+ * it is necessary to explicitly cast the ::CUarray to a struct ::cudaArray *.
+ *
+ * In order to use a struct ::cudaArray * in a CUDA Driver API function which takes a ::CUarray,
+ * it is necessary to explicitly cast the struct ::cudaArray * to a ::CUarray .
+ *
+ * \section CUDART_CUDA_graphicsResource Interactions between CUgraphicsResource and cudaGraphicsResource_t
+ *
+ * The types ::CUgraphicsResource and ::cudaGraphicsResource_t represent the same data type and may be used
+ * interchangeably by casting the two types between each other.
+ *
+ * In order to use a ::CUgraphicsResource in a CUDA Runtime API function which takes a 
+ * ::cudaGraphicsResource_t, it is necessary to explicitly cast the ::CUgraphicsResource 
+ * to a ::cudaGraphicsResource_t.
+ *
+ * In order to use a ::cudaGraphicsResource_t in a CUDA Driver API function which takes a
+ * ::CUgraphicsResource, it is necessary to explicitly cast the ::cudaGraphicsResource_t 
+ * to a ::CUgraphicsResource.
+ *
+ * \section CUDART_CUDA_texture_objects Interactions between CUtexObject and cudaTextureObject_t
+ *
+ * The types ::CUtexObject and ::cudaTextureObject_t represent the same data type and may be used
+ * interchangeably by casting the two types between each other.
+ *
+ * In order to use a ::CUtexObject in a CUDA Runtime API function which takes a ::cudaTextureObject_t,
+ * it is necessary to explicitly cast the ::CUtexObject to a ::cudaTextureObject_t.
+ *
+ * In order to use a ::cudaTextureObject_t in a CUDA Driver API function which takes a ::CUtexObject,
+ * it is necessary to explicitly cast the ::cudaTextureObject_t to a ::CUtexObject.
+ *
+ * \section CUDART_CUDA_surface_objects Interactions between CUsurfObject and cudaSurfaceObject_t
+ *
+ * The types ::CUsurfObject and ::cudaSurfaceObject_t represent the same data type and may be used
+ * interchangeably by casting the two types between each other.
+ *
+ * In order to use a ::CUsurfObject in a CUDA Runtime API function which takes a ::cudaSurfaceObject_t,
+ * it is necessary to explicitly cast the ::CUsurfObject to a ::cudaSurfaceObject_t.
+ *
+ * In order to use a ::cudaSurfaceObject_t in a CUDA Driver API function which takes a ::CUsurfObject,
+ * it is necessary to explicitly cast the ::cudaSurfaceObject_t to a ::CUsurfObject.
+ *
+ * \section CUDART_CUDA_module Interactions between CUfunction and cudaFunction_t
+ *
+ * The types ::CUfunction and ::cudaFunction_t represent the same data type and may be used
+ * interchangeably by casting the two types between each other.
+ *
+ * In order to use a ::cudaFunction_t in a CUDA Driver API function which takes a ::CUfunction,
+ * it is necessary to explicitly cast the ::cudaFunction_t to a ::CUfunction.
+ *
+ */
+
+ /**
+  * \brief Get pointer to device entry function that matches entry function \p symbolPtr
+  *
+  * Returns in \p functionPtr the device entry function corresponding to the symbol \p symbolPtr.
+  *
+  * \param functionPtr     - Returns the device entry function
+  * \param symbolPtr       - Pointer to device entry function to search for
+  *
+  * \return
+  * ::cudaSuccess
+  *
+  */
+extern __host__ cudaError_t CUDARTAPI_CDECL cudaGetFuncBySymbol(cudaFunction_t* functionPtr, const void* symbolPtr);
+
+/** @} */ /* END CUDART_DRIVER */
+
+#if defined(__CUDA_API_VERSION_INTERNAL)
+    #undef cudaMemcpy
+    #undef cudaMemcpyToSymbol
+    #undef cudaMemcpyFromSymbol
+    #undef cudaMemcpy2D
+    #undef cudaMemcpyToArray
+    #undef cudaMemcpy2DToArray
+    #undef cudaMemcpyFromArray
+    #undef cudaMemcpy2DFromArray
+    #undef cudaMemcpyArrayToArray
+    #undef cudaMemcpy2DArrayToArray
+    #undef cudaMemcpy3D
+    #undef cudaMemcpy3DPeer
+    #undef cudaMemset
+    #undef cudaMemset2D
+    #undef cudaMemset3D
+    #undef cudaMemcpyAsync
+    #undef cudaMemcpyToSymbolAsync
+    #undef cudaMemcpyFromSymbolAsync
+    #undef cudaMemcpy2DAsync
+    #undef cudaMemcpyToArrayAsync
+    #undef cudaMemcpy2DToArrayAsync
+    #undef cudaMemcpyFromArrayAsync
+    #undef cudaMemcpy2DFromArrayAsync
+    #undef cudaMemcpy3DAsync
+    #undef cudaMemcpy3DPeerAsync
+    #undef cudaMemsetAsync
+    #undef cudaMemset2DAsync
+    #undef cudaMemset3DAsync
+    #undef cudaStreamQuery
+    #undef cudaStreamGetFlags
+    #undef cudaStreamGetPriority
+    #undef cudaEventRecord
+    #undef cudaEventRecordWithFlags
+    #undef cudaStreamWaitEvent
+    #undef cudaStreamAddCallback
+    #undef cudaStreamAttachMemAsync
+    #undef cudaStreamSynchronize
+    #undef cudaLaunchKernel
+    #undef cudaLaunchKernelExC
+    #undef cudaLaunchHostFunc
+    #undef cudaMemPrefetchAsync
+    #undef cudaLaunchCooperativeKernel
+    #undef cudaSignalExternalSemaphoresAsync
+    #undef cudaWaitExternalSemaphoresAsync
+    #undef cudaGraphUpload
+    #undef cudaGraphLaunch
+    #undef cudaStreamBeginCapture
+    #undef cudaStreamEndCapture
+    #undef cudaStreamIsCapturing
+    #undef cudaStreamGetCaptureInfo
+    #undef cudaStreamGetCaptureInfo_v2
+    #undef cudaStreamCopyAttributes
+    #undef cudaStreamGetAttribute
+    #undef cudaStreamSetAttribute
+    #undef cudaMallocAsync
+    #undef cudaFreeAsync
+    #undef cudaMallocFromPoolAsync
+    #undef cudaGetDriverEntryPoint
+
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyToSymbol(const void *symbol, const void *src, size_t count, size_t offset __dv(0), enum cudaMemcpyKind kind __dv(cudaMemcpyHostToDevice));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromSymbol(void *dst, const void *symbol, size_t count, size_t offset __dv(0), enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToHost));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2D(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t count, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DToArray(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromArray(void *dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DFromArray(void *dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, enum cudaMemcpyKind kind);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t count, enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToDevice));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DArrayToArray(cudaArray_t dst, size_t wOffsetDst, size_t hOffsetDst, cudaArray_const_t src, size_t wOffsetSrc, size_t hOffsetSrc, size_t width, size_t height, enum cudaMemcpyKind kind __dv(cudaMemcpyDeviceToDevice));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy3D(const struct cudaMemcpy3DParms *p);
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy3DPeer(const struct cudaMemcpy3DPeerParms *p);
+    extern __host__ cudaError_t CUDARTAPI cudaMemset(void *devPtr, int value, size_t count);
+    extern __host__ cudaError_t CUDARTAPI cudaMemset2D(void *devPtr, size_t pitch, int value, size_t width, size_t height);
+    extern __host__ cudaError_t CUDARTAPI cudaMemset3D(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent);
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpyAsync(void *dst, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyToSymbolAsync(const void *symbol, const void *src, size_t count, size_t offset, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromSymbolAsync(void *dst, const void *symbol, size_t count, size_t offset, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy2DAsync(void *dst, size_t dpitch, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DToArrayAsync(cudaArray_t dst, size_t wOffset, size_t hOffset, const void *src, size_t spitch, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpyFromArrayAsync(void *dst, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t count, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy2DFromArrayAsync(void *dst, size_t dpitch, cudaArray_const_t src, size_t wOffset, size_t hOffset, size_t width, size_t height, enum cudaMemcpyKind kind, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemcpy3DAsync(const struct cudaMemcpy3DParms *p, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaMemcpy3DPeerAsync(const struct cudaMemcpy3DPeerParms *p, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemsetAsync(void *devPtr, int value, size_t count, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset2DAsync(void *devPtr, size_t pitch, int value, size_t width, size_t height, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaMemset3DAsync(struct cudaPitchedPtr pitchedDevPtr, int value, struct cudaExtent extent, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaStreamQuery(cudaStream_t stream);
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamGetFlags(cudaStream_t hStream, unsigned int *flags);
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamGetPriority(cudaStream_t hStream, int *priority);
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecord(cudaEvent_t event, cudaStream_t stream __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaEventRecordWithFlags(cudaEvent_t event, cudaStream_t stream __dv(0), unsigned int flags __dv(0));
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamWaitEvent(cudaStream_t stream, cudaEvent_t event, unsigned int flags);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamAddCallback(cudaStream_t stream, cudaStreamCallback_t callback, void *userData, unsigned int flags);
+    extern __host__ __cudart_builtin__ cudaError_t CUDARTAPI cudaStreamAttachMemAsync(cudaStream_t stream, void *devPtr, size_t length, unsigned int flags);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamSynchronize(cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaLaunchKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaLaunchKernelExC(const cudaLaunchConfig_t *config, const void *func, void **args);
+    extern __host__ cudaError_t CUDARTAPI cudaLaunchCooperativeKernel(const void *func, dim3 gridDim, dim3 blockDim, void **args, size_t sharedMem, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaLaunchHostFunc(cudaStream_t stream, cudaHostFn_t fn, void *userData);
+    extern __host__ cudaError_t CUDARTAPI cudaMemPrefetchAsync(const void *devPtr, size_t count, int dstDevice, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaSignalExternalSemaphoresAsync(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreSignalParams_v1 *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaSignalExternalSemaphoresAsync_ptsz(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreSignalParams_v1 *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaSignalExternalSemaphoresAsync_v2(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreSignalParams *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaWaitExternalSemaphoresAsync(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreWaitParams_v1 *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaWaitExternalSemaphoresAsync_ptsz(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreWaitParams_v1 *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaWaitExternalSemaphoresAsync_v2(const cudaExternalSemaphore_t *extSemArray, const struct cudaExternalSemaphoreWaitParams *paramsArray, unsigned int numExtSems, cudaStream_t stream __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaGraphUpload(cudaGraphExec_t graphExec, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaGraphLaunch(cudaGraphExec_t graphExec, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamBeginCapture(cudaStream_t stream, enum cudaStreamCaptureMode mode);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamEndCapture(cudaStream_t stream, cudaGraph_t *pGraph);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamIsCapturing(cudaStream_t stream, enum cudaStreamCaptureStatus *pCaptureStatus);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamGetCaptureInfo(cudaStream_t stream, enum cudaStreamCaptureStatus *captureStatus_out, unsigned long long *id_out);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamGetCaptureInfo_v2(cudaStream_t stream, enum cudaStreamCaptureStatus *captureStatus_out, unsigned long long *id_out __dv(0), cudaGraph_t *graph_out __dv(0), const cudaGraphNode_t **dependencies_out __dv(0), size_t *numDependencies_out __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaStreamUpdateCaptureDependencies_ptsz(cudaStream_t stream, cudaGraphNode_t *dependencies, size_t numDependencies, unsigned int flags __dv(0));
+    extern __host__ cudaError_t CUDARTAPI cudaStreamCopyAttributes(cudaStream_t dstStream, cudaStream_t srcStream);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamGetAttribute(cudaStream_t stream, cudaStreamAttrID attr, cudaStreamAttrValue *value);
+    extern __host__ cudaError_t CUDARTAPI cudaStreamSetAttribute(cudaStream_t stream, cudaStreamAttrID attr, const cudaStreamAttrValue *param);
+
+    extern __host__ cudaError_t CUDARTAPI cudaMallocAsync(void **devPtr, size_t size, cudaStream_t hStream);
+    extern __host__ cudaError_t CUDARTAPI cudaFreeAsync(void *devPtr, cudaStream_t hStream);
+    extern __host__ cudaError_t CUDARTAPI cudaMallocFromPoolAsync(void **ptr, size_t size, cudaMemPool_t memPool, cudaStream_t stream);
+    extern __host__ cudaError_t CUDARTAPI cudaGetDriverEntryPoint(const char *symbol, void **funcPtr, unsigned long long flags);
+
+#elif defined(__CUDART_API_PER_THREAD_DEFAULT_STREAM)
+    // nvcc stubs reference the 'cudaLaunch'/'cudaLaunchKernel' identifier even if it was defined
+    // to 'cudaLaunch_ptsz'/'cudaLaunchKernel_ptsz'. Redirect through a static inline function.
+    #undef cudaLaunchKernel
+    static __inline__ __host__ cudaError_t cudaLaunchKernel(const void *func, 
+                                                            dim3 gridDim, dim3 blockDim, 
+                                                            void **args, size_t sharedMem, 
+                                                            cudaStream_t stream)
+    {
+        return cudaLaunchKernel_ptsz(func, gridDim, blockDim, args, sharedMem, stream);
+    }
+    #define cudaLaunchKernel __CUDART_API_PTSZ(cudaLaunchKernel)
+    #undef cudaLaunchKernelExC
+    static __inline__ __host__ cudaError_t cudaLaunchKernelExC(const cudaLaunchConfig_t *config,
+                                                               const void *func,
+                                                                  void **args)
+    {
+        return cudaLaunchKernelExC_ptsz(config, func, args);
+    }
+    #define cudaLaunchKernelExC __CUDART_API_PTSZ(cudaLaunchKernelExC)
+#endif
+
+#if defined(__cplusplus)
+}
+
+#endif /* __cplusplus */
+
+#undef EXCLUDE_FROM_RTC
+#endif /* !__CUDACC_RTC__ */
+
+#undef __dv
+#undef __CUDA_DEPRECATED
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_API_H__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_RUNTIME_API_H__
+#endif
+
+#endif /* !__CUDA_RUNTIME_API_H__ */
diff --git a/ext/cudart/include/cuda_surface_types.h b/ext/cudart/include/cuda_surface_types.h
new file mode 100644
index 00000000..68e88cfe
--- /dev/null
+++ b/ext/cudart/include/cuda_surface_types.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_SURFACE_TYPES_H__)
+#define __CUDA_SURFACE_TYPES_H__
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined(__CUDACC_RTC__)
+#define EXCLUDE_FROM_RTC
+#include "channel_descriptor.h"
+#undef EXCLUDE_FROM_RTC
+#endif /* !__CUDACC_RTC__ */
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+template<class T, int dim = 1>
+struct __device_builtin_surface_type__ surface : public surfaceReference
+{
+#if !defined(__CUDACC_RTC__)
+  __host__ surface(void)
+  {
+    channelDesc = cudaCreateChannelDesc<T>();
+  }
+
+  __host__ surface(struct cudaChannelFormatDesc desc)
+  {
+    channelDesc = desc;
+  }
+#endif /* !__CUDACC_RTC__ */  
+};
+
+template<int dim>
+struct  __device_builtin_surface_type__  surface<void, dim> : public surfaceReference
+{
+#if !defined(__CUDACC_RTC__)
+  __host__ surface(void)
+  {
+    channelDesc = cudaCreateChannelDesc<void>();
+  }
+#endif /* !__CUDACC_RTC__ */  
+};
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#endif /* !__CUDA_SURFACE_TYPES_H__ */
diff --git a/ext/cudart/include/cuda_texture_types.h b/ext/cudart/include/cuda_texture_types.h
new file mode 100644
index 00000000..21c8d944
--- /dev/null
+++ b/ext/cudart/include/cuda_texture_types.h
@@ -0,0 +1,109 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_TEXTURE_TYPES_H__)
+#define __CUDA_TEXTURE_TYPES_H__
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined(__CUDACC_RTC__)
+#define EXCLUDE_FROM_RTC
+#include "channel_descriptor.h"
+#undef EXCLUDE_FROM_RTC
+#endif /* !__CUDACC_RTC__ */
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+template<class T, int texType = cudaTextureType1D, enum cudaTextureReadMode mode = cudaReadModeElementType>
+struct __device_builtin_texture_type__ texture : public textureReference
+{
+#if !defined(__CUDACC_RTC__)
+  __host__ texture(int                         norm  = 0,
+                   enum cudaTextureFilterMode  fMode = cudaFilterModePoint,
+                   enum cudaTextureAddressMode aMode = cudaAddressModeClamp)
+  {
+    normalized     = norm;
+    filterMode     = fMode;
+    addressMode[0] = aMode;
+    addressMode[1] = aMode;
+    addressMode[2] = aMode;
+    channelDesc    = cudaCreateChannelDesc<T>();
+    sRGB           = 0;
+  }
+
+  __host__ texture(int                          norm,
+                   enum cudaTextureFilterMode   fMode,
+                   enum cudaTextureAddressMode  aMode,
+                   struct cudaChannelFormatDesc desc)
+  {
+    normalized     = norm;
+    filterMode     = fMode;
+    addressMode[0] = aMode;
+    addressMode[1] = aMode;
+    addressMode[2] = aMode;
+    channelDesc    = desc;
+    sRGB           = 0;
+  }
+#endif /* !__CUDACC_RTC__ */
+};
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#endif /* !__CUDA_TEXTURE_TYPES_H__ */
diff --git a/ext/cudart/include/cudart_platform.h b/ext/cudart/include/cudart_platform.h
new file mode 100644
index 00000000..0f022bbe
--- /dev/null
+++ b/ext/cudart/include/cudart_platform.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2016 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#ifndef __CUDART_PLATFORM_H__
+#define __CUDART_PLATFORM_H__
+
+#if ((defined(__linux__) || defined(__QNX__)) && (defined(__arm__) || defined(__aarch64__) || defined(__x86_64__)))
+#define isEglSupported 1
+#endif
+
+#endif
diff --git a/ext/cudart/include/device_atomic_functions.h b/ext/cudart/include/device_atomic_functions.h
new file mode 100644
index 00000000..c96298f2
--- /dev/null
+++ b/ext/cudart/include/device_atomic_functions.h
@@ -0,0 +1,211 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DEVICE_ATOMIC_FUNCTIONS_H__)
+#define __DEVICE_ATOMIC_FUNCTIONS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __DEVICE_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __DEVICE_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+#ifdef __CUDA_ARCH__
+extern "C"
+{
+extern __device__ __device_builtin__ int          __iAtomicAdd(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicAdd(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicExch(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicExch(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ float        __fAtomicExch(float *address, float val);
+extern __device__ __device_builtin__ int          __iAtomicMin(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicMin(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicMax(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicMax(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicInc(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicDec(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicAnd(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicAnd(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicOr(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicOr(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicXor(int *address, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicXor(unsigned int *address, unsigned int val);
+extern __device__ __device_builtin__ int          __iAtomicCAS(int *address, int compare, int val);
+extern __device__ __device_builtin__ unsigned int __uAtomicCAS(unsigned int *address, unsigned int compare, unsigned int val);
+}
+#endif /* __CUDA_ARCH__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicAdd(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicAdd(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicSub(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicSub(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicExch(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicExch(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ float atomicExch(float *address, float val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicMin(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicMin(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicMax(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicMax(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicInc(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicDec(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicAnd(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicAnd(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicOr(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicOr(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicXor(int *address, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicXor(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicCAS(int *address, int compare, int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicCAS(unsigned int *address, unsigned int compare, unsigned int val) __DEF_IF_HOST
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#if defined(_WIN32)
+# define __DEPRECATED__(msg) __declspec(deprecated(msg))
+#elif (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5 && !defined(__clang__))))
+# define __DEPRECATED__(msg) __attribute__((deprecated))
+#else
+# define __DEPRECATED__(msg) __attribute__((deprecated(msg)))
+#endif
+
+#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 700
+#define __WSB_DEPRECATION_MESSAGE(x) #x"() is not valid on compute_70 and above, and should be replaced with "#x"_sync()."\
+    "To continue using "#x"(), specify virtual architecture compute_60 when targeting sm_70 and above, for example, using the pair of compiler options: -arch=compute_60 -code=sm_70."
+#else
+#define __WSB_DEPRECATION_MESSAGE(x) #x"() is deprecated in favor of "#x"_sync() and may be removed in a future release (Use -Wno-deprecated-declarations to suppress this warning)."
+#endif
+
+extern "C"
+{
+#ifdef __CUDA_ARCH__
+extern __device__ __device_builtin__ unsigned long long int __ullAtomicAdd(unsigned long long int *address, unsigned long long int val);
+extern __device__ __device_builtin__ unsigned long long int __ullAtomicExch(unsigned long long int *address, unsigned long long int val);
+extern __device__ __device_builtin__ unsigned long long int __ullAtomicCAS(unsigned long long int *address, unsigned long long int compare, unsigned long long int val);
+#endif  /* __CUDA_ARCH__ */
+extern __device__ __device_builtin__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__any)) int __any(int cond);
+extern __device__ __device_builtin__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__all)) int __all(int cond);
+}
+
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicAdd(unsigned long long int *address, unsigned long long int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicExch(unsigned long long int *address, unsigned long long int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicCAS(unsigned long long int *address, unsigned long long int compare, unsigned long long int val) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__any)) bool any(bool cond) __DEF_IF_HOST
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__all)) bool all(bool cond) __DEF_IF_HOST
+
+#undef __DEPRECATED__
+#undef __WSB_DEPRECATION_MESSAGE
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __DEVICE_ATOMIC_FUNCTIONS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "device_atomic_functions.hpp"
+#endif /* !__CUDACC_RTC__ && defined(__CUDA_ARCH__) */
+
+#endif /* !__DEVICE_ATOMIC_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/device_atomic_functions.hpp b/ext/cudart/include/device_atomic_functions.hpp
new file mode 100644
index 00000000..50e427c3
--- /dev/null
+++ b/ext/cudart/include/device_atomic_functions.hpp
@@ -0,0 +1,224 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DEVICE_ATOMIC_FUNCTIONS_HPP__)
+#define __DEVICE_ATOMIC_FUNCTIONS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __DEVICE_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __DEVICE_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicAdd(int *address, int val)
+{
+  return __iAtomicAdd(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicAdd(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicSub(int *address, int val)
+{
+  return __iAtomicAdd(address, (unsigned int)-(int)val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicSub(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd(address, (unsigned int)-(int)val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicExch(int *address, int val)
+{
+  return __iAtomicExch(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicExch(unsigned int *address, unsigned int val)
+{
+  return __uAtomicExch(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ float atomicExch(float *address, float val)
+{
+  return __fAtomicExch(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicMin(int *address, int val)
+{
+  return __iAtomicMin(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicMin(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMin(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicMax(int *address, int val)
+{
+  return __iAtomicMax(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicMax(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMax(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicInc(unsigned int *address, unsigned int val)
+{
+  return __uAtomicInc(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicDec(unsigned int *address, unsigned int val)
+{
+  return __uAtomicDec(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicAnd(int *address, int val)
+{
+  return __iAtomicAnd(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicAnd(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAnd(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicOr(int *address, int val)
+{
+  return __iAtomicOr(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicOr(unsigned int *address, unsigned int val)
+{
+  return __uAtomicOr(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicXor(int *address, int val)
+{
+  return __iAtomicXor(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicXor(unsigned int *address, unsigned int val)
+{
+  return __uAtomicXor(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ int atomicCAS(int *address, int compare, int val)
+{
+  return __iAtomicCAS(address, compare, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned int atomicCAS(unsigned int *address, unsigned int compare, unsigned int val)
+{
+  return __uAtomicCAS(address, compare, val);
+}
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicAdd(unsigned long long int *address, unsigned long long int val)
+{
+  return __ullAtomicAdd(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicExch(unsigned long long int *address, unsigned long long int val)
+{
+  return __ullAtomicExch(address, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ unsigned long long int atomicCAS(unsigned long long int *address, unsigned long long int compare, unsigned long long int val)
+{
+  return __ullAtomicCAS(address, compare, val);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ bool any(bool cond)
+{
+  return (bool)__any((int)cond);
+}
+
+__DEVICE_ATOMIC_FUNCTIONS_DECL__ bool all(bool cond)
+{
+  return (bool)__all((int)cond);
+}
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEVICE_ATOMIC_FUNCTIONS_DECL__
+
+#endif /* !__DEVICE_ATOMIC_FUNCTIONS_HPP__ */
+
diff --git a/ext/cudart/include/device_double_functions.h b/ext/cudart/include/device_double_functions.h
new file mode 100644
index 00000000..82b25e59
--- /dev/null
+++ b/ext/cudart/include/device_double_functions.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("device_double_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "device_double_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_DOUBLE_FUNCTIONS_H_WRAPPER__
+#endif
+
+#include "crt/device_double_functions.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_DOUBLE_FUNCTIONS_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_DOUBLE_FUNCTIONS_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/device_functions.h b/ext/cudart/include/device_functions.h
new file mode 100644
index 00000000..0094cc9a
--- /dev/null
+++ b/ext/cudart/include/device_functions.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("device_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "device_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_FUNCTIONS_H_WRAPPER__
+#endif
+
+#include "crt/device_functions.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_FUNCTIONS_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_FUNCTIONS_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/device_launch_parameters.h b/ext/cudart/include/device_launch_parameters.h
new file mode 100644
index 00000000..8f552db8
--- /dev/null
+++ b/ext/cudart/include/device_launch_parameters.h
@@ -0,0 +1,118 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DEVICE_LAUNCH_PARAMETERS_H__)
+#define __DEVICE_LAUNCH_PARAMETERS_H__
+
+#include "vector_types.h"
+
+#if !defined(__STORAGE__)
+
+#if defined(__CUDACC_RTC__)
+#define __STORAGE__ \
+        extern const __device__
+#else /* !__CUDACC_RTC__ */
+#define __STORAGE__ \
+        extern const
+#endif /* __CUDACC_RTC__ */
+
+#endif /* __STORAGE__ */
+
+#if defined(__cplusplus)
+extern "C" {
+#endif /* __cplusplus */
+
+uint3 __device_builtin__ __STORAGE__ threadIdx;
+uint3 __device_builtin__ __STORAGE__ blockIdx;
+dim3 __device_builtin__ __STORAGE__ blockDim;
+dim3 __device_builtin__ __STORAGE__ gridDim;
+int __device_builtin__ __STORAGE__ warpSize;
+
+#undef __STORAGE__
+
+#if defined(__cplusplus)
+}
+#endif /* __cplusplus */
+
+#if !defined(__cudaGet_threadIdx)
+
+#define __cudaGet_threadIdx() \
+        threadIdx
+
+#endif /* __cudaGet_threadIdx */
+
+#if !defined(__cudaGet_blockIdx)
+
+#define __cudaGet_blockIdx() \
+        blockIdx
+
+#endif /* __cudaGet_blockIdx */
+
+#if !defined(__cudaGet_blockDim)
+
+#define __cudaGet_blockDim() \
+        blockDim
+
+#endif /* __cudaGet_blockDim */
+
+#if !defined(__cudaGet_gridDim)
+
+#define __cudaGet_gridDim() \
+        gridDim
+
+#endif /* __cudaGet_gridDim */
+
+#if !defined(__cudaGet_warpSize)
+
+#define __cudaGet_warpSize() \
+        warpSize
+
+#endif /* __cudaGet_warpSize */
+
+#endif /* !__DEVICE_LAUNCH_PARAMETERS_H__ */
diff --git a/ext/cudart/include/device_types.h b/ext/cudart/include/device_types.h
new file mode 100644
index 00000000..4b575a10
--- /dev/null
+++ b/ext/cudart/include/device_types.h
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DEVICE_TYPES_H__)
+#define __DEVICE_TYPES_H__
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_TYPES_H__
+#endif
+
+#ifndef __DOXYGEN_ONLY__
+#include "crt/host_defines.h"
+#endif
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+enum __device_builtin__ cudaRoundMode
+{
+    cudaRoundNearest,
+    cudaRoundZero,
+    cudaRoundPosInf,
+    cudaRoundMinInf
+};
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_TYPES_H__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DEVICE_TYPES_H__
+#endif
+
+#endif /* !__DEVICE_TYPES_H__ */
diff --git a/ext/cudart/include/driver_functions.h b/ext/cudart/include/driver_functions.h
new file mode 100644
index 00000000..94767974
--- /dev/null
+++ b/ext/cudart/include/driver_functions.h
@@ -0,0 +1,145 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DRIVER_FUNCTIONS_H__)
+#define __DRIVER_FUNCTIONS_H__
+
+#include "builtin_types.h"
+#include "crt/host_defines.h"
+#include "driver_types.h"
+
+/**
+ * \addtogroup CUDART_MEMORY
+ *
+ * @{
+ */
+
+/**
+ * \brief Returns a cudaPitchedPtr based on input parameters
+ *
+ * Returns a ::cudaPitchedPtr based on the specified input parameters \p d,
+ * \p p, \p xsz, and \p ysz.
+ *
+ * \param d   - Pointer to allocated memory
+ * \param p   - Pitch of allocated memory in bytes
+ * \param xsz - Logical width of allocation in elements
+ * \param ysz - Logical height of allocation in elements
+ *
+ * \return
+ * ::cudaPitchedPtr specified by \p d, \p p, \p xsz, and \p ysz
+ *
+ * \sa make_cudaExtent, make_cudaPos
+ */
+static __inline__ __host__ struct cudaPitchedPtr make_cudaPitchedPtr(void *d, size_t p, size_t xsz, size_t ysz) 
+{
+  struct cudaPitchedPtr s;
+
+  s.ptr   = d;
+  s.pitch = p;
+  s.xsize = xsz;
+  s.ysize = ysz;
+
+  return s;
+}
+
+/**
+ * \brief Returns a cudaPos based on input parameters
+ *
+ * Returns a ::cudaPos based on the specified input parameters \p x,
+ * \p y, and \p z.
+ *
+ * \param x - X position
+ * \param y - Y position
+ * \param z - Z position
+ *
+ * \return
+ * ::cudaPos specified by \p x, \p y, and \p z
+ *
+ * \sa make_cudaExtent, make_cudaPitchedPtr
+ */
+static __inline__ __host__ struct cudaPos make_cudaPos(size_t x, size_t y, size_t z) 
+{
+  struct cudaPos p;
+
+  p.x = x;
+  p.y = y;
+  p.z = z;
+
+  return p;
+}
+
+/**
+ * \brief Returns a cudaExtent based on input parameters
+ *
+ * Returns a ::cudaExtent based on the specified input parameters \p w,
+ * \p h, and \p d.
+ *
+ * \param w - Width in elements when referring to array memory, in bytes when referring to linear memory
+ * \param h - Height in elements
+ * \param d - Depth in elements
+ *
+ * \return
+ * ::cudaExtent specified by \p w, \p h, and \p d
+ *
+ * \sa make_cudaPitchedPtr, make_cudaPos
+ */
+static __inline__ __host__ struct cudaExtent make_cudaExtent(size_t w, size_t h, size_t d) 
+{
+  struct cudaExtent e;
+
+  e.width  = w;
+  e.height = h;
+  e.depth  = d;
+
+  return e;
+}
+
+/** @} */ /* END CUDART_MEMORY */
+
+#endif /* !__DRIVER_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/driver_types.h b/ext/cudart/include/driver_types.h
new file mode 100644
index 00000000..47b54f94
--- /dev/null
+++ b/ext/cudart/include/driver_types.h
@@ -0,0 +1,3093 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__DRIVER_TYPES_H__)
+#define __DRIVER_TYPES_H__
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DRIVER_TYPES_H__
+#endif
+
+#ifndef __DOXYGEN_ONLY__
+#include "crt/host_defines.h"
+#endif
+#include "vector_types.h"
+
+
+
+/**
+ * \defgroup CUDART_TYPES Data types used by CUDA Runtime
+ * \ingroup CUDART
+ *
+ * @{
+ */
+
+/*******************************************************************************
+*                                                                              *
+*  TYPE DEFINITIONS USED BY RUNTIME API                                        *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined(__CUDA_INTERNAL_COMPILATION__)
+
+#if !defined(__CUDACC_RTC__)
+#include <limits.h>
+#include <stddef.h>
+#endif /* !defined(__CUDACC_RTC__) */
+
+#define cudaHostAllocDefault                0x00  /**< Default page-locked allocation flag */
+#define cudaHostAllocPortable               0x01  /**< Pinned memory accessible by all CUDA contexts */
+#define cudaHostAllocMapped                 0x02  /**< Map allocation into device space */
+#define cudaHostAllocWriteCombined          0x04  /**< Write-combined memory */
+
+#define cudaHostRegisterDefault             0x00  /**< Default host memory registration flag */
+#define cudaHostRegisterPortable            0x01  /**< Pinned memory accessible by all CUDA contexts */
+#define cudaHostRegisterMapped              0x02  /**< Map registered memory into device space */
+#define cudaHostRegisterIoMemory            0x04  /**< Memory-mapped I/O space */
+#define cudaHostRegisterReadOnly            0x08  /**< Memory-mapped read-only */
+
+#define cudaPeerAccessDefault               0x00  /**< Default peer addressing enable flag */
+
+#define cudaStreamDefault                   0x00  /**< Default stream flag */
+#define cudaStreamNonBlocking               0x01  /**< Stream does not synchronize with stream 0 (the NULL stream) */
+
+ /**
+ * Legacy stream handle
+ *
+ * Stream handle that can be passed as a cudaStream_t to use an implicit stream
+ * with legacy synchronization behavior.
+ *
+ * See details of the \link_sync_behavior
+ */
+#define cudaStreamLegacy                    ((cudaStream_t)0x1)
+
+/**
+ * Per-thread stream handle
+ *
+ * Stream handle that can be passed as a cudaStream_t to use an implicit stream
+ * with per-thread synchronization behavior.
+ *
+ * See details of the \link_sync_behavior
+ */
+#define cudaStreamPerThread                 ((cudaStream_t)0x2)
+
+#define cudaEventDefault                    0x00  /**< Default event flag */
+#define cudaEventBlockingSync               0x01  /**< Event uses blocking synchronization */
+#define cudaEventDisableTiming              0x02  /**< Event will not record timing data */
+#define cudaEventInterprocess               0x04  /**< Event is suitable for interprocess use. cudaEventDisableTiming must be set */
+
+#define cudaEventRecordDefault              0x00  /**< Default event record flag */
+#define cudaEventRecordExternal             0x01  /**< Event is captured in the graph as an external event node when performing stream capture */
+
+#define cudaEventWaitDefault                0x00  /**< Default event wait flag */
+#define cudaEventWaitExternal               0x01  /**< Event is captured in the graph as an external event node when performing stream capture */
+
+#define cudaDeviceScheduleAuto              0x00  /**< Device flag - Automatic scheduling */
+#define cudaDeviceScheduleSpin              0x01  /**< Device flag - Spin default scheduling */
+#define cudaDeviceScheduleYield             0x02  /**< Device flag - Yield default scheduling */
+#define cudaDeviceScheduleBlockingSync      0x04  /**< Device flag - Use blocking synchronization */
+#define cudaDeviceBlockingSync              0x04  /**< Device flag - Use blocking synchronization 
+                                                    *  \deprecated This flag was deprecated as of CUDA 4.0 and
+                                                    *  replaced with ::cudaDeviceScheduleBlockingSync. */
+#define cudaDeviceScheduleMask              0x07  /**< Device schedule flags mask */
+#define cudaDeviceMapHost                   0x08  /**< Device flag - Support mapped pinned allocations */
+#define cudaDeviceLmemResizeToMax           0x10  /**< Device flag - Keep local memory allocation after launch */
+#define cudaDeviceMask                      0x1f  /**< Device flags mask */
+
+#define cudaArrayDefault                    0x00  /**< Default CUDA array allocation flag */
+#define cudaArrayLayered                    0x01  /**< Must be set in cudaMalloc3DArray to create a layered CUDA array */
+#define cudaArraySurfaceLoadStore           0x02  /**< Must be set in cudaMallocArray or cudaMalloc3DArray in order to bind surfaces to the CUDA array */
+#define cudaArrayCubemap                    0x04  /**< Must be set in cudaMalloc3DArray to create a cubemap CUDA array */
+#define cudaArrayTextureGather              0x08  /**< Must be set in cudaMallocArray or cudaMalloc3DArray in order to perform texture gather operations on the CUDA array */
+#define cudaArrayColorAttachment            0x20  /**< Must be set in cudaExternalMemoryGetMappedMipmappedArray if the mipmapped array is used as a color target in a graphics API */
+#define cudaArraySparse                     0x40  /**< Must be set in cudaMallocArray, cudaMalloc3DArray or cudaMallocMipmappedArray in order to create a sparse CUDA array or CUDA mipmapped array */
+#define cudaArrayDeferredMapping            0x80  /**< Must be set in cudaMallocArray, cudaMalloc3DArray or cudaMallocMipmappedArray in order to create a deferred mapping CUDA array or CUDA mipmapped array */
+
+#define cudaIpcMemLazyEnablePeerAccess      0x01  /**< Automatically enable peer access between remote devices as needed */
+
+#define cudaMemAttachGlobal                 0x01  /**< Memory can be accessed by any stream on any device*/
+#define cudaMemAttachHost                   0x02  /**< Memory cannot be accessed by any stream on any device */
+#define cudaMemAttachSingle                 0x04  /**< Memory can only be accessed by a single stream on the associated device */
+
+#define cudaOccupancyDefault                0x00  /**< Default behavior */
+#define cudaOccupancyDisableCachingOverride 0x01  /**< Assume global caching is enabled and cannot be automatically turned off */
+
+#define cudaCpuDeviceId                     ((int)-1) /**< Device id that represents the CPU */
+#define cudaInvalidDeviceId                 ((int)-2) /**< Device id that represents an invalid device */
+
+/**
+ * If set, each kernel launched as part of ::cudaLaunchCooperativeKernelMultiDevice only
+ * waits for prior work in the stream corresponding to that GPU to complete before the
+ * kernel begins execution.
+ */
+#define cudaCooperativeLaunchMultiDeviceNoPreSync  0x01
+
+/**
+ * If set, any subsequent work pushed in a stream that participated in a call to
+ * ::cudaLaunchCooperativeKernelMultiDevice will only wait for the kernel launched on
+ * the GPU corresponding to that stream to complete before it begins execution.
+ */
+#define cudaCooperativeLaunchMultiDeviceNoPostSync 0x02
+
+#endif /* !__CUDA_INTERNAL_COMPILATION__ */
+
+/** \cond impl_private */
+#if defined(__DOXYGEN_ONLY__) || defined(CUDA_ENABLE_DEPRECATED)
+#define __CUDA_DEPRECATED
+#elif defined(_MSC_VER)
+#define __CUDA_DEPRECATED __declspec(deprecated)
+#elif defined(__GNUC__)
+#define __CUDA_DEPRECATED __attribute__((deprecated))
+#else
+#define __CUDA_DEPRECATED
+#endif
+/** \endcond impl_private */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+/**
+ * CUDA error types
+ */
+enum __device_builtin__ cudaError
+{
+    /**
+     * The API call returned with no errors. In the case of query calls, this
+     * also means that the operation being queried is complete (see
+     * ::cudaEventQuery() and ::cudaStreamQuery()).
+     */
+    cudaSuccess                           =      0,
+  
+    /**
+     * This indicates that one or more of the parameters passed to the API call
+     * is not within an acceptable range of values.
+     */
+    cudaErrorInvalidValue                 =     1,
+  
+    /**
+     * The API call failed because it was unable to allocate enough memory to
+     * perform the requested operation.
+     */
+    cudaErrorMemoryAllocation             =      2,
+  
+    /**
+     * The API call failed because the CUDA driver and runtime could not be
+     * initialized.
+     */
+    cudaErrorInitializationError          =      3,
+  
+    /**
+     * This indicates that a CUDA Runtime API call cannot be executed because
+     * it is being called during process shut down, at a point in time after
+     * CUDA driver has been unloaded.
+     */
+    cudaErrorCudartUnloading              =     4,
+
+    /**
+     * This indicates profiler is not initialized for this run. This can
+     * happen when the application is running with external profiling tools
+     * like visual profiler.
+     */
+    cudaErrorProfilerDisabled             =     5,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to attempt to enable/disable the profiling via ::cudaProfilerStart or
+     * ::cudaProfilerStop without initialization.
+     */
+    cudaErrorProfilerNotInitialized       =     6,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to call cudaProfilerStart() when profiling is already enabled.
+     */
+    cudaErrorProfilerAlreadyStarted       =     7,
+
+    /**
+     * \deprecated
+     * This error return is deprecated as of CUDA 5.0. It is no longer an error
+     * to call cudaProfilerStop() when profiling is already disabled.
+     */
+     cudaErrorProfilerAlreadyStopped       =    8,
+  
+    /**
+     * This indicates that a kernel launch is requesting resources that can
+     * never be satisfied by the current device. Requesting more shared memory
+     * per block than the device supports will trigger this error, as will
+     * requesting too many threads or blocks. See ::cudaDeviceProp for more
+     * device limitations.
+     */
+    cudaErrorInvalidConfiguration         =      9,
+  
+    /**
+     * This indicates that one or more of the pitch-related parameters passed
+     * to the API call is not within the acceptable range for pitch.
+     */
+    cudaErrorInvalidPitchValue            =     12,
+  
+    /**
+     * This indicates that the symbol name/identifier passed to the API call
+     * is not a valid name or identifier.
+     */
+    cudaErrorInvalidSymbol                =     13,
+  
+    /**
+     * This indicates that at least one host pointer passed to the API call is
+     * not a valid host pointer.
+     * \deprecated
+     * This error return is deprecated as of CUDA 10.1.
+     */
+    cudaErrorInvalidHostPointer           =     16,
+  
+    /**
+     * This indicates that at least one device pointer passed to the API call is
+     * not a valid device pointer.
+     * \deprecated
+     * This error return is deprecated as of CUDA 10.1.
+     */
+    cudaErrorInvalidDevicePointer         =     17,
+  
+    /**
+     * This indicates that the texture passed to the API call is not a valid
+     * texture.
+     */
+    cudaErrorInvalidTexture               =     18,
+  
+    /**
+     * This indicates that the texture binding is not valid. This occurs if you
+     * call ::cudaGetTextureAlignmentOffset() with an unbound texture.
+     */
+    cudaErrorInvalidTextureBinding        =     19,
+  
+    /**
+     * This indicates that the channel descriptor passed to the API call is not
+     * valid. This occurs if the format is not one of the formats specified by
+     * ::cudaChannelFormatKind, or if one of the dimensions is invalid.
+     */
+    cudaErrorInvalidChannelDescriptor     =     20,
+  
+    /**
+     * This indicates that the direction of the memcpy passed to the API call is
+     * not one of the types specified by ::cudaMemcpyKind.
+     */
+    cudaErrorInvalidMemcpyDirection       =     21,
+  
+    /**
+     * This indicated that the user has taken the address of a constant variable,
+     * which was forbidden up until the CUDA 3.1 release.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Variables in constant
+     * memory may now have their address taken by the runtime via
+     * ::cudaGetSymbolAddress().
+     */
+    cudaErrorAddressOfConstant            =     22,
+  
+    /**
+     * This indicated that a texture fetch was not able to be performed.
+     * This was previously used for device emulation of texture operations.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorTextureFetchFailed           =     23,
+  
+    /**
+     * This indicated that a texture was not bound for access.
+     * This was previously used for device emulation of texture operations.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorTextureNotBound              =     24,
+  
+    /**
+     * This indicated that a synchronization operation had failed.
+     * This was previously used for some device emulation functions.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorSynchronizationError         =     25,
+  
+    /**
+     * This indicates that a non-float texture was being accessed with linear
+     * filtering. This is not supported by CUDA.
+     */
+    cudaErrorInvalidFilterSetting         =     26,
+  
+    /**
+     * This indicates that an attempt was made to read a non-float texture as a
+     * normalized float. This is not supported by CUDA.
+     */
+    cudaErrorInvalidNormSetting           =     27,
+  
+    /**
+     * Mixing of device and device emulation code was not allowed.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorMixedDeviceExecution         =     28,
+
+    /**
+     * This indicates that the API call is not yet implemented. Production
+     * releases of CUDA will never return this error.
+     * \deprecated
+     * This error return is deprecated as of CUDA 4.1.
+     */
+    cudaErrorNotYetImplemented            =     31,
+  
+    /**
+     * This indicated that an emulated device pointer exceeded the 32-bit address
+     * range.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorMemoryValueTooLarge          =     32,
+  
+    /**
+     * This indicates that the CUDA driver that the application has loaded is a
+     * stub library. Applications that run with the stub rather than a real
+     * driver loaded will result in CUDA API returning this error.
+     */
+    cudaErrorStubLibrary                  =     34,
+
+    /**
+     * This indicates that the installed NVIDIA CUDA driver is older than the
+     * CUDA runtime library. This is not a supported configuration. Users should
+     * install an updated NVIDIA display driver to allow the application to run.
+     */
+    cudaErrorInsufficientDriver           =     35,
+
+    /**
+     * This indicates that the API call requires a newer CUDA driver than the one
+     * currently installed. Users should install an updated NVIDIA CUDA driver
+     * to allow the API call to succeed.
+     */
+    cudaErrorCallRequiresNewerDriver      =     36,
+  
+    /**
+     * This indicates that the surface passed to the API call is not a valid
+     * surface.
+     */
+    cudaErrorInvalidSurface               =     37,
+  
+    /**
+     * This indicates that multiple global or constant variables (across separate
+     * CUDA source files in the application) share the same string name.
+     */
+    cudaErrorDuplicateVariableName        =     43,
+  
+    /**
+     * This indicates that multiple textures (across separate CUDA source
+     * files in the application) share the same string name.
+     */
+    cudaErrorDuplicateTextureName         =     44,
+  
+    /**
+     * This indicates that multiple surfaces (across separate CUDA source
+     * files in the application) share the same string name.
+     */
+    cudaErrorDuplicateSurfaceName         =     45,
+  
+    /**
+     * This indicates that all CUDA devices are busy or unavailable at the current
+     * time. Devices are often busy/unavailable due to use of
+     * ::cudaComputeModeProhibited, ::cudaComputeModeExclusiveProcess, or when long
+     * running CUDA kernels have filled up the GPU and are blocking new work
+     * from starting. They can also be unavailable due to memory constraints
+     * on a device that already has active CUDA work being performed.
+     */
+    cudaErrorDevicesUnavailable           =     46,
+  
+    /**
+     * This indicates that the current context is not compatible with this
+     * the CUDA Runtime. This can only occur if you are using CUDA
+     * Runtime/Driver interoperability and have created an existing Driver
+     * context using the driver API. The Driver context may be incompatible
+     * either because the Driver context was created using an older version 
+     * of the API, because the Runtime API call expects a primary driver 
+     * context and the Driver context is not primary, or because the Driver 
+     * context has been destroyed. Please see \ref CUDART_DRIVER "Interactions 
+     * with the CUDA Driver API" for more information.
+     */
+    cudaErrorIncompatibleDriverContext    =     49,
+    
+    /**
+     * The device function being invoked (usually via ::cudaLaunchKernel()) was not
+     * previously configured via the ::cudaConfigureCall() function.
+     */
+    cudaErrorMissingConfiguration         =      52,
+  
+    /**
+     * This indicated that a previous kernel launch failed. This was previously
+     * used for device emulation of kernel launches.
+     * \deprecated
+     * This error return is deprecated as of CUDA 3.1. Device emulation mode was
+     * removed with the CUDA 3.1 release.
+     */
+    cudaErrorPriorLaunchFailure           =      53,
+
+    /**
+     * This error indicates that a device runtime grid launch did not occur 
+     * because the depth of the child grid would exceed the maximum supported
+     * number of nested grid launches. 
+     */
+    cudaErrorLaunchMaxDepthExceeded       =     65,
+
+    /**
+     * This error indicates that a grid launch did not occur because the kernel 
+     * uses file-scoped textures which are unsupported by the device runtime. 
+     * Kernels launched via the device runtime only support textures created with 
+     * the Texture Object API's.
+     */
+    cudaErrorLaunchFileScopedTex          =     66,
+
+    /**
+     * This error indicates that a grid launch did not occur because the kernel 
+     * uses file-scoped surfaces which are unsupported by the device runtime.
+     * Kernels launched via the device runtime only support surfaces created with
+     * the Surface Object API's.
+     */
+    cudaErrorLaunchFileScopedSurf         =     67,
+
+    /**
+     * This error indicates that a call to ::cudaDeviceSynchronize made from
+     * the device runtime failed because the call was made at grid depth greater
+     * than than either the default (2 levels of grids) or user specified device 
+     * limit ::cudaLimitDevRuntimeSyncDepth. To be able to synchronize on 
+     * launched grids at a greater depth successfully, the maximum nested 
+     * depth at which ::cudaDeviceSynchronize will be called must be specified 
+     * with the ::cudaLimitDevRuntimeSyncDepth limit to the ::cudaDeviceSetLimit
+     * api before the host-side launch of a kernel using the device runtime. 
+     * Keep in mind that additional levels of sync depth require the runtime 
+     * to reserve large amounts of device memory that cannot be used for 
+     * user allocations.
+     */
+    cudaErrorSyncDepthExceeded            =     68,
+
+    /**
+     * This error indicates that a device runtime grid launch failed because
+     * the launch would exceed the limit ::cudaLimitDevRuntimePendingLaunchCount.
+     * For this launch to proceed successfully, ::cudaDeviceSetLimit must be
+     * called to set the ::cudaLimitDevRuntimePendingLaunchCount to be higher 
+     * than the upper bound of outstanding launches that can be issued to the
+     * device runtime. Keep in mind that raising the limit of pending device
+     * runtime launches will require the runtime to reserve device memory that
+     * cannot be used for user allocations.
+     */
+    cudaErrorLaunchPendingCountExceeded   =     69,
+  
+    /**
+     * The requested device function does not exist or is not compiled for the
+     * proper device architecture.
+     */
+    cudaErrorInvalidDeviceFunction        =      98,
+  
+    /**
+     * This indicates that no CUDA-capable devices were detected by the installed
+     * CUDA driver.
+     */
+    cudaErrorNoDevice                     =     100,
+  
+    /**
+     * This indicates that the device ordinal supplied by the user does not
+     * correspond to a valid CUDA device or that the action requested is
+     * invalid for the specified device.
+     */
+    cudaErrorInvalidDevice                =     101,
+
+    /**
+     * This indicates that the device doesn't have a valid Grid License.
+     */
+    cudaErrorDeviceNotLicensed            =     102,
+
+   /**
+    * By default, the CUDA runtime may perform a minimal set of self-tests,
+    * as well as CUDA driver tests, to establish the validity of both.
+    * Introduced in CUDA 11.2, this error return indicates that at least one
+    * of these tests has failed and the validity of either the runtime
+    * or the driver could not be established.
+    */
+   cudaErrorSoftwareValidityNotEstablished  =     103,
+
+    /**
+     * This indicates an internal startup failure in the CUDA runtime.
+     */
+    cudaErrorStartupFailure               =    127,
+  
+    /**
+     * This indicates that the device kernel image is invalid.
+     */
+    cudaErrorInvalidKernelImage           =     200,
+
+    /**
+     * This most frequently indicates that there is no context bound to the
+     * current thread. This can also be returned if the context passed to an
+     * API call is not a valid handle (such as a context that has had
+     * ::cuCtxDestroy() invoked on it). This can also be returned if a user
+     * mixes different API versions (i.e. 3010 context with 3020 API calls).
+     * See ::cuCtxGetApiVersion() for more details.
+     */
+    cudaErrorDeviceUninitialized          =     201,
+
+    /**
+     * This indicates that the buffer object could not be mapped.
+     */
+    cudaErrorMapBufferObjectFailed        =     205,
+  
+    /**
+     * This indicates that the buffer object could not be unmapped.
+     */
+    cudaErrorUnmapBufferObjectFailed      =     206,
+
+    /**
+     * This indicates that the specified array is currently mapped and thus
+     * cannot be destroyed.
+     */
+    cudaErrorArrayIsMapped                =     207,
+
+    /**
+     * This indicates that the resource is already mapped.
+     */
+    cudaErrorAlreadyMapped                =     208,
+  
+    /**
+     * This indicates that there is no kernel image available that is suitable
+     * for the device. This can occur when a user specifies code generation
+     * options for a particular CUDA source file that do not include the
+     * corresponding device configuration.
+     */
+    cudaErrorNoKernelImageForDevice       =     209,
+
+    /**
+     * This indicates that a resource has already been acquired.
+     */
+    cudaErrorAlreadyAcquired              =     210,
+
+    /**
+     * This indicates that a resource is not mapped.
+     */
+    cudaErrorNotMapped                    =     211,
+
+    /**
+     * This indicates that a mapped resource is not available for access as an
+     * array.
+     */
+    cudaErrorNotMappedAsArray             =     212,
+
+    /**
+     * This indicates that a mapped resource is not available for access as a
+     * pointer.
+     */
+    cudaErrorNotMappedAsPointer           =     213,
+  
+    /**
+     * This indicates that an uncorrectable ECC error was detected during
+     * execution.
+     */
+    cudaErrorECCUncorrectable             =     214,
+  
+    /**
+     * This indicates that the ::cudaLimit passed to the API call is not
+     * supported by the active device.
+     */
+    cudaErrorUnsupportedLimit             =     215,
+    
+    /**
+     * This indicates that a call tried to access an exclusive-thread device that 
+     * is already in use by a different thread.
+     */
+    cudaErrorDeviceAlreadyInUse           =     216,
+
+    /**
+     * This error indicates that P2P access is not supported across the given
+     * devices.
+     */
+    cudaErrorPeerAccessUnsupported        =     217,
+
+    /**
+     * A PTX compilation failed. The runtime may fall back to compiling PTX if
+     * an application does not contain a suitable binary for the current device.
+     */
+    cudaErrorInvalidPtx                   =     218,
+
+    /**
+     * This indicates an error with the OpenGL or DirectX context.
+     */
+    cudaErrorInvalidGraphicsContext       =     219,
+
+    /**
+     * This indicates that an uncorrectable NVLink error was detected during the
+     * execution.
+     */
+    cudaErrorNvlinkUncorrectable          =     220,
+
+    /**
+     * This indicates that the PTX JIT compiler library was not found. The JIT Compiler
+     * library is used for PTX compilation. The runtime may fall back to compiling PTX
+     * if an application does not contain a suitable binary for the current device.
+     */
+    cudaErrorJitCompilerNotFound          =     221,
+
+    /**
+     * This indicates that the provided PTX was compiled with an unsupported toolchain.
+     * The most common reason for this, is the PTX was generated by a compiler newer
+     * than what is supported by the CUDA driver and PTX JIT compiler.
+     */
+    cudaErrorUnsupportedPtxVersion        =     222,
+
+    /**
+     * This indicates that the JIT compilation was disabled. The JIT compilation compiles
+     * PTX. The runtime may fall back to compiling PTX if an application does not contain
+     * a suitable binary for the current device.
+     */
+    cudaErrorJitCompilationDisabled       =     223,
+
+    /**
+     * This indicates that the provided execution affinity is not supported by the device.
+     */
+    cudaErrorUnsupportedExecAffinity      =     224,
+
+    /**
+     * This indicates that the device kernel source is invalid.
+     */
+    cudaErrorInvalidSource                =     300,
+
+    /**
+     * This indicates that the file specified was not found.
+     */
+    cudaErrorFileNotFound                 =     301,
+  
+    /**
+     * This indicates that a link to a shared object failed to resolve.
+     */
+    cudaErrorSharedObjectSymbolNotFound   =     302,
+  
+    /**
+     * This indicates that initialization of a shared object failed.
+     */
+    cudaErrorSharedObjectInitFailed       =     303,
+
+    /**
+     * This error indicates that an OS call failed.
+     */
+    cudaErrorOperatingSystem              =     304,
+  
+    /**
+     * This indicates that a resource handle passed to the API call was not
+     * valid. Resource handles are opaque types like ::cudaStream_t and
+     * ::cudaEvent_t.
+     */
+    cudaErrorInvalidResourceHandle        =     400,
+
+    /**
+     * This indicates that a resource required by the API call is not in a
+     * valid state to perform the requested operation.
+     */
+    cudaErrorIllegalState                 =     401,
+
+    /**
+     * This indicates that a named symbol was not found. Examples of symbols
+     * are global/constant variable names, driver function names, texture names,
+     * and surface names.
+     */
+    cudaErrorSymbolNotFound               =     500,
+  
+    /**
+     * This indicates that asynchronous operations issued previously have not
+     * completed yet. This result is not actually an error, but must be indicated
+     * differently than ::cudaSuccess (which indicates completion). Calls that
+     * may return this value include ::cudaEventQuery() and ::cudaStreamQuery().
+     */
+    cudaErrorNotReady                     =     600,
+
+    /**
+     * The device encountered a load or store instruction on an invalid memory address.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorIllegalAddress               =     700,
+  
+    /**
+     * This indicates that a launch did not occur because it did not have
+     * appropriate resources. Although this error is similar to
+     * ::cudaErrorInvalidConfiguration, this error usually indicates that the
+     * user has attempted to pass too many arguments to the device kernel, or the
+     * kernel launch specifies too many threads for the kernel's register count.
+     */
+    cudaErrorLaunchOutOfResources         =      701,
+  
+    /**
+     * This indicates that the device kernel took too long to execute. This can
+     * only occur if timeouts are enabled - see the device property
+     * \ref ::cudaDeviceProp::kernelExecTimeoutEnabled "kernelExecTimeoutEnabled"
+     * for more information.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorLaunchTimeout                =      702,
+
+    /**
+     * This error indicates a kernel launch that uses an incompatible texturing
+     * mode.
+     */
+    cudaErrorLaunchIncompatibleTexturing  =     703,
+      
+    /**
+     * This error indicates that a call to ::cudaDeviceEnablePeerAccess() is
+     * trying to re-enable peer addressing on from a context which has already
+     * had peer addressing enabled.
+     */
+    cudaErrorPeerAccessAlreadyEnabled     =     704,
+    
+    /**
+     * This error indicates that ::cudaDeviceDisablePeerAccess() is trying to 
+     * disable peer addressing which has not been enabled yet via 
+     * ::cudaDeviceEnablePeerAccess().
+     */
+    cudaErrorPeerAccessNotEnabled         =     705,
+  
+    /**
+     * This indicates that the user has called ::cudaSetValidDevices(),
+     * ::cudaSetDeviceFlags(), ::cudaD3D9SetDirect3DDevice(),
+     * ::cudaD3D10SetDirect3DDevice, ::cudaD3D11SetDirect3DDevice(), or
+     * ::cudaVDPAUSetVDPAUDevice() after initializing the CUDA runtime by
+     * calling non-device management operations (allocating memory and
+     * launching kernels are examples of non-device management operations).
+     * This error can also be returned if using runtime/driver
+     * interoperability and there is an existing ::CUcontext active on the
+     * host thread.
+     */
+    cudaErrorSetOnActiveProcess           =     708,
+
+    /**
+     * This error indicates that the context current to the calling thread
+     * has been destroyed using ::cuCtxDestroy, or is a primary context which
+     * has not yet been initialized.
+     */
+    cudaErrorContextIsDestroyed           =     709,
+
+    /**
+     * An assert triggered in device code during kernel execution. The device
+     * cannot be used again. All existing allocations are invalid. To continue
+     * using CUDA, the process must be terminated and relaunched.
+     */
+    cudaErrorAssert                        =    710,
+  
+    /**
+     * This error indicates that the hardware resources required to enable
+     * peer access have been exhausted for one or more of the devices 
+     * passed to ::cudaEnablePeerAccess().
+     */
+    cudaErrorTooManyPeers                 =     711,
+  
+    /**
+     * This error indicates that the memory range passed to ::cudaHostRegister()
+     * has already been registered.
+     */
+    cudaErrorHostMemoryAlreadyRegistered  =     712,
+        
+    /**
+     * This error indicates that the pointer passed to ::cudaHostUnregister()
+     * does not correspond to any currently registered memory region.
+     */
+    cudaErrorHostMemoryNotRegistered      =     713,
+
+    /**
+     * Device encountered an error in the call stack during kernel execution,
+     * possibly due to stack corruption or exceeding the stack size limit.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorHardwareStackError           =     714,
+
+    /**
+     * The device encountered an illegal instruction during kernel execution
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorIllegalInstruction           =     715,
+
+    /**
+     * The device encountered a load or store instruction
+     * on a memory address which is not aligned.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorMisalignedAddress            =     716,
+
+    /**
+     * While executing a kernel, the device encountered an instruction
+     * which can only operate on memory locations in certain address spaces
+     * (global, shared, or local), but was supplied a memory address not
+     * belonging to an allowed address space.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorInvalidAddressSpace          =     717,
+
+    /**
+     * The device encountered an invalid program counter.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorInvalidPc                    =     718,
+  
+    /**
+     * An exception occurred on the device while executing a kernel. Common
+     * causes include dereferencing an invalid device pointer and accessing
+     * out of bounds shared memory. Less common cases can be system specific - more
+     * information about these cases can be found in the system specific user guide.
+     * This leaves the process in an inconsistent state and any further CUDA work
+     * will return the same error. To continue using CUDA, the process must be terminated
+     * and relaunched.
+     */
+    cudaErrorLaunchFailure                =      719,
+
+    /**
+     * This error indicates that the number of blocks launched per grid for a kernel that was
+     * launched via either ::cudaLaunchCooperativeKernel or ::cudaLaunchCooperativeKernelMultiDevice
+     * exceeds the maximum number of blocks as allowed by ::cudaOccupancyMaxActiveBlocksPerMultiprocessor
+     * or ::cudaOccupancyMaxActiveBlocksPerMultiprocessorWithFlags times the number of multiprocessors
+     * as specified by the device attribute ::cudaDevAttrMultiProcessorCount.
+     */
+    cudaErrorCooperativeLaunchTooLarge    =     720,
+    
+    /**
+     * This error indicates the attempted operation is not permitted.
+     */
+    cudaErrorNotPermitted                 =     800,
+
+    /**
+     * This error indicates the attempted operation is not supported
+     * on the current system or device.
+     */
+    cudaErrorNotSupported                 =     801,
+
+    /**
+     * This error indicates that the system is not yet ready to start any CUDA
+     * work.  To continue using CUDA, verify the system configuration is in a
+     * valid state and all required driver daemons are actively running.
+     * More information about this error can be found in the system specific
+     * user guide.
+     */
+    cudaErrorSystemNotReady               =     802,
+
+    /**
+     * This error indicates that there is a mismatch between the versions of
+     * the display driver and the CUDA driver. Refer to the compatibility documentation
+     * for supported versions.
+     */
+    cudaErrorSystemDriverMismatch         =     803,
+
+    /**
+     * This error indicates that the system was upgraded to run with forward compatibility
+     * but the visible hardware detected by CUDA does not support this configuration.
+     * Refer to the compatibility documentation for the supported hardware matrix or ensure
+     * that only supported hardware is visible during initialization via the CUDA_VISIBLE_DEVICES
+     * environment variable.
+     */
+    cudaErrorCompatNotSupportedOnDevice   =     804,
+
+    /**
+     * This error indicates that the MPS client failed to connect to the MPS control daemon or the MPS server.
+     */
+    cudaErrorMpsConnectionFailed          =     805,
+
+    /**
+     * This error indicates that the remote procedural call between the MPS server and the MPS client failed.
+     */
+    cudaErrorMpsRpcFailure                =     806,
+
+    /**
+     * This error indicates that the MPS server is not ready to accept new MPS client requests.
+     * This error can be returned when the MPS server is in the process of recovering from a fatal failure.
+     */
+    cudaErrorMpsServerNotReady            =     807,
+
+    /**
+     * This error indicates that the hardware resources required to create MPS client have been exhausted.
+     */
+    cudaErrorMpsMaxClientsReached         =     808,
+
+    /**
+     * This error indicates the the hardware resources required to device connections have been exhausted.
+     */
+    cudaErrorMpsMaxConnectionsReached     =     809,
+
+    /**
+     * This error indicates that the MPS client has been terminated by the server. To continue using CUDA, the process must be terminated and relaunched.
+     */
+    cudaErrorMpsClientTerminated          =     810,
+
+    /**
+     * The operation is not permitted when the stream is capturing.
+     */
+    cudaErrorStreamCaptureUnsupported     =    900,
+
+    /**
+     * The current capture sequence on the stream has been invalidated due to
+     * a previous error.
+     */
+    cudaErrorStreamCaptureInvalidated     =    901,
+
+    /**
+     * The operation would have resulted in a merge of two independent capture
+     * sequences.
+     */
+    cudaErrorStreamCaptureMerge           =    902,
+
+    /**
+     * The capture was not initiated in this stream.
+     */
+    cudaErrorStreamCaptureUnmatched       =    903,
+
+    /**
+     * The capture sequence contains a fork that was not joined to the primary
+     * stream.
+     */
+    cudaErrorStreamCaptureUnjoined        =    904,
+
+    /**
+     * A dependency would have been created which crosses the capture sequence
+     * boundary. Only implicit in-stream ordering dependencies are allowed to
+     * cross the boundary.
+     */
+    cudaErrorStreamCaptureIsolation       =    905,
+
+    /**
+     * The operation would have resulted in a disallowed implicit dependency on
+     * a current capture sequence from cudaStreamLegacy.
+     */
+    cudaErrorStreamCaptureImplicit        =    906,
+
+    /**
+     * The operation is not permitted on an event which was last recorded in a
+     * capturing stream.
+     */
+    cudaErrorCapturedEvent                =    907,
+  
+    /**
+     * A stream capture sequence not initiated with the ::cudaStreamCaptureModeRelaxed
+     * argument to ::cudaStreamBeginCapture was passed to ::cudaStreamEndCapture in a
+     * different thread.
+     */
+    cudaErrorStreamCaptureWrongThread     =    908,
+
+    /**
+     * This indicates that the wait operation has timed out.
+     */
+    cudaErrorTimeout                      =    909,
+
+    /**
+     * This error indicates that the graph update was not performed because it included 
+     * changes which violated constraints specific to instantiated graph update.
+     */
+    cudaErrorGraphExecUpdateFailure       =    910,
+
+    /**
+     * This indicates that an async error has occurred in a device outside of CUDA.
+     * If CUDA was waiting for an external device's signal before consuming shared data,
+     * the external device signaled an error indicating that the data is not valid for
+     * consumption. This leaves the process in an inconsistent state and any further CUDA
+     * work will return the same error. To continue using CUDA, the process must be
+     * terminated and relaunched.
+     */
+    cudaErrorExternalDevice               =    911,
+
+    /**
+     * This indicates that a kernel launch error has occurred due to cluster
+     * misconfiguration.
+     */
+    cudaErrorInvalidClusterSize           =    912,
+
+    /**
+     * This indicates that an unknown internal error has occurred.
+     */
+    cudaErrorUnknown                      =    999,
+
+    /**
+     * Any unhandled CUDA driver error is added to this value and returned via
+     * the runtime. Production releases of CUDA should not return such errors.
+     * \deprecated
+     * This error return is deprecated as of CUDA 4.1.
+     */
+    cudaErrorApiFailureBase               =  10000
+};
+
+/**
+ * Channel format kind
+ */
+enum __device_builtin__ cudaChannelFormatKind
+{
+    cudaChannelFormatKindSigned                         =   0,      /**< Signed channel format */
+    cudaChannelFormatKindUnsigned                       =   1,      /**< Unsigned channel format */
+    cudaChannelFormatKindFloat                          =   2,      /**< Float channel format */
+    cudaChannelFormatKindNone                           =   3,      /**< No channel format */
+    cudaChannelFormatKindNV12                           =   4,      /**< Unsigned 8-bit integers, planar 4:2:0 YUV format */
+    cudaChannelFormatKindUnsignedNormalized8X1          =   5,      /**< 1 channel unsigned 8-bit normalized integer */
+    cudaChannelFormatKindUnsignedNormalized8X2          =   6,      /**< 2 channel unsigned 8-bit normalized integer */
+    cudaChannelFormatKindUnsignedNormalized8X4          =   7,      /**< 4 channel unsigned 8-bit normalized integer */
+    cudaChannelFormatKindUnsignedNormalized16X1         =   8,      /**< 1 channel unsigned 16-bit normalized integer */
+    cudaChannelFormatKindUnsignedNormalized16X2         =   9,      /**< 2 channel unsigned 16-bit normalized integer */
+    cudaChannelFormatKindUnsignedNormalized16X4         =   10,     /**< 4 channel unsigned 16-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized8X1            =   11,     /**< 1 channel signed 8-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized8X2            =   12,     /**< 2 channel signed 8-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized8X4            =   13,     /**< 4 channel signed 8-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized16X1           =   14,     /**< 1 channel signed 16-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized16X2           =   15,     /**< 2 channel signed 16-bit normalized integer */
+    cudaChannelFormatKindSignedNormalized16X4           =   16,     /**< 4 channel signed 16-bit normalized integer */
+    cudaChannelFormatKindUnsignedBlockCompressed1       =   17,     /**< 4 channel unsigned normalized block-compressed (BC1 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed1SRGB   =   18,     /**< 4 channel unsigned normalized block-compressed (BC1 compression) format with sRGB encoding*/
+    cudaChannelFormatKindUnsignedBlockCompressed2       =   19,     /**< 4 channel unsigned normalized block-compressed (BC2 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed2SRGB   =   20,     /**< 4 channel unsigned normalized block-compressed (BC2 compression) format with sRGB encoding */
+    cudaChannelFormatKindUnsignedBlockCompressed3       =   21,     /**< 4 channel unsigned normalized block-compressed (BC3 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed3SRGB   =   22,     /**< 4 channel unsigned normalized block-compressed (BC3 compression) format with sRGB encoding */
+    cudaChannelFormatKindUnsignedBlockCompressed4       =   23,     /**< 1 channel unsigned normalized block-compressed (BC4 compression) format */
+    cudaChannelFormatKindSignedBlockCompressed4         =   24,     /**< 1 channel signed normalized block-compressed (BC4 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed5       =   25,     /**< 2 channel unsigned normalized block-compressed (BC5 compression) format */
+    cudaChannelFormatKindSignedBlockCompressed5         =   26,     /**< 2 channel signed normalized block-compressed (BC5 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed6H      =   27,     /**< 3 channel unsigned half-float block-compressed (BC6H compression) format */
+    cudaChannelFormatKindSignedBlockCompressed6H        =   28,     /**< 3 channel signed half-float block-compressed (BC6H compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed7       =   29,     /**< 4 channel unsigned normalized block-compressed (BC7 compression) format */
+    cudaChannelFormatKindUnsignedBlockCompressed7SRGB   =   30      /**< 4 channel unsigned normalized block-compressed (BC7 compression) format with sRGB encoding */
+};
+
+/**
+ * CUDA Channel format descriptor
+ */
+struct __device_builtin__ cudaChannelFormatDesc
+{
+    int                        x; /**< x */
+    int                        y; /**< y */
+    int                        z; /**< z */
+    int                        w; /**< w */
+    enum cudaChannelFormatKind f; /**< Channel format kind */
+};
+
+/**
+ * CUDA array
+ */
+typedef struct cudaArray *cudaArray_t;
+
+/**
+ * CUDA array (as source copy argument)
+ */
+typedef const struct cudaArray *cudaArray_const_t;
+
+struct cudaArray;
+
+/**
+ * CUDA mipmapped array
+ */
+typedef struct cudaMipmappedArray *cudaMipmappedArray_t;
+
+/**
+ * CUDA mipmapped array (as source argument)
+ */
+typedef const struct cudaMipmappedArray *cudaMipmappedArray_const_t;
+
+struct cudaMipmappedArray;
+
+/**
+ * Indicates that the layered sparse CUDA array or CUDA mipmapped array has a single mip tail region for all layers
+ */
+#define cudaArraySparsePropertiesSingleMipTail   0x1
+
+/**
+ * Sparse CUDA array and CUDA mipmapped array properties
+ */
+struct __device_builtin__ cudaArraySparseProperties {
+    struct {
+        unsigned int width;             /**< Tile width in elements */
+        unsigned int height;            /**< Tile height in elements */
+        unsigned int depth;             /**< Tile depth in elements */
+    } tileExtent;
+    unsigned int miptailFirstLevel;     /**< First mip level at which the mip tail begins */   
+    unsigned long long miptailSize;     /**< Total size of the mip tail. */
+    unsigned int flags;                 /**< Flags will either be zero or ::cudaArraySparsePropertiesSingleMipTail */
+    unsigned int reserved[4];
+};
+
+/**
+ * CUDA array and CUDA mipmapped array memory requirements
+ */
+struct __device_builtin__ cudaArrayMemoryRequirements {
+    size_t size;                    /**< Total size of the array. */
+    size_t alignment;               /**< Alignment necessary for mapping the array. */
+    unsigned int reserved[4];
+};
+
+/**
+ * CUDA memory types
+ */
+enum __device_builtin__ cudaMemoryType
+{
+    cudaMemoryTypeUnregistered = 0, /**< Unregistered memory */
+    cudaMemoryTypeHost         = 1, /**< Host memory */
+    cudaMemoryTypeDevice       = 2, /**< Device memory */
+    cudaMemoryTypeManaged      = 3  /**< Managed memory */
+};
+
+/**
+ * CUDA memory copy types
+ */
+enum __device_builtin__ cudaMemcpyKind
+{
+    cudaMemcpyHostToHost          =   0,      /**< Host   -> Host */
+    cudaMemcpyHostToDevice        =   1,      /**< Host   -> Device */
+    cudaMemcpyDeviceToHost        =   2,      /**< Device -> Host */
+    cudaMemcpyDeviceToDevice      =   3,      /**< Device -> Device */
+    cudaMemcpyDefault             =   4       /**< Direction of the transfer is inferred from the pointer values. Requires unified virtual addressing */
+};
+
+/**
+ * CUDA Pitched memory pointer
+ *
+ * \sa ::make_cudaPitchedPtr
+ */
+struct __device_builtin__ cudaPitchedPtr
+{
+    void   *ptr;      /**< Pointer to allocated memory */
+    size_t  pitch;    /**< Pitch of allocated memory in bytes */
+    size_t  xsize;    /**< Logical width of allocation in elements */
+    size_t  ysize;    /**< Logical height of allocation in elements */
+};
+
+/**
+ * CUDA extent
+ *
+ * \sa ::make_cudaExtent
+ */
+struct __device_builtin__ cudaExtent
+{
+    size_t width;     /**< Width in elements when referring to array memory, in bytes when referring to linear memory */
+    size_t height;    /**< Height in elements */
+    size_t depth;     /**< Depth in elements */
+};
+
+/**
+ * CUDA 3D position
+ *
+ * \sa ::make_cudaPos
+ */
+struct __device_builtin__ cudaPos
+{
+    size_t x;     /**< x */
+    size_t y;     /**< y */
+    size_t z;     /**< z */
+};
+
+/**
+ * CUDA 3D memory copying parameters
+ */
+struct __device_builtin__ cudaMemcpy3DParms
+{
+    cudaArray_t            srcArray;  /**< Source memory address */
+    struct cudaPos         srcPos;    /**< Source position offset */
+    struct cudaPitchedPtr  srcPtr;    /**< Pitched source memory address */
+  
+    cudaArray_t            dstArray;  /**< Destination memory address */
+    struct cudaPos         dstPos;    /**< Destination position offset */
+    struct cudaPitchedPtr  dstPtr;    /**< Pitched destination memory address */
+  
+    struct cudaExtent      extent;    /**< Requested memory copy size */
+    enum cudaMemcpyKind    kind;      /**< Type of transfer */
+};
+
+/**
+ * CUDA 3D cross-device memory copying parameters
+ */
+struct __device_builtin__ cudaMemcpy3DPeerParms
+{
+    cudaArray_t            srcArray;  /**< Source memory address */
+    struct cudaPos         srcPos;    /**< Source position offset */
+    struct cudaPitchedPtr  srcPtr;    /**< Pitched source memory address */
+    int                    srcDevice; /**< Source device */
+  
+    cudaArray_t            dstArray;  /**< Destination memory address */
+    struct cudaPos         dstPos;    /**< Destination position offset */
+    struct cudaPitchedPtr  dstPtr;    /**< Pitched destination memory address */
+    int                    dstDevice; /**< Destination device */
+  
+    struct cudaExtent      extent;    /**< Requested memory copy size */
+};
+
+/**
+ * CUDA Memset node parameters
+ */
+struct __device_builtin__  cudaMemsetParams {
+    void *dst;                              /**< Destination device pointer */
+    size_t pitch;                           /**< Pitch of destination device pointer. Unused if height is 1 */
+    unsigned int value;                     /**< Value to be set */
+    unsigned int elementSize;               /**< Size of each element in bytes. Must be 1, 2, or 4. */
+    size_t width;                           /**< Width of the row in elements */
+    size_t height;                          /**< Number of rows */
+};
+
+/**
+ * Specifies performance hint with ::cudaAccessPolicyWindow for hitProp and missProp members.
+ */
+enum __device_builtin__  cudaAccessProperty {
+    cudaAccessPropertyNormal = 0,       /**< Normal cache persistence. */
+    cudaAccessPropertyStreaming = 1,    /**< Streaming access is less likely to persit from cache. */
+    cudaAccessPropertyPersisting = 2    /**< Persisting access is more likely to persist in cache.*/
+};
+
+/**
+ * Specifies an access policy for a window, a contiguous extent of memory
+ * beginning at base_ptr and ending at base_ptr + num_bytes.
+ * Partition into many segments and assign segments such that.
+ * sum of "hit segments" / window == approx. ratio.
+ * sum of "miss segments" / window == approx 1-ratio.
+ * Segments and ratio specifications are fitted to the capabilities of
+ * the architecture.
+ * Accesses in a hit segment apply the hitProp access policy.
+ * Accesses in a miss segment apply the missProp access policy.
+ */
+struct __device_builtin__ cudaAccessPolicyWindow {
+    void *base_ptr;                     /**< Starting address of the access policy window. CUDA driver may align it. */
+    size_t num_bytes;                   /**< Size in bytes of the window policy. CUDA driver may restrict the maximum size and alignment. */
+    float hitRatio;                     /**< hitRatio specifies percentage of lines assigned hitProp, rest are assigned missProp. */
+    enum cudaAccessProperty hitProp;    /**< ::CUaccessProperty set for hit. */
+    enum cudaAccessProperty missProp;   /**< ::CUaccessProperty set for miss. Must be either NORMAL or STREAMING. */
+};
+
+#ifdef _WIN32
+#define CUDART_CB __stdcall
+#else
+#define CUDART_CB
+#endif
+
+/**
+ * CUDA host function
+ * \param userData Argument value passed to the function
+ */
+typedef void (CUDART_CB *cudaHostFn_t)(void *userData);
+
+/**
+ * CUDA host node parameters
+ */
+struct __device_builtin__ cudaHostNodeParams {
+    cudaHostFn_t fn;    /**< The function to call when the node executes */
+    void* userData; /**< Argument to pass to the function */
+};
+
+/**
+ * Possible stream capture statuses returned by ::cudaStreamIsCapturing
+ */
+enum __device_builtin__ cudaStreamCaptureStatus {
+    cudaStreamCaptureStatusNone        = 0, /**< Stream is not capturing */
+    cudaStreamCaptureStatusActive      = 1, /**< Stream is actively capturing */
+    cudaStreamCaptureStatusInvalidated = 2  /**< Stream is part of a capture sequence that
+                                                   has been invalidated, but not terminated */
+};
+
+/**
+ * Possible modes for stream capture thread interactions. For more details see
+ * ::cudaStreamBeginCapture and ::cudaThreadExchangeStreamCaptureMode
+ */
+enum __device_builtin__ cudaStreamCaptureMode {
+    cudaStreamCaptureModeGlobal      = 0,
+    cudaStreamCaptureModeThreadLocal = 1,
+    cudaStreamCaptureModeRelaxed     = 2
+};
+
+enum __device_builtin__ cudaSynchronizationPolicy {
+    cudaSyncPolicyAuto = 1,
+    cudaSyncPolicySpin = 2,
+    cudaSyncPolicyYield = 3,
+    cudaSyncPolicyBlockingSync = 4
+};
+
+/**
+ * Cluster scheduling policies. These may be passed to ::cudaFuncSetAttribute
+ */
+enum __device_builtin__ cudaClusterSchedulingPolicy {
+    cudaClusterSchedulingPolicyDefault       = 0, /**< the default policy */
+    cudaClusterSchedulingPolicySpread        = 1, /**< spread the blocks within a cluster to the SMs */
+    cudaClusterSchedulingPolicyLoadBalancing = 2  /**< allow the hardware to load-balance the blocks in a cluster to the SMs */
+};
+
+/**
+ * Flags for ::cudaStreamUpdateCaptureDependencies
+ */
+enum __device_builtin__ cudaStreamUpdateCaptureDependenciesFlags {
+    cudaStreamAddCaptureDependencies = 0x0, /**< Add new nodes to the dependency set */
+    cudaStreamSetCaptureDependencies = 0x1  /**< Replace the dependency set with the new nodes */
+};
+
+/**
+ * Flags for user objects for graphs
+ */
+enum __device_builtin__ cudaUserObjectFlags {
+    cudaUserObjectNoDestructorSync = 0x1  /**< Indicates the destructor execution is not synchronized by any CUDA handle. */
+};
+
+/**
+ * Flags for retaining user object references for graphs
+ */
+enum __device_builtin__ cudaUserObjectRetainFlags {
+    cudaGraphUserObjectMove = 0x1  /**< Transfer references from the caller rather than creating new references. */
+};
+
+/**
+ * CUDA graphics interop resource
+ */
+struct cudaGraphicsResource;
+
+/**
+ * CUDA graphics interop register flags
+ */
+enum __device_builtin__ cudaGraphicsRegisterFlags
+{
+    cudaGraphicsRegisterFlagsNone             = 0,  /**< Default */
+    cudaGraphicsRegisterFlagsReadOnly         = 1,  /**< CUDA will not write to this resource */ 
+    cudaGraphicsRegisterFlagsWriteDiscard     = 2,  /**< CUDA will only write to and will not read from this resource */
+    cudaGraphicsRegisterFlagsSurfaceLoadStore = 4,  /**< CUDA will bind this resource to a surface reference */
+    cudaGraphicsRegisterFlagsTextureGather    = 8   /**< CUDA will perform texture gather operations on this resource */
+};
+
+/**
+ * CUDA graphics interop map flags
+ */
+enum __device_builtin__ cudaGraphicsMapFlags
+{
+    cudaGraphicsMapFlagsNone         = 0,  /**< Default; Assume resource can be read/written */
+    cudaGraphicsMapFlagsReadOnly     = 1,  /**< CUDA will not write to this resource */
+    cudaGraphicsMapFlagsWriteDiscard = 2   /**< CUDA will only write to and will not read from this resource */
+};
+
+/**
+ * CUDA graphics interop array indices for cube maps
+ */
+enum __device_builtin__ cudaGraphicsCubeFace 
+{
+    cudaGraphicsCubeFacePositiveX = 0x00, /**< Positive X face of cubemap */
+    cudaGraphicsCubeFaceNegativeX = 0x01, /**< Negative X face of cubemap */
+    cudaGraphicsCubeFacePositiveY = 0x02, /**< Positive Y face of cubemap */
+    cudaGraphicsCubeFaceNegativeY = 0x03, /**< Negative Y face of cubemap */
+    cudaGraphicsCubeFacePositiveZ = 0x04, /**< Positive Z face of cubemap */
+    cudaGraphicsCubeFaceNegativeZ = 0x05  /**< Negative Z face of cubemap */
+};
+
+/**
+ * CUDA resource types
+ */
+enum __device_builtin__ cudaResourceType
+{
+    cudaResourceTypeArray          = 0x00, /**< Array resource */
+    cudaResourceTypeMipmappedArray = 0x01, /**< Mipmapped array resource */
+    cudaResourceTypeLinear         = 0x02, /**< Linear resource */
+    cudaResourceTypePitch2D        = 0x03  /**< Pitch 2D resource */
+};
+
+/**
+ * CUDA texture resource view formats
+ */
+enum __device_builtin__ cudaResourceViewFormat
+{
+    cudaResViewFormatNone                      = 0x00, /**< No resource view format (use underlying resource format) */
+    cudaResViewFormatUnsignedChar1             = 0x01, /**< 1 channel unsigned 8-bit integers */
+    cudaResViewFormatUnsignedChar2             = 0x02, /**< 2 channel unsigned 8-bit integers */
+    cudaResViewFormatUnsignedChar4             = 0x03, /**< 4 channel unsigned 8-bit integers */
+    cudaResViewFormatSignedChar1               = 0x04, /**< 1 channel signed 8-bit integers */
+    cudaResViewFormatSignedChar2               = 0x05, /**< 2 channel signed 8-bit integers */
+    cudaResViewFormatSignedChar4               = 0x06, /**< 4 channel signed 8-bit integers */
+    cudaResViewFormatUnsignedShort1            = 0x07, /**< 1 channel unsigned 16-bit integers */
+    cudaResViewFormatUnsignedShort2            = 0x08, /**< 2 channel unsigned 16-bit integers */
+    cudaResViewFormatUnsignedShort4            = 0x09, /**< 4 channel unsigned 16-bit integers */
+    cudaResViewFormatSignedShort1              = 0x0a, /**< 1 channel signed 16-bit integers */
+    cudaResViewFormatSignedShort2              = 0x0b, /**< 2 channel signed 16-bit integers */
+    cudaResViewFormatSignedShort4              = 0x0c, /**< 4 channel signed 16-bit integers */
+    cudaResViewFormatUnsignedInt1              = 0x0d, /**< 1 channel unsigned 32-bit integers */
+    cudaResViewFormatUnsignedInt2              = 0x0e, /**< 2 channel unsigned 32-bit integers */
+    cudaResViewFormatUnsignedInt4              = 0x0f, /**< 4 channel unsigned 32-bit integers */
+    cudaResViewFormatSignedInt1                = 0x10, /**< 1 channel signed 32-bit integers */
+    cudaResViewFormatSignedInt2                = 0x11, /**< 2 channel signed 32-bit integers */
+    cudaResViewFormatSignedInt4                = 0x12, /**< 4 channel signed 32-bit integers */
+    cudaResViewFormatHalf1                     = 0x13, /**< 1 channel 16-bit floating point */
+    cudaResViewFormatHalf2                     = 0x14, /**< 2 channel 16-bit floating point */
+    cudaResViewFormatHalf4                     = 0x15, /**< 4 channel 16-bit floating point */
+    cudaResViewFormatFloat1                    = 0x16, /**< 1 channel 32-bit floating point */
+    cudaResViewFormatFloat2                    = 0x17, /**< 2 channel 32-bit floating point */
+    cudaResViewFormatFloat4                    = 0x18, /**< 4 channel 32-bit floating point */
+    cudaResViewFormatUnsignedBlockCompressed1  = 0x19, /**< Block compressed 1 */
+    cudaResViewFormatUnsignedBlockCompressed2  = 0x1a, /**< Block compressed 2 */
+    cudaResViewFormatUnsignedBlockCompressed3  = 0x1b, /**< Block compressed 3 */
+    cudaResViewFormatUnsignedBlockCompressed4  = 0x1c, /**< Block compressed 4 unsigned */
+    cudaResViewFormatSignedBlockCompressed4    = 0x1d, /**< Block compressed 4 signed */
+    cudaResViewFormatUnsignedBlockCompressed5  = 0x1e, /**< Block compressed 5 unsigned */
+    cudaResViewFormatSignedBlockCompressed5    = 0x1f, /**< Block compressed 5 signed */
+    cudaResViewFormatUnsignedBlockCompressed6H = 0x20, /**< Block compressed 6 unsigned half-float */
+    cudaResViewFormatSignedBlockCompressed6H   = 0x21, /**< Block compressed 6 signed half-float */
+    cudaResViewFormatUnsignedBlockCompressed7  = 0x22  /**< Block compressed 7 */
+};
+
+/**
+ * CUDA resource descriptor
+ */
+struct __device_builtin__ cudaResourceDesc {
+    enum cudaResourceType resType;             /**< Resource type */
+    
+    union {
+        struct {
+            cudaArray_t array;                 /**< CUDA array */
+        } array;
+        struct {
+            cudaMipmappedArray_t mipmap;       /**< CUDA mipmapped array */
+        } mipmap;
+        struct {
+            void *devPtr;                      /**< Device pointer */
+            struct cudaChannelFormatDesc desc; /**< Channel descriptor */
+            size_t sizeInBytes;                /**< Size in bytes */
+        } linear;
+        struct {
+            void *devPtr;                      /**< Device pointer */
+            struct cudaChannelFormatDesc desc; /**< Channel descriptor */
+            size_t width;                      /**< Width of the array in elements */
+            size_t height;                     /**< Height of the array in elements */
+            size_t pitchInBytes;               /**< Pitch between two rows in bytes */
+        } pitch2D;
+    } res;
+};
+
+/**
+ * CUDA resource view descriptor
+ */
+struct __device_builtin__ cudaResourceViewDesc
+{
+    enum cudaResourceViewFormat format;           /**< Resource view format */
+    size_t                      width;            /**< Width of the resource view */
+    size_t                      height;           /**< Height of the resource view */
+    size_t                      depth;            /**< Depth of the resource view */
+    unsigned int                firstMipmapLevel; /**< First defined mipmap level */
+    unsigned int                lastMipmapLevel;  /**< Last defined mipmap level */
+    unsigned int                firstLayer;       /**< First layer index */
+    unsigned int                lastLayer;        /**< Last layer index */
+};
+
+/**
+ * CUDA pointer attributes
+ */
+struct __device_builtin__ cudaPointerAttributes
+{
+    /**
+     * The type of memory - ::cudaMemoryTypeUnregistered, ::cudaMemoryTypeHost,
+     * ::cudaMemoryTypeDevice or ::cudaMemoryTypeManaged.
+     */
+    enum cudaMemoryType type;
+
+    /** 
+     * The device against which the memory was allocated or registered.
+     * If the memory type is ::cudaMemoryTypeDevice then this identifies 
+     * the device on which the memory referred physically resides.  If
+     * the memory type is ::cudaMemoryTypeHost or::cudaMemoryTypeManaged then
+     * this identifies the device which was current when the memory was allocated
+     * or registered (and if that device is deinitialized then this allocation
+     * will vanish with that device's state).
+     */
+    int device;
+
+    /**
+     * The address which may be dereferenced on the current device to access 
+     * the memory or NULL if no such address exists.
+     */
+    void *devicePointer;
+
+    /**
+     * The address which may be dereferenced on the host to access the
+     * memory or NULL if no such address exists.
+     *
+     * \note CUDA doesn't check if unregistered memory is allocated so this field
+     * may contain invalid pointer if an invalid pointer has been passed to CUDA.
+     */
+    void *hostPointer;
+};
+
+/**
+ * CUDA function attributes
+ */
+struct __device_builtin__ cudaFuncAttributes
+{
+   /**
+    * The size in bytes of statically-allocated shared memory per block
+    * required by this function. This does not include dynamically-allocated
+    * shared memory requested by the user at runtime.
+    */
+   size_t sharedSizeBytes;
+
+   /**
+    * The size in bytes of user-allocated constant memory required by this
+    * function.
+    */
+   size_t constSizeBytes;
+
+   /**
+    * The size in bytes of local memory used by each thread of this function.
+    */
+   size_t localSizeBytes;
+
+   /**
+    * The maximum number of threads per block, beyond which a launch of the
+    * function would fail. This number depends on both the function and the
+    * device on which the function is currently loaded.
+    */
+   int maxThreadsPerBlock;
+
+   /**
+    * The number of registers used by each thread of this function.
+    */
+   int numRegs;
+
+   /**
+    * The PTX virtual architecture version for which the function was
+    * compiled. This value is the major PTX version * 10 + the minor PTX
+    * version, so a PTX version 1.3 function would return the value 13.
+    */
+   int ptxVersion;
+
+   /**
+    * The binary architecture version for which the function was compiled.
+    * This value is the major binary version * 10 + the minor binary version,
+    * so a binary version 1.3 function would return the value 13.
+    */
+   int binaryVersion;
+
+   /**
+    * The attribute to indicate whether the function has been compiled with 
+    * user specified option "-Xptxas --dlcm=ca" set.
+    */
+   int cacheModeCA;
+
+   /**
+    * The maximum size in bytes of dynamic shared memory per block for 
+    * this function. Any launch must have a dynamic shared memory size
+    * smaller than this value.
+    */
+   int maxDynamicSharedSizeBytes;
+
+   /**
+    * On devices where the L1 cache and shared memory use the same hardware resources, 
+    * this sets the shared memory carveout preference, in percent of the maximum shared memory. 
+    * Refer to ::cudaDevAttrMaxSharedMemoryPerMultiprocessor.
+    * This is only a hint, and the driver can choose a different ratio if required to execute the function.
+    * See ::cudaFuncSetAttribute
+    */
+   int preferredShmemCarveout;
+};
+
+/**
+ * CUDA function attributes that can be set using ::cudaFuncSetAttribute
+ */
+enum __device_builtin__ cudaFuncAttribute
+{
+    cudaFuncAttributeMaxDynamicSharedMemorySize = 8, /**< Maximum dynamic shared memory size */
+    cudaFuncAttributePreferredSharedMemoryCarveout = 9, /**< Preferred shared memory-L1 cache split */
+    cudaFuncAttributeClusterDimMustBeSet = 10, /**< Indicator to enforce valid cluster dimension specification on kernel launch */
+    cudaFuncAttributeRequiredClusterWidth = 11, /**< Required cluster width */
+    cudaFuncAttributeRequiredClusterHeight = 12, /**< Required cluster height */
+    cudaFuncAttributeRequiredClusterDepth = 13, /**< Required cluster depth */
+    cudaFuncAttributeNonPortableClusterSizeAllowed = 14, /**< Whether non-portable cluster scheduling policy is supported */
+    cudaFuncAttributeClusterSchedulingPolicyPreference = 15, /**< Required cluster scheduling policy preference */
+    cudaFuncAttributeMax
+};
+
+/**
+ * CUDA function cache configurations
+ */
+enum __device_builtin__ cudaFuncCache
+{
+    cudaFuncCachePreferNone   = 0,    /**< Default function cache configuration, no preference */
+    cudaFuncCachePreferShared = 1,    /**< Prefer larger shared memory and smaller L1 cache  */
+    cudaFuncCachePreferL1     = 2,    /**< Prefer larger L1 cache and smaller shared memory */
+    cudaFuncCachePreferEqual  = 3     /**< Prefer equal size L1 cache and shared memory */
+};
+
+/**
+ * CUDA shared memory configuration
+ */
+
+enum __device_builtin__ cudaSharedMemConfig
+{
+    cudaSharedMemBankSizeDefault   = 0,
+    cudaSharedMemBankSizeFourByte  = 1,
+    cudaSharedMemBankSizeEightByte = 2
+};
+
+/** 
+ * Shared memory carveout configurations. These may be passed to cudaFuncSetAttribute
+ */
+enum __device_builtin__ cudaSharedCarveout {
+    cudaSharedmemCarveoutDefault      = -1,  /**< No preference for shared memory or L1 (default) */
+    cudaSharedmemCarveoutMaxShared    = 100, /**< Prefer maximum available shared memory, minimum L1 cache */
+    cudaSharedmemCarveoutMaxL1        = 0    /**< Prefer maximum available L1 cache, minimum shared memory */
+};
+
+/**
+ * CUDA device compute modes
+ */
+enum __device_builtin__ cudaComputeMode
+{
+    cudaComputeModeDefault          = 0,  /**< Default compute mode (Multiple threads can use ::cudaSetDevice() with this device) */
+    cudaComputeModeExclusive        = 1,  /**< Compute-exclusive-thread mode (Only one thread in one process will be able to use ::cudaSetDevice() with this device) */
+    cudaComputeModeProhibited       = 2,  /**< Compute-prohibited mode (No threads can use ::cudaSetDevice() with this device) */
+    cudaComputeModeExclusiveProcess = 3   /**< Compute-exclusive-process mode (Many threads in one process will be able to use ::cudaSetDevice() with this device) */
+};
+
+/**
+ * CUDA Limits
+ */
+enum __device_builtin__ cudaLimit
+{
+    cudaLimitStackSize                    = 0x00, /**< GPU thread stack size */
+    cudaLimitPrintfFifoSize               = 0x01, /**< GPU printf FIFO size */
+    cudaLimitMallocHeapSize               = 0x02, /**< GPU malloc heap size */
+    cudaLimitDevRuntimeSyncDepth          = 0x03, /**< GPU device runtime synchronize depth */
+    cudaLimitDevRuntimePendingLaunchCount = 0x04, /**< GPU device runtime pending launch count */
+    cudaLimitMaxL2FetchGranularity        = 0x05, /**< A value between 0 and 128 that indicates the maximum fetch granularity of L2 (in Bytes). This is a hint */
+    cudaLimitPersistingL2CacheSize        = 0x06  /**< A size in bytes for L2 persisting lines cache size */
+};
+
+/**
+ * CUDA Memory Advise values
+ */
+enum __device_builtin__ cudaMemoryAdvise
+{
+    cudaMemAdviseSetReadMostly          = 1, /**< Data will mostly be read and only occassionally be written to */
+    cudaMemAdviseUnsetReadMostly        = 2, /**< Undo the effect of ::cudaMemAdviseSetReadMostly */
+    cudaMemAdviseSetPreferredLocation   = 3, /**< Set the preferred location for the data as the specified device */
+    cudaMemAdviseUnsetPreferredLocation = 4, /**< Clear the preferred location for the data */
+    cudaMemAdviseSetAccessedBy          = 5, /**< Data will be accessed by the specified device, so prevent page faults as much as possible */
+    cudaMemAdviseUnsetAccessedBy        = 6  /**< Let the Unified Memory subsystem decide on the page faulting policy for the specified device */
+};
+
+/**
+ * CUDA range attributes
+ */
+enum __device_builtin__ cudaMemRangeAttribute
+{
+    cudaMemRangeAttributeReadMostly           = 1, /**< Whether the range will mostly be read and only occassionally be written to */
+    cudaMemRangeAttributePreferredLocation    = 2, /**< The preferred location of the range */
+    cudaMemRangeAttributeAccessedBy           = 3, /**< Memory range has ::cudaMemAdviseSetAccessedBy set for specified device */
+    cudaMemRangeAttributeLastPrefetchLocation = 4  /**< The last location to which the range was prefetched */
+};
+
+/**
+ * CUDA Profiler Output modes
+ */
+enum __device_builtin__ cudaOutputMode
+{
+    cudaKeyValuePair    = 0x00, /**< Output mode Key-Value pair format. */
+    cudaCSV             = 0x01  /**< Output mode Comma separated values format. */
+};
+
+/**
+ * CUDA GPUDirect RDMA flush writes APIs supported on the device
+ */
+enum __device_builtin__ cudaFlushGPUDirectRDMAWritesOptions {
+    cudaFlushGPUDirectRDMAWritesOptionHost   = 1<<0, /**< ::cudaDeviceFlushGPUDirectRDMAWrites() and its CUDA Driver API counterpart are supported on the device. */
+    cudaFlushGPUDirectRDMAWritesOptionMemOps = 1<<1  /**< The ::CU_STREAM_WAIT_VALUE_FLUSH flag and the ::CU_STREAM_MEM_OP_FLUSH_REMOTE_WRITES MemOp are supported on the CUDA device. */
+};
+
+/**
+ * CUDA GPUDirect RDMA flush writes ordering features of the device
+ */
+enum __device_builtin__ cudaGPUDirectRDMAWritesOrdering {
+    cudaGPUDirectRDMAWritesOrderingNone       = 0,   /**< The device does not natively support ordering of GPUDirect RDMA writes. ::cudaFlushGPUDirectRDMAWrites() can be leveraged if supported. */
+    cudaGPUDirectRDMAWritesOrderingOwner      = 100, /**< Natively, the device can consistently consume GPUDirect RDMA writes, although other CUDA devices may not. */
+    cudaGPUDirectRDMAWritesOrderingAllDevices = 200  /**< Any CUDA device in the system can consistently consume GPUDirect RDMA writes to this device. */
+};
+
+/**
+ * CUDA GPUDirect RDMA flush writes scopes
+ */
+enum __device_builtin__ cudaFlushGPUDirectRDMAWritesScope {
+    cudaFlushGPUDirectRDMAWritesToOwner      = 100, /**< Blocks until remote writes are visible to the CUDA device context owning the data. */
+    cudaFlushGPUDirectRDMAWritesToAllDevices = 200  /**< Blocks until remote writes are visible to all CUDA device contexts. */
+};
+
+/**
+ * CUDA GPUDirect RDMA flush writes targets
+ */
+enum __device_builtin__ cudaFlushGPUDirectRDMAWritesTarget {
+    cudaFlushGPUDirectRDMAWritesTargetCurrentDevice /**< Sets the target for ::cudaDeviceFlushGPUDirectRDMAWrites() to the currently active CUDA device context. */
+};
+
+
+/**
+ * CUDA device attributes
+ */
+enum __device_builtin__ cudaDeviceAttr
+{
+    cudaDevAttrMaxThreadsPerBlock             = 1,  /**< Maximum number of threads per block */
+    cudaDevAttrMaxBlockDimX                   = 2,  /**< Maximum block dimension X */
+    cudaDevAttrMaxBlockDimY                   = 3,  /**< Maximum block dimension Y */
+    cudaDevAttrMaxBlockDimZ                   = 4,  /**< Maximum block dimension Z */
+    cudaDevAttrMaxGridDimX                    = 5,  /**< Maximum grid dimension X */
+    cudaDevAttrMaxGridDimY                    = 6,  /**< Maximum grid dimension Y */
+    cudaDevAttrMaxGridDimZ                    = 7,  /**< Maximum grid dimension Z */
+    cudaDevAttrMaxSharedMemoryPerBlock        = 8,  /**< Maximum shared memory available per block in bytes */
+    cudaDevAttrTotalConstantMemory            = 9,  /**< Memory available on device for __constant__ variables in a CUDA C kernel in bytes */
+    cudaDevAttrWarpSize                       = 10, /**< Warp size in threads */
+    cudaDevAttrMaxPitch                       = 11, /**< Maximum pitch in bytes allowed by memory copies */
+    cudaDevAttrMaxRegistersPerBlock           = 12, /**< Maximum number of 32-bit registers available per block */
+    cudaDevAttrClockRate                      = 13, /**< Peak clock frequency in kilohertz */
+    cudaDevAttrTextureAlignment               = 14, /**< Alignment requirement for textures */
+    cudaDevAttrGpuOverlap                     = 15, /**< Device can possibly copy memory and execute a kernel concurrently */
+    cudaDevAttrMultiProcessorCount            = 16, /**< Number of multiprocessors on device */
+    cudaDevAttrKernelExecTimeout              = 17, /**< Specifies whether there is a run time limit on kernels */
+    cudaDevAttrIntegrated                     = 18, /**< Device is integrated with host memory */
+    cudaDevAttrCanMapHostMemory               = 19, /**< Device can map host memory into CUDA address space */
+    cudaDevAttrComputeMode                    = 20, /**< Compute mode (See ::cudaComputeMode for details) */
+    cudaDevAttrMaxTexture1DWidth              = 21, /**< Maximum 1D texture width */
+    cudaDevAttrMaxTexture2DWidth              = 22, /**< Maximum 2D texture width */
+    cudaDevAttrMaxTexture2DHeight             = 23, /**< Maximum 2D texture height */
+    cudaDevAttrMaxTexture3DWidth              = 24, /**< Maximum 3D texture width */
+    cudaDevAttrMaxTexture3DHeight             = 25, /**< Maximum 3D texture height */
+    cudaDevAttrMaxTexture3DDepth              = 26, /**< Maximum 3D texture depth */
+    cudaDevAttrMaxTexture2DLayeredWidth       = 27, /**< Maximum 2D layered texture width */
+    cudaDevAttrMaxTexture2DLayeredHeight      = 28, /**< Maximum 2D layered texture height */
+    cudaDevAttrMaxTexture2DLayeredLayers      = 29, /**< Maximum layers in a 2D layered texture */
+    cudaDevAttrSurfaceAlignment               = 30, /**< Alignment requirement for surfaces */
+    cudaDevAttrConcurrentKernels              = 31, /**< Device can possibly execute multiple kernels concurrently */
+    cudaDevAttrEccEnabled                     = 32, /**< Device has ECC support enabled */
+    cudaDevAttrPciBusId                       = 33, /**< PCI bus ID of the device */
+    cudaDevAttrPciDeviceId                    = 34, /**< PCI device ID of the device */
+    cudaDevAttrTccDriver                      = 35, /**< Device is using TCC driver model */
+    cudaDevAttrMemoryClockRate                = 36, /**< Peak memory clock frequency in kilohertz */
+    cudaDevAttrGlobalMemoryBusWidth           = 37, /**< Global memory bus width in bits */
+    cudaDevAttrL2CacheSize                    = 38, /**< Size of L2 cache in bytes */
+    cudaDevAttrMaxThreadsPerMultiProcessor    = 39, /**< Maximum resident threads per multiprocessor */
+    cudaDevAttrAsyncEngineCount               = 40, /**< Number of asynchronous engines */
+    cudaDevAttrUnifiedAddressing              = 41, /**< Device shares a unified address space with the host */    
+    cudaDevAttrMaxTexture1DLayeredWidth       = 42, /**< Maximum 1D layered texture width */
+    cudaDevAttrMaxTexture1DLayeredLayers      = 43, /**< Maximum layers in a 1D layered texture */
+    cudaDevAttrMaxTexture2DGatherWidth        = 45, /**< Maximum 2D texture width if cudaArrayTextureGather is set */
+    cudaDevAttrMaxTexture2DGatherHeight       = 46, /**< Maximum 2D texture height if cudaArrayTextureGather is set */
+    cudaDevAttrMaxTexture3DWidthAlt           = 47, /**< Alternate maximum 3D texture width */
+    cudaDevAttrMaxTexture3DHeightAlt          = 48, /**< Alternate maximum 3D texture height */
+    cudaDevAttrMaxTexture3DDepthAlt           = 49, /**< Alternate maximum 3D texture depth */
+    cudaDevAttrPciDomainId                    = 50, /**< PCI domain ID of the device */
+    cudaDevAttrTexturePitchAlignment          = 51, /**< Pitch alignment requirement for textures */
+    cudaDevAttrMaxTextureCubemapWidth         = 52, /**< Maximum cubemap texture width/height */
+    cudaDevAttrMaxTextureCubemapLayeredWidth  = 53, /**< Maximum cubemap layered texture width/height */
+    cudaDevAttrMaxTextureCubemapLayeredLayers = 54, /**< Maximum layers in a cubemap layered texture */
+    cudaDevAttrMaxSurface1DWidth              = 55, /**< Maximum 1D surface width */
+    cudaDevAttrMaxSurface2DWidth              = 56, /**< Maximum 2D surface width */
+    cudaDevAttrMaxSurface2DHeight             = 57, /**< Maximum 2D surface height */
+    cudaDevAttrMaxSurface3DWidth              = 58, /**< Maximum 3D surface width */
+    cudaDevAttrMaxSurface3DHeight             = 59, /**< Maximum 3D surface height */
+    cudaDevAttrMaxSurface3DDepth              = 60, /**< Maximum 3D surface depth */
+    cudaDevAttrMaxSurface1DLayeredWidth       = 61, /**< Maximum 1D layered surface width */
+    cudaDevAttrMaxSurface1DLayeredLayers      = 62, /**< Maximum layers in a 1D layered surface */
+    cudaDevAttrMaxSurface2DLayeredWidth       = 63, /**< Maximum 2D layered surface width */
+    cudaDevAttrMaxSurface2DLayeredHeight      = 64, /**< Maximum 2D layered surface height */
+    cudaDevAttrMaxSurface2DLayeredLayers      = 65, /**< Maximum layers in a 2D layered surface */
+    cudaDevAttrMaxSurfaceCubemapWidth         = 66, /**< Maximum cubemap surface width */
+    cudaDevAttrMaxSurfaceCubemapLayeredWidth  = 67, /**< Maximum cubemap layered surface width */
+    cudaDevAttrMaxSurfaceCubemapLayeredLayers = 68, /**< Maximum layers in a cubemap layered surface */
+    cudaDevAttrMaxTexture1DLinearWidth        = 69, /**< Maximum 1D linear texture width */
+    cudaDevAttrMaxTexture2DLinearWidth        = 70, /**< Maximum 2D linear texture width */
+    cudaDevAttrMaxTexture2DLinearHeight       = 71, /**< Maximum 2D linear texture height */
+    cudaDevAttrMaxTexture2DLinearPitch        = 72, /**< Maximum 2D linear texture pitch in bytes */
+    cudaDevAttrMaxTexture2DMipmappedWidth     = 73, /**< Maximum mipmapped 2D texture width */
+    cudaDevAttrMaxTexture2DMipmappedHeight    = 74, /**< Maximum mipmapped 2D texture height */
+    cudaDevAttrComputeCapabilityMajor         = 75, /**< Major compute capability version number */ 
+    cudaDevAttrComputeCapabilityMinor         = 76, /**< Minor compute capability version number */
+    cudaDevAttrMaxTexture1DMipmappedWidth     = 77, /**< Maximum mipmapped 1D texture width */
+    cudaDevAttrStreamPrioritiesSupported      = 78, /**< Device supports stream priorities */
+    cudaDevAttrGlobalL1CacheSupported         = 79, /**< Device supports caching globals in L1 */
+    cudaDevAttrLocalL1CacheSupported          = 80, /**< Device supports caching locals in L1 */
+    cudaDevAttrMaxSharedMemoryPerMultiprocessor = 81, /**< Maximum shared memory available per multiprocessor in bytes */
+    cudaDevAttrMaxRegistersPerMultiprocessor  = 82, /**< Maximum number of 32-bit registers available per multiprocessor */
+    cudaDevAttrManagedMemory                  = 83, /**< Device can allocate managed memory on this system */
+    cudaDevAttrIsMultiGpuBoard                = 84, /**< Device is on a multi-GPU board */
+    cudaDevAttrMultiGpuBoardGroupID           = 85, /**< Unique identifier for a group of devices on the same multi-GPU board */
+    cudaDevAttrHostNativeAtomicSupported      = 86, /**< Link between the device and the host supports native atomic operations */
+    cudaDevAttrSingleToDoublePrecisionPerfRatio = 87, /**< Ratio of single precision performance (in floating-point operations per second) to double precision performance */
+    cudaDevAttrPageableMemoryAccess           = 88, /**< Device supports coherently accessing pageable memory without calling cudaHostRegister on it */
+    cudaDevAttrConcurrentManagedAccess        = 89, /**< Device can coherently access managed memory concurrently with the CPU */
+    cudaDevAttrComputePreemptionSupported     = 90, /**< Device supports Compute Preemption */
+    cudaDevAttrCanUseHostPointerForRegisteredMem = 91, /**< Device can access host registered memory at the same virtual address as the CPU */
+    cudaDevAttrReserved92                     = 92,
+    cudaDevAttrReserved93                     = 93,
+    cudaDevAttrReserved94                     = 94,
+    cudaDevAttrCooperativeLaunch              = 95, /**< Device supports launching cooperative kernels via ::cudaLaunchCooperativeKernel*/
+    cudaDevAttrCooperativeMultiDeviceLaunch   = 96, /**< Deprecated, cudaLaunchCooperativeKernelMultiDevice is deprecated. */
+    cudaDevAttrMaxSharedMemoryPerBlockOptin   = 97, /**< The maximum optin shared memory per block. This value may vary by chip. See ::cudaFuncSetAttribute */
+    cudaDevAttrCanFlushRemoteWrites           = 98, /**< Device supports flushing of outstanding remote writes. */
+    cudaDevAttrHostRegisterSupported          = 99, /**< Device supports host memory registration via ::cudaHostRegister. */
+    cudaDevAttrPageableMemoryAccessUsesHostPageTables = 100, /**< Device accesses pageable memory via the host's page tables. */
+    cudaDevAttrDirectManagedMemAccessFromHost = 101, /**< Host can directly access managed memory on the device without migration. */
+    cudaDevAttrMaxBlocksPerMultiprocessor     = 106, /**< Maximum number of blocks per multiprocessor */
+    cudaDevAttrMaxPersistingL2CacheSize       = 108, /**< Maximum L2 persisting lines capacity setting in bytes. */
+    cudaDevAttrMaxAccessPolicyWindowSize      = 109, /**< Maximum value of cudaAccessPolicyWindow::num_bytes. */
+    cudaDevAttrReservedSharedMemoryPerBlock   = 111, /**< Shared memory reserved by CUDA driver per block in bytes */
+    cudaDevAttrSparseCudaArraySupported       = 112, /**< Device supports sparse CUDA arrays and sparse CUDA mipmapped arrays */
+    cudaDevAttrHostRegisterReadOnlySupported  = 113,  /**< Device supports using the ::cudaHostRegister flag cudaHostRegisterReadOnly to register memory that must be mapped as read-only to the GPU */
+    cudaDevAttrTimelineSemaphoreInteropSupported = 114,  /**< External timeline semaphore interop is supported on the device */
+    cudaDevAttrMaxTimelineSemaphoreInteropSupported = 114,  /**< Deprecated, External timeline semaphore interop is supported on the device */
+    cudaDevAttrMemoryPoolsSupported           = 115, /**< Device supports using the ::cudaMallocAsync and ::cudaMemPool family of APIs */
+    cudaDevAttrGPUDirectRDMASupported         = 116, /**< Device supports GPUDirect RDMA APIs, like nvidia_p2p_get_pages (see https://docs.nvidia.com/cuda/gpudirect-rdma for more information) */
+    cudaDevAttrGPUDirectRDMAFlushWritesOptions = 117, /**< The returned attribute shall be interpreted as a bitmask, where the individual bits are listed in the ::cudaFlushGPUDirectRDMAWritesOptions enum */
+    cudaDevAttrGPUDirectRDMAWritesOrdering    = 118, /**< GPUDirect RDMA writes to the device do not need to be flushed for consumers within the scope indicated by the returned attribute. See ::cudaGPUDirectRDMAWritesOrdering for the numerical values returned here. */
+    cudaDevAttrMemoryPoolSupportedHandleTypes = 119, /**< Handle types supported with mempool based IPC */
+    cudaDevAttrClusterLaunch                  = 120, /**< Indicates device supports cluster launch */
+    cudaDevAttrDeferredMappingCudaArraySupported = 121, /**< Device supports deferred mapping CUDA arrays and CUDA mipmapped arrays */
+    cudaDevAttrMax
+};
+
+/**
+ * CUDA memory pool attributes
+ */
+enum __device_builtin__ cudaMemPoolAttr
+{
+    /**
+     * (value type = int)
+     * Allow cuMemAllocAsync to use memory asynchronously freed
+     * in another streams as long as a stream ordering dependency
+     * of the allocating stream on the free action exists.
+     * Cuda events and null stream interactions can create the required
+     * stream ordered dependencies. (default enabled)
+     */
+    cudaMemPoolReuseFollowEventDependencies   = 0x1,
+
+    /**
+     * (value type = int)
+     * Allow reuse of already completed frees when there is no dependency
+     * between the free and allocation. (default enabled)
+     */
+    cudaMemPoolReuseAllowOpportunistic        = 0x2,
+
+    /**
+     * (value type = int)
+     * Allow cuMemAllocAsync to insert new stream dependencies
+     * in order to establish the stream ordering required to reuse
+     * a piece of memory released by cuFreeAsync (default enabled).
+     */
+    cudaMemPoolReuseAllowInternalDependencies = 0x3,
+
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of reserved memory in bytes to hold onto before trying
+     * to release memory back to the OS. When more than the release
+     * threshold bytes of memory are held by the memory pool, the
+     * allocator will try to release memory back to the OS on the
+     * next call to stream, event or context synchronize. (default 0)
+     */
+    cudaMemPoolAttrReleaseThreshold           = 0x4,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of backing memory currently allocated for the mempool.
+     */
+    cudaMemPoolAttrReservedMemCurrent         = 0x5,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of backing memory allocated for the mempool since the
+     * last time it was reset. High watermark can only be reset to zero.
+     */
+    cudaMemPoolAttrReservedMemHigh            = 0x6,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory from the pool that is currently in use by the application.
+     */
+    cudaMemPoolAttrUsedMemCurrent             = 0x7,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of the amount of memory from the pool that was in use by the application since
+     * the last time it was reset. High watermark can only be reset to zero.
+     */
+    cudaMemPoolAttrUsedMemHigh                = 0x8
+};
+
+/**
+ * Specifies the type of location 
+ */
+enum __device_builtin__ cudaMemLocationType {
+    cudaMemLocationTypeInvalid = 0,
+    cudaMemLocationTypeDevice = 1  /**< Location is a device location, thus id is a device ordinal */
+};
+
+/**
+ * Specifies a memory location.
+ *
+ * To specify a gpu, set type = ::cudaMemLocationTypeDevice and set id = the gpu's device ordinal.
+ */
+struct __device_builtin__ cudaMemLocation {
+    enum cudaMemLocationType type;  /**< Specifies the location type, which modifies the meaning of id. */
+    int id;                         /**< identifier for a given this location's ::CUmemLocationType. */
+};
+
+/**
+ * Specifies the memory protection flags for mapping.
+ */
+enum __device_builtin__ cudaMemAccessFlags {
+    cudaMemAccessFlagsProtNone      = 0,  /**< Default, make the address range not accessible */
+    cudaMemAccessFlagsProtRead      = 1,  /**< Make the address range read accessible */
+    cudaMemAccessFlagsProtReadWrite = 3   /**< Make the address range read-write accessible */
+};
+
+/**
+ * Memory access descriptor
+ */
+struct __device_builtin__ cudaMemAccessDesc {
+    struct cudaMemLocation  location; /**< Location on which the request is to change it's accessibility */
+    enum cudaMemAccessFlags flags;    /**< ::CUmemProt accessibility flags to set on the request */
+};
+
+/**
+ * Defines the allocation types available
+ */
+enum __device_builtin__ cudaMemAllocationType {
+    cudaMemAllocationTypeInvalid = 0x0,
+    /** This allocation type is 'pinned', i.e. cannot migrate from its current
+      * location while the application is actively using it
+      */
+    cudaMemAllocationTypePinned  = 0x1,
+    cudaMemAllocationTypeMax     = 0x7FFFFFFF 
+};
+
+/**
+ * Flags for specifying particular handle types
+ */
+enum __device_builtin__ cudaMemAllocationHandleType {
+    cudaMemHandleTypeNone                    = 0x0,  /**< Does not allow any export mechanism. > */
+    cudaMemHandleTypePosixFileDescriptor     = 0x1,  /**< Allows a file descriptor to be used for exporting. Permitted only on POSIX systems. (int) */
+    cudaMemHandleTypeWin32                   = 0x2,  /**< Allows a Win32 NT handle to be used for exporting. (HANDLE) */
+    cudaMemHandleTypeWin32Kmt                = 0x4   /**< Allows a Win32 KMT handle to be used for exporting. (D3DKMT_HANDLE) */
+};
+
+/**
+ * Specifies the properties of allocations made from the pool.
+ */
+struct __device_builtin__ cudaMemPoolProps {
+    enum cudaMemAllocationType         allocType;   /**< Allocation type. Currently must be specified as cudaMemAllocationTypePinned */
+    enum cudaMemAllocationHandleType   handleTypes; /**< Handle types that will be supported by allocations from the pool. */
+    struct cudaMemLocation             location;    /**< Location allocations should reside. */
+    /**
+     * Windows-specific LPSECURITYATTRIBUTES required when
+     * ::cudaMemHandleTypeWin32 is specified.  This security attribute defines
+     * the scope of which exported allocations may be tranferred to other
+     * processes.  In all other cases, this field is required to be zero.
+     */
+    void                              *win32SecurityAttributes;
+    unsigned char                      reserved[64]; /**< reserved for future use, must be 0 */
+};
+
+/**
+ * Opaque data for exporting a pool allocation
+ */
+struct __device_builtin__ cudaMemPoolPtrExportData {
+    unsigned char reserved[64];
+};
+
+/**
+ * Memory allocation node parameters
+ */
+struct __device_builtin__ cudaMemAllocNodeParams {
+    /**
+    * in: location where the allocation should reside (specified in ::location).
+    * ::handleTypes must be ::cudaMemHandleTypeNone. IPC is not supported.
+    */
+    struct cudaMemPoolProps         poolProps;       /**< in: array of memory access descriptors. Used to describe peer GPU access */
+    const struct cudaMemAccessDesc *accessDescs;     /**< in: number of memory access descriptors.  Must not exceed the number of GPUs. */
+    size_t                          accessDescCount; /**< in: Number of `accessDescs`s */
+    size_t                          bytesize;        /**< in: size in bytes of the requested allocation */
+    void                           *dptr;            /**< out: address of the allocation returned by CUDA */
+};
+
+/**
+ * Graph memory attributes
+ */
+enum __device_builtin__ cudaGraphMemAttributeType {
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory, in bytes, currently associated with graphs.
+     */
+    cudaGraphMemAttrUsedMemCurrent      = 0x0,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of memory, in bytes, associated with graphs since the
+     * last time it was reset.  High watermark can only be reset to zero.
+     */
+    cudaGraphMemAttrUsedMemHigh         = 0x1,
+
+    /**
+     * (value type = cuuint64_t)
+     * Amount of memory, in bytes, currently allocated for use by
+     * the CUDA graphs asynchronous allocator.
+     */
+    cudaGraphMemAttrReservedMemCurrent  = 0x2,
+
+    /**
+     * (value type = cuuint64_t)
+     * High watermark of memory, in bytes, currently allocated for use by
+     * the CUDA graphs asynchronous allocator.
+     */
+    cudaGraphMemAttrReservedMemHigh     = 0x3
+};
+
+/**
+ * CUDA device P2P attributes
+ */
+
+enum __device_builtin__ cudaDeviceP2PAttr {
+    cudaDevP2PAttrPerformanceRank              = 1, /**< A relative value indicating the performance of the link between two devices */
+    cudaDevP2PAttrAccessSupported              = 2, /**< Peer access is enabled */
+    cudaDevP2PAttrNativeAtomicSupported        = 3, /**< Native atomic operation over the link supported */
+    cudaDevP2PAttrCudaArrayAccessSupported     = 4  /**< Accessing CUDA arrays over the link supported */
+};
+
+/**
+ * CUDA UUID types
+ */
+#ifndef CU_UUID_HAS_BEEN_DEFINED
+#define CU_UUID_HAS_BEEN_DEFINED
+struct __device_builtin__ CUuuid_st {     /**< CUDA definition of UUID */
+    char bytes[16];
+};
+typedef __device_builtin__ struct CUuuid_st CUuuid;
+#endif
+typedef __device_builtin__ struct CUuuid_st cudaUUID_t;
+
+/**
+ * CUDA device properties
+ */
+struct __device_builtin__ cudaDeviceProp
+{
+    char         name[256];                  /**< ASCII string identifying device */
+    cudaUUID_t   uuid;                       /**< 16-byte unique identifier */
+    char         luid[8];                    /**< 8-byte locally unique identifier. Value is undefined on TCC and non-Windows platforms */
+    unsigned int luidDeviceNodeMask;         /**< LUID device node mask. Value is undefined on TCC and non-Windows platforms */
+    size_t       totalGlobalMem;             /**< Global memory available on device in bytes */
+    size_t       sharedMemPerBlock;          /**< Shared memory available per block in bytes */
+    int          regsPerBlock;               /**< 32-bit registers available per block */
+    int          warpSize;                   /**< Warp size in threads */
+    size_t       memPitch;                   /**< Maximum pitch in bytes allowed by memory copies */
+    int          maxThreadsPerBlock;         /**< Maximum number of threads per block */
+    int          maxThreadsDim[3];           /**< Maximum size of each dimension of a block */
+    int          maxGridSize[3];             /**< Maximum size of each dimension of a grid */
+    int          clockRate;                  /**< Clock frequency in kilohertz */
+    size_t       totalConstMem;              /**< Constant memory available on device in bytes */
+    int          major;                      /**< Major compute capability */
+    int          minor;                      /**< Minor compute capability */
+    size_t       textureAlignment;           /**< Alignment requirement for textures */
+    size_t       texturePitchAlignment;      /**< Pitch alignment requirement for texture references bound to pitched memory */
+    int          deviceOverlap;              /**< Device can concurrently copy memory and execute a kernel. Deprecated. Use instead asyncEngineCount. */
+    int          multiProcessorCount;        /**< Number of multiprocessors on device */
+    int          kernelExecTimeoutEnabled;   /**< Specified whether there is a run time limit on kernels */
+    int          integrated;                 /**< Device is integrated as opposed to discrete */
+    int          canMapHostMemory;           /**< Device can map host memory with cudaHostAlloc/cudaHostGetDevicePointer */
+    int          computeMode;                /**< Compute mode (See ::cudaComputeMode) */
+    int          maxTexture1D;               /**< Maximum 1D texture size */
+    int          maxTexture1DMipmap;         /**< Maximum 1D mipmapped texture size */
+    int          maxTexture1DLinear;         /**< Deprecated, do not use. Use cudaDeviceGetTexture1DLinearMaxWidth() or cuDeviceGetTexture1DLinearMaxWidth() instead. */
+    int          maxTexture2D[2];            /**< Maximum 2D texture dimensions */
+    int          maxTexture2DMipmap[2];      /**< Maximum 2D mipmapped texture dimensions */
+    int          maxTexture2DLinear[3];      /**< Maximum dimensions (width, height, pitch) for 2D textures bound to pitched memory */
+    int          maxTexture2DGather[2];      /**< Maximum 2D texture dimensions if texture gather operations have to be performed */
+    int          maxTexture3D[3];            /**< Maximum 3D texture dimensions */
+    int          maxTexture3DAlt[3];         /**< Maximum alternate 3D texture dimensions */
+    int          maxTextureCubemap;          /**< Maximum Cubemap texture dimensions */
+    int          maxTexture1DLayered[2];     /**< Maximum 1D layered texture dimensions */
+    int          maxTexture2DLayered[3];     /**< Maximum 2D layered texture dimensions */
+    int          maxTextureCubemapLayered[2];/**< Maximum Cubemap layered texture dimensions */
+    int          maxSurface1D;               /**< Maximum 1D surface size */
+    int          maxSurface2D[2];            /**< Maximum 2D surface dimensions */
+    int          maxSurface3D[3];            /**< Maximum 3D surface dimensions */
+    int          maxSurface1DLayered[2];     /**< Maximum 1D layered surface dimensions */
+    int          maxSurface2DLayered[3];     /**< Maximum 2D layered surface dimensions */
+    int          maxSurfaceCubemap;          /**< Maximum Cubemap surface dimensions */
+    int          maxSurfaceCubemapLayered[2];/**< Maximum Cubemap layered surface dimensions */
+    size_t       surfaceAlignment;           /**< Alignment requirements for surfaces */
+    int          concurrentKernels;          /**< Device can possibly execute multiple kernels concurrently */
+    int          ECCEnabled;                 /**< Device has ECC support enabled */
+    int          pciBusID;                   /**< PCI bus ID of the device */
+    int          pciDeviceID;                /**< PCI device ID of the device */
+    int          pciDomainID;                /**< PCI domain ID of the device */
+    int          tccDriver;                  /**< 1 if device is a Tesla device using TCC driver, 0 otherwise */
+    int          asyncEngineCount;           /**< Number of asynchronous engines */
+    int          unifiedAddressing;          /**< Device shares a unified address space with the host */
+    int          memoryClockRate;            /**< Peak memory clock frequency in kilohertz */
+    int          memoryBusWidth;             /**< Global memory bus width in bits */
+    int          l2CacheSize;                /**< Size of L2 cache in bytes */
+    int          persistingL2CacheMaxSize;   /**< Device's maximum l2 persisting lines capacity setting in bytes */
+    int          maxThreadsPerMultiProcessor;/**< Maximum resident threads per multiprocessor */
+    int          streamPrioritiesSupported;  /**< Device supports stream priorities */
+    int          globalL1CacheSupported;     /**< Device supports caching globals in L1 */
+    int          localL1CacheSupported;      /**< Device supports caching locals in L1 */
+    size_t       sharedMemPerMultiprocessor; /**< Shared memory available per multiprocessor in bytes */
+    int          regsPerMultiprocessor;      /**< 32-bit registers available per multiprocessor */
+    int          managedMemory;              /**< Device supports allocating managed memory on this system */
+    int          isMultiGpuBoard;            /**< Device is on a multi-GPU board */
+    int          multiGpuBoardGroupID;       /**< Unique identifier for a group of devices on the same multi-GPU board */
+    int          hostNativeAtomicSupported;  /**< Link between the device and the host supports native atomic operations */
+    int          singleToDoublePrecisionPerfRatio; /**< Ratio of single precision performance (in floating-point operations per second) to double precision performance */
+    int          pageableMemoryAccess;       /**< Device supports coherently accessing pageable memory without calling cudaHostRegister on it */
+    int          concurrentManagedAccess;    /**< Device can coherently access managed memory concurrently with the CPU */
+    int          computePreemptionSupported; /**< Device supports Compute Preemption */
+    int          canUseHostPointerForRegisteredMem; /**< Device can access host registered memory at the same virtual address as the CPU */
+    int          cooperativeLaunch;          /**< Device supports launching cooperative kernels via ::cudaLaunchCooperativeKernel */
+    int          cooperativeMultiDeviceLaunch; /**< Deprecated, cudaLaunchCooperativeKernelMultiDevice is deprecated. */
+    size_t       sharedMemPerBlockOptin;     /**< Per device maximum shared memory per block usable by special opt in */
+    int          pageableMemoryAccessUsesHostPageTables; /**< Device accesses pageable memory via the host's page tables */
+    int          directManagedMemAccessFromHost; /**< Host can directly access managed memory on the device without migration. */
+    int          maxBlocksPerMultiProcessor; /**< Maximum number of resident blocks per multiprocessor */
+    int          accessPolicyMaxWindowSize;  /**< The maximum value of ::cudaAccessPolicyWindow::num_bytes. */
+    size_t       reservedSharedMemPerBlock;  /**< Shared memory reserved by CUDA driver per block in bytes */
+};
+
+#define cudaDevicePropDontCare                                 \
+        {                                                      \
+          {'\0'},    /* char         name[256];               */ \
+          {{0}},     /* cudaUUID_t   uuid;                    */ \
+          {'\0'},    /* char         luid[8];                 */ \
+          0,         /* unsigned int luidDeviceNodeMask       */ \
+          0,         /* size_t       totalGlobalMem;          */ \
+          0,         /* size_t       sharedMemPerBlock;       */ \
+          0,         /* int          regsPerBlock;            */ \
+          0,         /* int          warpSize;                */ \
+          0,         /* size_t       memPitch;                */ \
+          0,         /* int          maxThreadsPerBlock;      */ \
+          {0, 0, 0}, /* int          maxThreadsDim[3];        */ \
+          {0, 0, 0}, /* int          maxGridSize[3];          */ \
+          0,         /* int          clockRate;               */ \
+          0,         /* size_t       totalConstMem;           */ \
+          -1,        /* int          major;                   */ \
+          -1,        /* int          minor;                   */ \
+          0,         /* size_t       textureAlignment;        */ \
+          0,         /* size_t       texturePitchAlignment    */ \
+          -1,        /* int          deviceOverlap;           */ \
+          0,         /* int          multiProcessorCount;     */ \
+          0,         /* int          kernelExecTimeoutEnabled */ \
+          0,         /* int          integrated               */ \
+          0,         /* int          canMapHostMemory         */ \
+          0,         /* int          computeMode              */ \
+          0,         /* int          maxTexture1D             */ \
+          0,         /* int          maxTexture1DMipmap       */ \
+          0,         /* int          maxTexture1DLinear       */ \
+          {0, 0},    /* int          maxTexture2D[2]          */ \
+          {0, 0},    /* int          maxTexture2DMipmap[2]    */ \
+          {0, 0, 0}, /* int          maxTexture2DLinear[3]    */ \
+          {0, 0},    /* int          maxTexture2DGather[2]    */ \
+          {0, 0, 0}, /* int          maxTexture3D[3]          */ \
+          {0, 0, 0}, /* int          maxTexture3DAlt[3]       */ \
+          0,         /* int          maxTextureCubemap        */ \
+          {0, 0},    /* int          maxTexture1DLayered[2]   */ \
+          {0, 0, 0}, /* int          maxTexture2DLayered[3]   */ \
+          {0, 0},    /* int          maxTextureCubemapLayered[2] */ \
+          0,         /* int          maxSurface1D             */ \
+          {0, 0},    /* int          maxSurface2D[2]          */ \
+          {0, 0, 0}, /* int          maxSurface3D[3]          */ \
+          {0, 0},    /* int          maxSurface1DLayered[2]   */ \
+          {0, 0, 0}, /* int          maxSurface2DLayered[3]   */ \
+          0,         /* int          maxSurfaceCubemap        */ \
+          {0, 0},    /* int          maxSurfaceCubemapLayered[2] */ \
+          0,         /* size_t       surfaceAlignment         */ \
+          0,         /* int          concurrentKernels        */ \
+          0,         /* int          ECCEnabled               */ \
+          0,         /* int          pciBusID                 */ \
+          0,         /* int          pciDeviceID              */ \
+          0,         /* int          pciDomainID              */ \
+          0,         /* int          tccDriver                */ \
+          0,         /* int          asyncEngineCount         */ \
+          0,         /* int          unifiedAddressing        */ \
+          0,         /* int          memoryClockRate          */ \
+          0,         /* int          memoryBusWidth           */ \
+          0,         /* int          l2CacheSize              */ \
+          0,         /* int          persistingL2CacheMaxSize   */ \
+          0,         /* int          maxThreadsPerMultiProcessor */ \
+          0,         /* int          streamPrioritiesSupported */ \
+          0,         /* int          globalL1CacheSupported   */ \
+          0,         /* int          localL1CacheSupported    */ \
+          0,         /* size_t       sharedMemPerMultiprocessor; */ \
+          0,         /* int          regsPerMultiprocessor;   */ \
+          0,         /* int          managedMemory            */ \
+          0,         /* int          isMultiGpuBoard          */ \
+          0,         /* int          multiGpuBoardGroupID     */ \
+          0,         /* int          hostNativeAtomicSupported */ \
+          0,         /* int          singleToDoublePrecisionPerfRatio */ \
+          0,         /* int          pageableMemoryAccess     */ \
+          0,         /* int          concurrentManagedAccess  */ \
+          0,         /* int          computePreemptionSupported */ \
+          0,         /* int          canUseHostPointerForRegisteredMem */ \
+          0,         /* int          cooperativeLaunch */ \
+          0,         /* int          cooperativeMultiDeviceLaunch */ \
+          0,         /* size_t       sharedMemPerBlockOptin */ \
+          0,         /* int          pageableMemoryAccessUsesHostPageTables */ \
+          0,         /* int          directManagedMemAccessFromHost */ \
+          0,         /* int          accessPolicyMaxWindowSize */ \
+          0,         /* size_t       reservedSharedMemPerBlock */ \
+        } /**< Empty device properties */
+
+/**
+ * CUDA IPC Handle Size
+ */
+#define CUDA_IPC_HANDLE_SIZE 64
+
+/**
+ * CUDA IPC event handle
+ */
+typedef __device_builtin__ struct __device_builtin__ cudaIpcEventHandle_st
+{
+    char reserved[CUDA_IPC_HANDLE_SIZE];
+}cudaIpcEventHandle_t;
+
+/**
+ * CUDA IPC memory handle
+ */
+typedef __device_builtin__ struct __device_builtin__ cudaIpcMemHandle_st 
+{
+    char reserved[CUDA_IPC_HANDLE_SIZE];
+}cudaIpcMemHandle_t;
+
+/**
+ * External memory handle types
+ */
+enum __device_builtin__ cudaExternalMemoryHandleType {
+    /**
+     * Handle is an opaque file descriptor
+     */
+    cudaExternalMemoryHandleTypeOpaqueFd         = 1,
+    /**
+     * Handle is an opaque shared NT handle
+     */
+    cudaExternalMemoryHandleTypeOpaqueWin32      = 2,
+    /**
+     * Handle is an opaque, globally shared handle
+     */
+    cudaExternalMemoryHandleTypeOpaqueWin32Kmt   = 3,
+    /**
+     * Handle is a D3D12 heap object
+     */
+    cudaExternalMemoryHandleTypeD3D12Heap        = 4,
+    /**
+     * Handle is a D3D12 committed resource
+     */
+    cudaExternalMemoryHandleTypeD3D12Resource    = 5,
+    /**
+    *  Handle is a shared NT handle to a D3D11 resource
+    */
+    cudaExternalMemoryHandleTypeD3D11Resource    = 6,
+    /**
+    *  Handle is a globally shared handle to a D3D11 resource
+    */
+    cudaExternalMemoryHandleTypeD3D11ResourceKmt = 7,
+    /**
+    *  Handle is an NvSciBuf object
+    */
+    cudaExternalMemoryHandleTypeNvSciBuf         = 8
+};
+
+/**
+ * Indicates that the external memory object is a dedicated resource
+ */
+#define cudaExternalMemoryDedicated   0x1
+
+/** When the /p flags parameter of ::cudaExternalSemaphoreSignalParams
+ * contains this flag, it indicates that signaling an external semaphore object
+ * should skip performing appropriate memory synchronization operations over all
+ * the external memory objects that are imported as ::cudaExternalMemoryHandleTypeNvSciBuf,
+ * which otherwise are performed by default to ensure data coherency with other
+ * importers of the same NvSciBuf memory objects.
+ */
+#define cudaExternalSemaphoreSignalSkipNvSciBufMemSync     0x01
+
+/** When the /p flags parameter of ::cudaExternalSemaphoreWaitParams
+ * contains this flag, it indicates that waiting an external semaphore object
+ * should skip performing appropriate memory synchronization operations over all
+ * the external memory objects that are imported as ::cudaExternalMemoryHandleTypeNvSciBuf,
+ * which otherwise are performed by default to ensure data coherency with other
+ * importers of the same NvSciBuf memory objects.
+ */
+#define cudaExternalSemaphoreWaitSkipNvSciBufMemSync       0x02
+
+/**
+ * When /p flags of ::cudaDeviceGetNvSciSyncAttributes is set to this,
+ * it indicates that application need signaler specific NvSciSyncAttr
+ * to be filled by ::cudaDeviceGetNvSciSyncAttributes.
+ */
+#define cudaNvSciSyncAttrSignal       0x1
+
+/**
+ * When /p flags of ::cudaDeviceGetNvSciSyncAttributes is set to this,
+ * it indicates that application need waiter specific NvSciSyncAttr
+ * to be filled by ::cudaDeviceGetNvSciSyncAttributes.
+ */
+#define cudaNvSciSyncAttrWait         0x2
+
+/**
+ * External memory handle descriptor
+ */
+struct __device_builtin__ cudaExternalMemoryHandleDesc {
+    /**
+     * Type of the handle
+     */
+    enum cudaExternalMemoryHandleType type;
+    union {
+        /**
+         * File descriptor referencing the memory object. Valid
+         * when type is
+         * ::cudaExternalMemoryHandleTypeOpaqueFd
+         */
+        int fd;
+        /**
+         * Win32 handle referencing the semaphore object. Valid when
+         * type is one of the following:
+         * - ::cudaExternalMemoryHandleTypeOpaqueWin32
+         * - ::cudaExternalMemoryHandleTypeOpaqueWin32Kmt
+         * - ::cudaExternalMemoryHandleTypeD3D12Heap 
+         * - ::cudaExternalMemoryHandleTypeD3D12Resource
+		 * - ::cudaExternalMemoryHandleTypeD3D11Resource
+		 * - ::cudaExternalMemoryHandleTypeD3D11ResourceKmt
+         * Exactly one of 'handle' and 'name' must be non-NULL. If
+         * type is one of the following: 
+         * ::cudaExternalMemoryHandleTypeOpaqueWin32Kmt
+         * ::cudaExternalMemoryHandleTypeD3D11ResourceKmt
+         * then 'name' must be NULL.
+         */
+        struct {
+            /**
+             * Valid NT handle. Must be NULL if 'name' is non-NULL
+             */
+            void *handle;
+            /**
+             * Name of a valid memory object.
+             * Must be NULL if 'handle' is non-NULL.
+             */
+            const void *name;
+        } win32;
+        /**
+         * A handle representing NvSciBuf Object. Valid when type
+         * is ::cudaExternalMemoryHandleTypeNvSciBuf
+         */
+        const void *nvSciBufObject;
+    } handle;
+    /**
+     * Size of the memory allocation
+     */
+    unsigned long long size;
+    /**
+     * Flags must either be zero or ::cudaExternalMemoryDedicated
+     */
+    unsigned int flags;
+};
+
+/**
+ * External memory buffer descriptor
+ */
+struct __device_builtin__ cudaExternalMemoryBufferDesc {
+    /**
+     * Offset into the memory object where the buffer's base is
+     */
+    unsigned long long offset;
+    /**
+     * Size of the buffer
+     */
+    unsigned long long size;
+    /**
+     * Flags reserved for future use. Must be zero.
+     */
+    unsigned int flags;
+};
+ 
+/**
+ * External memory mipmap descriptor
+ */
+struct __device_builtin__ cudaExternalMemoryMipmappedArrayDesc {
+    /**
+     * Offset into the memory object where the base level of the
+     * mipmap chain is.
+     */
+    unsigned long long offset;
+    /**
+     * Format of base level of the mipmap chain
+     */
+    struct cudaChannelFormatDesc formatDesc;
+    /**
+     * Dimensions of base level of the mipmap chain
+     */
+    struct cudaExtent extent;
+    /**
+     * Flags associated with CUDA mipmapped arrays.
+     * See ::cudaMallocMipmappedArray
+     */
+    unsigned int flags;
+    /**
+     * Total number of levels in the mipmap chain
+     */
+    unsigned int numLevels;
+};
+ 
+/**
+ * External semaphore handle types
+ */
+enum __device_builtin__ cudaExternalSemaphoreHandleType {
+    /**
+     * Handle is an opaque file descriptor
+     */
+    cudaExternalSemaphoreHandleTypeOpaqueFd       = 1,
+    /**
+     * Handle is an opaque shared NT handle
+     */
+    cudaExternalSemaphoreHandleTypeOpaqueWin32    = 2,
+    /**
+     * Handle is an opaque, globally shared handle
+     */
+    cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt = 3,
+    /**
+     * Handle is a shared NT handle referencing a D3D12 fence object
+     */
+    cudaExternalSemaphoreHandleTypeD3D12Fence     = 4,
+    /**
+     * Handle is a shared NT handle referencing a D3D11 fence object
+     */
+    cudaExternalSemaphoreHandleTypeD3D11Fence     = 5,
+    /**
+     * Opaque handle to NvSciSync Object
+     */
+     cudaExternalSemaphoreHandleTypeNvSciSync     = 6,
+    /**
+     * Handle is a shared NT handle referencing a D3D11 keyed mutex object
+     */
+    cudaExternalSemaphoreHandleTypeKeyedMutex     = 7,
+    /**
+     * Handle is a shared KMT handle referencing a D3D11 keyed mutex object
+     */
+    cudaExternalSemaphoreHandleTypeKeyedMutexKmt  = 8,
+    /**
+     * Handle is an opaque handle file descriptor referencing a timeline semaphore
+     */
+    cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd  = 9,
+    /**
+     * Handle is an opaque handle file descriptor referencing a timeline semaphore
+     */
+    cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32  = 10
+};
+
+/**
+ * External semaphore handle descriptor
+ */
+struct __device_builtin__ cudaExternalSemaphoreHandleDesc {
+    /**
+     * Type of the handle
+     */
+    enum cudaExternalSemaphoreHandleType type;
+    union {
+        /**
+         * File descriptor referencing the semaphore object. Valid when
+         * type is one of the following:
+         * - ::cudaExternalSemaphoreHandleTypeOpaqueFd
+         * - ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreFd
+         */
+        int fd;
+        /**
+         * Win32 handle referencing the semaphore object. Valid when
+         * type is one of the following:
+         * - ::cudaExternalSemaphoreHandleTypeOpaqueWin32
+         * - ::cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt
+         * - ::cudaExternalSemaphoreHandleTypeD3D12Fence
+         * - ::cudaExternalSemaphoreHandleTypeD3D11Fence
+         * - ::cudaExternalSemaphoreHandleTypeKeyedMutex
+         * - ::cudaExternalSemaphoreHandleTypeTimelineSemaphoreWin32
+         * Exactly one of 'handle' and 'name' must be non-NULL. If
+         * type is one of the following:
+         * ::cudaExternalSemaphoreHandleTypeOpaqueWin32Kmt
+         * ::cudaExternalSemaphoreHandleTypeKeyedMutexKmt
+         * then 'name' must be NULL.
+         */
+        struct {
+            /**
+             * Valid NT handle. Must be NULL if 'name' is non-NULL
+             */
+            void *handle;
+            /**
+             * Name of a valid synchronization primitive.
+             * Must be NULL if 'handle' is non-NULL.
+             */
+            const void *name;
+        } win32;
+        /**
+         * Valid NvSciSyncObj. Must be non NULL
+         */
+        const void* nvSciSyncObj;
+    } handle;
+    /**
+     * Flags reserved for the future. Must be zero.
+     */
+    unsigned int flags;
+};
+
+/**
+ * External semaphore signal parameters(deprecated)
+ */
+struct __device_builtin__ cudaExternalSemaphoreSignalParams_v1 {
+    struct {
+        /**
+         * Parameters for fence objects
+         */
+        struct {
+            /**
+             * Value of fence to be signaled
+             */
+            unsigned long long value;
+        } fence;
+        union {
+            /**
+             * Pointer to NvSciSyncFence. Valid if ::cudaExternalSemaphoreHandleType
+             * is of type ::cudaExternalSemaphoreHandleTypeNvSciSync.
+             */
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /*
+             * Value of key to release the mutex with
+             */
+            unsigned long long key;
+        } keyedMutex;
+    } params;
+    /**
+     * Only when ::cudaExternalSemaphoreSignalParams is used to
+     * signal a ::cudaExternalSemaphore_t of type
+     * ::cudaExternalSemaphoreHandleTypeNvSciSync, the valid flag is 
+     * ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync: which indicates
+     * that while signaling the ::cudaExternalSemaphore_t, no memory
+     * synchronization operations should be performed for any external memory
+     * object imported as ::cudaExternalMemoryHandleTypeNvSciBuf.
+     * For all other types of ::cudaExternalSemaphore_t, flags must be zero.
+     */
+    unsigned int flags;
+};
+
+/**
+* External semaphore wait parameters(deprecated)
+*/
+struct __device_builtin__ cudaExternalSemaphoreWaitParams_v1 {
+    struct {
+        /**
+        * Parameters for fence objects
+        */
+        struct {
+            /**
+            * Value of fence to be waited on
+            */
+            unsigned long long value;
+        } fence;
+        union {
+            /**
+             * Pointer to NvSciSyncFence. Valid if ::cudaExternalSemaphoreHandleType
+             * is of type ::cudaExternalSemaphoreHandleTypeNvSciSync.
+             */
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /**
+             * Value of key to acquire the mutex with
+             */
+            unsigned long long key;
+            /**
+             * Timeout in milliseconds to wait to acquire the mutex
+             */
+            unsigned int timeoutMs;
+        } keyedMutex;
+    } params;
+    /**
+     * Only when ::cudaExternalSemaphoreSignalParams is used to
+     * signal a ::cudaExternalSemaphore_t of type
+     * ::cudaExternalSemaphoreHandleTypeNvSciSync, the valid flag is 
+     * ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync: which indicates
+     * that while waiting for the ::cudaExternalSemaphore_t, no memory
+     * synchronization operations should be performed for any external memory
+     * object imported as ::cudaExternalMemoryHandleTypeNvSciBuf.
+     * For all other types of ::cudaExternalSemaphore_t, flags must be zero.
+     */
+    unsigned int flags;
+};
+
+/**
+ * External semaphore signal parameters, compatible with driver type
+ */
+struct __device_builtin__ cudaExternalSemaphoreSignalParams{
+    struct {
+        /**
+         * Parameters for fence objects
+         */
+        struct {
+            /**
+             * Value of fence to be signaled
+             */
+            unsigned long long value;
+        } fence;
+        union {
+            /**
+             * Pointer to NvSciSyncFence. Valid if ::cudaExternalSemaphoreHandleType
+             * is of type ::cudaExternalSemaphoreHandleTypeNvSciSync.
+             */
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /*
+             * Value of key to release the mutex with
+             */
+            unsigned long long key;
+        } keyedMutex;
+        unsigned int reserved[12];
+    } params;
+    /**
+     * Only when ::cudaExternalSemaphoreSignalParams is used to
+     * signal a ::cudaExternalSemaphore_t of type
+     * ::cudaExternalSemaphoreHandleTypeNvSciSync, the valid flag is 
+     * ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync: which indicates
+     * that while signaling the ::cudaExternalSemaphore_t, no memory
+     * synchronization operations should be performed for any external memory
+     * object imported as ::cudaExternalMemoryHandleTypeNvSciBuf.
+     * For all other types of ::cudaExternalSemaphore_t, flags must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+};
+
+/**
+ * External semaphore wait parameters, compatible with driver type
+ */
+struct __device_builtin__ cudaExternalSemaphoreWaitParams {
+    struct {
+        /**
+        * Parameters for fence objects
+        */
+        struct {
+            /**
+            * Value of fence to be waited on
+            */
+            unsigned long long value;
+        } fence;
+        union {
+            /**
+             * Pointer to NvSciSyncFence. Valid if ::cudaExternalSemaphoreHandleType
+             * is of type ::cudaExternalSemaphoreHandleTypeNvSciSync.
+             */
+            void *fence;
+            unsigned long long reserved;
+        } nvSciSync;
+        /**
+         * Parameters for keyed mutex objects
+         */
+        struct {
+            /**
+             * Value of key to acquire the mutex with
+             */
+            unsigned long long key;
+            /**
+             * Timeout in milliseconds to wait to acquire the mutex
+             */
+            unsigned int timeoutMs;
+        } keyedMutex;
+        unsigned int reserved[10];
+    } params;
+    /**
+     * Only when ::cudaExternalSemaphoreSignalParams is used to
+     * signal a ::cudaExternalSemaphore_t of type
+     * ::cudaExternalSemaphoreHandleTypeNvSciSync, the valid flag is 
+     * ::cudaExternalSemaphoreSignalSkipNvSciBufMemSync: which indicates
+     * that while waiting for the ::cudaExternalSemaphore_t, no memory
+     * synchronization operations should be performed for any external memory
+     * object imported as ::cudaExternalMemoryHandleTypeNvSciBuf.
+     * For all other types of ::cudaExternalSemaphore_t, flags must be zero.
+     */
+    unsigned int flags;
+    unsigned int reserved[16];
+};
+
+/*******************************************************************************
+*                                                                              *
+*  SHORTHAND TYPE DEFINITION USED BY RUNTIME API                               *
+*                                                                              *
+*******************************************************************************/
+
+/**
+ * CUDA Error types
+ */
+typedef __device_builtin__ enum cudaError cudaError_t;
+
+/**
+ * CUDA stream
+ */
+typedef __device_builtin__ struct CUstream_st *cudaStream_t;
+
+/**
+ * CUDA event types
+ */
+typedef __device_builtin__ struct CUevent_st *cudaEvent_t;
+
+/**
+ * CUDA graphics resource types
+ */
+typedef __device_builtin__ struct cudaGraphicsResource *cudaGraphicsResource_t;
+
+/**
+ * CUDA output file modes
+ */
+typedef __device_builtin__ enum cudaOutputMode cudaOutputMode_t;
+
+/**
+ * CUDA external memory
+ */
+typedef __device_builtin__ struct CUexternalMemory_st *cudaExternalMemory_t;
+
+/**
+ * CUDA external semaphore
+ */
+typedef __device_builtin__ struct CUexternalSemaphore_st *cudaExternalSemaphore_t;
+
+/**
+ * CUDA graph
+ */
+typedef __device_builtin__ struct CUgraph_st *cudaGraph_t;
+
+/**
+ * CUDA graph node.
+ */
+typedef __device_builtin__ struct CUgraphNode_st *cudaGraphNode_t;
+
+/**
+ * CUDA user object for graphs
+ */
+typedef __device_builtin__ struct CUuserObject_st *cudaUserObject_t;
+
+/**
+ * CUDA function
+ */
+typedef __device_builtin__ struct CUfunc_st *cudaFunction_t;
+
+/**
+ * CUDA memory pool
+ */
+typedef __device_builtin__ struct CUmemPoolHandle_st *cudaMemPool_t;
+
+/**
+ * CUDA cooperative group scope
+ */
+enum __device_builtin__ cudaCGScope {
+    cudaCGScopeInvalid   = 0, /**< Invalid cooperative group scope */
+    cudaCGScopeGrid      = 1, /**< Scope represented by a grid_group */
+    cudaCGScopeMultiGrid = 2  /**< Scope represented by a multi_grid_group */
+};
+
+/**
+ * CUDA launch parameters
+ */
+struct __device_builtin__ cudaLaunchParams
+{
+    void *func;          /**< Device function symbol */
+    dim3 gridDim;        /**< Grid dimentions */
+    dim3 blockDim;       /**< Block dimentions */
+    void **args;         /**< Arguments */
+    size_t sharedMem;    /**< Shared memory */
+    cudaStream_t stream; /**< Stream identifier */
+};
+
+/**
+ * CUDA GPU kernel node parameters
+ */
+struct __device_builtin__ cudaKernelNodeParams {
+    void* func;                     /**< Kernel to launch */
+    dim3 gridDim;                   /**< Grid dimensions */
+    dim3 blockDim;                  /**< Block dimensions */
+    unsigned int sharedMemBytes;    /**< Dynamic shared-memory size per thread block in bytes */
+    void **kernelParams;            /**< Array of pointers to individual kernel arguments*/
+    void **extra;                   /**< Pointer to kernel arguments in the "extra" format */
+};
+
+/**
+ * External semaphore signal node parameters
+ */
+struct __device_builtin__ cudaExternalSemaphoreSignalNodeParams {
+    cudaExternalSemaphore_t* extSemArray;                        /**< Array of external semaphore handles. */
+    const struct cudaExternalSemaphoreSignalParams* paramsArray; /**< Array of external semaphore signal parameters. */
+    unsigned int numExtSems;                                     /**< Number of handles and parameters supplied in extSemArray and paramsArray. */
+};
+
+/**
+ * External semaphore wait node parameters
+ */
+struct __device_builtin__ cudaExternalSemaphoreWaitNodeParams {
+    cudaExternalSemaphore_t* extSemArray;                      /**< Array of external semaphore handles. */
+    const struct cudaExternalSemaphoreWaitParams* paramsArray; /**< Array of external semaphore wait parameters. */
+    unsigned int numExtSems;                                   /**< Number of handles and parameters supplied in extSemArray and paramsArray. */
+};
+
+/**
+* CUDA Graph node types
+*/
+enum __device_builtin__ cudaGraphNodeType {
+    cudaGraphNodeTypeKernel      = 0x00, /**< GPU kernel node */
+    cudaGraphNodeTypeMemcpy      = 0x01, /**< Memcpy node */
+    cudaGraphNodeTypeMemset      = 0x02, /**< Memset node */
+    cudaGraphNodeTypeHost        = 0x03, /**< Host (executable) node */
+    cudaGraphNodeTypeGraph       = 0x04, /**< Node which executes an embedded graph */
+    cudaGraphNodeTypeEmpty       = 0x05, /**< Empty (no-op) node */
+    cudaGraphNodeTypeWaitEvent   = 0x06, /**< External event wait node */
+    cudaGraphNodeTypeEventRecord = 0x07, /**< External event record node */
+    cudaGraphNodeTypeExtSemaphoreSignal = 0x08, /**< External semaphore signal node */
+    cudaGraphNodeTypeExtSemaphoreWait = 0x09, /**< External semaphore wait node */
+    cudaGraphNodeTypeMemAlloc    = 0x0a, /**< Memory allocation node */
+    cudaGraphNodeTypeMemFree     = 0x0b, /**< Memory free node */
+    cudaGraphNodeTypeCount
+};
+
+/**
+ * CUDA executable (launchable) graph
+ */
+typedef struct CUgraphExec_st* cudaGraphExec_t;
+
+/**
+* CUDA Graph Update error types
+*/
+enum __device_builtin__ cudaGraphExecUpdateResult {
+    cudaGraphExecUpdateSuccess                = 0x0, /**< The update succeeded */
+    cudaGraphExecUpdateError                  = 0x1, /**< The update failed for an unexpected reason which is described in the return value of the function */
+    cudaGraphExecUpdateErrorTopologyChanged   = 0x2, /**< The update failed because the topology changed */
+    cudaGraphExecUpdateErrorNodeTypeChanged   = 0x3, /**< The update failed because a node type changed */
+    cudaGraphExecUpdateErrorFunctionChanged   = 0x4, /**< The update failed because the function of a kernel node changed (CUDA driver < 11.2) */
+    cudaGraphExecUpdateErrorParametersChanged = 0x5, /**< The update failed because the parameters changed in a way that is not supported */
+    cudaGraphExecUpdateErrorNotSupported      = 0x6, /**< The update failed because something about the node is not supported */
+    cudaGraphExecUpdateErrorUnsupportedFunctionChange = 0x7, /**< The update failed because the function of a kernel node changed in an unsupported way */
+    cudaGraphExecUpdateErrorAttributesChanged = 0x8 /**< The update failed because the node attributes changed in a way that is not supported */
+};
+
+/**
+ * Flags to specify search options to be used with ::cudaGetDriverEntryPoint
+ * For more details see ::cuGetProcAddress
+ */ 
+enum __device_builtin__ cudaGetDriverEntryPointFlags {
+    cudaEnableDefault                = 0x0, /**< Default search mode for driver symbols. */
+    cudaEnableLegacyStream           = 0x1, /**< Search for legacy versions of driver symbols. */
+    cudaEnablePerThreadDefaultStream = 0x2  /**< Search for per-thread versions of driver symbols. */
+};
+
+/**
+ * CUDA Graph debug write options
+ */
+enum __device_builtin__ cudaGraphDebugDotFlags {
+    cudaGraphDebugDotFlagsVerbose                  = 1<<0,  /**< Output all debug data as if every debug flag is enabled */
+    cudaGraphDebugDotFlagsKernelNodeParams         = 1<<2,  /**< Adds cudaKernelNodeParams to output */
+    cudaGraphDebugDotFlagsMemcpyNodeParams         = 1<<3,  /**< Adds cudaMemcpy3DParms to output */
+    cudaGraphDebugDotFlagsMemsetNodeParams         = 1<<4,  /**< Adds cudaMemsetParams to output */
+    cudaGraphDebugDotFlagsHostNodeParams           = 1<<5,  /**< Adds cudaHostNodeParams to output */
+    cudaGraphDebugDotFlagsEventNodeParams          = 1<<6,  /**< Adds cudaEvent_t handle from record and wait nodes to output */
+    cudaGraphDebugDotFlagsExtSemasSignalNodeParams = 1<<7,  /**< Adds cudaExternalSemaphoreSignalNodeParams values to output */
+    cudaGraphDebugDotFlagsExtSemasWaitNodeParams   = 1<<8,  /**< Adds cudaExternalSemaphoreWaitNodeParams to output */
+    cudaGraphDebugDotFlagsKernelNodeAttributes     = 1<<9,  /**< Adds cudaKernelNodeAttrID values to output */
+    cudaGraphDebugDotFlagsHandles                  = 1<<10  /**< Adds node handles and every kernel function handle to output */
+};
+
+/**
+ * Flags for instantiating a graph
+ */
+enum __device_builtin__ cudaGraphInstantiateFlags {
+    cudaGraphInstantiateFlagAutoFreeOnLaunch = 1 /**< Automatically free memory allocated in a graph before relaunching. */
+  , cudaGraphInstantiateFlagUseNodePriority  = 8 /**< Run the graph using the per-node priority attributes rather than the
+                                                      priority of the stream it is launched into. */
+};
+
+/**
+ * Launch attributes enum; used as id field of ::cudaLaunchAttribute
+ */
+typedef __device_builtin__ enum cudaLaunchAttributeID {
+    cudaLaunchAttributeIgnore                = 0 /**< Ignored entry, for convenient composition */
+  , cudaLaunchAttributeAccessPolicyWindow    = 1 /**< Valid for streams, graph nodes, launches. */
+  , cudaLaunchAttributeCooperative           = 2 /**< Valid for graph nodes, launches. */
+  , cudaLaunchAttributeSynchronizationPolicy = 3 /**< Valid for streams. */
+  , cudaLaunchAttributeClusterDimension                  = 4 /**< Valid for graph nodes, launches. */
+  , cudaLaunchAttributeClusterSchedulingPolicyPreference = 5 /**< Valid for graph nodes, launches. */
+  , cudaLaunchAttributeProgrammaticStreamSerialization   = 6 /**< Valid for launches. Setting
+                                                                  programmaticStreamSerializationAllowed to non-0
+                                                                  signals that the kernel will use programmatic
+                                                                  means to resolve its stream dependency, so that
+                                                                  the CUDA runtime should opportunistically allow
+                                                                  the grid's execution to overlap with the previous
+                                                                  kernel in the stream, if that kernel requests the
+                                                                  overlap. */
+  , cudaLaunchAttributeProgrammaticEvent                 = 7 /**< Valid for launches. Event recorded through this launch
+                                                                  attribute is guaranteed to only trigger after all
+                                                                  block in the associated kernel trigger the event. A
+                                                                  block can trigger the event through PTX
+                                                                  griddepcontrol.launch_dependents. A trigger can also
+                                                                  be inserted at the beginning of each block's execution
+                                                                  if triggerAtBlockStart is set to non-0. Note that
+                                                                  dependents (including the CPU thread calling
+                                                                  cudaEventSynchronize()) are not guaranteed to observe
+                                                                  the release precisely when it is released. For
+                                                                  example, cudaEventSynchronize() may only observe the
+                                                                  event trigger long after the associated kernel has
+                                                                  completed. This recording type is primarily meant for
+                                                                  establishing programmatic dependency between device
+                                                                  tasks. The event supplied must not be an interprocess
+                                                                  or interop event. The event must disable timing
+                                                                  (i.e. created with ::cudaEventDisableTiming flag
+                                                                  set). */
+  , cudaLaunchAttributePriority              = 8 /**< Valid for graph nodes. */
+} cudaLaunchAttributeID;
+
+/**
+ * Launch attributes union; used as value field of ::cudaLaunchAttribute
+ */
+typedef __device_builtin__ union cudaLaunchAttributeValue {
+    char pad[64]; /* Pad to 64 bytes */
+    struct cudaAccessPolicyWindow accessPolicyWindow;
+    int cooperative;
+    enum cudaSynchronizationPolicy syncPolicy;
+    struct {
+        unsigned int x;
+        unsigned int y;
+        unsigned int z;
+    } clusterDim;
+    enum cudaClusterSchedulingPolicy clusterSchedulingPolicyPreference;
+    int programmaticStreamSerializationAllowed;
+    struct {
+        cudaEvent_t event;
+        int flags;
+        int triggerAtBlockStart;
+    } programmaticEvent;
+    int priority;
+} cudaLaunchAttributeValue;
+
+/**
+ * Launch attribute
+ */
+typedef __device_builtin__ struct cudaLaunchAttribute_st {
+    cudaLaunchAttributeID id;
+    char pad[8 - sizeof(cudaLaunchAttributeID)];
+    cudaLaunchAttributeValue val;
+} cudaLaunchAttribute;
+
+/**
+ * CUDA extensible launch configuration
+ */
+typedef __device_builtin__ struct cudaLaunchConfig_st {
+    dim3 gridDim;               /**< Grid dimentions */
+    dim3 blockDim;              /**< Block dimentions */
+    size_t dynamicSmemBytes;    /**< Dynamic shared-memory size per thread block in bytes */
+    cudaStream_t stream;        /**< Stream identifier */
+    cudaLaunchAttribute *attrs; /**< nullable if numAttrs == 0 */
+    unsigned int numAttrs;      /**< Number of attributes populated in attrs */
+} cudaLaunchConfig_t;
+
+/**
+ * Stream Attributes
+ */
+#define cudaStreamAttrID cudaLaunchAttributeID
+#define cudaStreamAttributeAccessPolicyWindow    cudaLaunchAttributeAccessPolicyWindow
+#define cudaStreamAttributeSynchronizationPolicy cudaLaunchAttributeSynchronizationPolicy
+
+/**
+ * Stream attributes union used with ::cudaStreamSetAttribute/::cudaStreamGetAttribute
+ */
+#define cudaStreamAttrValue cudaLaunchAttributeValue
+
+/**
+ * Graph kernel node Attributes
+ */
+#define cudaKernelNodeAttrID cudaLaunchAttributeID
+#define cudaKernelNodeAttributeAccessPolicyWindow cudaLaunchAttributeAccessPolicyWindow
+#define cudaKernelNodeAttributeCooperative        cudaLaunchAttributeCooperative
+#define cudaKernelNodeAttributePriority           cudaLaunchAttributePriority
+#define cudaKernelNodeAttributeClusterDimension                     cudaLaunchAttributeClusterDimension
+#define cudaKernelNodeAttributeClusterSchedulingPolicyPreference    cudaLaunchAttributeClusterSchedulingPolicyPreference
+
+/**
+ * Graph kernel node attributes union, used with ::cudaGraphKernelNodeSetAttribute/::cudaGraphKernelNodeGetAttribute
+ */
+#define cudaKernelNodeAttrValue cudaLaunchAttributeValue
+
+/** @} */
+/** @} */ /* END CUDART_TYPES */
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DRIVER_TYPES_H__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_DRIVER_TYPES_H__
+#endif
+
+#undef __CUDA_DEPRECATED
+
+#endif /* !__DRIVER_TYPES_H__ */
diff --git a/ext/cudart/include/host_config.h b/ext/cudart/include/host_config.h
new file mode 100644
index 00000000..785bec4e
--- /dev/null
+++ b/ext/cudart/include/host_config.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("host_config.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "host_config.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_CONFIG_H_WRAPPER__
+#endif
+
+#include "crt/host_config.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_CONFIG_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_CONFIG_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/host_defines.h b/ext/cudart/include/host_defines.h
new file mode 100644
index 00000000..98a9c98a
--- /dev/null
+++ b/ext/cudart/include/host_defines.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("host_defines.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "host_defines.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_DEFINES_H_WRAPPER__
+#endif
+
+#include "crt/host_defines.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_DEFINES_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_HOST_DEFINES_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/library_types.h b/ext/cudart/include/library_types.h
new file mode 100644
index 00000000..4a7e42c6
--- /dev/null
+++ b/ext/cudart/include/library_types.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1993-2015 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__LIBRARY_TYPES_H__)
+#define __LIBRARY_TYPES_H__
+
+
+
+typedef enum cudaDataType_t
+{
+    CUDA_R_16F  =  2, /* real as a half */
+    CUDA_C_16F  =  6, /* complex as a pair of half numbers */
+    CUDA_R_16BF = 14, /* real as a nv_bfloat16 */
+    CUDA_C_16BF = 15, /* complex as a pair of nv_bfloat16 numbers */
+    CUDA_R_32F  =  0, /* real as a float */
+    CUDA_C_32F  =  4, /* complex as a pair of float numbers */
+    CUDA_R_64F  =  1, /* real as a double */
+    CUDA_C_64F  =  5, /* complex as a pair of double numbers */
+    CUDA_R_4I   = 16, /* real as a signed 4-bit int */
+    CUDA_C_4I   = 17, /* complex as a pair of signed 4-bit int numbers */
+    CUDA_R_4U   = 18, /* real as a unsigned 4-bit int */
+    CUDA_C_4U   = 19, /* complex as a pair of unsigned 4-bit int numbers */
+    CUDA_R_8I   =  3, /* real as a signed 8-bit int */
+    CUDA_C_8I   =  7, /* complex as a pair of signed 8-bit int numbers */
+    CUDA_R_8U   =  8, /* real as a unsigned 8-bit int */
+    CUDA_C_8U   =  9, /* complex as a pair of unsigned 8-bit int numbers */
+    CUDA_R_16I  = 20, /* real as a signed 16-bit int */
+    CUDA_C_16I  = 21, /* complex as a pair of signed 16-bit int numbers */
+    CUDA_R_16U  = 22, /* real as a unsigned 16-bit int */
+    CUDA_C_16U  = 23, /* complex as a pair of unsigned 16-bit int numbers */
+    CUDA_R_32I  = 10, /* real as a signed 32-bit int */
+    CUDA_C_32I  = 11, /* complex as a pair of signed 32-bit int numbers */
+    CUDA_R_32U  = 12, /* real as a unsigned 32-bit int */
+    CUDA_C_32U  = 13, /* complex as a pair of unsigned 32-bit int numbers */
+    CUDA_R_64I  = 24, /* real as a signed 64-bit int */
+    CUDA_C_64I  = 25, /* complex as a pair of signed 64-bit int numbers */
+    CUDA_R_64U  = 26, /* real as a unsigned 64-bit int */
+    CUDA_C_64U  = 27, /* complex as a pair of unsigned 64-bit int numbers */
+    CUDA_R_8F_E4M3 = 28, /* real as a nv_fp8_e4m3 */
+    CUDA_R_8F_E5M2 = 29, /* real as a nv_fp8_e5m2 */
+} cudaDataType;
+
+
+typedef enum libraryPropertyType_t
+{
+    MAJOR_VERSION,
+    MINOR_VERSION,
+    PATCH_LEVEL
+} libraryPropertyType;
+
+
+#ifndef __cplusplus
+typedef enum cudaDataType_t cudaDataType_t;
+typedef enum libraryPropertyType_t libraryPropertyType_t;
+#endif
+
+#endif /* !__LIBRARY_TYPES_H__ */
diff --git a/ext/cudart/include/math_constants.h b/ext/cudart/include/math_constants.h
new file mode 100644
index 00000000..39937e98
--- /dev/null
+++ b/ext/cudart/include/math_constants.h
@@ -0,0 +1,152 @@
+/*
+ * Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__MATH_CONSTANTS_H__)
+#define __MATH_CONSTANTS_H__
+
+/* single precision constants */
+#define CUDART_INF_F            __int_as_float(0x7f800000U)
+#define CUDART_NAN_F            __int_as_float(0x7fffffffU)
+#define CUDART_MIN_DENORM_F     __int_as_float(0x00000001U)
+#define CUDART_MAX_NORMAL_F     __int_as_float(0x7f7fffffU)
+#define CUDART_NEG_ZERO_F       __int_as_float(0x80000000U)
+#define CUDART_ZERO_F           0.0F
+#define CUDART_ONE_F            1.0F
+#define CUDART_SQRT_HALF_F      0.707106781F
+#define CUDART_SQRT_HALF_HI_F   0.707106781F
+#define CUDART_SQRT_HALF_LO_F   1.210161749e-08F
+#define CUDART_SQRT_TWO_F       1.414213562F
+#define CUDART_THIRD_F          0.333333333F
+#define CUDART_PIO4_F           0.785398163F
+#define CUDART_PIO2_F           1.570796327F
+#define CUDART_3PIO4_F          2.356194490F
+#define CUDART_2_OVER_PI_F      0.636619772F
+#define CUDART_SQRT_2_OVER_PI_F 0.797884561F
+#define CUDART_PI_F             3.141592654F
+#define CUDART_L2E_F            1.442695041F
+#define CUDART_L2T_F            3.321928094F
+#define CUDART_LG2_F            0.301029996F
+#define CUDART_LGE_F            0.434294482F
+#define CUDART_LN2_F            0.693147181F
+#define CUDART_LNT_F            2.302585093F
+#define CUDART_LNPI_F           1.144729886F
+#define CUDART_TWO_TO_M126_F    1.175494351e-38F
+#define CUDART_TWO_TO_126_F     8.507059173e37F
+#define CUDART_NORM_HUGE_F      3.402823466e38F
+#define CUDART_TWO_TO_23_F      8388608.0F
+#define CUDART_TWO_TO_24_F      16777216.0F
+#define CUDART_TWO_TO_31_F      2147483648.0F
+#define CUDART_TWO_TO_32_F      4294967296.0F
+#define CUDART_REMQUO_BITS_F    3U
+#define CUDART_REMQUO_MASK_F    (~((~0U)<<CUDART_REMQUO_BITS_F))
+#define CUDART_TRIG_PLOSS_F     105615.0F
+
+/* double precision constants */
+#define CUDART_INF              __longlong_as_double(0x7ff0000000000000ULL)
+#define CUDART_NAN              __longlong_as_double(0xfff8000000000000ULL)
+#define CUDART_NEG_ZERO         __longlong_as_double(0x8000000000000000ULL)
+#define CUDART_MIN_DENORM       __longlong_as_double(0x0000000000000001ULL)
+#define CUDART_ZERO             0.0
+#define CUDART_ONE              1.0
+#define CUDART_SQRT_TWO         1.4142135623730951e+0
+#define CUDART_SQRT_HALF        7.0710678118654757e-1
+#define CUDART_SQRT_HALF_HI     7.0710678118654757e-1
+#define CUDART_SQRT_HALF_LO   (-4.8336466567264567e-17)
+#define CUDART_THIRD            3.3333333333333333e-1
+#define CUDART_TWOTHIRD         6.6666666666666667e-1
+#define CUDART_PIO4             7.8539816339744828e-1
+#define CUDART_PIO4_HI          7.8539816339744828e-1
+#define CUDART_PIO4_LO          3.0616169978683830e-17
+#define CUDART_PIO2             1.5707963267948966e+0
+#define CUDART_PIO2_HI          1.5707963267948966e+0
+#define CUDART_PIO2_LO          6.1232339957367660e-17
+#define CUDART_3PIO4            2.3561944901923448e+0
+#define CUDART_2_OVER_PI        6.3661977236758138e-1
+#define CUDART_PI               3.1415926535897931e+0
+#define CUDART_PI_HI            3.1415926535897931e+0
+#define CUDART_PI_LO            1.2246467991473532e-16
+#define CUDART_SQRT_2PI         2.5066282746310007e+0
+#define CUDART_SQRT_2PI_HI      2.5066282746310007e+0
+#define CUDART_SQRT_2PI_LO    (-1.8328579980459167e-16)
+#define CUDART_SQRT_PIO2        1.2533141373155003e+0
+#define CUDART_SQRT_PIO2_HI     1.2533141373155003e+0
+#define CUDART_SQRT_PIO2_LO   (-9.1642899902295834e-17)
+#define CUDART_SQRT_2OPI        7.9788456080286536e-1
+#define CUDART_L2E              1.4426950408889634e+0
+#define CUDART_L2E_HI           1.4426950408889634e+0
+#define CUDART_L2E_LO           2.0355273740931033e-17
+#define CUDART_L2T              3.3219280948873622e+0
+#define CUDART_LG2              3.0102999566398120e-1
+#define CUDART_LG2_HI           3.0102999566398120e-1
+#define CUDART_LG2_LO         (-2.8037281277851704e-18)
+#define CUDART_LGE              4.3429448190325182e-1
+#define CUDART_LGE_HI           4.3429448190325182e-1
+#define CUDART_LGE_LO           1.09831965021676510e-17
+#define CUDART_LN2              6.9314718055994529e-1
+#define CUDART_LN2_HI           6.9314718055994529e-1
+#define CUDART_LN2_LO           2.3190468138462996e-17
+#define CUDART_LNT              2.3025850929940459e+0
+#define CUDART_LNT_HI           2.3025850929940459e+0
+#define CUDART_LNT_LO         (-2.1707562233822494e-16)
+#define CUDART_LNPI             1.1447298858494002e+0
+#define CUDART_LN2_X_1024       7.0978271289338397e+2
+#define CUDART_LN2_X_1025       7.1047586007394398e+2
+#define CUDART_LN2_X_1075       7.4513321910194122e+2
+#define CUDART_LG2_X_1024       3.0825471555991675e+2
+#define CUDART_LG2_X_1075       3.2360724533877976e+2
+#define CUDART_TWO_TO_23        8388608.0
+#define CUDART_TWO_TO_52        4503599627370496.0
+#define CUDART_TWO_TO_53        9007199254740992.0
+#define CUDART_TWO_TO_54        18014398509481984.0
+#define CUDART_TWO_TO_M54       5.5511151231257827e-17
+#define CUDART_TWO_TO_M1022     2.22507385850720140e-308
+#define CUDART_TRIG_PLOSS       2147483648.0
+#define CUDART_DBL2INT_CVT      6755399441055744.0
+
+#endif /* !__MATH_CONSTANTS_H__ */
diff --git a/ext/cudart/include/math_functions.h b/ext/cudart/include/math_functions.h
new file mode 100644
index 00000000..bc806976
--- /dev/null
+++ b/ext/cudart/include/math_functions.h
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#if defined(_MSC_VER)
+#pragma message("math_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead.")
+#else
+#warning "math_functions.h is an internal header file and must not be used directly.  This file will be removed in a future CUDA release.  Please use cuda_runtime_api.h or cuda_runtime.h instead."
+#endif
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_MATH_FUNCTIONS_H_WRAPPER__
+#endif
+
+#include "crt/math_functions.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_MATH_FUNCTIONS_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_MATH_FUNCTIONS_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/mma.h b/ext/cudart/include/mma.h
new file mode 100644
index 00000000..9f36f671
--- /dev/null
+++ b/ext/cudart/include/mma.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_MMA_H_WRAPPER__
+#endif
+
+#include "crt/mma.h"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_MMA_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_CUDA_MMA_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/nvfunctional b/ext/cudart/include/nvfunctional
new file mode 100644
index 00000000..4fdeeecf
--- /dev/null
+++ b/ext/cudart/include/nvfunctional
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2014-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_NV_LIBCXX_FUNCTIONAL_H_WRAPPER__
+#endif
+
+#include "crt/nvfunctional"
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_NV_LIBCXX_FUNCTIONAL_H_WRAPPER__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_NV_LIBCXX_FUNCTIONAL_H_WRAPPER__
+#endif
diff --git a/ext/cudart/include/sm_20_atomic_functions.h b/ext/cudart/include/sm_20_atomic_functions.h
new file mode 100644
index 00000000..12b74c94
--- /dev/null
+++ b/ext/cudart/include/sm_20_atomic_functions.h
@@ -0,0 +1,100 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_20_ATOMIC_FUNCTIONS_H__)
+#define __SM_20_ATOMIC_FUNCTIONS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_20_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_20_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+
+#ifdef __CUDA_ARCH__
+extern "C"
+{
+extern __device__ __device_builtin__ float __fAtomicAdd(float *address, float val);
+}
+#endif /* __CUDA_ARCH__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_20_ATOMIC_FUNCTIONS_DECL__ float atomicAdd(float *address, float val) __DEF_IF_HOST
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __SM_20_ATOMIC_FUNCTIONS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_20_atomic_functions.hpp"
+#endif /* !__CUDACC_RTC__ && defined(__CUDA_ARCH__) */
+
+#endif /* !__SM_20_ATOMIC_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/sm_20_atomic_functions.hpp b/ext/cudart/include/sm_20_atomic_functions.hpp
new file mode 100644
index 00000000..ac4aa9bf
--- /dev/null
+++ b/ext/cudart/include/sm_20_atomic_functions.hpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_20_ATOMIC_FUNCTIONS_HPP__)
+#define __SM_20_ATOMIC_FUNCTIONS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_20_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_20_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_20_ATOMIC_FUNCTIONS_DECL__ float atomicAdd(float *address, float val)
+{
+  return __fAtomicAdd(address, val);
+}
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_20_ATOMIC_FUNCTIONS_DECL__
+
+#endif /* !__SM_20_ATOMIC_FUNCTIONS_HPP__ */
+
diff --git a/ext/cudart/include/sm_20_intrinsics.h b/ext/cudart/include/sm_20_intrinsics.h
new file mode 100644
index 00000000..6965e3ef
--- /dev/null
+++ b/ext/cudart/include/sm_20_intrinsics.h
@@ -0,0 +1,1551 @@
+/*
+ * Copyright 1993-2021 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_20_INTRINSICS_H__)
+#define __SM_20_INTRINSICS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_20_INTRINSICS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_20_INTRINSICS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+#if defined(_WIN32)
+# define __DEPRECATED__(msg) __declspec(deprecated(msg))
+#elif (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5 && !defined(__clang__))))
+# define __DEPRECATED__(msg) __attribute__((deprecated))
+#else
+# define __DEPRECATED__(msg) __attribute__((deprecated(msg)))
+#endif
+
+#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 700
+#define __WSB_DEPRECATION_MESSAGE(x) #x"() is not valid on compute_70 and above, and should be replaced with "#x"_sync()."\
+    "To continue using "#x"(), specify virtual architecture compute_60 when targeting sm_70 and above, for example, using the pair of compiler options: -arch=compute_60 -code=sm_70."
+#else
+#define __WSB_DEPRECATION_MESSAGE(x) #x"() is deprecated in favor of "#x"_sync() and may be removed in a future release (Use -Wno-deprecated-declarations to suppress this warning)."
+#endif
+
+extern "C"
+{
+extern __device__ __device_builtin__ void                   __threadfence_system(void);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Divide two floating-point values in round-to-nearest-even mode.
+ *
+ * Divides two floating-point values \p x by \p y in round-to-nearest-even mode.
+ *
+ * \return Returns \p x / \p y.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __ddiv_rn(double x, double y);
+/**      
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Divide two floating-point values in round-towards-zero mode.
+ *
+ * Divides two floating-point values \p x by \p y in round-towards-zero mode.
+ *
+ * \return Returns \p x / \p y.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __ddiv_rz(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Divide two floating-point values in round-up mode.
+ * 
+ * Divides two floating-point values \p x by \p y in round-up (to positive infinity) mode.
+ *    
+ * \return Returns \p x / \p y.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __ddiv_ru(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Divide two floating-point values in round-down mode.
+ *
+ * Divides two floating-point values \p x by \p y in round-down (to negative infinity) mode.
+ *
+ * \return Returns \p x / \p y.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __ddiv_rd(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-to-nearest-even mode.
+ * 
+ * Compute the reciprocal of \p x in round-to-nearest-even mode.
+ *
+ * \return Returns 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __drcp_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-towards-zero mode.
+ *
+ * Compute the reciprocal of \p x in round-towards-zero mode.
+ *
+ * \return Returns 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __drcp_rz(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-up mode.
+ * 
+ * Compute the reciprocal of \p x in round-up (to positive infinity) mode.
+ *
+ * \return Returns 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __drcp_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-down mode.
+ * 
+ * Compute the reciprocal of \p x in round-down (to negative infinity) mode.
+ *
+ * \return Returns 
+ * \latexonly $\frac{1}{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mfrac>
+ *     <m:mn>1</m:mn>
+ *     <m:mi>x</m:mi>
+ *   </m:mfrac>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __drcp_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-to-nearest-even mode.
+ * 
+ * Compute the square root of \p x in round-to-nearest-even mode.
+ *
+ * \return Returns 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __dsqrt_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-towards-zero mode.
+ * 
+ * Compute the square root of \p x in round-towards-zero mode.
+ *
+ * \return Returns 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __dsqrt_rz(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-up mode.
+ * 
+ * Compute the square root of \p x in round-up (to positive infinity) mode.
+ *
+ * \return Returns 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __dsqrt_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  in round-down mode.
+ * 
+ * Compute the square root of \p x in round-down (to negative infinity) mode.
+ *
+ * \return Returns 
+ * \latexonly $\sqrt{x}$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:msqrt>
+ *     <m:mi>x</m:mi>
+ *   </m:msqrt>
+ * </m:math>
+ * </d4p_MathML>\endxmlonly.
+ *
+ * \note_accuracy_double
+ * \note_requires_fermi
+ */
+extern __device__ __device_builtin__ double                __dsqrt_rd(double x);
+extern __device__ __device_builtin__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__ballot)) unsigned int __ballot(int);
+extern __device__ __device_builtin__ int                   __syncthreads_count(int);
+extern __device__ __device_builtin__ int                   __syncthreads_and(int);
+extern __device__ __device_builtin__ int                   __syncthreads_or(int);
+extern __device__ __device_builtin__ long long int         clock64(void);
+
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_SINGLE
+ * \brief Compute fused multiply-add operation in round-to-nearest-even mode, ignore \p -ftz=true compiler flag
+ *
+ * Behavior is the same as ::__fmaf_rn(\p x, \p y, \p z), the difference is in
+ * handling denormalized inputs and outputs: \p -ftz compiler flag has no effect.
+ */
+extern __device__ __device_builtin__ float                  __fmaf_ieee_rn(float x, float y, float z);
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_SINGLE
+ * \brief Compute fused multiply-add operation in round-down mode, ignore \p -ftz=true compiler flag
+ *
+ * Behavior is the same as ::__fmaf_rd(\p x, \p y, \p z), the difference is in
+ * handling denormalized inputs and outputs: \p -ftz compiler flag has no effect.
+ */
+extern __device__ __device_builtin__ float                  __fmaf_ieee_rd(float x, float y, float z);
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_SINGLE
+ * \brief Compute fused multiply-add operation in round-up mode, ignore \p -ftz=true compiler flag
+ *
+ * Behavior is the same as ::__fmaf_ru(\p x, \p y, \p z), the difference is in
+ * handling denormalized inputs and outputs: \p -ftz compiler flag has no effect.
+ */
+extern __device__ __device_builtin__ float                  __fmaf_ieee_ru(float x, float y, float z);
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_SINGLE
+ * \brief Compute fused multiply-add operation in round-towards-zero mode, ignore \p -ftz=true compiler flag
+ *
+ * Behavior is the same as ::__fmaf_rz(\p x, \p y, \p z), the difference is in
+ * handling denormalized inputs and outputs: \p -ftz compiler flag has no effect.
+ */
+extern __device__ __device_builtin__ float                  __fmaf_ieee_rz(float x, float y, float z);
+
+
+// SM_13 intrinsics
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Reinterpret bits in a double as a 64-bit signed integer.
+ *
+ * Reinterpret the bits in the double-precision floating-point value \p x
+ * as a signed 64-bit integer.
+ * \return Returns reinterpreted value.
+ */
+extern __device__ __device_builtin__ long long int         __double_as_longlong(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Reinterpret bits in a 64-bit signed integer as a double.
+ *
+ * Reinterpret the bits in the 64-bit signed integer value \p x as
+ * a double-precision floating-point value.
+ * \return Returns reinterpreted value.
+ */
+extern __device__ __device_builtin__ double                __longlong_as_double(long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation in round-to-nearest-even mode.
+ *
+ * Computes the value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single ternary operation, rounding the
+ * result once in round-to-nearest-even mode.
+ *
+ * \return Returns the rounded value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation.
+ * - fmaf(
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(\p x, \p y, 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ * - fmaf(\p x, \p y, 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ *
+ * \note_accuracy_double
+ */
+extern __device__ __device_builtin__ double                __fma_rn(double x, double y, double z);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation in round-towards-zero mode.
+ *
+ * Computes the value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single ternary operation, rounding the
+ * result once in round-towards-zero mode.
+ *
+ * \return Returns the rounded value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation.
+ * - fmaf(
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(\p x, \p y, 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ * - fmaf(\p x, \p y, 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ *
+ * \note_accuracy_double
+ */
+extern __device__ __device_builtin__ double                __fma_rz(double x, double y, double z);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation in round-up mode.
+ *
+ * Computes the value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single ternary operation, rounding the
+ * result once in round-up (to positive infinity) mode.
+ *
+ * \return Returns the rounded value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation.
+ * - fmaf(
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(\p x, \p y, 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ * - fmaf(\p x, \p y, 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ *
+ * \note_accuracy_double
+ */
+extern __device__ __device_builtin__ double                __fma_ru(double x, double y, double z);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Compute 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation in round-down mode.
+ *
+ * Computes the value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single ternary operation, rounding the
+ * result once in round-down (to negative infinity) mode.
+ *
+ * \return Returns the rounded value of 
+ * \latexonly $x \times y + z$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ *   <m:mo>+</m:mo>
+ *   <m:mi>z</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  as a single operation.
+ * - fmaf(
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(
+ * \latexonly $\pm 0$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>0</m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , 
+ * \latexonly $\pm \infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>&#x00B1;<!-- &PlusMinus; --></m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * , \p z) returns NaN.
+ * - fmaf(\p x, \p y, 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ * - fmaf(\p x, \p y, 
+ * \latexonly $+\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>+</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * ) returns NaN if
+ * \latexonly $x \times y$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mi>x</m:mi>
+ *   <m:mo>&#x00D7;<!-- &Multiply; --></m:mo>
+ *   <m:mi>y</m:mi>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ *  is an exact 
+ * \latexonly $-\infty$ \endlatexonly
+ * \xmlonly
+ * <d4p_MathML outputclass="xmlonly">
+ * <m:math xmlns:m="http://www.w3.org/1998/Math/MathML">
+ *   <m:mo>-</m:mo>
+ *   <m:mn>&#x221E;<!-- &Infinity; --></m:mn>
+ * </m:math>
+ * </d4p_MathML>
+ * \endxmlonly
+ * .
+ *
+ * \note_accuracy_double
+ */
+extern __device__ __device_builtin__ double                __fma_rd(double x, double y, double z);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Add two floating-point values in round-to-nearest-even mode.
+ *
+ * Adds two floating-point values \p x and \p y in round-to-nearest-even mode.
+ *
+ * \return Returns \p x + \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dadd_rn(double x, double y);
+/**      
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Add two floating-point values in round-towards-zero mode.
+ *
+ * Adds two floating-point values \p x and \p y in round-towards-zero mode.
+ *
+ * \return Returns \p x + \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dadd_rz(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Add two floating-point values in round-up mode.
+ * 
+ * Adds two floating-point values \p x and \p y in round-up (to positive infinity) mode.
+ *    
+ * \return Returns \p x + \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */ 
+extern __device__ __device_builtin__ double                __dadd_ru(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Add two floating-point values in round-down mode.
+ *
+ * Adds two floating-point values \p x and \p y in round-down (to negative infinity) mode.
+ *
+ * \return Returns \p x + \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dadd_rd(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Subtract two floating-point values in round-to-nearest-even mode.
+ *
+ * Subtracts two floating-point values \p x and \p y in round-to-nearest-even mode.
+ *
+ * \return Returns \p x - \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dsub_rn(double x, double y);
+/**      
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Subtract two floating-point values in round-towards-zero mode.
+ *
+ * Subtracts two floating-point values \p x and \p y in round-towards-zero mode.
+ *
+ * \return Returns \p x - \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dsub_rz(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Subtract two floating-point values in round-up mode.
+ * 
+ * Subtracts two floating-point values \p x and \p y in round-up (to positive infinity) mode.
+ *    
+ * \return Returns \p x - \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */ 
+extern __device__ __device_builtin__ double                __dsub_ru(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Subtract two floating-point values in round-down mode.
+ *
+ * Subtracts two floating-point values \p x and \p y in round-down (to negative infinity) mode.
+ *
+ * \return Returns \p x - \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dsub_rd(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Multiply two floating-point values in round-to-nearest-even mode.
+ *
+ * Multiplies two floating-point values \p x and \p y in round-to-nearest-even mode.
+ *
+ * \return Returns \p x * \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dmul_rn(double x, double y);
+/**      
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Multiply two floating-point values in round-towards-zero mode.
+ *
+ * Multiplies two floating-point values \p x and \p y in round-towards-zero mode.
+ *
+ * \return Returns \p x * \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dmul_rz(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Multiply two floating-point values in round-up mode.
+ * 
+ * Multiplies two floating-point values \p x and \p y in round-up (to positive infinity) mode.
+ *    
+ * \return Returns \p x * \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dmul_ru(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_DOUBLE
+ * \brief Multiply two floating-point values in round-down mode.
+ *
+ * Multiplies two floating-point values \p x and \p y in round-down (to negative infinity) mode.
+ *
+ * \return Returns \p x * \p y.
+ *
+ * \note_accuracy_double
+ * \note_nofma
+ */
+extern __device__ __device_builtin__ double                __dmul_rd(double x, double y);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a float in round-to-nearest-even mode.
+ *
+ * Convert the double-precision floating-point value \p x to a single-precision
+ * floating-point value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ float                 __double2float_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a float in round-towards-zero mode.
+ *
+ * Convert the double-precision floating-point value \p x to a single-precision
+ * floating-point value in round-towards-zero mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ float                 __double2float_rz(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a float in round-up mode.
+ *
+ * Convert the double-precision floating-point value \p x to a single-precision
+ * floating-point value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ float                 __double2float_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a float in round-down mode.
+ *
+ * Convert the double-precision floating-point value \p x to a single-precision
+ * floating-point value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ float                 __double2float_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed int in round-to-nearest-even mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed integer value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ int                   __double2int_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed int in round-up mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed integer value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ int                   __double2int_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed int in round-down mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed integer value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ int                   __double2int_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned int in round-to-nearest-even mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned integer value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned int          __double2uint_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned int in round-up mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned integer value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned int          __double2uint_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned int in round-down mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned integer value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned int          __double2uint_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed 64-bit int in round-to-nearest-even mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed 64-bit integer value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ long long int          __double2ll_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed 64-bit int in round-up mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed 64-bit integer value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ long long int          __double2ll_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to a signed 64-bit int in round-down mode.
+ *
+ * Convert the double-precision floating-point value \p x to a
+ * signed 64-bit integer value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ long long int          __double2ll_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned 64-bit int in round-to-nearest-even mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned 64-bit integer value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned long long int __double2ull_rn(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned 64-bit int in round-up mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned 64-bit integer value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned long long int __double2ull_ru(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a double to an unsigned 64-bit int in round-down mode.
+ *
+ * Convert the double-precision floating-point value \p x to an
+ * unsigned 64-bit integer value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ unsigned long long int __double2ull_rd(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a signed int to a double.
+ *
+ * Convert the signed integer value \p x to a double-precision floating-point value.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __int2double_rn(int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert an unsigned int to a double.
+ *
+ * Convert the unsigned integer value \p x to a double-precision floating-point value.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __uint2double_rn(unsigned int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a signed 64-bit int to a double in round-to-nearest-even mode.
+ *
+ * Convert the signed 64-bit integer value \p x to a double-precision floating-point
+ * value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ll2double_rn(long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a signed 64-bit int to a double in round-towards-zero mode.
+ *
+ * Convert the signed 64-bit integer value \p x to a double-precision floating-point
+ * value in round-towards-zero mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ll2double_rz(long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a signed 64-bit int to a double in round-up mode.
+ *
+ * Convert the signed 64-bit integer value \p x to a double-precision floating-point
+ * value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ll2double_ru(long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert a signed 64-bit int to a double in round-down mode.
+ *
+ * Convert the signed 64-bit integer value \p x to a double-precision floating-point
+ * value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ll2double_rd(long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert an unsigned 64-bit int to a double in round-to-nearest-even mode.
+ *
+ * Convert the unsigned 64-bit integer value \p x to a double-precision floating-point
+ * value in round-to-nearest-even mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ull2double_rn(unsigned long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert an unsigned 64-bit int to a double in round-towards-zero mode.
+ *
+ * Convert the unsigned 64-bit integer value \p x to a double-precision floating-point
+ * value in round-towards-zero mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ull2double_rz(unsigned long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert an unsigned 64-bit int to a double in round-up mode.
+ *
+ * Convert the unsigned 64-bit integer value \p x to a double-precision floating-point
+ * value in round-up (to positive infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ull2double_ru(unsigned long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Convert an unsigned 64-bit int to a double in round-down mode.
+ *
+ * Convert the unsigned 64-bit integer value \p x to a double-precision floating-point
+ * value in round-down (to negative infinity) mode.
+ * \return Returns converted value.
+ */
+extern __device__ __device_builtin__ double                 __ull2double_rd(unsigned long long int x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Reinterpret high 32 bits in a double as a signed integer.
+ *
+ * Reinterpret the high 32 bits in the double-precision floating-point value \p x
+ * as a signed integer.
+ * \return Returns reinterpreted value.
+ */
+extern __device__ __device_builtin__ int                    __double2hiint(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Reinterpret low 32 bits in a double as a signed integer.
+ *
+ * Reinterpret the low 32 bits in the double-precision floating-point value \p x
+ * as a signed integer.
+ * \return Returns reinterpreted value.
+ */
+extern __device__ __device_builtin__ int                    __double2loint(double x);
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_CAST
+ * \brief Reinterpret high and low 32-bit integer values as a double.
+ *
+ * Reinterpret the integer value of \p hi as the high 32 bits of a 
+ * double-precision floating-point value and the integer value of \p lo
+ * as the low 32 bits of the same double-precision floating-point value.
+ * \return Returns reinterpreted value.
+ */
+extern __device__ __device_builtin__ double                 __hiloint2double(int hi, int lo);
+
+
+}
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+__SM_20_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__ballot)) unsigned int ballot(bool pred) __DEF_IF_HOST
+
+__SM_20_INTRINSICS_DECL__ int syncthreads_count(bool pred) __DEF_IF_HOST
+
+__SM_20_INTRINSICS_DECL__ bool syncthreads_and(bool pred) __DEF_IF_HOST
+
+__SM_20_INTRINSICS_DECL__ bool syncthreads_or(bool pred) __DEF_IF_HOST
+
+#undef __DEPRECATED__
+#undef __WSB_DEPRECATION_MESSAGE
+
+__SM_20_INTRINSICS_DECL__ unsigned int __isGlobal(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ unsigned int __isShared(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ unsigned int __isConstant(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ unsigned int __isLocal(const void *ptr) __DEF_IF_HOST
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+__SM_20_INTRINSICS_DECL__ unsigned int __isGridConstant(const void *ptr) __DEF_IF_HOST
+#endif  /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700) */
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_global(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_shared(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_constant(const void *ptr) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_local(const void *ptr) __DEF_IF_HOST
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_grid_constant(const void *ptr) __DEF_IF_HOST
+#endif  /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700) */
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_global_to_generic(size_t rawbits) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ void * __cvta_shared_to_generic(size_t rawbits) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ void * __cvta_constant_to_generic(size_t rawbits) __DEF_IF_HOST
+__SM_20_INTRINSICS_DECL__ void * __cvta_local_to_generic(size_t rawbits) __DEF_IF_HOST
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+__SM_20_INTRINSICS_DECL__ void * __cvta_grid_constant_to_generic(size_t rawbits) __DEF_IF_HOST
+#endif  /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700) */
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __SM_20_INTRINSICS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_20_intrinsics.hpp"
+#endif /* !__CUDACC_RTC__ */
+#endif /* !__SM_20_INTRINSICS_H__ && defined(__CUDA_ARCH__) */
diff --git a/ext/cudart/include/sm_20_intrinsics.hpp b/ext/cudart/include/sm_20_intrinsics.hpp
new file mode 100644
index 00000000..30c1ab99
--- /dev/null
+++ b/ext/cudart/include/sm_20_intrinsics.hpp
@@ -0,0 +1,221 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_20_INTRINSICS_HPP__)
+#define __SM_20_INTRINSICS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_20_INTRINSICS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_20_INTRINSICS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_20_INTRINSICS_DECL__ unsigned int ballot(bool pred)
+{
+  return __ballot((int)pred);
+}
+
+__SM_20_INTRINSICS_DECL__ int syncthreads_count(bool pred)
+{
+  return __syncthreads_count((int)pred);
+}
+
+__SM_20_INTRINSICS_DECL__ bool syncthreads_and(bool pred)
+{
+  return (bool)__syncthreads_and((int)pred);
+}
+
+__SM_20_INTRINSICS_DECL__ bool syncthreads_or(bool pred)
+{
+  return (bool)__syncthreads_or((int)pred);
+}
+
+
+extern "C" {
+  __device__ unsigned __nv_isGlobal_impl(const void *);
+  __device__ unsigned __nv_isShared_impl(const void *);
+  __device__ unsigned __nv_isConstant_impl(const void *);
+  __device__ unsigned __nv_isLocal_impl(const void *);
+  __device__ unsigned __nv_isGridConstant_impl(const void *);
+}
+
+__SM_20_INTRINSICS_DECL__ unsigned int __isGlobal(const void *ptr)
+{
+  return __nv_isGlobal_impl(ptr); 
+}
+
+__SM_20_INTRINSICS_DECL__ unsigned int __isShared(const void *ptr)
+{
+  return __nv_isShared_impl(ptr); 
+}
+
+__SM_20_INTRINSICS_DECL__ unsigned int __isConstant(const void *ptr)
+{
+  return __nv_isConstant_impl(ptr); 
+}
+
+__SM_20_INTRINSICS_DECL__ unsigned int __isLocal(const void *ptr)
+{
+  return __nv_isLocal_impl(ptr); 
+}
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+__SM_20_INTRINSICS_DECL__ unsigned int __isGridConstant(const void *ptr)
+{
+  return __nv_isGridConstant_impl(ptr); 
+}
+#endif  /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700) */
+
+extern "C" {
+  __device__ size_t __nv_cvta_generic_to_global_impl(const void *);
+  __device__ size_t __nv_cvta_generic_to_shared_impl(const void *);
+  __device__ size_t __nv_cvta_generic_to_constant_impl(const void *);
+  __device__ size_t __nv_cvta_generic_to_local_impl(const void *);
+  __device__ void * __nv_cvta_global_to_generic_impl(size_t);
+  __device__ void * __nv_cvta_shared_to_generic_impl(size_t);
+  __device__ void * __nv_cvta_constant_to_generic_impl(size_t);
+  __device__ void * __nv_cvta_local_to_generic_impl(size_t);
+}
+
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_global(const void *p)
+{
+  return __nv_cvta_generic_to_global_impl(p);
+}
+
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_shared(const void *p)
+{
+  return __nv_cvta_generic_to_shared_impl(p);
+}
+
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_constant(const void *p)
+{
+  return __nv_cvta_generic_to_constant_impl(p);
+}
+
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_local(const void *p)
+{
+  return __nv_cvta_generic_to_local_impl(p);
+}
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_global_to_generic(size_t rawbits)
+{
+  return __nv_cvta_global_to_generic_impl(rawbits);
+}
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_shared_to_generic(size_t rawbits)
+{
+  return __nv_cvta_shared_to_generic_impl(rawbits);
+}
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_constant_to_generic(size_t rawbits)
+{
+  return __nv_cvta_constant_to_generic_impl(rawbits);
+}
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_local_to_generic(size_t rawbits)
+{
+  return __nv_cvta_local_to_generic_impl(rawbits);
+}
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700)
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __CVTA_PTR_64 1
+#endif
+
+__SM_20_INTRINSICS_DECL__ size_t __cvta_generic_to_grid_constant(const void *ptr)
+{
+#if __CVTA_PTR_64  
+  unsigned long long ret;
+  asm("cvta.to.param.u64 %0, %1;"  : "=l"(ret) : "l"(ptr));
+#else  /* !__CVTA_PTR_64 */
+  unsigned ret;
+  asm("cvta.to.param.u32 %0, %1;"  : "=r"(ret) : "r"(ptr));
+#endif  /* __CVTA_PTR_64 */  
+  return (size_t)ret;
+  
+}
+
+__SM_20_INTRINSICS_DECL__ void * __cvta_grid_constant_to_generic(size_t rawbits)
+{
+  void *ret;
+#if __CVTA_PTR_64  
+  unsigned long long in = rawbits;
+  asm("cvta.param.u64 %0, %1;" : "=l"(ret) : "l"(in));
+#else  /* !__CVTA_PTR_64 */
+  unsigned in = rawbits;
+  asm("cvta.param.u32 %0, %1;" : "=r"(ret) : "r"(in));
+#endif  /* __CVTA_PTR_64 */
+  return ret;
+}
+#undef __CVTA_PTR_64
+#endif  /* !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 700) */
+
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_20_INTRINSICS_DECL__
+
+#endif /* !__SM_20_INTRINSICS_HPP__ */
+
diff --git a/ext/cudart/include/sm_30_intrinsics.h b/ext/cudart/include/sm_30_intrinsics.h
new file mode 100644
index 00000000..393ddfcb
--- /dev/null
+++ b/ext/cudart/include/sm_30_intrinsics.h
@@ -0,0 +1,215 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_30_INTRINSICS_H__)
+#define __SM_30_INTRINSICS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_30_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_30_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 300
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+
+/*******************************************************************************
+*                                                                              *
+*  Below are declarations of SM-3.0 intrinsics which are included as           *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined warpSize && !defined __local_warpSize
+#define warpSize    32
+#define __local_warpSize
+#endif
+
+#if defined(_WIN32)
+# define __DEPRECATED__(msg) __declspec(deprecated(msg))
+#elif (defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5 && !defined(__clang__))))
+# define __DEPRECATED__(msg) __attribute__((deprecated))
+#else
+# define __DEPRECATED__(msg) __attribute__((deprecated(msg)))
+#endif
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+#define __WSB_DEPRECATION_MESSAGE(x) #x"() is deprecated in favor of "#x"_sync() and may be removed in a future release (Use -Wno-deprecated-declarations to suppress this warning)."
+#endif
+
+__SM_30_INTRINSICS_DECL__ unsigned  __fns(unsigned mask, unsigned base, int offset) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ void  __barrier_sync(unsigned id) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ void  __barrier_sync_count(unsigned id, unsigned cnt) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ void  __syncwarp(unsigned mask=0xFFFFFFFF) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __all_sync(unsigned mask, int pred) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __any_sync(unsigned mask, int pred) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __uni_sync(unsigned mask, int pred) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned __ballot_sync(unsigned mask, int pred) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned __activemask() __DEF_IF_HOST
+
+// Warp register exchange (shuffle) intrinsics.
+// Notes:
+// a) Warp size is hardcoded to 32 here, because the compiler does not know
+//    the "warpSize" constant at this time
+// b) we cannot map the float __shfl to the int __shfl because it'll mess with
+//    the register number (especially if you're doing two shfls to move a double).
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) int __shfl(int var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) unsigned int __shfl(unsigned int var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) int __shfl_up(int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) unsigned int __shfl_up(unsigned int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) int __shfl_down(int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) unsigned int __shfl_down(unsigned int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) int __shfl_xor(int var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) unsigned int __shfl_xor(unsigned int var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) float __shfl(float var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) float __shfl_up(float var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) float __shfl_down(float var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) float __shfl_xor(float var, int laneMask, int width=warpSize) __DEF_IF_HOST
+#endif
+
+__SM_30_INTRINSICS_DECL__ int __shfl_sync(unsigned mask, int var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_sync(unsigned mask, unsigned int var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __shfl_up_sync(unsigned mask, int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_up_sync(unsigned mask, unsigned int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __shfl_down_sync(unsigned mask, int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_down_sync(unsigned mask, unsigned int var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ int __shfl_xor_sync(unsigned mask, int var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_xor_sync(unsigned mask, unsigned int var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ float __shfl_sync(unsigned mask, float var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ float __shfl_up_sync(unsigned mask, float var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ float __shfl_down_sync(unsigned mask, float var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ float __shfl_xor_sync(unsigned mask, float var, int laneMask, int width=warpSize) __DEF_IF_HOST
+
+// 64-bits SHFL
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) unsigned long long __shfl(unsigned long long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) long long __shfl(long long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) long long __shfl_up(long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) unsigned long long __shfl_up(unsigned long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) long long __shfl_down(long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) unsigned long long __shfl_down(unsigned long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) long long __shfl_xor(long long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) unsigned long long __shfl_xor(unsigned long long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) double __shfl(double var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) double __shfl_up(double var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) double __shfl_down(double var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) double __shfl_xor(double var, int laneMask, int width=warpSize) __DEF_IF_HOST
+#endif
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_sync(unsigned mask, long long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_sync(unsigned mask, unsigned long long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long long __shfl_up_sync(unsigned mask, long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_up_sync(unsigned mask, unsigned long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long long __shfl_down_sync(unsigned mask, long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_down_sync(unsigned mask, unsigned long long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long long __shfl_xor_sync(unsigned mask, long long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_xor_sync(unsigned mask, unsigned long long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ double __shfl_sync(unsigned mask, double var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ double __shfl_up_sync(unsigned mask, double var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ double __shfl_down_sync(unsigned mask, double var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ double __shfl_xor_sync(unsigned mask, double var, int laneMask, int width=warpSize) __DEF_IF_HOST
+
+// long needs some help to choose between 32-bits and 64-bits
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) long __shfl(long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl)) unsigned long __shfl(unsigned long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) long __shfl_up(long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_up)) unsigned long __shfl_up(unsigned long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) long __shfl_down(long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_down)) unsigned long __shfl_down(unsigned long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) long __shfl_xor(long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ __DEPRECATED__(__WSB_DEPRECATION_MESSAGE(__shfl_xor)) unsigned long __shfl_xor(unsigned long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+#endif
+
+__SM_30_INTRINSICS_DECL__ long __shfl_sync(unsigned mask, long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_sync(unsigned mask, unsigned long var, int srcLane, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long __shfl_up_sync(unsigned mask, long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_up_sync(unsigned mask, unsigned long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long __shfl_down_sync(unsigned mask, long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_down_sync(unsigned mask, unsigned long var, unsigned int delta, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ long __shfl_xor_sync(unsigned mask, long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_xor_sync(unsigned mask, unsigned long var, int laneMask, int width=warpSize) __DEF_IF_HOST
+
+#undef __DEPRECATED__
+#undef __WSB_DEPRECATION_MESSAGE
+
+#if defined(__local_warpSize)
+#undef warpSize
+#undef __local_warpSize
+#endif
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 300 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __SM_30_INTRINSICS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_30_intrinsics.hpp"
+#endif /* !__CUDACC_RTC__ && defined(__CUDA_ARCH__) */
+
+#endif /* !__SM_30_INTRINSICS_H__ */
diff --git a/ext/cudart/include/sm_30_intrinsics.hpp b/ext/cudart/include/sm_30_intrinsics.hpp
new file mode 100644
index 00000000..c5d48425
--- /dev/null
+++ b/ext/cudart/include/sm_30_intrinsics.hpp
@@ -0,0 +1,604 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_30_INTRINSICS_HPP__)
+#define __SM_30_INTRINSICS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_30_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_30_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 300
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+// In here are intrinsics which are built in to the compiler. These may be
+// referenced by intrinsic implementations from this file.
+extern "C"
+{
+}
+
+/*******************************************************************************
+*                                                                              *
+*  Below are implementations of SM-3.0 intrinsics which are included as        *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined warpSize && !defined __local_warpSize
+#define warpSize    32
+#define __local_warpSize
+#endif
+
+__SM_30_INTRINSICS_DECL__
+unsigned __fns(unsigned mask, unsigned base, int offset) {
+  extern __device__ __device_builtin__ unsigned int __nvvm_fns(unsigned int mask, unsigned int base, int offset);
+  return __nvvm_fns(mask, base, offset);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+void  __barrier_sync(unsigned id) {
+  extern __device__ __device_builtin__ void __nvvm_barrier_sync(unsigned id);
+  return __nvvm_barrier_sync(id);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+void  __barrier_sync_count(unsigned id, unsigned cnt) {
+  extern __device__ __device_builtin__ void __nvvm_barrier_sync_cnt(unsigned id, unsigned cnt);
+  return __nvvm_barrier_sync_cnt(id, cnt);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+void  __syncwarp(unsigned mask) {
+  extern __device__ __device_builtin__ void __nvvm_bar_warp_sync(unsigned mask);
+  return __nvvm_bar_warp_sync(mask);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+int __all_sync(unsigned mask, int pred) {
+  extern __device__ __device_builtin__ int __nvvm_vote_all_sync(unsigned int mask, int pred); 
+  return __nvvm_vote_all_sync(mask, pred);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+int __any_sync(unsigned mask, int pred) {
+  extern __device__ __device_builtin__ int __nvvm_vote_any_sync(unsigned int mask, int pred); 
+  return __nvvm_vote_any_sync(mask, pred);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+int __uni_sync(unsigned mask, int pred) {
+  extern __device__ __device_builtin__ int __nvvm_vote_uni_sync(unsigned int mask, int pred); 
+  return __nvvm_vote_uni_sync(mask, pred);
+}
+
+__SM_30_INTRINSICS_DECL__ 
+unsigned __ballot_sync(unsigned mask, int pred) {
+  extern __device__ __device_builtin__ unsigned int __nvvm_vote_ballot_sync(unsigned int mask, int pred); 
+  return __nvvm_vote_ballot_sync(mask, pred);
+}
+
+__SM_30_INTRINSICS_DECL__
+unsigned __activemask() {
+    unsigned ret;
+    asm volatile ("activemask.b32 %0;" : "=r"(ret));
+    return ret;
+}
+
+// These are removed starting with compute_70 and onwards
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700
+
+__SM_30_INTRINSICS_DECL__ int __shfl(int var, int srcLane, int width) {
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.idx.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(var), "r"(srcLane), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl(unsigned int var, int srcLane, int width) {
+	return (unsigned int) __shfl((int)var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_up(int var, unsigned int delta, int width) {
+	int ret;
+	int c = (warpSize-width) << 8;
+	asm volatile ("shfl.up.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(var), "r"(delta), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_up(unsigned int var, unsigned int delta, int width) {
+	return (unsigned int) __shfl_up((int)var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_down(int var, unsigned int delta, int width) {
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.down.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(var), "r"(delta), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_down(unsigned int var, unsigned int delta, int width) {
+	return (unsigned int) __shfl_down((int)var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_xor(int var, int laneMask, int width) {
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.bfly.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(var), "r"(laneMask), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_xor(unsigned int var, int laneMask, int width) {
+	return (unsigned int) __shfl_xor((int)var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl(float var, int srcLane, int width) {
+	float ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.idx.b32 %0, %1, %2, %3;" : "=f"(ret) : "f"(var), "r"(srcLane), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_up(float var, unsigned int delta, int width) {
+	float ret;
+        int c;
+	c = (warpSize-width) << 8;
+	asm volatile ("shfl.up.b32 %0, %1, %2, %3;" : "=f"(ret) : "f"(var), "r"(delta), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_down(float var, unsigned int delta, int width) {
+	float ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.down.b32 %0, %1, %2, %3;" : "=f"(ret) : "f"(var), "r"(delta), "r"(c));
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_xor(float var, int laneMask, int width) {
+	float ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+	asm volatile ("shfl.bfly.b32 %0, %1, %2, %3;" : "=f"(ret) : "f"(var), "r"(laneMask), "r"(c));
+	return ret;
+}
+
+// 64-bits SHFL
+
+__SM_30_INTRINSICS_DECL__ long long __shfl(long long var, int srcLane, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl(hi, srcLane, width);
+	lo = __shfl(lo, srcLane, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl(unsigned long long var, int srcLane, int width) {
+	return (unsigned long long) __shfl((long long) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_up(long long var, unsigned int delta, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_up(hi, delta, width);
+	lo = __shfl_up(lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_up(unsigned long long var, unsigned int delta, int width) {
+	return (unsigned long long) __shfl_up((long long) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_down(long long var, unsigned int delta, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_down(hi, delta, width);
+	lo = __shfl_down(lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_down(unsigned long long var, unsigned int delta, int width) {
+	return (unsigned long long) __shfl_down((long long) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_xor(long long var, int laneMask, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_xor(hi, laneMask, width);
+	lo = __shfl_xor(lo, laneMask, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_xor(unsigned long long var, int laneMask, int width) {
+	return (unsigned long long) __shfl_xor((long long) var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl(double var, int srcLane, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl(hi, srcLane, width);
+	lo = __shfl(lo, srcLane, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_up(double var, unsigned int delta, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_up(hi, delta, width);
+	lo = __shfl_up(lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_down(double var, unsigned int delta, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_down(hi, delta, width);
+	lo = __shfl_down(lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_xor(double var, int laneMask, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_xor(hi, laneMask, width);
+	lo = __shfl_xor(lo, laneMask, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl(long var, int srcLane, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl((long long) var, srcLane, width) :
+		__shfl((int) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl(unsigned long var, int srcLane, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl((unsigned long long) var, srcLane, width) :
+		__shfl((unsigned int) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_up(long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_up((long long) var, delta, width) :
+		__shfl_up((int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_up(unsigned long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_up((unsigned long long) var, delta, width) :
+		__shfl_up((unsigned int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_down(long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_down((long long) var, delta, width) :
+		__shfl_down((int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_down(unsigned long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_down((unsigned long long) var, delta, width) :
+		__shfl_down((unsigned int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_xor(long var, int laneMask, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_xor((long long) var, laneMask, width) :
+		__shfl_xor((int) var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_xor(unsigned long var, int laneMask, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_xor((unsigned long long) var, laneMask, width) :
+		__shfl_xor((unsigned int) var, laneMask, width);
+}
+
+#endif /* !defined(__CUDA_ARCH__) || __CUDA_ARCH__ < 700 */
+
+// Warp register exchange (shuffle) intrinsics.
+// Notes:
+// a) Warp size is hardcoded to 32 here, because the compiler does not know
+//    the "warpSize" constant at this time
+// b) we cannot map the float __shfl to the int __shfl because it'll mess with
+//    the register number (especially if you're doing two shfls to move a double).
+__SM_30_INTRINSICS_DECL__ int __shfl_sync(unsigned mask, int var, int srcLane, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_idx_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_idx_sync(mask, var, srcLane, c);
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_sync(unsigned mask, unsigned int var, int srcLane, int width) {
+        return (unsigned int) __shfl_sync(mask, (int)var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_up_sync(unsigned mask, int var, unsigned int delta, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_up_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+	int c = (warpSize-width) << 8;
+        ret = __nvvm_shfl_up_sync(mask, var, delta, c);
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_up_sync(unsigned mask, unsigned int var, unsigned int delta, int width) {
+        return (unsigned int) __shfl_up_sync(mask, (int)var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_down_sync(unsigned mask, int var, unsigned int delta, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_down_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_down_sync(mask, var, delta, c);
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_down_sync(unsigned mask, unsigned int var, unsigned int delta, int width) {
+        return (unsigned int) __shfl_down_sync(mask, (int)var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ int __shfl_xor_sync(unsigned mask, int var, int laneMask, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_bfly_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+	int c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_bfly_sync(mask, var, laneMask, c);
+	return ret;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned int __shfl_xor_sync(unsigned mask, unsigned int var, int laneMask, int width) {
+	return (unsigned int) __shfl_xor_sync(mask, (int)var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_sync(unsigned mask, float var, int srcLane, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_idx_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+        int ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_idx_sync(mask, __float_as_int(var), srcLane, c);
+	return __int_as_float(ret);
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_up_sync(unsigned mask, float var, unsigned int delta, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_up_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+        int c;
+	c = (warpSize-width) << 8;
+        ret = __nvvm_shfl_up_sync(mask, __float_as_int(var), delta, c);
+	return __int_as_float(ret);
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_down_sync(unsigned mask, float var, unsigned int delta, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_down_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_down_sync(mask, __float_as_int(var), delta, c);
+	return __int_as_float(ret);
+}
+
+__SM_30_INTRINSICS_DECL__ float __shfl_xor_sync(unsigned mask, float var, int laneMask, int width) {
+        extern __device__ __device_builtin__ unsigned __nvvm_shfl_bfly_sync(unsigned mask, unsigned a, unsigned b, unsigned c);
+	int ret;
+        int c;
+	c = ((warpSize-width) << 8) | 0x1f;
+        ret = __nvvm_shfl_bfly_sync(mask, __float_as_int(var), laneMask, c);
+	return __int_as_float(ret);
+}
+
+// 64-bits SHFL
+__SM_30_INTRINSICS_DECL__ long long __shfl_sync(unsigned mask, long long var, int srcLane, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_sync(mask, hi, srcLane, width);
+	lo = __shfl_sync(mask, lo, srcLane, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_sync(unsigned mask, unsigned long long var, int srcLane, int width) {
+        return (unsigned long long) __shfl_sync(mask, (long long) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_up_sync(unsigned mask, long long var, unsigned int delta, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_up_sync(mask, hi, delta, width);
+	lo = __shfl_up_sync(mask, lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_up_sync(unsigned mask, unsigned long long var, unsigned int delta, int width) {
+        return (unsigned long long) __shfl_up_sync(mask, (long long) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_down_sync(unsigned mask, long long var, unsigned int delta, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_down_sync(mask, hi, delta, width);
+	lo = __shfl_down_sync(mask, lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_down_sync(unsigned mask, unsigned long long var, unsigned int delta, int width) {
+        return (unsigned long long) __shfl_down_sync(mask, (long long) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long long __shfl_xor_sync(unsigned mask, long long var, int laneMask, int width) {
+	int lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "l"(var));
+	hi = __shfl_xor_sync(mask, hi, laneMask, width);
+	lo = __shfl_xor_sync(mask, lo, laneMask, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=l"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long long __shfl_xor_sync(unsigned mask, unsigned long long var, int laneMask, int width) {
+        return (unsigned long long) __shfl_xor_sync(mask, (long long) var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_sync(unsigned mask, double var, int srcLane, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_sync(mask, hi, srcLane, width);
+	lo = __shfl_sync(mask, lo, srcLane, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_up_sync(unsigned mask, double var, unsigned int delta, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_up_sync(mask, hi, delta, width);
+	lo = __shfl_up_sync(mask, lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_down_sync(unsigned mask, double var, unsigned int delta, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_down_sync(mask, hi, delta, width);
+	lo = __shfl_down_sync(mask, lo, delta, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+__SM_30_INTRINSICS_DECL__ double __shfl_xor_sync(unsigned mask, double var, int laneMask, int width) {
+	unsigned lo, hi;
+	asm volatile("mov.b64 {%0,%1}, %2;" : "=r"(lo), "=r"(hi) : "d"(var));
+	hi = __shfl_xor_sync(mask, hi, laneMask, width);
+	lo = __shfl_xor_sync(mask, lo, laneMask, width);
+	asm volatile("mov.b64 %0, {%1,%2};" : "=d"(var) : "r"(lo), "r"(hi));
+	return var;
+}
+
+// long needs some help to choose between 32-bits and 64-bits
+
+__SM_30_INTRINSICS_DECL__ long __shfl_sync(unsigned mask, long var, int srcLane, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+                __shfl_sync(mask, (long long) var, srcLane, width) :
+		__shfl_sync(mask, (int) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_sync(unsigned mask, unsigned long var, int srcLane, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+                __shfl_sync(mask, (unsigned long long) var, srcLane, width) :
+		__shfl_sync(mask, (unsigned int) var, srcLane, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_up_sync(unsigned mask, long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_up_sync(mask, (long long) var, delta, width) :
+		__shfl_up_sync(mask, (int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_up_sync(unsigned mask, unsigned long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_up_sync(mask, (unsigned long long) var, delta, width) :
+		__shfl_up_sync(mask, (unsigned int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_down_sync(unsigned mask, long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_down_sync(mask, (long long) var, delta, width) :
+		__shfl_down_sync(mask, (int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_down_sync(unsigned mask, unsigned long var, unsigned int delta, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_down_sync(mask, (unsigned long long) var, delta, width) :
+		__shfl_down_sync(mask, (unsigned int) var, delta, width);
+}
+
+__SM_30_INTRINSICS_DECL__ long __shfl_xor_sync(unsigned mask, long var, int laneMask, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_xor_sync(mask, (long long) var, laneMask, width) :
+		__shfl_xor_sync(mask, (int) var, laneMask, width);
+}
+
+__SM_30_INTRINSICS_DECL__ unsigned long __shfl_xor_sync(unsigned mask, unsigned long var, int laneMask, int width) {
+	return (sizeof(long) == sizeof(long long)) ?
+		__shfl_xor_sync(mask, (unsigned long long) var, laneMask, width) :
+		__shfl_xor_sync(mask, (unsigned int) var, laneMask, width);
+}
+
+#if defined(__local_warpSize)
+#undef warpSize
+#undef __local_warpSize
+#endif
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 300 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_30_INTRINSICS_DECL__
+
+#endif /* !__SM_30_INTRINSICS_HPP__ */
+
diff --git a/ext/cudart/include/sm_32_atomic_functions.h b/ext/cudart/include/sm_32_atomic_functions.h
new file mode 100644
index 00000000..90573201
--- /dev/null
+++ b/ext/cudart/include/sm_32_atomic_functions.h
@@ -0,0 +1,131 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 35.235 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.35.235 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_32_ATOMIC_FUNCTIONS_H__)
+#define __SM_32_ATOMIC_FUNCTIONS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_32_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_32_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 320
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+
+#ifdef __CUDA_ARCH__
+extern "C"
+{
+extern __device__ __device_builtin__ long long __illAtomicMin(long long *address, long long val);
+extern __device__ __device_builtin__ long long __illAtomicMax(long long *address, long long val);
+extern __device__ __device_builtin__ long long __llAtomicAnd(long long *address, long long val);
+extern __device__ __device_builtin__ long long __llAtomicOr(long long *address, long long val);
+extern __device__ __device_builtin__ long long __llAtomicXor(long long *address, long long val);
+extern __device__ __device_builtin__ unsigned long long __ullAtomicMin(unsigned long long *address, unsigned long long val);
+extern __device__ __device_builtin__ unsigned long long __ullAtomicMax(unsigned long long *address, unsigned long long val);
+extern __device__ __device_builtin__ unsigned long long __ullAtomicAnd(unsigned long long *address, unsigned long long val);
+extern __device__ __device_builtin__ unsigned long long __ullAtomicOr (unsigned long long *address, unsigned long long val);
+extern __device__ __device_builtin__ unsigned long long __ullAtomicXor(unsigned long long *address, unsigned long long val);
+}
+#endif /* __CUDA_ARCH__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicMin(long long *address, long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicMax(long long *address, long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicAnd(long long *address, long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicOr(long long *address, long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicXor(long long *address, long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicMin(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicMax(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicAnd(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicOr(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicXor(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 320 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __SM_32_ATOMIC_FUNCTIONS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_32_atomic_functions.hpp"
+#endif /* !__CUDACC_RTC__  && defined(__CUDA_ARCH__) */
+
+#endif /* !__SM_32_ATOMIC_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/sm_32_atomic_functions.hpp b/ext/cudart/include/sm_32_atomic_functions.hpp
new file mode 100644
index 00000000..ebe60b8c
--- /dev/null
+++ b/ext/cudart/include/sm_32_atomic_functions.hpp
@@ -0,0 +1,134 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 35.235 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.35.235 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_32_ATOMIC_FUNCTIONS_HPP__)
+#define __SM_32_ATOMIC_FUNCTIONS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_32_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_32_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 320
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicMin(long long *address, long long val)
+{
+    return __illAtomicMin(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicMax(long long *address, long long val)
+{
+    return __illAtomicMax(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicAnd(long long *address, long long val)
+{
+    return __llAtomicAnd(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicOr(long long *address, long long val)
+{
+    return __llAtomicOr(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ long long atomicXor(long long *address, long long val)
+{
+    return __llAtomicXor(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicMin(unsigned long long *address, unsigned long long val)
+{
+    return __ullAtomicMin(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicMax(unsigned long long *address, unsigned long long val)
+{
+    return __ullAtomicMax(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicAnd(unsigned long long *address, unsigned long long val)
+{
+    return __ullAtomicAnd(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicOr(unsigned long long *address, unsigned long long val)
+{
+    return __ullAtomicOr(address, val);
+}
+
+__SM_32_ATOMIC_FUNCTIONS_DECL__ unsigned long long atomicXor(unsigned long long *address, unsigned long long val)
+{
+    return __ullAtomicXor(address, val);
+}
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 320 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_32_ATOMIC_FUNCTIONS_DECL__
+
+#endif /* !__SM_32_ATOMIC_FUNCTIONS_HPP__ */
+
diff --git a/ext/cudart/include/sm_32_intrinsics.h b/ext/cudart/include/sm_32_intrinsics.h
new file mode 100644
index 00000000..33a805f7
--- /dev/null
+++ b/ext/cudart/include/sm_32_intrinsics.h
@@ -0,0 +1,510 @@
+/*
+ * Copyright 1993-2020 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_32_INTRINSICS_H__)
+#define __SM_32_INTRINSICS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_32_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_32_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 320
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+
+/*******************************************************************************
+*                                                                              *
+*  Below are declarations of SM-3.5 intrinsics which are included as           *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+/******************************************************************************
+ *                                   __ldg                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldg(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldg(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldg(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldg(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldg(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldg(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldg(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldg(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldg(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldg(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldg(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldg(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldg(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldg(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldg(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldg(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldg(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldg(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldg(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldg(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldg(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldg(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldg(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldg(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldg(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldg(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldg(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldg(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldg(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldg(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __ldcg                                   *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldcg(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcg(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldcg(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldcg(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldcg(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldcg(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldcg(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldcg(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldcg(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldcg(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldcg(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldcg(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldcg(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcg(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcg(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcg(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcg(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcg(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcg(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcg(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcg(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcg(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldcg(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldcg(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcg(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldcg(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldcg(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldcg(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldcg(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldcg(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __ldca                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldca(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldca(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldca(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldca(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldca(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldca(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldca(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldca(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldca(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldca(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldca(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldca(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldca(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldca(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldca(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldca(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldca(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldca(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldca(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldca(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldca(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldca(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldca(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldca(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldca(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldca(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldca(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldca(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldca(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldca(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __ldcs                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldcs(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcs(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldcs(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldcs(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldcs(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldcs(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldcs(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldcs(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldcs(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldcs(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldcs(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldcs(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldcs(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcs(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcs(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcs(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcs(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcs(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcs(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcs(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcs(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcs(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldcs(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldcs(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcs(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldcs(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldcs(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldcs(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldcs(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldcs(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __ldlu                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldlu(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldlu(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldlu(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldlu(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldlu(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldlu(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldlu(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldlu(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldlu(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldlu(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldlu(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldlu(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldlu(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldlu(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldlu(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldlu(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldlu(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldlu(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldlu(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldlu(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldlu(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldlu(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldlu(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldlu(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldlu(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldlu(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldlu(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldlu(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldlu(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldlu(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __ldcv                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ long __ldcv(const long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcv(const unsigned long *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ char __ldcv(const char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ signed char __ldcv(const signed char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short __ldcv(const short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int __ldcv(const int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ long long __ldcv(const long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char2 __ldcv(const char2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ char4 __ldcv(const char4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short2 __ldcv(const short2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ short4 __ldcv(const short4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int2 __ldcv(const int2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ int4 __ldcv(const int4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcv(const longlong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcv(const unsigned char *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcv(const unsigned short *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcv(const unsigned int *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcv(const unsigned long long *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcv(const uchar2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcv(const uchar4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcv(const ushort2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcv(const ushort4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint2 __ldcv(const uint2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ uint4 __ldcv(const uint4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcv(const ulonglong2 *ptr) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ float __ldcv(const float *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double __ldcv(const double *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float2 __ldcv(const float2 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ float4 __ldcv(const float4 *ptr) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ double2 __ldcv(const double2 *ptr) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __stwb                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ void __stwb(long *ptr, long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned long *ptr, unsigned long value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwb(char *ptr, char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(signed char *ptr, signed char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(short *ptr, short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(int *ptr, int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(long long *ptr, long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(char2 *ptr, char2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(char4 *ptr, char4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(short2 *ptr, short2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(short4 *ptr, short4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(int2 *ptr, int2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(int4 *ptr, int4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(longlong2 *ptr, longlong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned char *ptr, unsigned char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned short *ptr, unsigned short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned int *ptr, unsigned int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned long long *ptr, unsigned long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(uchar2 *ptr, uchar2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(uchar4 *ptr, uchar4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(ushort2 *ptr, ushort2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(ushort4 *ptr, ushort4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(uint2 *ptr, uint2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(uint4 *ptr, uint4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(ulonglong2 *ptr, ulonglong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwb(float *ptr, float value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(double *ptr, double value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(float2 *ptr, float2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(float4 *ptr, float4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwb(double2 *ptr, double2 value) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __stcg                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ void __stcg(long *ptr, long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned long *ptr, unsigned long value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcg(char *ptr, char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(signed char *ptr, signed char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(short *ptr, short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(int *ptr, int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(long long *ptr, long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(char2 *ptr, char2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(char4 *ptr, char4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(short2 *ptr, short2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(short4 *ptr, short4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(int2 *ptr, int2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(int4 *ptr, int4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(longlong2 *ptr, longlong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned char *ptr, unsigned char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned short *ptr, unsigned short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned int *ptr, unsigned int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned long long *ptr, unsigned long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(uchar2 *ptr, uchar2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(uchar4 *ptr, uchar4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(ushort2 *ptr, ushort2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(ushort4 *ptr, ushort4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(uint2 *ptr, uint2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(uint4 *ptr, uint4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(ulonglong2 *ptr, ulonglong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcg(float *ptr, float value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(double *ptr, double value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(float2 *ptr, float2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(float4 *ptr, float4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcg(double2 *ptr, double2 value) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __stcs                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ void __stcs(long *ptr, long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned long *ptr, unsigned long value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcs(char *ptr, char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(signed char *ptr, signed char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(short *ptr, short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(int *ptr, int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(long long *ptr, long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(char2 *ptr, char2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(char4 *ptr, char4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(short2 *ptr, short2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(short4 *ptr, short4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(int2 *ptr, int2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(int4 *ptr, int4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(longlong2 *ptr, longlong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned char *ptr, unsigned char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned short *ptr, unsigned short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned int *ptr, unsigned int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned long long *ptr, unsigned long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(uchar2 *ptr, uchar2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(uchar4 *ptr, uchar4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(ushort2 *ptr, ushort2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(ushort4 *ptr, ushort4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(uint2 *ptr, uint2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(uint4 *ptr, uint4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(ulonglong2 *ptr, ulonglong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stcs(float *ptr, float value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(double *ptr, double value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(float2 *ptr, float2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(float4 *ptr, float4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stcs(double2 *ptr, double2 value) __DEF_IF_HOST
+/******************************************************************************
+ *                                   __stwt                                    *
+ ******************************************************************************/
+__SM_32_INTRINSICS_DECL__ void __stwt(long *ptr, long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned long *ptr, unsigned long value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwt(char *ptr, char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(signed char *ptr, signed char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(short *ptr, short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(int *ptr, int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(long long *ptr, long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(char2 *ptr, char2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(char4 *ptr, char4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(short2 *ptr, short2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(short4 *ptr, short4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(int2 *ptr, int2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(int4 *ptr, int4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(longlong2 *ptr, longlong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned char *ptr, unsigned char value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned short *ptr, unsigned short value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned int *ptr, unsigned int value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned long long *ptr, unsigned long long value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(uchar2 *ptr, uchar2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(uchar4 *ptr, uchar4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(ushort2 *ptr, ushort2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(ushort4 *ptr, ushort4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(uint2 *ptr, uint2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(uint4 *ptr, uint4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(ulonglong2 *ptr, ulonglong2 value) __DEF_IF_HOST
+
+__SM_32_INTRINSICS_DECL__ void __stwt(float *ptr, float value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(double *ptr, double value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(float2 *ptr, float2 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(float4 *ptr, float4 value) __DEF_IF_HOST
+__SM_32_INTRINSICS_DECL__ void __stwt(double2 *ptr, double2 value) __DEF_IF_HOST
+
+
+// SHF is the "funnel shift" operation - an accelerated left/right shift with carry
+// operating on 64-bit quantities, which are concatenations of two 32-bit registers.
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_INT
+ * \brief Concatenate \p hi : \p lo, shift left by \p shift & 31 bits, return the most significant 32 bits.
+ *
+ * Shift the 64-bit value formed by concatenating argument \p lo and \p hi left by the amount specified by the argument \p shift.
+ * Argument \p lo holds bits 31:0 and argument \p hi holds bits 63:32 of the 64-bit source value.
+ * The source is shifted left by the wrapped value of \p shift (\p shift & 31).
+ * The most significant 32-bits of the result are returned.
+ *
+ * \return Returns the most significant 32 bits of the shifted 64-bit value.
+ */
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_l(unsigned int lo, unsigned int hi, unsigned int shift) __DEF_IF_HOST
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_INT
+ * \brief Concatenate \p hi : \p lo, shift left by min(\p shift, 32) bits, return the most significant 32 bits.
+ *
+ * Shift the 64-bit value formed by concatenating argument \p lo and \p hi left by the amount specified by the argument \p shift.
+ * Argument \p lo holds bits 31:0 and argument \p hi holds bits 63:32 of the 64-bit source value.
+ * The source is shifted left by the clamped value of \p shift (min(\p shift, 32)).
+ * The most significant 32-bits of the result are returned.
+ *
+ * \return Returns the most significant 32 bits of the shifted 64-bit value.
+ */
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_lc(unsigned int lo, unsigned int hi, unsigned int shift) __DEF_IF_HOST
+
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_INT
+ * \brief Concatenate \p hi : \p lo, shift right by \p shift & 31 bits, return the least significant 32 bits.
+ *
+ * Shift the 64-bit value formed by concatenating argument \p lo and \p hi right by the amount specified by the argument \p shift.
+ * Argument \p lo holds bits 31:0 and argument \p hi holds bits 63:32 of the 64-bit source value.
+ * The source is shifted right by the wrapped value of \p shift (\p shift & 31).
+ * The least significant 32-bits of the result are returned.
+ *
+ * \return Returns the least significant 32 bits of the shifted 64-bit value.
+ */
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_r(unsigned int lo, unsigned int hi, unsigned int shift) __DEF_IF_HOST
+/**
+ * \ingroup CUDA_MATH_INTRINSIC_INT
+ * \brief Concatenate \p hi : \p lo, shift right by min(\p shift, 32) bits, return the least significant 32 bits.
+ *
+ * Shift the 64-bit value formed by concatenating argument \p lo and \p hi right by the amount specified by the argument \p shift.
+ * Argument \p lo holds bits 31:0 and argument \p hi holds bits 63:32 of the 64-bit source value.
+ * The source is shifted right by the clamped value of \p shift (min(\p shift, 32)).
+ * The least significant 32-bits of the result are returned.
+ *
+ * \return Returns the least significant 32 bits of the shifted 64-bit value.
+ */
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_rc(unsigned int lo, unsigned int hi, unsigned int shift) __DEF_IF_HOST
+
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 320 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_32_INTRINSICS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_32_intrinsics.hpp"
+#endif /* !__CUDACC_RTC__  && defined(__CUDA_ARCH__)  */
+
+#endif /* !__SM_32_INTRINSICS_H__ */
diff --git a/ext/cudart/include/sm_32_intrinsics.hpp b/ext/cudart/include/sm_32_intrinsics.hpp
new file mode 100644
index 00000000..af5f6634
--- /dev/null
+++ b/ext/cudart/include/sm_32_intrinsics.hpp
@@ -0,0 +1,588 @@
+/*
+ * Copyright 1993-2020 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_32_INTRINSICS_HPP__)
+#define __SM_32_INTRINSICS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_32_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_32_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 320
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+// In here are intrinsics which are built in to the compiler. These may be
+// referenced by intrinsic implementations from this file.
+extern "C"
+{
+    // There are no intrinsics built in to the compiler for SM-3.5,
+    // all intrinsics are now implemented as inline PTX below.
+}
+
+/*******************************************************************************
+*                                                                              *
+*  Below are implementations of SM-3.5 intrinsics which are included as        *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+
+// LDG is a "load from global via texture path" command which can exhibit higher
+// bandwidth on GK110 than a regular LD.
+// Define a different pointer storage size for 64 and 32 bit
+#if (defined(_MSC_VER) && defined(_WIN64)) || defined(__LP64__) || defined(__CUDACC_RTC__)
+#define __LDG_PTR   "l"
+#else
+#define __LDG_PTR   "r"
+#endif
+
+/******************************************************************************
+ *                                   __ldg                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldg(const long *ptr) { unsigned long ret; asm volatile ("ld.global.nc.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldg(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.nc.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldg(const long *ptr) { unsigned long ret; asm volatile ("ld.global.nc.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldg(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.nc.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldg(const char *ptr) { unsigned int ret; asm volatile ("ld.global.nc.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldg(const signed char *ptr) { unsigned int ret; asm volatile ("ld.global.nc.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldg(const short *ptr) { unsigned short ret; asm volatile ("ld.global.nc.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldg(const int *ptr) { unsigned int ret; asm volatile ("ld.global.nc.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldg(const long long *ptr) { unsigned long long ret; asm volatile ("ld.global.nc.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldg(const char2 *ptr) { char2 ret; int2 tmp; asm volatile ("ld.global.nc.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldg(const char4 *ptr) { char4 ret; int4 tmp; asm volatile ("ld.global.nc.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldg(const short2 *ptr) { short2 ret; asm volatile ("ld.global.nc.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldg(const short4 *ptr) { short4 ret; asm volatile ("ld.global.nc.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldg(const int2 *ptr) { int2 ret; asm volatile ("ld.global.nc.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldg(const int4 *ptr) { int4 ret; asm volatile ("ld.global.nc.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldg(const longlong2 *ptr) { longlong2 ret; asm volatile ("ld.global.nc.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldg(const unsigned char *ptr) { unsigned int ret; asm volatile ("ld.global.nc.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr));  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldg(const unsigned short *ptr) { unsigned short ret; asm volatile ("ld.global.nc.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldg(const unsigned int *ptr) { unsigned int ret; asm volatile ("ld.global.nc.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldg(const unsigned long long *ptr) { unsigned long long ret; asm volatile ("ld.global.nc.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldg(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm volatile ("ld.global.nc.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldg(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm volatile ("ld.global.nc.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldg(const ushort2 *ptr) { ushort2 ret; asm volatile ("ld.global.nc.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldg(const ushort4 *ptr) { ushort4 ret; asm volatile ("ld.global.nc.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldg(const uint2 *ptr) { uint2 ret; asm volatile ("ld.global.nc.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldg(const uint4 *ptr) { uint4 ret; asm volatile ("ld.global.nc.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldg(const ulonglong2 *ptr) { ulonglong2 ret; asm volatile ("ld.global.nc.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldg(const float *ptr) { float ret; asm volatile ("ld.global.nc.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldg(const double *ptr) { double ret; asm volatile ("ld.global.nc.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldg(const float2 *ptr) { float2 ret; asm volatile ("ld.global.nc.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldg(const float4 *ptr) { float4 ret; asm volatile ("ld.global.nc.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldg(const double2 *ptr) { double2 ret; asm volatile ("ld.global.nc.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+
+/******************************************************************************
+ *                                   __ldcg                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldcg(const long *ptr) { unsigned long ret; asm volatile ("ld.global.cg.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcg(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.cg.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldcg(const long *ptr) { unsigned long ret; asm volatile ("ld.global.cg.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcg(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.cg.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldcg(const char *ptr) { unsigned int ret; asm volatile ("ld.global.cg.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldcg(const signed char *ptr) { unsigned int ret; asm volatile ("ld.global.cg.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldcg(const short *ptr) { unsigned short ret; asm volatile ("ld.global.cg.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldcg(const int *ptr) { unsigned int ret; asm volatile ("ld.global.cg.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldcg(const long long *ptr) { unsigned long long ret; asm volatile ("ld.global.cg.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldcg(const char2 *ptr) { char2 ret; int2 tmp; asm volatile ("ld.global.cg.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldcg(const char4 *ptr) { char4 ret; int4 tmp; asm volatile ("ld.global.cg.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldcg(const short2 *ptr) { short2 ret; asm volatile ("ld.global.cg.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldcg(const short4 *ptr) { short4 ret; asm volatile ("ld.global.cg.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldcg(const int2 *ptr) { int2 ret; asm volatile ("ld.global.cg.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldcg(const int4 *ptr) { int4 ret; asm volatile ("ld.global.cg.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcg(const longlong2 *ptr) { longlong2 ret; asm volatile ("ld.global.cg.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcg(const unsigned char *ptr) { unsigned int ret; asm volatile ("ld.global.cg.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr));  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcg(const unsigned short *ptr) { unsigned short ret; asm volatile ("ld.global.cg.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcg(const unsigned int *ptr) { unsigned int ret; asm volatile ("ld.global.cg.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcg(const unsigned long long *ptr) { unsigned long long ret; asm volatile ("ld.global.cg.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcg(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm volatile ("ld.global.cg.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcg(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm volatile ("ld.global.cg.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcg(const ushort2 *ptr) { ushort2 ret; asm volatile ("ld.global.cg.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcg(const ushort4 *ptr) { ushort4 ret; asm volatile ("ld.global.cg.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldcg(const uint2 *ptr) { uint2 ret; asm volatile ("ld.global.cg.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldcg(const uint4 *ptr) { uint4 ret; asm volatile ("ld.global.cg.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcg(const ulonglong2 *ptr) { ulonglong2 ret; asm volatile ("ld.global.cg.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldcg(const float *ptr) { float ret; asm volatile ("ld.global.cg.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldcg(const double *ptr) { double ret; asm volatile ("ld.global.cg.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldcg(const float2 *ptr) { float2 ret; asm volatile ("ld.global.cg.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldcg(const float4 *ptr) { float4 ret; asm volatile ("ld.global.cg.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldcg(const double2 *ptr) { double2 ret; asm volatile ("ld.global.cg.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+/******************************************************************************
+ *                                   __ldca                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldca(const long *ptr) { unsigned long ret; asm volatile ("ld.global.ca.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldca(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.ca.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldca(const long *ptr) { unsigned long ret; asm volatile ("ld.global.ca.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldca(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.ca.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldca(const char *ptr) { unsigned int ret; asm volatile ("ld.global.ca.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldca(const signed char *ptr) { unsigned int ret; asm volatile ("ld.global.ca.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldca(const short *ptr) { unsigned short ret; asm volatile ("ld.global.ca.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldca(const int *ptr) { unsigned int ret; asm volatile ("ld.global.ca.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldca(const long long *ptr) { unsigned long long ret; asm volatile ("ld.global.ca.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldca(const char2 *ptr) { char2 ret; int2 tmp; asm volatile ("ld.global.ca.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldca(const char4 *ptr) { char4 ret; int4 tmp; asm volatile ("ld.global.ca.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldca(const short2 *ptr) { short2 ret; asm volatile ("ld.global.ca.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldca(const short4 *ptr) { short4 ret; asm volatile ("ld.global.ca.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldca(const int2 *ptr) { int2 ret; asm volatile ("ld.global.ca.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldca(const int4 *ptr) { int4 ret; asm volatile ("ld.global.ca.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldca(const longlong2 *ptr) { longlong2 ret; asm volatile ("ld.global.ca.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldca(const unsigned char *ptr) { unsigned int ret; asm volatile ("ld.global.ca.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr));  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldca(const unsigned short *ptr) { unsigned short ret; asm volatile ("ld.global.ca.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldca(const unsigned int *ptr) { unsigned int ret; asm volatile ("ld.global.ca.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldca(const unsigned long long *ptr) { unsigned long long ret; asm volatile ("ld.global.ca.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldca(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm volatile ("ld.global.ca.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldca(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm volatile ("ld.global.ca.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldca(const ushort2 *ptr) { ushort2 ret; asm volatile ("ld.global.ca.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldca(const ushort4 *ptr) { ushort4 ret; asm volatile ("ld.global.ca.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldca(const uint2 *ptr) { uint2 ret; asm volatile ("ld.global.ca.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldca(const uint4 *ptr) { uint4 ret; asm volatile ("ld.global.ca.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldca(const ulonglong2 *ptr) { ulonglong2 ret; asm volatile ("ld.global.ca.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldca(const float *ptr) { float ret; asm volatile ("ld.global.ca.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldca(const double *ptr) { double ret; asm volatile ("ld.global.ca.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldca(const float2 *ptr) { float2 ret; asm volatile ("ld.global.ca.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldca(const float4 *ptr) { float4 ret; asm volatile ("ld.global.ca.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldca(const double2 *ptr) { double2 ret; asm volatile ("ld.global.ca.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+/******************************************************************************
+ *                                   __ldcs                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldcs(const long *ptr) { unsigned long ret; asm volatile ("ld.global.cs.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcs(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.cs.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldcs(const long *ptr) { unsigned long ret; asm volatile ("ld.global.cs.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcs(const unsigned long *ptr) { unsigned long ret; asm volatile ("ld.global.cs.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldcs(const char *ptr) { unsigned int ret; asm volatile ("ld.global.cs.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldcs(const signed char *ptr) { unsigned int ret; asm volatile ("ld.global.cs.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldcs(const short *ptr) { unsigned short ret; asm volatile ("ld.global.cs.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldcs(const int *ptr) { unsigned int ret; asm volatile ("ld.global.cs.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldcs(const long long *ptr) { unsigned long long ret; asm volatile ("ld.global.cs.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldcs(const char2 *ptr) { char2 ret; int2 tmp; asm volatile ("ld.global.cs.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldcs(const char4 *ptr) { char4 ret; int4 tmp; asm volatile ("ld.global.cs.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldcs(const short2 *ptr) { short2 ret; asm volatile ("ld.global.cs.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldcs(const short4 *ptr) { short4 ret; asm volatile ("ld.global.cs.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldcs(const int2 *ptr) { int2 ret; asm volatile ("ld.global.cs.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldcs(const int4 *ptr) { int4 ret; asm volatile ("ld.global.cs.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcs(const longlong2 *ptr) { longlong2 ret; asm volatile ("ld.global.cs.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcs(const unsigned char *ptr) { unsigned int ret; asm volatile ("ld.global.cs.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr));  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcs(const unsigned short *ptr) { unsigned short ret; asm volatile ("ld.global.cs.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcs(const unsigned int *ptr) { unsigned int ret; asm volatile ("ld.global.cs.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcs(const unsigned long long *ptr) { unsigned long long ret; asm volatile ("ld.global.cs.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcs(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm volatile ("ld.global.cs.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcs(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm volatile ("ld.global.cs.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr)); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcs(const ushort2 *ptr) { ushort2 ret; asm volatile ("ld.global.cs.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcs(const ushort4 *ptr) { ushort4 ret; asm volatile ("ld.global.cs.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldcs(const uint2 *ptr) { uint2 ret; asm volatile ("ld.global.cs.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldcs(const uint4 *ptr) { uint4 ret; asm volatile ("ld.global.cs.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcs(const ulonglong2 *ptr) { ulonglong2 ret; asm volatile ("ld.global.cs.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldcs(const float *ptr) { float ret; asm volatile ("ld.global.cs.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldcs(const double *ptr) { double ret; asm volatile ("ld.global.cs.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldcs(const float2 *ptr) { float2 ret; asm volatile ("ld.global.cs.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldcs(const float4 *ptr) { float4 ret; asm volatile ("ld.global.cs.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr)); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldcs(const double2 *ptr) { double2 ret; asm volatile ("ld.global.cs.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr)); return ret; }
+
+/******************************************************************************
+ *                                   __ldlu                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldlu(const long *ptr) { unsigned long ret; asm ("ld.global.lu.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldlu(const unsigned long *ptr) { unsigned long ret; asm ("ld.global.lu.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldlu(const long *ptr) { unsigned long ret; asm ("ld.global.lu.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldlu(const unsigned long *ptr) { unsigned long ret; asm ("ld.global.lu.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldlu(const char *ptr) { unsigned int ret; asm ("ld.global.lu.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldlu(const signed char *ptr) { unsigned int ret; asm ("ld.global.lu.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldlu(const short *ptr) { unsigned short ret; asm ("ld.global.lu.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr) : "memory"); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldlu(const int *ptr) { unsigned int ret; asm ("ld.global.lu.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldlu(const long long *ptr) { unsigned long long ret; asm ("ld.global.lu.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldlu(const char2 *ptr) { char2 ret; int2 tmp; asm ("ld.global.lu.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr) : "memory"); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldlu(const char4 *ptr) { char4 ret; int4 tmp; asm ("ld.global.lu.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr) : "memory"); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldlu(const short2 *ptr) { short2 ret; asm ("ld.global.lu.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldlu(const short4 *ptr) { short4 ret; asm ("ld.global.lu.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldlu(const int2 *ptr) { int2 ret; asm ("ld.global.lu.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldlu(const int4 *ptr) { int4 ret; asm ("ld.global.lu.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldlu(const longlong2 *ptr) { longlong2 ret; asm ("ld.global.lu.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldlu(const unsigned char *ptr) { unsigned int ret; asm ("ld.global.lu.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory");  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldlu(const unsigned short *ptr) { unsigned short ret; asm ("ld.global.lu.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldlu(const unsigned int *ptr) { unsigned int ret; asm ("ld.global.lu.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldlu(const unsigned long long *ptr) { unsigned long long ret; asm ("ld.global.lu.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldlu(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm ("ld.global.lu.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr) : "memory"); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldlu(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm ("ld.global.lu.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr) : "memory"); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldlu(const ushort2 *ptr) { ushort2 ret; asm ("ld.global.lu.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldlu(const ushort4 *ptr) { ushort4 ret; asm ("ld.global.lu.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldlu(const uint2 *ptr) { uint2 ret; asm ("ld.global.lu.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldlu(const uint4 *ptr) { uint4 ret; asm ("ld.global.lu.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldlu(const ulonglong2 *ptr) { ulonglong2 ret; asm ("ld.global.lu.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldlu(const float *ptr) { float ret; asm ("ld.global.lu.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldlu(const double *ptr) { double ret; asm ("ld.global.lu.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldlu(const float2 *ptr) { float2 ret; asm ("ld.global.lu.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldlu(const float4 *ptr) { float4 ret; asm ("ld.global.lu.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldlu(const double2 *ptr) { double2 ret; asm ("ld.global.lu.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+/******************************************************************************
+ *                                   __ldcv                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ long __ldcv(const long *ptr) { unsigned long ret; asm ("ld.global.cv.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcv(const unsigned long *ptr) { unsigned long ret; asm ("ld.global.cv.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ long __ldcv(const long *ptr) { unsigned long ret; asm ("ld.global.cv.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (long)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long __ldcv(const unsigned long *ptr) { unsigned long ret; asm ("ld.global.cv.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ char __ldcv(const char *ptr) { unsigned int ret; asm ("ld.global.cv.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (char)ret; }
+__SM_32_INTRINSICS_DECL__ signed char __ldcv(const signed char *ptr) { unsigned int ret; asm ("ld.global.cv.s8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (signed char)ret; }
+__SM_32_INTRINSICS_DECL__ short __ldcv(const short *ptr) { unsigned short ret; asm ("ld.global.cv.s16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr) : "memory"); return (short)ret; }
+__SM_32_INTRINSICS_DECL__ int __ldcv(const int *ptr) { unsigned int ret; asm ("ld.global.cv.s32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return (int)ret; }
+__SM_32_INTRINSICS_DECL__ long long __ldcv(const long long *ptr) { unsigned long long ret; asm ("ld.global.cv.s64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return (long long)ret; }
+__SM_32_INTRINSICS_DECL__ char2 __ldcv(const char2 *ptr) { char2 ret; int2 tmp; asm ("ld.global.cv.v2.s8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr) : "memory"); ret.x = (char)tmp.x; ret.y = (char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ char4 __ldcv(const char4 *ptr) { char4 ret; int4 tmp; asm ("ld.global.cv.v4.s8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr) : "memory"); ret.x = (char)tmp.x; ret.y = (char)tmp.y; ret.z = (char)tmp.z; ret.w = (char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ short2 __ldcv(const short2 *ptr) { short2 ret; asm ("ld.global.cv.v2.s16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ short4 __ldcv(const short4 *ptr) { short4 ret; asm ("ld.global.cv.v4.s16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ int2 __ldcv(const int2 *ptr) { int2 ret; asm ("ld.global.cv.v2.s32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ int4 __ldcv(const int4 *ptr) { int4 ret; asm ("ld.global.cv.v4.s32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ longlong2 __ldcv(const longlong2 *ptr) { longlong2 ret; asm ("ld.global.cv.v2.s64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+__SM_32_INTRINSICS_DECL__ unsigned char __ldcv(const unsigned char *ptr) { unsigned int ret; asm ("ld.global.cv.u8 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory");  return (unsigned char)ret; }
+__SM_32_INTRINSICS_DECL__ unsigned short __ldcv(const unsigned short *ptr) { unsigned short ret; asm ("ld.global.cv.u16 %0, [%1];"  : "=h"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned int __ldcv(const unsigned int *ptr) { unsigned int ret; asm ("ld.global.cv.u32 %0, [%1];"  : "=r"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ unsigned long long __ldcv(const unsigned long long *ptr) { unsigned long long ret; asm ("ld.global.cv.u64 %0, [%1];"  : "=l"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uchar2 __ldcv(const uchar2 *ptr) { uchar2 ret; uint2 tmp; asm ("ld.global.cv.v2.u8 {%0,%1}, [%2];"  : "=r"(tmp.x), "=r"(tmp.y) : __LDG_PTR (ptr) : "memory"); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; return ret; }
+__SM_32_INTRINSICS_DECL__ uchar4 __ldcv(const uchar4 *ptr) { uchar4 ret; uint4 tmp; asm ("ld.global.cv.v4.u8 {%0,%1,%2,%3}, [%4];"  : "=r"(tmp.x), "=r"(tmp.y), "=r"(tmp.z), "=r"(tmp.w) : __LDG_PTR (ptr) : "memory"); ret.x = (unsigned char)tmp.x; ret.y = (unsigned char)tmp.y; ret.z = (unsigned char)tmp.z; ret.w = (unsigned char)tmp.w; return ret; }
+__SM_32_INTRINSICS_DECL__ ushort2 __ldcv(const ushort2 *ptr) { ushort2 ret; asm ("ld.global.cv.v2.u16 {%0,%1}, [%2];"  : "=h"(ret.x), "=h"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ ushort4 __ldcv(const ushort4 *ptr) { ushort4 ret; asm ("ld.global.cv.v4.u16 {%0,%1,%2,%3}, [%4];"  : "=h"(ret.x), "=h"(ret.y), "=h"(ret.z), "=h"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uint2 __ldcv(const uint2 *ptr) { uint2 ret; asm ("ld.global.cv.v2.u32 {%0,%1}, [%2];"  : "=r"(ret.x), "=r"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ uint4 __ldcv(const uint4 *ptr) { uint4 ret; asm ("ld.global.cv.v4.u32 {%0,%1,%2,%3}, [%4];"  : "=r"(ret.x), "=r"(ret.y), "=r"(ret.z), "=r"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ ulonglong2 __ldcv(const ulonglong2 *ptr) { ulonglong2 ret; asm ("ld.global.cv.v2.u64 {%0,%1}, [%2];"  : "=l"(ret.x), "=l"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+__SM_32_INTRINSICS_DECL__ float __ldcv(const float *ptr) { float ret; asm ("ld.global.cv.f32 %0, [%1];"  : "=f"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ double __ldcv(const double *ptr) { double ret; asm ("ld.global.cv.f64 %0, [%1];"  : "=d"(ret) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ float2 __ldcv(const float2 *ptr) { float2 ret; asm ("ld.global.cv.v2.f32 {%0,%1}, [%2];"  : "=f"(ret.x), "=f"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ float4 __ldcv(const float4 *ptr) { float4 ret; asm ("ld.global.cv.v4.f32 {%0,%1,%2,%3}, [%4];"  : "=f"(ret.x), "=f"(ret.y), "=f"(ret.z), "=f"(ret.w) : __LDG_PTR (ptr) : "memory"); return ret; }
+__SM_32_INTRINSICS_DECL__ double2 __ldcv(const double2 *ptr) { double2 ret; asm ("ld.global.cv.v2.f64 {%0,%1}, [%2];"  : "=d"(ret.x), "=d"(ret.y) : __LDG_PTR (ptr) : "memory"); return ret; }
+
+/******************************************************************************
+ *                                   __stwb                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ void __stwb(long *ptr, long value) { asm ("st.global.wb.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned long *ptr, unsigned long value) { asm ("st.global.wb.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ void __stwb(long *ptr, long value) { asm ("st.global.wb.s32 [%0], %1;"  :: __LDG_PTR (ptr),  "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned long *ptr, unsigned long value) { asm ("st.global.wb.u32 [%0], %1;" :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ void __stwb(char *ptr, char value) { asm ("st.global.wb.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(signed char *ptr, signed char value) { asm ("st.global.wb.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(short *ptr, short value) { asm ("st.global.wb.s16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(int *ptr, int value) { asm ("st.global.wb.s32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(long long *ptr, long long value) { asm ("st.global.wb.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(char2 *ptr, char2 value) { const int x = value.x, y = value.y; asm ("st.global.wb.v2.s8 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(char4 *ptr, char4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.wb.v4.s8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(short2 *ptr, short2 value) { asm ("st.global.wb.v2.s16 [%0], {%1,%2};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(short4 *ptr, short4 value) { asm ("st.global.wb.v4.s16 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(int2 *ptr, int2 value) { asm ("st.global.wb.v2.s32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(int4 *ptr, int4 value) { asm ("st.global.wb.v4.s32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(longlong2 *ptr, longlong2 value) { asm ("st.global.wb.v2.s64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned char *ptr, unsigned char value) { asm ("st.global.wb.u8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory");  }
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned short *ptr, unsigned short value) { asm ("st.global.wb.u16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned int *ptr, unsigned int value) { asm ("st.global.wb.u32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(unsigned long long *ptr, unsigned long long value) { asm ("st.global.wb.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(uchar2 *ptr, uchar2 value) { const int x = value.x, y = value.y; asm ("st.global.wb.v2.u8 [%0], {%1,%2};"  :: __LDG_PTR (ptr),  "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(uchar4 *ptr, uchar4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.wb.v4.u8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(ushort2 *ptr, ushort2 value) { asm ("st.global.wb.v2.u16 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(ushort4 *ptr, ushort4 value) { asm ("st.global.wb.v4.u16 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(uint2 *ptr, uint2 value) { asm ("st.global.wb.v2.u32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(uint4 *ptr, uint4 value) { asm ("st.global.wb.v4.u32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(ulonglong2 *ptr, ulonglong2 value) { asm ("st.global.wb.v2.u64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stwb(float *ptr, float value) { asm ("st.global.wb.f32 [%0], %1;"  :: __LDG_PTR (ptr), "f"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(double *ptr, double value) { asm ("st.global.wb.f64 [%0], %1;"  :: __LDG_PTR (ptr), "d"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(float2 *ptr, float2 value) { asm ("st.global.wb.v2.f32 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(float4 *ptr, float4 value) { asm ("st.global.wb.v4.f32 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y), "f"(value.z), "f"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwb(double2 *ptr, double2 value) { asm ("st.global.wb.v2.f64 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "d"(value.x), "d"(value.y) : "memory"); }
+
+/******************************************************************************
+ *                                   __stcg                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ void __stcg(long *ptr, long value) { asm ("st.global.cg.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned long *ptr, unsigned long value) { asm ("st.global.cg.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ void __stcg(long *ptr, long value) { asm ("st.global.cg.s32 [%0], %1;"  :: __LDG_PTR (ptr),  "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned long *ptr, unsigned long value) { asm ("st.global.cg.u32 [%0], %1;" :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ void __stcg(char *ptr, char value) { asm ("st.global.cg.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(signed char *ptr, signed char value) { asm ("st.global.cg.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(short *ptr, short value) { asm ("st.global.cg.s16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(int *ptr, int value) { asm ("st.global.cg.s32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(long long *ptr, long long value) { asm ("st.global.cg.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(char2 *ptr, char2 value) { const int x = value.x, y = value.y; asm ("st.global.cg.v2.s8 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(char4 *ptr, char4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.cg.v4.s8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(short2 *ptr, short2 value) { asm ("st.global.cg.v2.s16 [%0], {%1,%2};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(short4 *ptr, short4 value) { asm ("st.global.cg.v4.s16 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(int2 *ptr, int2 value) { asm ("st.global.cg.v2.s32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(int4 *ptr, int4 value) { asm ("st.global.cg.v4.s32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(longlong2 *ptr, longlong2 value) { asm ("st.global.cg.v2.s64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned char *ptr, unsigned char value) { asm ("st.global.cg.u8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory");  }
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned short *ptr, unsigned short value) { asm ("st.global.cg.u16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned int *ptr, unsigned int value) { asm ("st.global.cg.u32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(unsigned long long *ptr, unsigned long long value) { asm ("st.global.cg.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(uchar2 *ptr, uchar2 value) { const int x = value.x, y = value.y; asm ("st.global.cg.v2.u8 [%0], {%1,%2};"  :: __LDG_PTR (ptr),  "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(uchar4 *ptr, uchar4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.cg.v4.u8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(ushort2 *ptr, ushort2 value) { asm ("st.global.cg.v2.u16 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(ushort4 *ptr, ushort4 value) { asm ("st.global.cg.v4.u16 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(uint2 *ptr, uint2 value) { asm ("st.global.cg.v2.u32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(uint4 *ptr, uint4 value) { asm ("st.global.cg.v4.u32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(ulonglong2 *ptr, ulonglong2 value) { asm ("st.global.cg.v2.u64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stcg(float *ptr, float value) { asm ("st.global.cg.f32 [%0], %1;"  :: __LDG_PTR (ptr), "f"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(double *ptr, double value) { asm ("st.global.cg.f64 [%0], %1;"  :: __LDG_PTR (ptr), "d"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(float2 *ptr, float2 value) { asm ("st.global.cg.v2.f32 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(float4 *ptr, float4 value) { asm ("st.global.cg.v4.f32 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y), "f"(value.z), "f"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcg(double2 *ptr, double2 value) { asm ("st.global.cg.v2.f64 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "d"(value.x), "d"(value.y) : "memory"); }
+
+/******************************************************************************
+ *                                   __stcs                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ void __stcs(long *ptr, long value) { asm ("st.global.cs.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned long *ptr, unsigned long value) { asm ("st.global.cs.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ void __stcs(long *ptr, long value) { asm ("st.global.cs.s32 [%0], %1;"  :: __LDG_PTR (ptr),  "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned long *ptr, unsigned long value) { asm ("st.global.cs.u32 [%0], %1;" :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ void __stcs(char *ptr, char value) { asm ("st.global.cs.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(signed char *ptr, signed char value) { asm ("st.global.cs.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(short *ptr, short value) { asm ("st.global.cs.s16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(int *ptr, int value) { asm ("st.global.cs.s32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(long long *ptr, long long value) { asm ("st.global.cs.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(char2 *ptr, char2 value) { const int x = value.x, y = value.y; asm ("st.global.cs.v2.s8 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(char4 *ptr, char4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.cs.v4.s8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(short2 *ptr, short2 value) { asm ("st.global.cs.v2.s16 [%0], {%1,%2};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(short4 *ptr, short4 value) { asm ("st.global.cs.v4.s16 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(int2 *ptr, int2 value) { asm ("st.global.cs.v2.s32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(int4 *ptr, int4 value) { asm ("st.global.cs.v4.s32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(longlong2 *ptr, longlong2 value) { asm ("st.global.cs.v2.s64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned char *ptr, unsigned char value) { asm ("st.global.cs.u8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory");  }
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned short *ptr, unsigned short value) { asm ("st.global.cs.u16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned int *ptr, unsigned int value) { asm ("st.global.cs.u32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(unsigned long long *ptr, unsigned long long value) { asm ("st.global.cs.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(uchar2 *ptr, uchar2 value) { const int x = value.x, y = value.y; asm ("st.global.cs.v2.u8 [%0], {%1,%2};"  :: __LDG_PTR (ptr),  "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(uchar4 *ptr, uchar4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.cs.v4.u8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(ushort2 *ptr, ushort2 value) { asm ("st.global.cs.v2.u16 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(ushort4 *ptr, ushort4 value) { asm ("st.global.cs.v4.u16 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(uint2 *ptr, uint2 value) { asm ("st.global.cs.v2.u32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(uint4 *ptr, uint4 value) { asm ("st.global.cs.v4.u32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(ulonglong2 *ptr, ulonglong2 value) { asm ("st.global.cs.v2.u64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stcs(float *ptr, float value) { asm ("st.global.cs.f32 [%0], %1;"  :: __LDG_PTR (ptr), "f"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(double *ptr, double value) { asm ("st.global.cs.f64 [%0], %1;"  :: __LDG_PTR (ptr), "d"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(float2 *ptr, float2 value) { asm ("st.global.cs.v2.f32 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(float4 *ptr, float4 value) { asm ("st.global.cs.v4.f32 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y), "f"(value.z), "f"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stcs(double2 *ptr, double2 value) { asm ("st.global.cs.v2.f64 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "d"(value.x), "d"(value.y) : "memory"); }
+
+/******************************************************************************
+ *                                   __stwt                                    *
+ ******************************************************************************/
+
+// Size of long is architecture and OS specific.
+#if defined(__LP64__) // 64 bits
+__SM_32_INTRINSICS_DECL__ void __stwt(long *ptr, long value) { asm ("st.global.wt.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned long *ptr, unsigned long value) { asm ("st.global.wt.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+#else // 32 bits
+__SM_32_INTRINSICS_DECL__ void __stwt(long *ptr, long value) { asm ("st.global.wt.s32 [%0], %1;"  :: __LDG_PTR (ptr),  "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned long *ptr, unsigned long value) { asm ("st.global.wt.u32 [%0], %1;" :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+#endif
+
+
+__SM_32_INTRINSICS_DECL__ void __stwt(char *ptr, char value) { asm ("st.global.wt.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(signed char *ptr, signed char value) { asm ("st.global.wt.s8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(short *ptr, short value) { asm ("st.global.wt.s16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(int *ptr, int value) { asm ("st.global.wt.s32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(long long *ptr, long long value) { asm ("st.global.wt.s64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(char2 *ptr, char2 value) { const int x = value.x, y = value.y; asm ("st.global.wt.v2.s8 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(char4 *ptr, char4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.wt.v4.s8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(short2 *ptr, short2 value) { asm ("st.global.wt.v2.s16 [%0], {%1,%2};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(short4 *ptr, short4 value) { asm ("st.global.wt.v4.s16 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(int2 *ptr, int2 value) { asm ("st.global.wt.v2.s32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(int4 *ptr, int4 value) { asm ("st.global.wt.v4.s32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(longlong2 *ptr, longlong2 value) { asm ("st.global.wt.v2.s64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned char *ptr, unsigned char value) { asm ("st.global.wt.u8 [%0], %1;"  :: __LDG_PTR (ptr), "r"((int)value) : "memory");  }
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned short *ptr, unsigned short value) { asm ("st.global.wt.u16 [%0], %1;"  :: __LDG_PTR (ptr), "h"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned int *ptr, unsigned int value) { asm ("st.global.wt.u32 [%0], %1;"  :: __LDG_PTR (ptr), "r"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(unsigned long long *ptr, unsigned long long value) { asm ("st.global.wt.u64 [%0], %1;"  :: __LDG_PTR (ptr), "l"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(uchar2 *ptr, uchar2 value) { const int x = value.x, y = value.y; asm ("st.global.wt.v2.u8 [%0], {%1,%2};"  :: __LDG_PTR (ptr),  "r"(x), "r"(y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(uchar4 *ptr, uchar4 value) { const int x = value.x, y = value.y, z = value.z, w = value.w; asm ("st.global.wt.v4.u8 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(x), "r"(y), "r"(z), "r"(w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(ushort2 *ptr, ushort2 value) { asm ("st.global.wt.v2.u16 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(ushort4 *ptr, ushort4 value) { asm ("st.global.wt.v4.u16 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "h"(value.x), "h"(value.y), "h"(value.z), "h"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(uint2 *ptr, uint2 value) { asm ("st.global.wt.v2.u32 [%0], {%1,%2};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(uint4 *ptr, uint4 value) { asm ("st.global.wt.v4.u32 [%0], {%1,%2,%3,%4};" :: __LDG_PTR (ptr), "r"(value.x), "r"(value.y), "r"(value.z), "r"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(ulonglong2 *ptr, ulonglong2 value) { asm ("st.global.wt.v2.u64 [%0], {%1,%2};" :: __LDG_PTR (ptr), "l"(value.x), "l"(value.y) : "memory"); }
+
+__SM_32_INTRINSICS_DECL__ void __stwt(float *ptr, float value) { asm ("st.global.wt.f32 [%0], %1;"  :: __LDG_PTR (ptr), "f"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(double *ptr, double value) { asm ("st.global.wt.f64 [%0], %1;"  :: __LDG_PTR (ptr), "d"(value) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(float2 *ptr, float2 value) { asm ("st.global.wt.v2.f32 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(float4 *ptr, float4 value) { asm ("st.global.wt.v4.f32 [%0], {%1,%2,%3,%4};"  :: __LDG_PTR (ptr), "f"(value.x), "f"(value.y), "f"(value.z), "f"(value.w) : "memory"); }
+__SM_32_INTRINSICS_DECL__ void __stwt(double2 *ptr, double2 value) { asm ("st.global.wt.v2.f64 [%0], {%1,%2};"  :: __LDG_PTR (ptr), "d"(value.x), "d"(value.y) : "memory"); }
+
+#undef __LDG_PTR
+
+
+// SHF is the "funnel shift" operation - an accelerated left/right shift with carry
+// operating on 64-bit quantities, which are concatenations of two 32-bit registers.
+
+// This shifts [b:a] left by "shift" bits, returning the most significant bits of the result.
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_l(unsigned int lo, unsigned int hi, unsigned int shift)
+{
+    unsigned int ret;
+    asm volatile ("shf.l.wrap.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(lo), "r"(hi), "r"(shift));
+    return ret;
+}
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_lc(unsigned int lo, unsigned int hi, unsigned int shift)
+{
+    unsigned int ret;
+    asm volatile ("shf.l.clamp.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(lo), "r"(hi), "r"(shift));
+    return ret;
+}
+
+// This shifts [b:a] right by "shift" bits, returning the least significant bits of the result.
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_r(unsigned int lo, unsigned int hi, unsigned int shift)
+{
+    unsigned int ret;
+    asm volatile ("shf.r.wrap.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(lo), "r"(hi), "r"(shift));
+    return ret;
+}
+__SM_32_INTRINSICS_DECL__ unsigned int __funnelshift_rc(unsigned int lo, unsigned int hi, unsigned int shift)
+{
+    unsigned int ret;
+    asm volatile ("shf.r.clamp.b32 %0, %1, %2, %3;" : "=r"(ret) : "r"(lo), "r"(hi), "r"(shift));
+    return ret;
+}
+
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 320 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_32_INTRINSICS_DECL__
+
+#endif /* !__SM_32_INTRINSICS_HPP__ */
+
diff --git a/ext/cudart/include/sm_35_atomic_functions.h b/ext/cudart/include/sm_35_atomic_functions.h
new file mode 100644
index 00000000..c8961079
--- /dev/null
+++ b/ext/cudart/include/sm_35_atomic_functions.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 35.235 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.35.235 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_35_ATOMIC_FUNCTIONS_H__)
+#define __SM_35_ATOMIC_FUNCTIONS_H__
+
+/*******************************************************************************
+* All sm_35 atomics are supported by sm_32 so simply include its header file   *
+*******************************************************************************/
+#include "sm_32_atomic_functions.h"
+
+#endif /* !__SM_35_ATOMIC_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/sm_35_intrinsics.h b/ext/cudart/include/sm_35_intrinsics.h
new file mode 100644
index 00000000..da1e823a
--- /dev/null
+++ b/ext/cudart/include/sm_35_intrinsics.h
@@ -0,0 +1,116 @@
+/*
+
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+
+ *
+
+ * NOTICE TO LICENSEE:
+
+ *
+
+ * This source code and/or documentation ("Licensed Deliverables") are
+
+ * subject to NVIDIA intellectual property rights under U.S. and
+
+ * international Copyright laws.
+
+ *
+
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+
+ * conditions of a form of NVIDIA software license agreement by and
+
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+
+ * the contrary in the License Agreement, reproduction or disclosure
+
+ * of the Licensed Deliverables to any third party without the express
+
+ * written consent of NVIDIA is prohibited.
+
+ *
+
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+
+ * OF THESE LICENSED DELIVERABLES.
+
+ *
+
+ * U.S. Government End Users.  These Licensed Deliverables are a
+
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+
+ * 1995), consisting of "commercial computer software" and "commercial
+
+ * computer software documentation" as such terms are used in 48
+
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+
+ * U.S. Government End Users acquire the Licensed Deliverables with
+
+ * only those rights set forth herein.
+
+ *
+
+ * Any use of the Licensed Deliverables in individual and commercial
+
+ * software must include, in the user documentation and internal
+
+ * comments to the code, the above Disclaimer and U.S. Government End
+
+ * Users Notice.
+
+ */
+
+
+
+#if !defined(__SM_35_INTRINSICS_H__)
+
+#define __SM_35_INTRINSICS_H__
+
+
+
+/**********************************************************************************
+
+* All sm_35 intrinsics are supported by sm_32 so simply include its header file   *
+
+**********************************************************************************/
+
+#include "sm_32_intrinsics.h"
+
+
+
+#endif /* !__SM_35_INTRINSICS_H__ */
+
diff --git a/ext/cudart/include/sm_60_atomic_functions.h b/ext/cudart/include/sm_60_atomic_functions.h
new file mode 100644
index 00000000..4eae20ab
--- /dev/null
+++ b/ext/cudart/include/sm_60_atomic_functions.h
@@ -0,0 +1,539 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_60_ATOMIC_FUNCTIONS_H__)
+#define __SM_60_ATOMIC_FUNCTIONS_H__
+
+
+#if defined(__CUDACC_RTC__)
+#define __SM_60_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_60_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+
+
+#ifdef __CUDA_ARCH__ 
+extern "C"
+{
+extern __device__ __device_builtin__ double __dAtomicAdd(double *address, double val);
+
+extern __device__ __device_builtin__
+int __iAtomicAdd_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicAdd_system(int *address, int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicAdd_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicAdd_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicAdd_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicAdd_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+float __fAtomicAdd_block(float *address, float val);
+
+extern __device__ __device_builtin__
+float __fAtomicAdd_system(float *address, float val);
+
+extern __device__ __device_builtin__
+double __dAtomicAdd_block(double *address, double val);
+
+extern __device__ __device_builtin__
+double __dAtomicAdd_system(double *address, double val);
+
+extern __device__ __device_builtin__
+int __iAtomicExch_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicExch_system(int *address, int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicExch_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicExch_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicExch_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicExch_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+float __fAtomicExch_block(float *address, float val);
+
+extern __device__ __device_builtin__
+float __fAtomicExch_system(float *address, float val);
+
+extern __device__ __device_builtin__
+int __iAtomicMin_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicMin_system(int *address, int val);
+
+extern __device__ __device_builtin__
+long long __illAtomicMin_block(long long *address, long long val);
+
+extern __device__ __device_builtin__
+long long __illAtomicMin_system(long long *address, long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicMin_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicMin_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicMin_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicMin_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+int __iAtomicMax_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicMax_system(int *address, int val);
+
+extern __device__ __device_builtin__
+long long __illAtomicMax_block(long long *address, long long val);
+
+extern __device__ __device_builtin__
+long long __illAtomicMax_system(long long *address, long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicMax_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicMax_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicMax_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicMax_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicInc_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicInc_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicDec_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicDec_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+int __iAtomicCAS_block(int *address, int compare, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicCAS_system(int *address, int compare, int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicCAS_block(unsigned int *address, unsigned int compare,
+                                unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicCAS_system(unsigned int *address, unsigned int compare,
+                                 unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicCAS_block(unsigned long long int *address,
+                                        unsigned long long int compare,
+                                        unsigned long long int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicCAS_system(unsigned long long int *address,
+                                         unsigned long long int compare,
+                                         unsigned long long int val);
+
+extern __device__ __device_builtin__
+int __iAtomicAnd_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicAnd_system(int *address, int val);
+
+extern __device__ __device_builtin__
+long long __llAtomicAnd_block(long long *address, long long val);
+
+extern __device__ __device_builtin__
+long long __llAtomicAnd_system(long long *address, long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicAnd_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicAnd_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicAnd_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicAnd_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+int __iAtomicOr_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicOr_system(int *address, int val);
+
+extern __device__ __device_builtin__
+long long __llAtomicOr_block(long long *address, long long val);
+
+extern __device__ __device_builtin__
+long long __llAtomicOr_system(long long *address, long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicOr_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicOr_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicOr_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicOr_system(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+int __iAtomicXor_block(int *address, int val);
+
+extern __device__ __device_builtin__
+int __iAtomicXor_system(int *address, int val);
+
+extern __device__ __device_builtin__
+long long __llAtomicXor_block(long long *address, long long val);
+
+extern __device__ __device_builtin__
+long long __llAtomicXor_system(long long *address, long long val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicXor_block(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned int __uAtomicXor_system(unsigned int *address, unsigned int val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicXor_block(unsigned long long *address, unsigned long long val);
+
+extern __device__ __device_builtin__
+unsigned long long __ullAtomicXor_system(unsigned long long *address, unsigned long long val);
+}
+#endif /* __CUDA_ARCH__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__ double atomicAdd(double *address, double val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAdd_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAdd_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAdd_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAdd_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAdd_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAdd_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicAdd_block(float *address, float val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicAdd_system(float *address, float val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+double atomicAdd_block(double *address, double val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+double atomicAdd_system(double *address, double val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicSub_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicSub_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicSub_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicSub_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicExch_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicExch_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicExch_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicExch_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicExch_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicExch_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicExch_block(float *address, float val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicExch_system(float *address, float val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMin_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMin_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMin_block(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMin_system(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMin_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMin_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMin_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMin_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMax_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMax_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMax_block(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMax_system(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMax_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMax_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMax_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMax_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicInc_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicInc_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicDec_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicDec_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicCAS_block(int *address, int compare, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicCAS_system(int *address, int compare, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicCAS_block(unsigned int *address, unsigned int compare,
+                             unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicCAS_system(unsigned int *address, unsigned int compare,
+                              unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long int atomicCAS_block(unsigned long long int *address,
+                                       unsigned long long int compare,
+                                       unsigned long long int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long int atomicCAS_system(unsigned long long int *address,
+                                        unsigned long long int compare,
+                                        unsigned long long int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAnd_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAnd_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicAnd_block(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicAnd_system(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAnd_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAnd_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAnd_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAnd_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicOr_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicOr_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicOr_block(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicOr_system(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicOr_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicOr_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicOr_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicOr_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicXor_block(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicXor_system(int *address, int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicXor_block(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicXor_system(long long *address, long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicXor_block(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicXor_system(unsigned int *address, unsigned int val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicXor_block(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicXor_system(unsigned long long *address, unsigned long long val) __DEF_IF_HOST
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 600 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_60_ATOMIC_FUNCTIONS_DECL__
+#undef __DEF_IF_HOST
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_60_atomic_functions.hpp"
+#endif /* !__CUDACC_RTC__  && defined(__CUDA_ARCH__)  */
+
+#endif /* !__SM_60_ATOMIC_FUNCTIONS_H__ */
+
diff --git a/ext/cudart/include/sm_60_atomic_functions.hpp b/ext/cudart/include/sm_60_atomic_functions.hpp
new file mode 100644
index 00000000..b4d52270
--- /dev/null
+++ b/ext/cudart/include/sm_60_atomic_functions.hpp
@@ -0,0 +1,527 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_60_ATOMIC_FUNCTIONS_HPP__)
+#define __SM_60_ATOMIC_FUNCTIONS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_60_ATOMIC_FUNCTIONS_DECL__ __device__
+#else /* __CUDACC_RTC__ */
+#define __SM_60_ATOMIC_FUNCTIONS_DECL__ static __inline__ __device__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__ double atomicAdd(double *address, double val)
+{
+  return __dAtomicAdd(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAdd_block(int *address, int val)
+{
+  return __iAtomicAdd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAdd_system(int *address, int val)
+{
+  return __iAtomicAdd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAdd_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAdd_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAdd_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicAdd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAdd_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicAdd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicAdd_block(float *address, float val)
+{
+  return __fAtomicAdd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicAdd_system(float *address, float val)
+{
+  return __fAtomicAdd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+double atomicAdd_block(double *address, double val)
+{
+  return __dAtomicAdd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+double atomicAdd_system(double *address, double val)
+{
+  return __dAtomicAdd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicSub_block(int *address, int val)
+{
+  return __iAtomicAdd_block(address, (unsigned int)-(int)val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicSub_system(int *address, int val)
+{
+  return __iAtomicAdd_system(address, (unsigned int)-(int)val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicSub_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd_block(address, (unsigned int)-(int)val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicSub_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAdd_system(address, (unsigned int)-(int)val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicExch_block(int *address, int val)
+{
+  return __iAtomicExch_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicExch_system(int *address, int val)
+{
+  return __iAtomicExch_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicExch_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicExch_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicExch_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicExch_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicExch_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicExch_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicExch_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicExch_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicExch_block(float *address, float val)
+{
+  return __fAtomicExch_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+float atomicExch_system(float *address, float val)
+{
+  return __fAtomicExch_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMin_block(int *address, int val)
+{
+  return __iAtomicMin_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMin_system(int *address, int val)
+{
+  return __iAtomicMin_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMin_block(long long *address, long long val)
+{
+  return __illAtomicMin_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMin_system(long long *address, long long val)
+{
+  return __illAtomicMin_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMin_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMin_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMin_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMin_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMin_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicMin_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMin_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicMin_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMax_block(int *address, int val)
+{
+  return __iAtomicMax_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicMax_system(int *address, int val)
+{
+  return __iAtomicMax_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMax_block(long long *address, long long val)
+{
+  return __illAtomicMax_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicMax_system(long long *address, long long val)
+{
+  return __illAtomicMax_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMax_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMax_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicMax_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicMax_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMax_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicMax_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicMax_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicMax_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicInc_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicInc_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicInc_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicInc_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicDec_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicDec_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicDec_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicDec_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicCAS_block(int *address, int compare, int val)
+{
+  return __iAtomicCAS_block(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicCAS_system(int *address, int compare, int val)
+{
+  return __iAtomicCAS_system(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicCAS_block(unsigned int *address, unsigned int compare,
+                             unsigned int val)
+{
+  return __uAtomicCAS_block(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicCAS_system(unsigned int *address, unsigned int compare,
+                              unsigned int val)
+{
+  return __uAtomicCAS_system(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long int atomicCAS_block(unsigned long long int *address,
+                                       unsigned long long int compare,
+                                       unsigned long long int val)
+{
+  return __ullAtomicCAS_block(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long int atomicCAS_system(unsigned long long int *address,
+                                        unsigned long long int compare,
+                                        unsigned long long int val)
+{
+  return __ullAtomicCAS_system(address, compare, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAnd_block(int *address, int val)
+{
+  return __iAtomicAnd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicAnd_system(int *address, int val)
+{
+  return __iAtomicAnd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicAnd_block(long long *address, long long val)
+{
+  return __llAtomicAnd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicAnd_system(long long *address, long long val)
+{
+  return __llAtomicAnd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAnd_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAnd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicAnd_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicAnd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAnd_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicAnd_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicAnd_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicAnd_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicOr_block(int *address, int val)
+{
+  return __iAtomicOr_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicOr_system(int *address, int val)
+{
+  return __iAtomicOr_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicOr_block(long long *address, long long val)
+{
+  return __llAtomicOr_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicOr_system(long long *address, long long val)
+{
+  return __llAtomicOr_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicOr_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicOr_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicOr_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicOr_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicOr_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicOr_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicOr_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicOr_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicXor_block(int *address, int val)
+{
+  return __iAtomicXor_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+int atomicXor_system(int *address, int val)
+{
+  return __iAtomicXor_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicXor_block(long long *address, long long val)
+{
+  return __llAtomicXor_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+long long atomicXor_system(long long *address, long long val)
+{
+  return __llAtomicXor_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicXor_block(unsigned int *address, unsigned int val)
+{
+  return __uAtomicXor_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned int atomicXor_system(unsigned int *address, unsigned int val)
+{
+  return __uAtomicXor_system(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicXor_block(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicXor_block(address, val);
+}
+
+__SM_60_ATOMIC_FUNCTIONS_DECL__
+unsigned long long atomicXor_system(unsigned long long *address, unsigned long long val)
+{
+  return __ullAtomicXor_system(address, val);
+}
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 600 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_60_ATOMIC_FUNCTIONS_DECL__
+
+#endif /* !__SM_60_ATOMIC_FUNCTIONS_HPP__ */
+
diff --git a/ext/cudart/include/sm_61_intrinsics.h b/ext/cudart/include/sm_61_intrinsics.h
new file mode 100644
index 00000000..cf2dce47
--- /dev/null
+++ b/ext/cudart/include/sm_61_intrinsics.h
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2016 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_61_INTRINSICS_H__)
+#define __SM_61_INTRINSICS_H__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_61_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_61_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 610
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#ifndef __CUDA_ARCH__
+#define __DEF_IF_HOST { }
+#else  /* !__CUDA_ARCH__ */
+#define __DEF_IF_HOST ;
+#endif /* __CUDA_ARCH__ */
+
+/*******************************************************************************
+*                                                                              *
+*  Below are declarations of SM-6.1 intrinsics which are included as           *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+
+
+/******************************************************************************
+ *                                   __dp2a                                   *
+ ******************************************************************************/
+// Generic [_lo]
+__SM_61_INTRINSICS_DECL__ int __dp2a_lo(int srcA, int srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_lo(unsigned int srcA, unsigned int srcB, unsigned int c) __DEF_IF_HOST
+// Vector-style [_lo]
+__SM_61_INTRINSICS_DECL__ int __dp2a_lo(short2 srcA, char4 srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_lo(ushort2 srcA, uchar4 srcB, unsigned int c) __DEF_IF_HOST
+// Generic [_hi]
+__SM_61_INTRINSICS_DECL__ int __dp2a_hi(int srcA, int srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_hi(unsigned int srcA, unsigned int srcB, unsigned int c) __DEF_IF_HOST
+// Vector-style [_hi]
+__SM_61_INTRINSICS_DECL__ int __dp2a_hi(short2 srcA, char4 srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_hi(ushort2 srcA, uchar4 srcB, unsigned int c) __DEF_IF_HOST
+
+
+/******************************************************************************
+ *                                   __dp4a                                   *
+ ******************************************************************************/
+// Generic
+__SM_61_INTRINSICS_DECL__ int __dp4a(int srcA, int srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp4a(unsigned int srcA, unsigned int srcB, unsigned int c) __DEF_IF_HOST
+// Vector-style
+__SM_61_INTRINSICS_DECL__ int __dp4a(char4 srcA, char4 srcB, int c) __DEF_IF_HOST
+__SM_61_INTRINSICS_DECL__ unsigned int __dp4a(uchar4 srcA, uchar4 srcB, unsigned int c) __DEF_IF_HOST
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 610 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __DEF_IF_HOST
+#undef __SM_61_INTRINSICS_DECL__
+
+#if !defined(__CUDACC_RTC__) && defined(__CUDA_ARCH__)
+#include "sm_61_intrinsics.hpp"
+#endif /* !__CUDACC_RTC__ && defined(__CUDA_ARCH__) */
+
+#endif /* !__SM_61_INTRINSICS_H__ */
diff --git a/ext/cudart/include/sm_61_intrinsics.hpp b/ext/cudart/include/sm_61_intrinsics.hpp
new file mode 100644
index 00000000..f603d04c
--- /dev/null
+++ b/ext/cudart/include/sm_61_intrinsics.hpp
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2016 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SM_61_INTRINSICS_HPP__)
+#define __SM_61_INTRINSICS_HPP__
+
+#if defined(__CUDACC_RTC__)
+#define __SM_61_INTRINSICS_DECL__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __SM_61_INTRINSICS_DECL__ static __device__ __inline__
+#endif /* __CUDACC_RTC__ */
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 610
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+/*******************************************************************************
+*                                                                              *
+*  Below are implementations of SM-6.1 intrinsics which are included as        *
+*  source (instead of being built in to the compiler)                          *
+*                                                                              *
+*******************************************************************************/
+
+// 4a
+__SM_61_INTRINSICS_DECL__ int __dp4a(int srcA, int srcB, int c) {
+    int ret;
+    asm volatile ("dp4a.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp4a(unsigned int srcA, unsigned int srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp4a.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ int __dp4a(char4 srcA, char4 srcB, int c) {
+    int ret;
+    asm volatile ("dp4a.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(int *)&srcA), "r"(*(int *)&srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp4a(uchar4 srcA, uchar4 srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp4a.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(unsigned int *)&srcA), "r"(*(unsigned int *)&srcB), "r"(c));
+    return ret;
+}
+
+// 2a.lo
+__SM_61_INTRINSICS_DECL__ int __dp2a_lo(int srcA, int srcB, int c) {
+    int ret;
+    asm volatile ("dp2a.lo.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_lo(unsigned int srcA, unsigned int srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp2a.lo.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ int __dp2a_lo(short2 srcA, char4 srcB, int c) {
+    int ret;
+    asm volatile ("dp2a.lo.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(int *)&srcA), "r"(*(int *)&srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_lo(ushort2 srcA, uchar4 srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp2a.lo.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(unsigned int *)&srcA), "r"(*(unsigned int *)&srcB), "r"(c));
+    return ret;
+}
+
+// 2a.hi
+__SM_61_INTRINSICS_DECL__ int __dp2a_hi(int srcA, int srcB, int c) {
+    int ret;
+    asm volatile ("dp2a.hi.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_hi(unsigned int srcA, unsigned int srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp2a.hi.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(srcA), "r"(srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ int __dp2a_hi(short2 srcA, char4 srcB, int c) {
+    int ret;
+    asm volatile ("dp2a.hi.s32.s32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(int *)&srcA), "r"(*(int *)&srcB), "r"(c));
+    return ret;
+}
+
+__SM_61_INTRINSICS_DECL__ unsigned int __dp2a_hi(ushort2 srcA, uchar4 srcB, unsigned int c) {
+    unsigned int ret;
+    asm volatile ("dp2a.hi.u32.u32 %0, %1, %2, %3;" : "=r"(ret) : "r"(*(unsigned int *)&srcA), "r"(*(unsigned int *)&srcB), "r"(c));
+    return ret;
+}
+
+
+#endif /* !__CUDA_ARCH__ || __CUDA_ARCH__ >= 610 */
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#undef __SM_61_INTRINSICS_DECL__
+
+#endif /* !__SM_61_INTRINSICS_HPP__ */
+
diff --git a/ext/cudart/include/surface_functions.h b/ext/cudart/include/surface_functions.h
new file mode 100644
index 00000000..587a995d
--- /dev/null
+++ b/ext/cudart/include/surface_functions.h
@@ -0,0 +1,439 @@
+/*
+ * Copyright 1993-2017 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SURFACE_FUNCTIONS_H__)
+#define __SURFACE_FUNCTIONS_H__
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+#include "cuda_surface_types.h"
+
+#if defined(_WIN32)
+# define __DEPRECATED__ __declspec(deprecated)
+#else
+# define __DEPRECATED__  __attribute__((deprecated))
+#endif
+
+
+
+#ifdef __CUDA_ARCH__
+template <typename T> struct __nv_surf_trait {  typedef void * cast_type; };
+
+template<> struct __nv_surf_trait<char> {  typedef char * cast_type; };
+template<> struct __nv_surf_trait<signed char> {  typedef signed char * cast_type; };
+template<> struct __nv_surf_trait<unsigned char> {  typedef unsigned char * cast_type; };
+template<> struct __nv_surf_trait<char1> {  typedef char1 * cast_type; };
+template<> struct __nv_surf_trait<uchar1> {  typedef uchar1 * cast_type; };
+template<> struct __nv_surf_trait<char2> {  typedef char2 * cast_type; };
+template<> struct __nv_surf_trait<uchar2> {  typedef uchar2 * cast_type; };
+template<> struct __nv_surf_trait<char4> {  typedef char4 * cast_type; };
+template<> struct __nv_surf_trait<uchar4> {  typedef uchar4 * cast_type; };
+template<> struct __nv_surf_trait<short> {  typedef short * cast_type; };
+template<> struct __nv_surf_trait<unsigned short> {  typedef unsigned short * cast_type; };
+template<> struct __nv_surf_trait<short1> {  typedef short1 * cast_type; };
+template<> struct __nv_surf_trait<ushort1> {  typedef ushort1 * cast_type; };
+template<> struct __nv_surf_trait<short2> {  typedef short2 * cast_type; };
+template<> struct __nv_surf_trait<ushort2> {  typedef ushort2 * cast_type; };
+template<> struct __nv_surf_trait<short4> {  typedef short4 * cast_type; };
+template<> struct __nv_surf_trait<ushort4> {  typedef ushort4 * cast_type; };
+template<> struct __nv_surf_trait<int> {  typedef int * cast_type; };
+template<> struct __nv_surf_trait<unsigned int> {  typedef unsigned int * cast_type; };
+template<> struct __nv_surf_trait<int1> {  typedef int1 * cast_type; };
+template<> struct __nv_surf_trait<uint1> {  typedef uint1 * cast_type; };
+template<> struct __nv_surf_trait<int2> {  typedef int2 * cast_type; };
+template<> struct __nv_surf_trait<uint2> {  typedef uint2 * cast_type; };
+template<> struct __nv_surf_trait<int4> {  typedef int4 * cast_type; };
+template<> struct __nv_surf_trait<uint4> {  typedef uint4 * cast_type; };
+template<> struct __nv_surf_trait<long long> {  typedef long long * cast_type; };
+template<> struct __nv_surf_trait<unsigned long long> {  typedef unsigned long long * cast_type; };
+template<> struct __nv_surf_trait<longlong1> {  typedef longlong1 * cast_type; };
+template<> struct __nv_surf_trait<ulonglong1> {  typedef ulonglong1 * cast_type; };
+template<> struct __nv_surf_trait<longlong2> {  typedef longlong2 * cast_type; };
+template<> struct __nv_surf_trait<ulonglong2> {  typedef ulonglong2 * cast_type; };
+#if !defined(__LP64__)
+template<> struct __nv_surf_trait<long> {  typedef int * cast_type; };
+template<> struct __nv_surf_trait<unsigned long> {  typedef unsigned int * cast_type; };
+template<> struct __nv_surf_trait<long1> {  typedef int1 * cast_type; };
+template<> struct __nv_surf_trait<ulong1> {  typedef uint1 * cast_type; };
+template<> struct __nv_surf_trait<long2> {  typedef int2 * cast_type; };
+template<> struct __nv_surf_trait<ulong2> {  typedef uint2 * cast_type; };
+template<> struct __nv_surf_trait<long4> {  typedef uint4 * cast_type; };
+template<> struct __nv_surf_trait<ulong4> {  typedef int4 * cast_type; };
+#endif
+template<> struct __nv_surf_trait<float> {  typedef float * cast_type; };
+template<> struct __nv_surf_trait<float1> {  typedef float1 * cast_type; };
+template<> struct __nv_surf_trait<float2> {  typedef float2 * cast_type; };
+template<> struct __nv_surf_trait<float4> {  typedef float4 * cast_type; };
+#endif /* defined(__CUDA_ARCH__) */
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surf1Dread(T *res, surface<void, cudaSurfaceType1D> surf, int x, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf1Dread_v2", (void *)res, s, surf, x, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surf1Dread(surface<void, cudaSurfaceType1D> surf, int x, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surf1Dread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, mode);
+  return temp;
+#endif
+}
+  
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1Dread(T *res, surface<void, cudaSurfaceType1D> surf, int x, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  *res = surf1Dread<T>(surf, x, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surf2Dread(T *res, surface<void, cudaSurfaceType2D> surf, int x, int y, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf2Dread_v2", (void *)res, s, surf, x, y, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surf2Dread(surface<void, cudaSurfaceType2D> surf, int x, int y, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surf2Dread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, y, mode);
+  return temp;
+#endif
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2Dread(T *res, surface<void, cudaSurfaceType2D> surf, int x, int y, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  *res = surf2Dread<T>(surf, x, y, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surf3Dread(T *res, surface<void, cudaSurfaceType3D> surf, int x, int y, int z, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf3Dread_v2", (void *)res, s, surf, x, y, z, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surf3Dread(surface<void, cudaSurfaceType3D> surf, int x, int y, int z, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surf3Dread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, y, z, mode);
+  return temp;
+#endif
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf3Dread(T *res, surface<void, cudaSurfaceType3D> surf, int x, int y, int z, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  *res = surf3Dread<T>(surf, x, y, z, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surf1DLayeredread(T *res, surface<void, cudaSurfaceType1DLayered> surf, int x, int  layer, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf1DLayeredread_v2", (void *)res, s, surf, x,  layer, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surf1DLayeredread(surface<void, cudaSurfaceType1DLayered> surf, int x, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surf1DLayeredread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, layer, mode);
+  return temp;
+#endif
+}
+
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1DLayeredread(T *res, surface<void, cudaSurfaceType1DLayered> surf, int x, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  *res = surf1DLayeredread<T>(surf, x, layer, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surf2DLayeredread(T *res, surface<void, cudaSurfaceType2DLayered> surf, int x,  int y, int  layer, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf2DLayeredread_v2", (void *)res, s, surf, x, y, layer, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surf2DLayeredread(surface<void, cudaSurfaceType2DLayered> surf, int x, int y, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surf2DLayeredread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, y, layer, mode);
+  return temp;
+#endif
+}
+
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2DLayeredread(T *res, surface<void, cudaSurfaceType2DLayered> surf, int x, int y, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  *res = surf2DLayeredread<T>(surf, x, y, layer, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+template <typename T>
+static __device__  __forceinline__ void surfCubemapread(T *res, surface<void, cudaSurfaceTypeCubemap> surf, int x,  int y, int  face, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surfCubemapread_v2", (void *)res, s, surf, x, y, face, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surfCubemapread(surface<void, cudaSurfaceTypeCubemap> surf, int x, int y, int face, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+
+  __nv_tex_surf_handler("__surfCubemapread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, y, face, mode);
+  return temp;
+#endif
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapread(T *res, surface<void, cudaSurfaceTypeCubemap> surf, int x, int y, int face, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__  
+  *res = surfCubemapread<T>(surf, x, y, face, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+template <typename T>
+static __DEPRECATED__ __device__  __forceinline__ void surfCubemapLayeredread(T *res, surface<void, cudaSurfaceTypeCubemapLayered> surf, int x,  int y, int  layerFace, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surfCubemapLayeredread_v2", (void *)res, s, surf, x, y, layerFace, mode);
+#endif     
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__  T surfCubemapLayeredread(surface<void, cudaSurfaceTypeCubemapLayered> surf, int x, int y, int layerFace, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  T temp;
+  __nv_tex_surf_handler("__surfCubemapLayeredread_v2", (typename __nv_surf_trait<T>::cast_type)&temp, (int)sizeof(T), surf, x, y, layerFace, mode);
+  return temp;
+#endif
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapLayeredread(T *res, surface<void, cudaSurfaceTypeCubemapLayered> surf, int x, int y, int layerFace, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__  
+  *res = surfCubemapLayeredread<T>(surf, x, y, layerFace, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+//surf1Dwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1Dwrite(T val, surface<void, cudaSurfaceType1D> surf, int x, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf1Dwrite_v2", (void *)&val, s, surf, x, mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1Dwrite(T val, surface<void, cudaSurfaceType1D> surf, int x, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surf1Dwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val, (int)sizeof(T), surf, x,  mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+//surf2Dwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2Dwrite(T val, surface<void, cudaSurfaceType2D> surf, int x, int y, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf2Dwrite_v2", (void *)&val,  s, surf, x, y, mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2Dwrite(T val, surface<void, cudaSurfaceType2D> surf, int x, int y, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surf2Dwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val, (int)sizeof(T), surf, x, y,  mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+//surf3Dwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf3Dwrite(T val, surface<void, cudaSurfaceType3D> surf, int x, int y, int z, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf3Dwrite_v2", (void *)&val,  s, surf, x, y, z,mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf3Dwrite(T val, surface<void, cudaSurfaceType3D> surf, int x, int y, int z, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surf3Dwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val, (int)sizeof(T), surf, x, y, z,  mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+//surf1DLayeredwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1DLayeredwrite(T val, surface<void, cudaSurfaceType1DLayered> surf, int x, int layer, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf1DLayeredwrite_v2", (void *)&val,  s, surf, x, layer,mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf1DLayeredwrite(T val, surface<void, cudaSurfaceType1DLayered> surf, int x, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surf1DLayeredwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val,  (int)sizeof(T), surf, x, layer, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+//surf2DLayeredwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2DLayeredwrite(T val, surface<void, cudaSurfaceType2DLayered> surf, int x, int y, int layer, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surf2DLayeredwrite_v2", (void *)&val, s, surf, x, y, layer,mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surf2DLayeredwrite(T val, surface<void, cudaSurfaceType2DLayered> surf, int x, int y, int layer, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surf2DLayeredwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val,  (int)sizeof(T), surf, x, y, layer, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+//surfCubemapwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapwrite(T val, surface<void, cudaSurfaceTypeCubemap> surf, int x, int y, int face, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surfCubemapwrite_v2", (void *)&val, s, surf, x, y, face, mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapwrite(T val, surface<void, cudaSurfaceTypeCubemap> surf, int x, int y, int face, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surfCubemapwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val, (int)sizeof(T), surf, x, y, face,  mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+
+//surfCubemapLayeredwrite
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapLayeredwrite(T val, surface<void, cudaSurfaceTypeCubemapLayered> surf, int x, int y, int layerFace, int s, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__surfCubemapLayeredwrite_v2", (void *)&val, s, surf, x, y, layerFace,  mode);
+#endif  
+}
+
+template<class T>
+static __DEPRECATED__ __device__ __forceinline__ void surfCubemapLayeredwrite(T val, surface<void, cudaSurfaceTypeCubemapLayered> surf, int x, int y, int layerFace, enum cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__ 
+  __nv_tex_surf_handler("__surfCubemapLayeredwrite_v2", (typename __nv_surf_trait<T>::cast_type)&val, (int)sizeof(T), surf, x, y, layerFace,  mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+#undef __DEPRECATED__
+
+
+#endif /* __cplusplus && __CUDACC__ */
+#endif /* !__SURFACE_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/surface_indirect_functions.h b/ext/cudart/include/surface_indirect_functions.h
new file mode 100644
index 00000000..7d5c4b64
--- /dev/null
+++ b/ext/cudart/include/surface_indirect_functions.h
@@ -0,0 +1,286 @@
+/*
+ * Copyright 1993-2017 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+
+#ifndef __SURFACE_INDIRECT_FUNCTIONS_H__
+#define __SURFACE_INDIRECT_FUNCTIONS_H__
+
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#include "cuda_runtime_api.h"
+
+template<typename T> struct __nv_isurf_trait { };
+template<> struct __nv_isurf_trait<char> { typedef void type; };
+template<> struct __nv_isurf_trait<signed char> { typedef void type; };
+template<> struct __nv_isurf_trait<char1> { typedef void type; };
+template<> struct __nv_isurf_trait<unsigned char> { typedef void type; };
+template<> struct __nv_isurf_trait<uchar1> { typedef void type; };
+template<> struct __nv_isurf_trait<short> { typedef void type; };
+template<> struct __nv_isurf_trait<short1> { typedef void type; };
+template<> struct __nv_isurf_trait<unsigned short> { typedef void type; };
+template<> struct __nv_isurf_trait<ushort1> { typedef void type; };
+template<> struct __nv_isurf_trait<int> { typedef void type; };
+template<> struct __nv_isurf_trait<int1> { typedef void type; };
+template<> struct __nv_isurf_trait<unsigned int> { typedef void type; };
+template<> struct __nv_isurf_trait<uint1> { typedef void type; };
+template<> struct __nv_isurf_trait<long long> { typedef void type; };
+template<> struct __nv_isurf_trait<longlong1> { typedef void type; };
+template<> struct __nv_isurf_trait<unsigned long long> { typedef void type; };
+template<> struct __nv_isurf_trait<ulonglong1> { typedef void type; };
+template<> struct __nv_isurf_trait<float> { typedef void type; };
+template<> struct __nv_isurf_trait<float1> { typedef void type; };
+
+template<> struct __nv_isurf_trait<char2> { typedef void type; };
+template<> struct __nv_isurf_trait<uchar2> { typedef void type; };
+template<> struct __nv_isurf_trait<short2> { typedef void type; };
+template<> struct __nv_isurf_trait<ushort2> { typedef void type; };
+template<> struct __nv_isurf_trait<int2> { typedef void type; };
+template<> struct __nv_isurf_trait<uint2> { typedef void type; };
+template<> struct __nv_isurf_trait<longlong2> { typedef void type; };
+template<> struct __nv_isurf_trait<ulonglong2> { typedef void type; };
+template<> struct __nv_isurf_trait<float2> { typedef void type; };
+
+template<> struct __nv_isurf_trait<char4> { typedef void type; };
+template<> struct __nv_isurf_trait<uchar4> { typedef void type; };
+template<> struct __nv_isurf_trait<short4> { typedef void type; };
+template<> struct __nv_isurf_trait<ushort4> { typedef void type; };
+template<> struct __nv_isurf_trait<int4> { typedef void type; };
+template<> struct __nv_isurf_trait<uint4> { typedef void type; };
+template<> struct __nv_isurf_trait<float4> { typedef void type; };
+
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type  surf1Dread(T *ptr, cudaSurfaceObject_t obj, int x, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf1Dread", ptr, obj, x, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surf1Dread(cudaSurfaceObject_t surfObject, int x, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__  
+   T ret;
+   surf1Dread(&ret, surfObject, x, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type  surf2Dread(T *ptr, cudaSurfaceObject_t obj, int x, int y, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf2Dread", ptr, obj, x, y, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surf2Dread(cudaSurfaceObject_t surfObject, int x, int y, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surf2Dread(&ret, surfObject, x, y, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+
+template <typename T>
+static __device__ typename  __nv_isurf_trait<T>::type  surf3Dread(T *ptr, cudaSurfaceObject_t obj, int x, int y, int z, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf3Dread", ptr, obj, x, y, z, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surf3Dread(cudaSurfaceObject_t surfObject, int x, int y, int z, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surf3Dread(&ret, surfObject, x, y, z, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__ typename  __nv_isurf_trait<T>::type  surf1DLayeredread(T *ptr, cudaSurfaceObject_t obj, int x, int layer, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf1DLayeredread", ptr, obj, x, layer, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surf1DLayeredread(cudaSurfaceObject_t surfObject, int x, int layer, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surf1DLayeredread(&ret, surfObject, x, layer, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__  typename __nv_isurf_trait<T>::type  surf2DLayeredread(T *ptr, cudaSurfaceObject_t obj, int x, int y, int layer, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf2DLayeredread", ptr, obj, x, y, layer, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surf2DLayeredread(cudaSurfaceObject_t surfObject, int x, int y, int layer, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surf2DLayeredread(&ret, surfObject, x, y, layer, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type  surfCubemapread(T *ptr, cudaSurfaceObject_t obj, int x, int y, int face, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurfCubemapread", ptr, obj, x, y, face, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surfCubemapread(cudaSurfaceObject_t surfObject, int x, int y, int face, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surfCubemapread(&ret, surfObject, x, y, face, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__  typename __nv_isurf_trait<T>::type  surfCubemapLayeredread(T *ptr, cudaSurfaceObject_t obj, int x, int y, int layerface, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurfCubemapLayeredread", ptr, obj, x, y, layerface, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <class T>
+static __device__ T surfCubemapLayeredread(cudaSurfaceObject_t surfObject, int x, int y, int layerface, cudaSurfaceBoundaryMode boundaryMode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__   
+   T ret;
+   surfCubemapLayeredread(&ret, surfObject, x, y, layerface, boundaryMode);
+   return ret;
+#endif /* __CUDA_ARCH__ */   
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surf1Dwrite(T val, cudaSurfaceObject_t obj, int x, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf1Dwrite_v2", &val, obj, x, mode);
+#endif /* __CUDA_ARCH__ */  
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surf2Dwrite(T val, cudaSurfaceObject_t obj, int x, int y, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf2Dwrite_v2", &val, obj, x, y, mode);
+#endif /* __CUDA_ARCH__ */ 
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surf3Dwrite(T val, cudaSurfaceObject_t obj, int x, int y, int z, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf3Dwrite_v2", &val, obj, x, y, z, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surf1DLayeredwrite(T val, cudaSurfaceObject_t obj, int x, int layer, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf1DLayeredwrite_v2", &val, obj, x, layer, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surf2DLayeredwrite(T val, cudaSurfaceObject_t obj, int x, int y, int layer, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurf2DLayeredwrite_v2", &val, obj, x, y, layer, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surfCubemapwrite(T val, cudaSurfaceObject_t obj, int x, int y, int face, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurfCubemapwrite_v2", &val, obj, x, y, face, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+template <typename T>
+static __device__ typename __nv_isurf_trait<T>::type surfCubemapLayeredwrite(T val, cudaSurfaceObject_t obj, int x, int y, int layerface, cudaSurfaceBoundaryMode mode = cudaBoundaryModeTrap)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__isurfCubemapLayeredwrite_v2", &val, obj, x, y, layerface, mode);
+#endif /* __CUDA_ARCH__ */
+}
+
+#endif // __cplusplus && __CUDACC__
+
+#endif // __SURFACE_INDIRECT_FUNCTIONS_H__
+
+
diff --git a/ext/cudart/include/surface_types.h b/ext/cudart/include/surface_types.h
new file mode 100644
index 00000000..95ff57ca
--- /dev/null
+++ b/ext/cudart/include/surface_types.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__SURFACE_TYPES_H__)
+#define __SURFACE_TYPES_H__
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "driver_types.h"
+
+/**
+ * \addtogroup CUDART_TYPES
+ *
+ * @{
+ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#define cudaSurfaceType1D              0x01
+#define cudaSurfaceType2D              0x02
+#define cudaSurfaceType3D              0x03
+#define cudaSurfaceTypeCubemap         0x0C
+#define cudaSurfaceType1DLayered       0xF1
+#define cudaSurfaceType2DLayered       0xF2
+#define cudaSurfaceTypeCubemapLayered  0xFC
+
+/**
+ * CUDA Surface boundary modes
+ */
+enum __device_builtin__ cudaSurfaceBoundaryMode
+{
+    cudaBoundaryModeZero  = 0,    /**< Zero boundary mode */
+    cudaBoundaryModeClamp = 1,    /**< Clamp boundary mode */
+    cudaBoundaryModeTrap  = 2     /**< Trap boundary mode */
+};
+
+/**
+ * CUDA Surface format modes
+ */
+enum __device_builtin__  cudaSurfaceFormatMode
+{
+    cudaFormatModeForced = 0,     /**< Forced format mode */
+    cudaFormatModeAuto = 1        /**< Auto format mode */
+};
+
+/**
+ * CUDA Surface reference
+ */
+struct __device_builtin__ surfaceReference
+{
+    /**
+     * Channel descriptor for surface reference
+     */
+    struct cudaChannelFormatDesc channelDesc;
+};
+
+/**
+ * An opaque value that represents a CUDA Surface object
+ */
+typedef __device_builtin__ unsigned long long cudaSurfaceObject_t;
+
+/** @} */
+/** @} */ /* END CUDART_TYPES */
+
+#endif /* !__SURFACE_TYPES_H__ */
diff --git a/ext/cudart/include/texture_fetch_functions.h b/ext/cudart/include/texture_fetch_functions.h
new file mode 100644
index 00000000..ad970aea
--- /dev/null
+++ b/ext/cudart/include/texture_fetch_functions.h
@@ -0,0 +1,739 @@
+/*
+ * Copyright 1993-2017 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__TEXTURE_FETCH_FUNCTIONS_H__)
+#define __TEXTURE_FETCH_FUNCTIONS_H__
+
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+#include "cuda_texture_types.h"
+
+#if defined(_WIN32)
+# define __DEPRECATED__ __declspec(deprecated)
+#else
+# define __DEPRECATED__  __attribute__((deprecated))
+#endif
+
+
+template <typename T>
+struct __nv_tex_rmet_ret { };
+
+template<> struct __nv_tex_rmet_ret<char> { typedef char type; };
+template<> struct __nv_tex_rmet_ret<signed char> { typedef signed char type; };
+template<> struct __nv_tex_rmet_ret<unsigned char> { typedef unsigned char type; };
+template<> struct __nv_tex_rmet_ret<char1> { typedef char1 type; };
+template<> struct __nv_tex_rmet_ret<uchar1> { typedef uchar1 type; };
+template<> struct __nv_tex_rmet_ret<char2> { typedef char2 type; };
+template<> struct __nv_tex_rmet_ret<uchar2> { typedef uchar2 type; };
+template<> struct __nv_tex_rmet_ret<char4> { typedef char4 type; };
+template<> struct __nv_tex_rmet_ret<uchar4> { typedef uchar4 type; };
+
+template<> struct __nv_tex_rmet_ret<short> { typedef short type; };
+template<> struct __nv_tex_rmet_ret<unsigned short> { typedef unsigned short type; };
+template<> struct __nv_tex_rmet_ret<short1> { typedef short1 type; };
+template<> struct __nv_tex_rmet_ret<ushort1> { typedef ushort1 type; };
+template<> struct __nv_tex_rmet_ret<short2> { typedef short2 type; };
+template<> struct __nv_tex_rmet_ret<ushort2> { typedef ushort2 type; };
+template<> struct __nv_tex_rmet_ret<short4> { typedef short4 type; };
+template<> struct __nv_tex_rmet_ret<ushort4> { typedef ushort4 type; };
+
+template<> struct __nv_tex_rmet_ret<int> { typedef int type; };
+template<> struct __nv_tex_rmet_ret<unsigned int> { typedef unsigned int type; };
+template<> struct __nv_tex_rmet_ret<int1> { typedef int1 type; };
+template<> struct __nv_tex_rmet_ret<uint1> { typedef uint1 type; };
+template<> struct __nv_tex_rmet_ret<int2> { typedef int2 type; };
+template<> struct __nv_tex_rmet_ret<uint2> { typedef uint2 type; };
+template<> struct __nv_tex_rmet_ret<int4> { typedef int4 type; };
+template<> struct __nv_tex_rmet_ret<uint4> { typedef uint4 type; };
+
+#if !defined(__LP64__)
+template<> struct __nv_tex_rmet_ret<long> { typedef long type; };
+template<> struct __nv_tex_rmet_ret<unsigned long> { typedef unsigned long type; };
+template<> struct __nv_tex_rmet_ret<long1> { typedef long1 type; };
+template<> struct __nv_tex_rmet_ret<ulong1> { typedef ulong1 type; };
+template<> struct __nv_tex_rmet_ret<long2> { typedef long2 type; };
+template<> struct __nv_tex_rmet_ret<ulong2> { typedef ulong2 type; };
+template<> struct __nv_tex_rmet_ret<long4> { typedef long4 type; };
+template<> struct __nv_tex_rmet_ret<ulong4> { typedef ulong4 type; };
+#endif /* !__LP64__ */
+template<> struct __nv_tex_rmet_ret<float> { typedef float type; };
+template<> struct __nv_tex_rmet_ret<float1> { typedef float1 type; };
+template<> struct __nv_tex_rmet_ret<float2> { typedef float2 type; };
+template<> struct __nv_tex_rmet_ret<float4> { typedef float4 type; };
+
+
+template <typename T> struct __nv_tex_rmet_cast { typedef T* type;  };
+#if !defined(__LP64__)
+template<> struct __nv_tex_rmet_cast<long> { typedef int *type; };
+template<> struct __nv_tex_rmet_cast<unsigned long> { typedef unsigned int *type; };
+template<> struct __nv_tex_rmet_cast<long1> { typedef int1 *type; };
+template<> struct __nv_tex_rmet_cast<ulong1> { typedef uint1 *type; };
+template<> struct __nv_tex_rmet_cast<long2> { typedef int2 *type; };
+template<> struct __nv_tex_rmet_cast<ulong2> { typedef uint2 *type; };
+template<> struct __nv_tex_rmet_cast<long4> { typedef int4 *type; };
+template<> struct __nv_tex_rmet_cast<ulong4> { typedef uint4 *type; };
+#endif /* !__LP64__ */
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__  typename __nv_tex_rmet_ret<T>::type tex1Dfetch(texture<T, cudaTextureType1D, cudaReadModeElementType> t, int x)
+{
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1Dfetch_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x);
+  return temp;
+#endif
+}
+
+template <typename T>
+struct __nv_tex_rmnf_ret { };
+
+template <> struct __nv_tex_rmnf_ret<char> { typedef float type; };
+template <> struct __nv_tex_rmnf_ret<signed char> { typedef float type; };
+template <> struct __nv_tex_rmnf_ret<unsigned char> { typedef float type; };
+template <> struct __nv_tex_rmnf_ret<short> { typedef float type; };
+template <> struct __nv_tex_rmnf_ret<unsigned short> { typedef float type; };
+template <> struct __nv_tex_rmnf_ret<char1> { typedef float1 type; };
+template <> struct __nv_tex_rmnf_ret<uchar1> { typedef float1 type; };
+template <> struct __nv_tex_rmnf_ret<short1> { typedef float1 type; };
+template <> struct __nv_tex_rmnf_ret<ushort1> { typedef float1 type; };
+template <> struct __nv_tex_rmnf_ret<char2> { typedef float2 type; };
+template <> struct __nv_tex_rmnf_ret<uchar2> { typedef float2 type; };
+template <> struct __nv_tex_rmnf_ret<short2> { typedef float2 type; };
+template <> struct __nv_tex_rmnf_ret<ushort2> { typedef float2 type; };
+template <> struct __nv_tex_rmnf_ret<char4> { typedef float4 type; };
+template <> struct __nv_tex_rmnf_ret<uchar4> { typedef float4 type; };
+template <> struct __nv_tex_rmnf_ret<short4> { typedef float4 type; };
+template <> struct __nv_tex_rmnf_ret<ushort4> { typedef float4 type; };
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1Dfetch(texture<T, cudaTextureType1D, cudaReadModeNormalizedFloat> t, int x) 
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1Dfetch_rmnf_v2", &type_dummy, &retval, t, x);
+  return retval;
+#endif /* __CUDA_ARCH__ */  
+}
+
+// tex1D
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1D(texture<T, cudaTextureType1D, cudaReadModeElementType> t, float x)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1D_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1D(texture<T, cudaTextureType1D, cudaReadModeNormalizedFloat> t, float x)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1D_rmnf_v2", &type_dummy, &retval, t, x);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+//tex2D
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2D(texture<T, cudaTextureType2D, cudaReadModeElementType> t, float x, float y)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+
+  __nv_tex_surf_handler("__tex2D_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x, y);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2D(texture<T, cudaTextureType2D, cudaReadModeNormalizedFloat> t, float x, float y)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2D_rmnf_v2", &type_dummy, &retval, t, x, y);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+//tex1DLayered
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1DLayered(texture<T, cudaTextureType1DLayered, cudaReadModeElementType> t, float x, int layer)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1DLayered_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x, layer);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1DLayered(texture<T, cudaTextureType1DLayered, cudaReadModeNormalizedFloat> t, float x, int layer)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1DLayered_rmnf_v2", &type_dummy, &retval, t, x, layer);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+//tex2DLayered
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2DLayered(texture<T, cudaTextureType2DLayered, cudaReadModeElementType> t, float x, float y, int layer)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex2DLayered_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x, y, layer);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2DLayered(texture<T, cudaTextureType2DLayered, cudaReadModeNormalizedFloat> t, float x, float y, int layer)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2DLayered_rmnf_v2", &type_dummy, &retval, t, x, y, layer);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex3D
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex3D(texture<T, cudaTextureType3D, cudaReadModeElementType> t, float x, float y, float z)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex3D_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x, y, z);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex3D(texture<T, cudaTextureType3D, cudaReadModeNormalizedFloat> t, float x, float y, float z)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex3D_rmnf_v2", &type_dummy, &retval, t, x, y, z);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// texCubemap
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemap(texture<T, cudaTextureTypeCubemap, cudaReadModeElementType> t, float x, float y, float z)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemap_v2", (typename __nv_tex_rmet_cast<T>::type) &temp, t, x, y, z);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemap(texture<T, cudaTextureTypeCubemap, cudaReadModeNormalizedFloat> t, float x, float y, float z)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemap_rmnf_v2", &type_dummy, &retval, t, x, y, z);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+template <typename T>
+struct __nv_tex2dgather_ret { };
+template <> struct __nv_tex2dgather_ret<char> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<signed char> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<char1> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<char2> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<char3> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<char4> { typedef char4 type; };
+template <> struct __nv_tex2dgather_ret<unsigned char> { typedef uchar4 type; };
+template <> struct __nv_tex2dgather_ret<uchar1> { typedef uchar4 type; };
+template <> struct __nv_tex2dgather_ret<uchar2> { typedef uchar4 type; };
+template <> struct __nv_tex2dgather_ret<uchar3> { typedef uchar4 type; };
+template <> struct __nv_tex2dgather_ret<uchar4> { typedef uchar4 type; };
+
+template <> struct __nv_tex2dgather_ret<short> { typedef short4 type; };
+template <> struct __nv_tex2dgather_ret<short1> { typedef short4 type; };
+template <> struct __nv_tex2dgather_ret<short2> { typedef short4 type; };
+template <> struct __nv_tex2dgather_ret<short3> { typedef short4 type; };
+template <> struct __nv_tex2dgather_ret<short4> { typedef short4 type; };
+template <> struct __nv_tex2dgather_ret<unsigned short> { typedef ushort4 type; };
+template <> struct __nv_tex2dgather_ret<ushort1> { typedef ushort4 type; };
+template <> struct __nv_tex2dgather_ret<ushort2> { typedef ushort4 type; };
+template <> struct __nv_tex2dgather_ret<ushort3> { typedef ushort4 type; };
+template <> struct __nv_tex2dgather_ret<ushort4> { typedef ushort4 type; };
+
+template <> struct __nv_tex2dgather_ret<int> { typedef int4 type; };
+template <> struct __nv_tex2dgather_ret<int1> { typedef int4 type; };
+template <> struct __nv_tex2dgather_ret<int2> { typedef int4 type; };
+template <> struct __nv_tex2dgather_ret<int3> { typedef int4 type; };
+template <> struct __nv_tex2dgather_ret<int4> { typedef int4 type; };
+template <> struct __nv_tex2dgather_ret<unsigned int> { typedef uint4 type; };
+template <> struct __nv_tex2dgather_ret<uint1> { typedef uint4 type; };
+template <> struct __nv_tex2dgather_ret<uint2> { typedef uint4 type; };
+template <> struct __nv_tex2dgather_ret<uint3> { typedef uint4 type; };
+template <> struct __nv_tex2dgather_ret<uint4> { typedef uint4 type; };
+
+template <> struct __nv_tex2dgather_ret<float> { typedef float4 type; };
+template <> struct __nv_tex2dgather_ret<float1> { typedef float4 type; };
+template <> struct __nv_tex2dgather_ret<float2> { typedef float4 type; };
+template <> struct __nv_tex2dgather_ret<float3> { typedef float4 type; };
+template <> struct __nv_tex2dgather_ret<float4> { typedef float4 type; };
+
+template <typename T>
+static __device__ __forceinline__ typename __nv_tex2dgather_ret<T>::type tex2Dgather(texture<T, cudaTextureType2D, cudaReadModeElementType> t, float x, float y, int comp=0)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex2dgather_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2Dgather_v2", &type_dummy, &retval, t, x, y, comp);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+template<typename T> struct __nv_tex2dgather_rmnf_ret { };
+template<> struct __nv_tex2dgather_rmnf_ret<char> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<signed char> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<unsigned char> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<char1> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<uchar1> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<char2> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<uchar2> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<char3> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<uchar3> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<char4> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<uchar4> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<signed short> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<unsigned short> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<short1> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<ushort1> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<short2> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<ushort2> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<short3> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<ushort3> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<short4> { typedef float4 type; };
+template<> struct __nv_tex2dgather_rmnf_ret<ushort4> { typedef float4 type; };
+
+template <typename T>
+static __device__ __forceinline__  typename __nv_tex2dgather_rmnf_ret<T>::type tex2Dgather(texture<T, cudaTextureType2D, cudaReadModeNormalizedFloat> t, float x, float y, int comp = 0)
+{  
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex2dgather_rmnf_ret<T>::type  retval;
+  __nv_tex_surf_handler("__tex2Dgather_rmnf_v2", &type_dummy, &retval, t, x, y, comp);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// tex1DLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1DLod(texture<T, cudaTextureType1D, cudaReadModeElementType> t, float x, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1DLod_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1DLod(texture<T, cudaTextureType1D, cudaReadModeNormalizedFloat> t, float x, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1DLod_rmnf_v2", &type_dummy, &retval, t, x, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex2DLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2DLod(texture<T, cudaTextureType2D, cudaReadModeElementType> t, float x, float y, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex2DLod_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2DLod(texture<T, cudaTextureType2D, cudaReadModeNormalizedFloat> t, float x, float y, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2DLod_rmnf_v2", &type_dummy, &retval, t, x, y, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex1DLayeredLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1DLayeredLod(texture<T, cudaTextureType1DLayered, cudaReadModeElementType> t, float x, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1DLayeredLod_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, layer, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1DLayeredLod(texture<T, cudaTextureType1DLayered, cudaReadModeNormalizedFloat> t, float x, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1DLayeredLod_rmnf_v2", &type_dummy, &retval, t, x, layer, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex2DLayeredLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2DLayeredLod(texture<T, cudaTextureType2DLayered, cudaReadModeElementType> t, float x, float y, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex2DLayeredLod_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, layer, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2DLayeredLod(texture<T, cudaTextureType2DLayered, cudaReadModeNormalizedFloat> t, float x, float y, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2DLayeredLod_rmnf_v2", &type_dummy, &retval, t, x, y, layer, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex3DLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex3DLod(texture<T, cudaTextureType3D, cudaReadModeElementType> t, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex3DLod_v2",(typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex3DLod(texture<T, cudaTextureType3D, cudaReadModeNormalizedFloat> t, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex3DLod_rmnf_v2", &type_dummy, &retval, t, x, y, z, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// texCubemapLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemapLod(texture<T, cudaTextureTypeCubemap, cudaReadModeElementType> t, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemapLod_v2",(typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemapLod(texture<T, cudaTextureTypeCubemap, cudaReadModeNormalizedFloat> t, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemapLod_rmnf_v2", &type_dummy, &retval, t, x, y, z, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// texCubemapLayered
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemapLayered(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeElementType> t, float x, float y, float z, int layer)
+{
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemapLayered_v2",(typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, layer);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemapLayered(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeNormalizedFloat> t, float x, float y, float z, int layer)
+{
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemapLayered_rmnf_v2", &type_dummy, &retval, t, x, y, z, layer);
+  return retval;
+#endif /* __CUDA_ARCH__ */
+}
+
+
+// texCubemapLayeredLod
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemapLayeredLod(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeElementType> t, float x, float y, float z, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemapLayeredLod_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, layer, level);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemapLayeredLod(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeNormalizedFloat> t, float x, float y, float z, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemapLayeredLod_rmnf_v2", &type_dummy, &retval, t, x, y, z, layer, level);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// texCubemapGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemapGrad(texture<T, cudaTextureTypeCubemap, cudaReadModeElementType> t, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemapGrad_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, &dPdx, &dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemapGrad(texture<T, cudaTextureTypeCubemap, cudaReadModeNormalizedFloat> t, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemapGrad_rmnf_v2", &type_dummy, &retval, t,  x, y, z, &dPdx, &dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// texCubemapLayeredGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type texCubemapLayeredGrad(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeElementType> t, float x, float y, float z, int layer, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__texCubemapLayeredGrad_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, layer, &dPdx, &dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type texCubemapLayeredGrad(texture<T, cudaTextureTypeCubemapLayered, cudaReadModeNormalizedFloat> t, float x, float y, float z, int layer, float4 dPdx, float4 dPdy) 
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__texCubemapLayeredGrad_rmnf_v2", &type_dummy, &retval,t, x, y, z, layer, &dPdx, &dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// tex1DGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1DGrad(texture<T, cudaTextureType1D, cudaReadModeElementType> t, float x, float dPdx, float dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1DGrad_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, dPdx, dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1DGrad(texture<T, cudaTextureType1D, cudaReadModeNormalizedFloat> t, float x, float dPdx, float dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1DGrad_rmnf_v2", &type_dummy, &retval,t, x,dPdx, dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+
+// tex2DGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2DGrad(texture<T, cudaTextureType2D, cudaReadModeElementType> t, float x, float y, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex2DGrad_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, &dPdx, &dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2DGrad(texture<T, cudaTextureType2D, cudaReadModeNormalizedFloat> t, float x, float y, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2DGrad_rmnf_v2", &type_dummy, &retval,t, x, y, &dPdx, &dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex1DLayeredGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex1DLayeredGrad(texture<T, cudaTextureType1DLayered, cudaReadModeElementType> t, float x, int layer, float dPdx, float dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex1DLayeredGrad_v2",(typename __nv_tex_rmet_cast<T>::type)&temp, t, x, layer, dPdx, dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex1DLayeredGrad(texture<T, cudaTextureType1DLayered, cudaReadModeNormalizedFloat> t, float x, int layer, float dPdx, float dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex1DLayeredGrad_rmnf_v2", &type_dummy, &retval,t, x, layer, dPdx, dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex2DLayeredGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex2DLayeredGrad(texture<T, cudaTextureType2DLayered, cudaReadModeElementType> t, float x, float y, int layer, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex2DLayeredGrad_v2",(typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, layer, &dPdx, &dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex2DLayeredGrad(texture<T, cudaTextureType2DLayered, cudaReadModeNormalizedFloat> t, float x, float y, int layer, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex2DLayeredGrad_rmnf_v2", &type_dummy, &retval,t, x, y, layer, &dPdx, &dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+// tex3DGrad
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmet_ret<T>::type tex3DGrad(texture<T, cudaTextureType3D, cudaReadModeElementType> t, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  typename __nv_tex_rmet_ret<T>::type temp;
+  __nv_tex_surf_handler("__tex3DGrad_v2", (typename __nv_tex_rmet_cast<T>::type)&temp, t, x, y, z, &dPdx, &dPdy);
+  return temp;
+#endif
+}
+
+template <typename T>
+static __DEPRECATED__ __forceinline__ __device__ typename __nv_tex_rmnf_ret<T>::type tex3DGrad(texture<T, cudaTextureType3D, cudaReadModeNormalizedFloat> t, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  T type_dummy;
+  typename __nv_tex_rmnf_ret<T>::type retval;
+  __nv_tex_surf_handler("__tex3DGrad_rmnf_v2", &type_dummy, &retval,t, x, y, z, &dPdx, &dPdy);
+  return retval;
+#endif /* __CUDA_ARCH__ */ 
+}
+
+#undef __DEPRECATED__
+
+#endif /* __cplusplus && __CUDACC__ */
+
+#endif /* !__TEXTURE_FETCH_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/texture_indirect_functions.h b/ext/cudart/include/texture_indirect_functions.h
new file mode 100644
index 00000000..3a70d7ee
--- /dev/null
+++ b/ext/cudart/include/texture_indirect_functions.h
@@ -0,0 +1,771 @@
+/*
+ * Copyright 1993-2020 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+
+#ifndef __TEXTURE_INDIRECT_FUNCTIONS_H__
+#define __TEXTURE_INDIRECT_FUNCTIONS_H__
+
+
+#if defined(__cplusplus) && defined(__CUDACC__)
+
+#include "cuda_runtime_api.h"
+
+
+#if !defined(__CUDA_ARCH__) || (__CUDA_ARCH__ >= 600)
+#define __NV_TEX_SPARSE 1
+#endif  /* endif */
+
+template <typename T> struct __nv_itex_trait {   };
+template<> struct __nv_itex_trait<char> { typedef void type; };
+template<> struct __nv_itex_trait<signed char> { typedef void type; };
+template<> struct __nv_itex_trait<char1> { typedef void type; };
+template<> struct __nv_itex_trait<char2> { typedef void type; };
+template<> struct __nv_itex_trait<char4> { typedef void type; };
+template<> struct __nv_itex_trait<unsigned char> { typedef void type; };
+template<> struct __nv_itex_trait<uchar1> { typedef void type; };
+template<> struct __nv_itex_trait<uchar2> { typedef void type; };
+template<> struct __nv_itex_trait<uchar4> { typedef void type; };
+template<> struct __nv_itex_trait<short> { typedef void type; };
+template<> struct __nv_itex_trait<short1> { typedef void type; };
+template<> struct __nv_itex_trait<short2> { typedef void type; };
+template<> struct __nv_itex_trait<short4> { typedef void type; };
+template<> struct __nv_itex_trait<unsigned short> { typedef void type; };
+template<> struct __nv_itex_trait<ushort1> { typedef void type; };
+template<> struct __nv_itex_trait<ushort2> { typedef void type; };
+template<> struct __nv_itex_trait<ushort4> { typedef void type; };
+template<> struct __nv_itex_trait<int> { typedef void type; };
+template<> struct __nv_itex_trait<int1> { typedef void type; };
+template<> struct __nv_itex_trait<int2> { typedef void type; };
+template<> struct __nv_itex_trait<int4> { typedef void type; };
+template<> struct __nv_itex_trait<unsigned int> { typedef void type; };
+template<> struct __nv_itex_trait<uint1> { typedef void type; };
+template<> struct __nv_itex_trait<uint2> { typedef void type; };
+template<> struct __nv_itex_trait<uint4> { typedef void type; };
+#if !defined(__LP64__)
+template<> struct __nv_itex_trait<long> { typedef void type; };
+template<> struct __nv_itex_trait<long1> { typedef void type; };
+template<> struct __nv_itex_trait<long2> { typedef void type; };
+template<> struct __nv_itex_trait<long4> { typedef void type; };
+template<> struct __nv_itex_trait<unsigned long> { typedef void type; };
+template<> struct __nv_itex_trait<ulong1> { typedef void type; };
+template<> struct __nv_itex_trait<ulong2> { typedef void type; };
+template<> struct __nv_itex_trait<ulong4> { typedef void type; };
+#endif /* !__LP64__ */
+template<> struct __nv_itex_trait<float> { typedef void type; };
+template<> struct __nv_itex_trait<float1> { typedef void type; };
+template<> struct __nv_itex_trait<float2> { typedef void type; };
+template<> struct __nv_itex_trait<float4> { typedef void type; };
+
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1Dfetch(T *ptr, cudaTextureObject_t obj, int x)
+{
+#ifdef __CUDA_ARCH__
+   __nv_tex_surf_handler("__itex1Dfetch", ptr, obj, x);
+#endif   
+}
+
+template <class T>
+static __device__ T tex1Dfetch(cudaTextureObject_t texObject, int x)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1Dfetch(&ret, texObject, x);
+  return ret;
+#endif  
+}
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1D(T *ptr, cudaTextureObject_t obj, float x)
+{
+#ifdef __CUDA_ARCH__
+   __nv_tex_surf_handler("__itex1D", ptr, obj, x);
+#endif
+}
+
+
+template <class T>
+static __device__  T tex1D(cudaTextureObject_t texObject, float x)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1D(&ret, texObject, x);
+  return ret;
+#endif
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2D(T *ptr, cudaTextureObject_t obj, float x, float y)
+{
+#ifdef __CUDA_ARCH__
+   __nv_tex_surf_handler("__itex2D", ptr, obj, x, y);
+#endif
+}
+
+template <class T>
+static __device__  T tex2D(cudaTextureObject_t texObject, float x, float y)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2D(&ret, texObject, x, y);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2D(T *ptr, cudaTextureObject_t obj, float x, float y, 
+                                                          bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+   __nv_tex_surf_handler("__itex2D_sparse", ptr, obj, x, y, &res);
+   *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2D(cudaTextureObject_t texObject, float x, float y, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2D(&ret, texObject, x, y, isResident);
+  return ret;
+#endif  
+}
+
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3D(T *ptr, cudaTextureObject_t obj, float x, float y, float z)
+{
+#ifdef __CUDA_ARCH__
+   __nv_tex_surf_handler("__itex3D", ptr, obj, x, y, z);
+#endif
+}
+
+template <class T>
+static __device__  T tex3D(cudaTextureObject_t texObject, float x, float y, float z)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3D(&ret, texObject, x, y, z);
+  return ret;
+#endif
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3D(T *ptr, cudaTextureObject_t obj, float x, float y, float z, 
+                                                          bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+   __nv_tex_surf_handler("__itex3D_sparse", ptr, obj, x, y, z, &res);
+   *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex3D(cudaTextureObject_t texObject, float x, float y, float z, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3D(&ret, texObject, x, y, z, isResident);
+  return ret;
+#endif
+}
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1DLayered(T *ptr, cudaTextureObject_t obj, float x, int layer)
+{
+#ifdef __CUDA_ARCH__
+   __nv_tex_surf_handler("__itex1DLayered", ptr, obj, x, layer);
+#endif
+}
+
+template <class T>
+static __device__  T tex1DLayered(cudaTextureObject_t texObject, float x, int layer)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1DLayered(&ret, texObject, x, layer);
+  return ret;
+#endif
+}
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayered(T *ptr, cudaTextureObject_t obj, float x, float y, int layer)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2DLayered", ptr, obj, x, y, layer);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayered(cudaTextureObject_t texObject, float x, float y, int layer)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayered(&ret, texObject, x, y, layer);
+  return ret;
+#endif
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayered(T *ptr, cudaTextureObject_t obj, float x, float y, int layer, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2DLayered_sparse", ptr, obj, x, y, layer, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayered(cudaTextureObject_t texObject, float x, float y, int layer, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayered(&ret, texObject, x, y, layer, isResident);
+  return ret;
+#endif
+}
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemap(T *ptr, cudaTextureObject_t obj, float x, float y, float z)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemap", ptr, obj, x, y, z);
+#endif
+}
+
+
+template <class T>
+static __device__  T texCubemap(cudaTextureObject_t texObject, float x, float y, float z)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemap(&ret, texObject, x, y, z);
+  return ret;
+#endif
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemapLayered(T *ptr, cudaTextureObject_t obj, float x, float y, float z, int layer)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemapLayered", ptr, obj, x, y, z, layer);
+#endif
+}
+
+template <class T>
+static __device__  T texCubemapLayered(cudaTextureObject_t texObject, float x, float y, float z, int layer)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemapLayered(&ret, texObject, x, y, z, layer);
+  return ret;
+#endif  
+}
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2Dgather(T *ptr, cudaTextureObject_t obj, float x, float y, int comp = 0)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2Dgather", ptr, obj, x, y, comp);
+#endif
+}
+
+template <class T>
+static __device__  T tex2Dgather(cudaTextureObject_t to, float x, float y, int comp = 0)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2Dgather(&ret, to, x, y, comp);
+  return ret;
+#endif
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2Dgather(T *ptr, cudaTextureObject_t obj, float x, float y, bool* isResident, int comp = 0)
+{
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2Dgather_sparse", ptr, obj, x, y, comp,  &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2Dgather(cudaTextureObject_t to, float x, float y, bool* isResident, int comp = 0)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2Dgather(&ret, to, x, y,  isResident, comp);
+  return ret;
+#endif
+}
+
+#endif  /* __NV_TEX_SPARSE */
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1DLod(T *ptr, cudaTextureObject_t obj, float x, float level)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex1DLod", ptr, obj, x, level);
+#endif
+}
+
+template <class T>
+static __device__  T tex1DLod(cudaTextureObject_t texObject, float x, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1DLod(&ret, texObject, x, level);
+  return ret;
+#endif  
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLod(T *ptr, cudaTextureObject_t obj, float x, float y, float level)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2DLod", ptr, obj, x, y, level);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLod(cudaTextureObject_t texObject, float x, float y, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLod(&ret, texObject, x, y, level);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLod(T *ptr, cudaTextureObject_t obj, float x, float y, float level, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2DLod_sparse", ptr, obj, x, y, level, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLod(cudaTextureObject_t texObject, float x, float y, float level, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLod(&ret, texObject, x, y, level, isResident);
+  return ret;
+#endif  
+}
+
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3DLod(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex3DLod", ptr, obj, x, y, z, level);
+#endif
+}
+
+template <class T>
+static __device__  T tex3DLod(cudaTextureObject_t texObject, float x, float y, float z, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3DLod(&ret, texObject, x, y, z, level);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3DLod(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float level, bool* isResident)
+{ 
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex3DLod_sparse", ptr, obj, x, y, z, level, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex3DLod(cudaTextureObject_t texObject, float x, float y, float z, float level, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3DLod(&ret, texObject, x, y, z, level, isResident);
+  return ret;
+#endif  
+}
+
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1DLayeredLod(T *ptr, cudaTextureObject_t obj, float x, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex1DLayeredLod", ptr, obj, x, layer, level);
+#endif
+}
+
+template <class T>
+static __device__  T tex1DLayeredLod(cudaTextureObject_t texObject, float x, int layer, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1DLayeredLod(&ret, texObject, x, layer, level);
+  return ret;
+#endif  
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayeredLod(T *ptr, cudaTextureObject_t obj, float x, float y, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2DLayeredLod", ptr, obj, x, y, layer, level);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayeredLod(cudaTextureObject_t texObject, float x, float y, int layer, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayeredLod(&ret, texObject, x, y, layer, level);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayeredLod(T *ptr, cudaTextureObject_t obj, float x, float y, int layer, float level, bool* isResident)
+{ 
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2DLayeredLod_sparse", ptr, obj, x, y, layer, level, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayeredLod(cudaTextureObject_t texObject, float x, float y, int layer, float level, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayeredLod(&ret, texObject, x, y, layer, level, isResident);
+  return ret;
+#endif  
+}
+#endif  /* __NV_TEX_SPARSE */
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemapLod(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemapLod", ptr, obj, x, y, z, level);
+#endif
+}
+
+template <class T>
+static __device__  T texCubemapLod(cudaTextureObject_t texObject, float x, float y, float z, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemapLod(&ret, texObject, x, y, z, level);
+  return ret;
+#endif  
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemapGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemapGrad_v2", ptr, obj, x, y, z, &dPdx, &dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T texCubemapGrad(cudaTextureObject_t texObject, float x, float y, float z, float4 dPdx, float4 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemapGrad(&ret, texObject, x, y, z, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemapLayeredLod(T *ptr, cudaTextureObject_t obj, float x, float y, float z, int layer, float level)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemapLayeredLod", ptr, obj, x, y, z, layer, level);
+#endif
+}
+
+template <class T>
+static __device__  T texCubemapLayeredLod(cudaTextureObject_t texObject, float x, float y, float z, int layer, float level)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemapLayeredLod(&ret, texObject, x, y, z, layer, level);
+  return ret;
+#endif  
+}
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1DGrad(T *ptr, cudaTextureObject_t obj, float x, float dPdx, float dPdy)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex1DGrad", ptr, obj, x, dPdx, dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T tex1DGrad(cudaTextureObject_t texObject, float x, float dPdx, float dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1DGrad(&ret, texObject, x, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2DGrad_v2", ptr, obj, x, y, &dPdx, &dPdy);
+#endif
+
+}
+
+template <class T>
+static __device__  T tex2DGrad(cudaTextureObject_t texObject, float x, float y, float2 dPdx, float2 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DGrad(&ret, texObject, x, y, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float2 dPdx, float2 dPdy, bool* isResident)
+{ 
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2DGrad_sparse", ptr, obj, x, y, &dPdx, &dPdy, &res);
+  *isResident = (res != 0);
+#endif
+
+}
+
+template <class T>
+static __device__  T tex2DGrad(cudaTextureObject_t texObject, float x, float y, float2 dPdx, float2 dPdy, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DGrad(&ret, texObject, x, y, dPdx, dPdy, isResident);
+  return ret;
+#endif  
+}
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3DGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float4 dPdx, float4 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex3DGrad_v2", ptr, obj, x, y, z, &dPdx, &dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T tex3DGrad(cudaTextureObject_t texObject, float x, float y, float z, float4 dPdx, float4 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3DGrad(&ret, texObject, x, y, z, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex3DGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float z, float4 dPdx, float4 dPdy, bool* isResident)
+{ 
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex3DGrad_sparse", ptr, obj, x, y, z, &dPdx, &dPdy, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex3DGrad(cudaTextureObject_t texObject, float x, float y, float z, float4 dPdx, float4 dPdy, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex3DGrad(&ret, texObject, x, y, z, dPdx, dPdy, isResident);
+  return ret;
+#endif  
+}
+
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex1DLayeredGrad(T *ptr, cudaTextureObject_t obj, float x, int layer, float dPdx, float dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex1DLayeredGrad", ptr, obj, x, layer, dPdx, dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T tex1DLayeredGrad(cudaTextureObject_t texObject, float x, int layer, float dPdx, float dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex1DLayeredGrad(&ret, texObject, x, layer, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayeredGrad(T * ptr, cudaTextureObject_t obj, float x, float y, int layer, float2 dPdx, float2 dPdy)
+{ 
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itex2DLayeredGrad_v2", ptr, obj, x, y, layer, &dPdx, &dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayeredGrad(cudaTextureObject_t texObject, float x, float y, int layer, float2 dPdx, float2 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayeredGrad(&ret, texObject, x, y, layer, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+#if __NV_TEX_SPARSE
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type tex2DLayeredGrad(T * ptr, cudaTextureObject_t obj, float x, float y, int layer, float2 dPdx, float2 dPdy, bool* isResident)
+{ 
+#ifdef __CUDA_ARCH__
+  unsigned char res;
+  __nv_tex_surf_handler("__itex2DLayeredGrad_sparse", ptr, obj, x, y, layer, &dPdx, &dPdy, &res);
+  *isResident = (res != 0);
+#endif
+}
+
+template <class T>
+static __device__  T tex2DLayeredGrad(cudaTextureObject_t texObject, float x, float y, int layer, float2 dPdx, float2 dPdy, bool* isResident)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  tex2DLayeredGrad(&ret, texObject, x, y, layer, dPdx, dPdy, isResident);
+  return ret;
+#endif  
+}
+#endif  /* __NV_TEX_SPARSE */
+
+
+template <typename T>
+static __device__ typename __nv_itex_trait<T>::type texCubemapLayeredGrad(T *ptr, cudaTextureObject_t obj, float x, float y, float z, int layer, float4 dPdx, float4 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  __nv_tex_surf_handler("__itexCubemapLayeredGrad_v2", ptr, obj, x, y, z, layer, &dPdx, &dPdy);
+#endif
+}
+
+template <class T>
+static __device__  T texCubemapLayeredGrad(cudaTextureObject_t texObject, float x, float y, float z, int layer, float4 dPdx, float4 dPdy)
+{
+#ifdef __CUDA_ARCH__
+  T ret;
+  texCubemapLayeredGrad(&ret, texObject, x, y, z, layer, dPdx, dPdy);
+  return ret;
+#endif  
+}
+
+#undef __NV_TEX_SPARSE
+
+#endif // __cplusplus && __CUDACC__
+#endif // __TEXTURE_INDIRECT_FUNCTIONS_H__
diff --git a/ext/cudart/include/texture_types.h b/ext/cudart/include/texture_types.h
new file mode 100644
index 00000000..ef319422
--- /dev/null
+++ b/ext/cudart/include/texture_types.h
@@ -0,0 +1,281 @@
+/*
+ * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__TEXTURE_TYPES_H__)
+#define __TEXTURE_TYPES_H__
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "driver_types.h"
+
+/**
+ * \addtogroup CUDART_TYPES
+ *
+ * @{
+ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#define cudaTextureType1D              0x01
+#define cudaTextureType2D              0x02
+#define cudaTextureType3D              0x03
+#define cudaTextureTypeCubemap         0x0C
+#define cudaTextureType1DLayered       0xF1
+#define cudaTextureType2DLayered       0xF2
+#define cudaTextureTypeCubemapLayered  0xFC
+
+/**
+ * CUDA texture address modes
+ */
+enum __device_builtin__ cudaTextureAddressMode
+{
+    cudaAddressModeWrap   = 0,    /**< Wrapping address mode */
+    cudaAddressModeClamp  = 1,    /**< Clamp to edge address mode */
+    cudaAddressModeMirror = 2,    /**< Mirror address mode */
+    cudaAddressModeBorder = 3     /**< Border address mode */
+};
+
+/**
+ * CUDA texture filter modes
+ */
+enum __device_builtin__ cudaTextureFilterMode
+{
+    cudaFilterModePoint  = 0,     /**< Point filter mode */
+    cudaFilterModeLinear = 1      /**< Linear filter mode */
+};
+
+/**
+ * CUDA texture read modes
+ */
+enum __device_builtin__ cudaTextureReadMode
+{
+    cudaReadModeElementType     = 0,  /**< Read texture as specified element type */
+    cudaReadModeNormalizedFloat = 1   /**< Read texture as normalized float */
+};
+
+/**
+ * CUDA texture reference
+ */
+struct __device_builtin__ textureReference
+{
+    /**
+     * Indicates whether texture reads are normalized or not
+     */
+    int                          normalized;
+    /**
+     * Texture filter mode
+     */
+    enum cudaTextureFilterMode   filterMode;
+    /**
+     * Texture address mode for up to 3 dimensions
+     */
+    enum cudaTextureAddressMode  addressMode[3];
+    /**
+     * Channel descriptor for the texture reference
+     */
+    struct cudaChannelFormatDesc channelDesc;
+    /**
+     * Perform sRGB->linear conversion during texture read
+     */
+    int                          sRGB;
+    /**
+     * Limit to the anisotropy ratio
+     */
+    unsigned int                 maxAnisotropy;
+    /**
+     * Mipmap filter mode
+     */
+    enum cudaTextureFilterMode   mipmapFilterMode;
+    /**
+     * Offset applied to the supplied mipmap level
+     */
+    float                        mipmapLevelBias;
+    /**
+     * Lower end of the mipmap level range to clamp access to
+     */
+    float                        minMipmapLevelClamp;
+    /**
+     * Upper end of the mipmap level range to clamp access to
+     */
+    float                        maxMipmapLevelClamp;
+    /**
+     * Disable any trilinear filtering optimizations.
+     */
+    int                          disableTrilinearOptimization;
+    int                          __cudaReserved[14];
+};
+
+/**
+ * CUDA texture descriptor
+ */
+struct __device_builtin__ cudaTextureDesc
+{
+    /**
+     * Texture address mode for up to 3 dimensions
+     */
+    enum cudaTextureAddressMode addressMode[3];
+    /**
+     * Texture filter mode
+     */
+    enum cudaTextureFilterMode  filterMode;
+    /**
+     * Texture read mode
+     */
+    enum cudaTextureReadMode    readMode;
+    /**
+     * Perform sRGB->linear conversion during texture read
+     */
+    int                         sRGB;
+    /**
+     * Texture Border Color
+     */
+    float                       borderColor[4];
+    /**
+     * Indicates whether texture reads are normalized or not
+     */
+    int                         normalizedCoords;
+    /**
+     * Limit to the anisotropy ratio
+     */
+    unsigned int                maxAnisotropy;
+    /**
+     * Mipmap filter mode
+     */
+    enum cudaTextureFilterMode  mipmapFilterMode;
+    /**
+     * Offset applied to the supplied mipmap level
+     */
+    float                       mipmapLevelBias;
+    /**
+     * Lower end of the mipmap level range to clamp access to
+     */
+    float                       minMipmapLevelClamp;
+    /**
+     * Upper end of the mipmap level range to clamp access to
+     */
+    float                       maxMipmapLevelClamp;
+    /**
+     * Disable any trilinear filtering optimizations.
+     */
+    int                         disableTrilinearOptimization;
+};
+
+struct __device_builtin__ cudaTextureDesc_v2
+{
+    /**
+     * Texture address mode for up to 3 dimensions
+     */
+    enum cudaTextureAddressMode addressMode[3];
+    /**
+     * Texture filter mode
+     */
+    enum cudaTextureFilterMode  filterMode;
+    /**
+     * Texture read mode
+     */
+    enum cudaTextureReadMode    readMode;
+    /**
+     * Perform sRGB->linear conversion during texture read
+     */
+    int                         sRGB;
+    /**
+     * Texture Border Color
+     */
+    float                       borderColor[4];
+    /**
+     * Indicates whether texture reads are normalized or not
+     */
+    int                         normalizedCoords;
+    /**
+     * Limit to the anisotropy ratio
+     */
+    unsigned int                maxAnisotropy;
+    /**
+     * Mipmap filter mode
+     */
+    enum cudaTextureFilterMode  mipmapFilterMode;
+    /**
+     * Offset applied to the supplied mipmap level
+     */
+    float                       mipmapLevelBias;
+    /**
+     * Lower end of the mipmap level range to clamp access to
+     */
+    float                       minMipmapLevelClamp;
+    /**
+     * Upper end of the mipmap level range to clamp access to
+     */
+    float                       maxMipmapLevelClamp;
+    /**
+     * Disable any trilinear filtering optimizations.
+     */
+    int                         disableTrilinearOptimization;
+    /**
+     * Enable seamless cube map filtering.
+     */
+    int                         seamlessCubemap;
+};
+
+/**
+ * An opaque value that represents a CUDA texture object
+ */
+typedef __device_builtin__ unsigned long long cudaTextureObject_t;
+
+/** @} */
+/** @} */ /* END CUDART_TYPES */
+
+#endif /* !__TEXTURE_TYPES_H__ */
diff --git a/ext/cudart/include/vector_functions.h b/ext/cudart/include/vector_functions.h
new file mode 100644
index 00000000..bee6cd32
--- /dev/null
+++ b/ext/cudart/include/vector_functions.h
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__VECTOR_FUNCTIONS_H__)
+#define __VECTOR_FUNCTIONS_H__
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#if defined(__CUDACC_RTC__)
+#define __VECTOR_FUNCTIONS_DECL__ __host__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __VECTOR_FUNCTIONS_DECL__ static __inline__ __host__ __device__
+#endif /* __CUDACC_RTC__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__VECTOR_FUNCTIONS_DECL__ char1 make_char1(signed char x);
+
+__VECTOR_FUNCTIONS_DECL__ uchar1 make_uchar1(unsigned char x);
+
+__VECTOR_FUNCTIONS_DECL__ char2 make_char2(signed char x, signed char y);
+
+__VECTOR_FUNCTIONS_DECL__ uchar2 make_uchar2(unsigned char x, unsigned char y);
+
+__VECTOR_FUNCTIONS_DECL__ char3 make_char3(signed char x, signed char y, signed char z);
+
+__VECTOR_FUNCTIONS_DECL__ uchar3 make_uchar3(unsigned char x, unsigned char y, unsigned char z);
+
+__VECTOR_FUNCTIONS_DECL__ char4 make_char4(signed char x, signed char y, signed char z, signed char w);
+
+__VECTOR_FUNCTIONS_DECL__ uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w);
+
+__VECTOR_FUNCTIONS_DECL__ short1 make_short1(short x);
+
+__VECTOR_FUNCTIONS_DECL__ ushort1 make_ushort1(unsigned short x);
+
+__VECTOR_FUNCTIONS_DECL__ short2 make_short2(short x, short y);
+
+__VECTOR_FUNCTIONS_DECL__ ushort2 make_ushort2(unsigned short x, unsigned short y);
+
+__VECTOR_FUNCTIONS_DECL__ short3 make_short3(short x,short y, short z);
+
+__VECTOR_FUNCTIONS_DECL__ ushort3 make_ushort3(unsigned short x, unsigned short y, unsigned short z);
+
+__VECTOR_FUNCTIONS_DECL__ short4 make_short4(short x, short y, short z, short w);
+
+__VECTOR_FUNCTIONS_DECL__ ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w);
+
+__VECTOR_FUNCTIONS_DECL__ int1 make_int1(int x);
+
+__VECTOR_FUNCTIONS_DECL__ uint1 make_uint1(unsigned int x);
+
+__VECTOR_FUNCTIONS_DECL__ int2 make_int2(int x, int y);
+
+__VECTOR_FUNCTIONS_DECL__ uint2 make_uint2(unsigned int x, unsigned int y);
+
+__VECTOR_FUNCTIONS_DECL__ int3 make_int3(int x, int y, int z);
+
+__VECTOR_FUNCTIONS_DECL__ uint3 make_uint3(unsigned int x, unsigned int y, unsigned int z);
+
+__VECTOR_FUNCTIONS_DECL__ int4 make_int4(int x, int y, int z, int w);
+
+__VECTOR_FUNCTIONS_DECL__ uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w);
+
+__VECTOR_FUNCTIONS_DECL__ long1 make_long1(long int x);
+
+__VECTOR_FUNCTIONS_DECL__ ulong1 make_ulong1(unsigned long int x);
+
+__VECTOR_FUNCTIONS_DECL__ long2 make_long2(long int x, long int y);
+
+__VECTOR_FUNCTIONS_DECL__ ulong2 make_ulong2(unsigned long int x, unsigned long int y);
+
+__VECTOR_FUNCTIONS_DECL__ long3 make_long3(long int x, long int y, long int z);
+
+__VECTOR_FUNCTIONS_DECL__ ulong3 make_ulong3(unsigned long int x, unsigned long int y, unsigned long int z);
+
+__VECTOR_FUNCTIONS_DECL__ long4 make_long4(long int x, long int y, long int z, long int w);
+
+__VECTOR_FUNCTIONS_DECL__ ulong4 make_ulong4(unsigned long int x, unsigned long int y, unsigned long int z, unsigned long int w);
+
+__VECTOR_FUNCTIONS_DECL__ float1 make_float1(float x);
+
+__VECTOR_FUNCTIONS_DECL__ float2 make_float2(float x, float y);
+
+__VECTOR_FUNCTIONS_DECL__ float3 make_float3(float x, float y, float z);
+
+__VECTOR_FUNCTIONS_DECL__ float4 make_float4(float x, float y, float z, float w);
+
+__VECTOR_FUNCTIONS_DECL__ longlong1 make_longlong1(long long int x);
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong1 make_ulonglong1(unsigned long long int x);
+
+__VECTOR_FUNCTIONS_DECL__ longlong2 make_longlong2(long long int x, long long int y);
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong2 make_ulonglong2(unsigned long long int x, unsigned long long int y);
+
+__VECTOR_FUNCTIONS_DECL__ longlong3 make_longlong3(long long int x, long long int y, long long int z);
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong3 make_ulonglong3(unsigned long long int x, unsigned long long int y, unsigned long long int z);
+
+__VECTOR_FUNCTIONS_DECL__ longlong4 make_longlong4(long long int x, long long int y, long long int z, long long int w);
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong4 make_ulonglong4(unsigned long long int x, unsigned long long int y, unsigned long long int z, unsigned long long int w);
+
+__VECTOR_FUNCTIONS_DECL__ double1 make_double1(double x);
+
+__VECTOR_FUNCTIONS_DECL__ double2 make_double2(double x, double y);
+
+__VECTOR_FUNCTIONS_DECL__ double3 make_double3(double x, double y, double z);
+
+__VECTOR_FUNCTIONS_DECL__ double4 make_double4(double x, double y, double z, double w);
+
+#undef __VECTOR_FUNCTIONS_DECL__
+
+#if !defined(__CUDACC_RTC__)
+#include "vector_functions.hpp"
+#endif /* !__CUDACC_RTC__ */
+
+#endif /* !__VECTOR_FUNCTIONS_H__ */
diff --git a/ext/cudart/include/vector_functions.hpp b/ext/cudart/include/vector_functions.hpp
new file mode 100644
index 00000000..ab69cf38
--- /dev/null
+++ b/ext/cudart/include/vector_functions.hpp
@@ -0,0 +1,316 @@
+/*
+ * Copyright 1993-2014 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__VECTOR_FUNCTIONS_HPP__)
+#define __VECTOR_FUNCTIONS_HPP__
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#include "cuda_runtime_api.h"
+
+#if defined(__CUDACC_RTC__)
+#define __VECTOR_FUNCTIONS_DECL__ __host__ __device__
+#else /* !__CUDACC_RTC__ */
+#define __VECTOR_FUNCTIONS_DECL__ static __inline__ __host__ __device__
+#endif /* __CUDACC_RTC__ */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+__VECTOR_FUNCTIONS_DECL__ char1 make_char1(signed char x)
+{
+  char1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uchar1 make_uchar1(unsigned char x)
+{
+  uchar1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ char2 make_char2(signed char x, signed char y)
+{
+  char2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uchar2 make_uchar2(unsigned char x, unsigned char y)
+{
+  uchar2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ char3 make_char3(signed char x, signed char y, signed char z)
+{
+  char3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uchar3 make_uchar3(unsigned char x, unsigned char y, unsigned char z)
+{
+  uchar3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ char4 make_char4(signed char x, signed char y, signed char z, signed char w)
+{
+  char4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w)
+{
+  uchar4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ short1 make_short1(short x)
+{
+  short1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ushort1 make_ushort1(unsigned short x)
+{
+  ushort1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ short2 make_short2(short x, short y)
+{
+  short2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ushort2 make_ushort2(unsigned short x, unsigned short y)
+{
+  ushort2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ short3 make_short3(short x,short y, short z)
+{ 
+  short3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ushort3 make_ushort3(unsigned short x, unsigned short y, unsigned short z)
+{
+  ushort3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ short4 make_short4(short x, short y, short z, short w)
+{
+  short4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w)
+{
+  ushort4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ int1 make_int1(int x)
+{
+  int1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uint1 make_uint1(unsigned int x)
+{
+  uint1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ int2 make_int2(int x, int y)
+{
+  int2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uint2 make_uint2(unsigned int x, unsigned int y)
+{
+  uint2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ int3 make_int3(int x, int y, int z)
+{
+  int3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uint3 make_uint3(unsigned int x, unsigned int y, unsigned int z)
+{
+  uint3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ int4 make_int4(int x, int y, int z, int w)
+{
+  int4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w)
+{
+  uint4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ long1 make_long1(long int x)
+{
+  long1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulong1 make_ulong1(unsigned long int x)
+{
+  ulong1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ long2 make_long2(long int x, long int y)
+{
+  long2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulong2 make_ulong2(unsigned long int x, unsigned long int y)
+{
+  ulong2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ long3 make_long3(long int x, long int y, long int z)
+{
+  long3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulong3 make_ulong3(unsigned long int x, unsigned long int y, unsigned long int z)
+{
+  ulong3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ long4 make_long4(long int x, long int y, long int z, long int w)
+{
+  long4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulong4 make_ulong4(unsigned long int x, unsigned long int y, unsigned long int z, unsigned long int w)
+{
+  ulong4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ float1 make_float1(float x)
+{
+  float1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ float2 make_float2(float x, float y)
+{
+  float2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ float3 make_float3(float x, float y, float z)
+{
+  float3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ float4 make_float4(float x, float y, float z, float w)
+{
+  float4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ longlong1 make_longlong1(long long int x)
+{
+  longlong1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong1 make_ulonglong1(unsigned long long int x)
+{
+  ulonglong1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ longlong2 make_longlong2(long long int x, long long int y)
+{
+  longlong2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong2 make_ulonglong2(unsigned long long int x, unsigned long long int y)
+{
+  ulonglong2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ longlong3 make_longlong3(long long int x, long long int y, long long int z)
+{
+  longlong3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong3 make_ulonglong3(unsigned long long int x, unsigned long long int y, unsigned long long int z)
+{
+  ulonglong3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ longlong4 make_longlong4(long long int x, long long int y, long long int z, long long int w)
+{
+  longlong4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ ulonglong4 make_ulonglong4(unsigned long long int x, unsigned long long int y, unsigned long long int z, unsigned long long int w)
+{
+  ulonglong4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ double1 make_double1(double x)
+{
+  double1 t; t.x = x; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ double2 make_double2(double x, double y)
+{
+  double2 t; t.x = x; t.y = y; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ double3 make_double3(double x, double y, double z)
+{
+  double3 t; t.x = x; t.y = y; t.z = z; return t;
+}
+
+__VECTOR_FUNCTIONS_DECL__ double4 make_double4(double x, double y, double z, double w)
+{
+  double4 t; t.x = x; t.y = y; t.z = z; t.w = w; return t;
+}
+
+#undef __VECTOR_FUNCTIONS_DECL__
+
+#endif /* !__VECTOR_FUNCTIONS_HPP__ */
+
diff --git a/ext/cudart/include/vector_types.h b/ext/cudart/include/vector_types.h
new file mode 100644
index 00000000..4cfabcff
--- /dev/null
+++ b/ext/cudart/include/vector_types.h
@@ -0,0 +1,443 @@
+/*
+ * Copyright 1993-2018 NVIDIA Corporation.  All rights reserved.
+ *
+ * NOTICE TO LICENSEE:
+ *
+ * This source code and/or documentation ("Licensed Deliverables") are
+ * subject to NVIDIA intellectual property rights under U.S. and
+ * international Copyright laws.
+ *
+ * These Licensed Deliverables contained herein is PROPRIETARY and
+ * CONFIDENTIAL to NVIDIA and is being provided under the terms and
+ * conditions of a form of NVIDIA software license agreement by and
+ * between NVIDIA and Licensee ("License Agreement") or electronically
+ * accepted by Licensee.  Notwithstanding any terms or conditions to
+ * the contrary in the License Agreement, reproduction or disclosure
+ * of the Licensed Deliverables to any third party without the express
+ * written consent of NVIDIA is prohibited.
+ *
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
+ * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
+ * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
+ * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
+ * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
+ * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
+ * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
+ * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
+ * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+ * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
+ * OF THESE LICENSED DELIVERABLES.
+ *
+ * U.S. Government End Users.  These Licensed Deliverables are a
+ * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
+ * 1995), consisting of "commercial computer software" and "commercial
+ * computer software documentation" as such terms are used in 48
+ * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
+ * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
+ * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
+ * U.S. Government End Users acquire the Licensed Deliverables with
+ * only those rights set forth herein.
+ *
+ * Any use of the Licensed Deliverables in individual and commercial
+ * software must include, in the user documentation and internal
+ * comments to the code, the above Disclaimer and U.S. Government End
+ * Users Notice.
+ */
+
+#if !defined(__VECTOR_TYPES_H__)
+#define __VECTOR_TYPES_H__
+
+#if !defined(__CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__)
+#define __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#define __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_VECTOR_TYPES_H__
+#endif
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#ifndef __DOXYGEN_ONLY__
+#include "crt/host_defines.h"
+#endif
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+#if !defined(__CUDACC__) && !defined(__CUDACC_RTC__) && \
+    defined(_WIN32) && !defined(_WIN64)
+
+#pragma warning(push)
+#pragma warning(disable: 4201 4408)
+
+#define __cuda_builtin_vector_align8(tag, members) \
+struct __device_builtin__ tag                      \
+{                                                  \
+    union                                          \
+    {                                              \
+        struct { members };                        \
+        struct { long long int :1,:0; };           \
+    };                                             \
+}
+
+#else /* !__CUDACC__ && !__CUDACC_RTC__ && _WIN32 && !_WIN64 */
+
+#define __cuda_builtin_vector_align8(tag, members) \
+struct __device_builtin__ __align__(8) tag         \
+{                                                  \
+    members                                        \
+}
+
+#endif /* !__CUDACC__ && !__CUDACC_RTC__ && _WIN32 && !_WIN64 */
+
+struct __device_builtin__ char1
+{
+    signed char x;
+};
+
+struct __device_builtin__ uchar1
+{
+    unsigned char x;
+};
+
+
+struct __device_builtin__ __align__(2) char2
+{
+    signed char x, y;
+};
+
+struct __device_builtin__ __align__(2) uchar2
+{
+    unsigned char x, y;
+};
+
+struct __device_builtin__ char3
+{
+    signed char x, y, z;
+};
+
+struct __device_builtin__ uchar3
+{
+    unsigned char x, y, z;
+};
+
+struct __device_builtin__ __align__(4) char4
+{
+    signed char x, y, z, w;
+};
+
+struct __device_builtin__ __align__(4) uchar4
+{
+    unsigned char x, y, z, w;
+};
+
+struct __device_builtin__ short1
+{
+    short x;
+};
+
+struct __device_builtin__ ushort1
+{
+    unsigned short x;
+};
+
+struct __device_builtin__ __align__(4) short2
+{
+    short x, y;
+};
+
+struct __device_builtin__ __align__(4) ushort2
+{
+    unsigned short x, y;
+};
+
+struct __device_builtin__ short3
+{
+    short x, y, z;
+};
+
+struct __device_builtin__ ushort3
+{
+    unsigned short x, y, z;
+};
+
+__cuda_builtin_vector_align8(short4, short x; short y; short z; short w;);
+__cuda_builtin_vector_align8(ushort4, unsigned short x; unsigned short y; unsigned short z; unsigned short w;);
+
+struct __device_builtin__ int1
+{
+    int x;
+};
+
+struct __device_builtin__ uint1
+{
+    unsigned int x;
+};
+
+__cuda_builtin_vector_align8(int2, int x; int y;);
+__cuda_builtin_vector_align8(uint2, unsigned int x; unsigned int y;);
+
+struct __device_builtin__ int3
+{
+    int x, y, z;
+};
+
+struct __device_builtin__ uint3
+{
+    unsigned int x, y, z;
+};
+
+struct __device_builtin__ __builtin_align__(16) int4
+{
+    int x, y, z, w;
+};
+
+struct __device_builtin__ __builtin_align__(16) uint4
+{
+    unsigned int x, y, z, w;
+};
+
+struct __device_builtin__ long1
+{
+    long int x;
+};
+
+struct __device_builtin__ ulong1
+{
+    unsigned long x;
+};
+
+#if defined(_WIN32)
+__cuda_builtin_vector_align8(long2, long int x; long int y;);
+__cuda_builtin_vector_align8(ulong2, unsigned long int x; unsigned long int y;);
+#else /* !_WIN32 */
+
+struct __device_builtin__ __align__(2*sizeof(long int)) long2
+{
+    long int x, y;
+};
+
+struct __device_builtin__ __align__(2*sizeof(unsigned long int)) ulong2
+{
+    unsigned long int x, y;
+};
+
+#endif /* _WIN32 */
+
+struct __device_builtin__ long3
+{
+    long int x, y, z;
+};
+
+struct __device_builtin__ ulong3
+{
+    unsigned long int x, y, z;
+};
+
+struct __device_builtin__ __builtin_align__(16) long4
+{
+    long int x, y, z, w;
+};
+
+struct __device_builtin__ __builtin_align__(16) ulong4
+{
+    unsigned long int x, y, z, w;
+};
+
+struct __device_builtin__ float1
+{
+    float x;
+};
+
+#if !defined(__CUDACC__) && defined(__arm__) && \
+    defined(__ARM_PCS_VFP) && __GNUC__ == 4 && __GNUC_MINOR__ == 6
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-pedantic"
+
+struct __device_builtin__ __attribute__((aligned(8))) float2
+{
+    float x; float y; float __cuda_gnu_arm_ice_workaround[0];
+};
+
+#pragma GCC poison __cuda_gnu_arm_ice_workaround
+#pragma GCC diagnostic pop
+
+#else /* !__CUDACC__ && __arm__ && __ARM_PCS_VFP &&
+         __GNUC__ == 4&& __GNUC_MINOR__ == 6 */
+
+__cuda_builtin_vector_align8(float2, float x; float y;);
+
+#endif /* !__CUDACC__ && __arm__ && __ARM_PCS_VFP &&
+          __GNUC__ == 4&& __GNUC_MINOR__ == 6 */
+
+struct __device_builtin__ float3
+{
+    float x, y, z;
+};
+
+struct __device_builtin__ __builtin_align__(16) float4
+{
+    float x, y, z, w;
+};
+
+struct __device_builtin__ longlong1
+{
+    long long int x;
+};
+
+struct __device_builtin__ ulonglong1
+{
+    unsigned long long int x;
+};
+
+struct __device_builtin__ __builtin_align__(16) longlong2
+{
+    long long int x, y;
+};
+
+struct __device_builtin__ __builtin_align__(16) ulonglong2
+{
+    unsigned long long int x, y;
+};
+
+struct __device_builtin__ longlong3
+{
+    long long int x, y, z;
+};
+
+struct __device_builtin__ ulonglong3
+{
+    unsigned long long int x, y, z;
+};
+
+struct __device_builtin__ __builtin_align__(16) longlong4
+{
+    long long int x, y, z ,w;
+};
+
+struct __device_builtin__ __builtin_align__(16) ulonglong4
+{
+    unsigned long long int x, y, z, w;
+};
+
+struct __device_builtin__ double1
+{
+    double x;
+};
+
+struct __device_builtin__ __builtin_align__(16) double2
+{
+    double x, y;
+};
+
+struct __device_builtin__ double3
+{
+    double x, y, z;
+};
+
+struct __device_builtin__ __builtin_align__(16) double4
+{
+    double x, y, z, w;
+};
+
+#if !defined(__CUDACC__) && defined(_WIN32) && !defined(_WIN64)
+
+#pragma warning(pop)
+
+#endif /* !__CUDACC__ && _WIN32 && !_WIN64 */
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+typedef __device_builtin__ struct char1 char1;
+typedef __device_builtin__ struct uchar1 uchar1;
+typedef __device_builtin__ struct char2 char2;
+typedef __device_builtin__ struct uchar2 uchar2;
+typedef __device_builtin__ struct char3 char3;
+typedef __device_builtin__ struct uchar3 uchar3;
+typedef __device_builtin__ struct char4 char4;
+typedef __device_builtin__ struct uchar4 uchar4;
+typedef __device_builtin__ struct short1 short1;
+typedef __device_builtin__ struct ushort1 ushort1;
+typedef __device_builtin__ struct short2 short2;
+typedef __device_builtin__ struct ushort2 ushort2;
+typedef __device_builtin__ struct short3 short3;
+typedef __device_builtin__ struct ushort3 ushort3;
+typedef __device_builtin__ struct short4 short4;
+typedef __device_builtin__ struct ushort4 ushort4;
+typedef __device_builtin__ struct int1 int1;
+typedef __device_builtin__ struct uint1 uint1;
+typedef __device_builtin__ struct int2 int2;
+typedef __device_builtin__ struct uint2 uint2;
+typedef __device_builtin__ struct int3 int3;
+typedef __device_builtin__ struct uint3 uint3;
+typedef __device_builtin__ struct int4 int4;
+typedef __device_builtin__ struct uint4 uint4;
+typedef __device_builtin__ struct long1 long1;
+typedef __device_builtin__ struct ulong1 ulong1;
+typedef __device_builtin__ struct long2 long2;
+typedef __device_builtin__ struct ulong2 ulong2;
+typedef __device_builtin__ struct long3 long3;
+typedef __device_builtin__ struct ulong3 ulong3;
+typedef __device_builtin__ struct long4 long4;
+typedef __device_builtin__ struct ulong4 ulong4;
+typedef __device_builtin__ struct float1 float1;
+typedef __device_builtin__ struct float2 float2;
+typedef __device_builtin__ struct float3 float3;
+typedef __device_builtin__ struct float4 float4;
+typedef __device_builtin__ struct longlong1 longlong1;
+typedef __device_builtin__ struct ulonglong1 ulonglong1;
+typedef __device_builtin__ struct longlong2 longlong2;
+typedef __device_builtin__ struct ulonglong2 ulonglong2;
+typedef __device_builtin__ struct longlong3 longlong3;
+typedef __device_builtin__ struct ulonglong3 ulonglong3;
+typedef __device_builtin__ struct longlong4 longlong4;
+typedef __device_builtin__ struct ulonglong4 ulonglong4;
+typedef __device_builtin__ struct double1 double1;
+typedef __device_builtin__ struct double2 double2;
+typedef __device_builtin__ struct double3 double3;
+typedef __device_builtin__ struct double4 double4;
+
+/*******************************************************************************
+*                                                                              *
+*                                                                              *
+*                                                                              *
+*******************************************************************************/
+
+struct __device_builtin__ dim3
+{
+    unsigned int x, y, z;
+#if defined(__cplusplus)
+#if __cplusplus >= 201103L
+    __host__ __device__ constexpr dim3(unsigned int vx = 1, unsigned int vy = 1, unsigned int vz = 1) : x(vx), y(vy), z(vz) {}
+    __host__ __device__ constexpr dim3(uint3 v) : x(v.x), y(v.y), z(v.z) {}
+    __host__ __device__ constexpr operator uint3(void) const { return uint3{x, y, z}; }
+#else
+    __host__ __device__ dim3(unsigned int vx = 1, unsigned int vy = 1, unsigned int vz = 1) : x(vx), y(vy), z(vz) {}
+    __host__ __device__ dim3(uint3 v) : x(v.x), y(v.y), z(v.z) {}
+    __host__ __device__ operator uint3(void) const { uint3 t; t.x = x; t.y = y; t.z = z; return t; }
+#endif
+#endif /* __cplusplus */
+};
+
+typedef __device_builtin__ struct dim3 dim3;
+
+#undef  __cuda_builtin_vector_align8
+
+#if defined(__UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_VECTOR_TYPES_H__)
+#undef __CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS__
+#undef __UNDEF_CUDA_INCLUDE_COMPILER_INTERNAL_HEADERS_VECTOR_TYPES_H__
+#endif
+
+#endif /* !__VECTOR_TYPES_H__ */
diff --git a/ext/cudart/lib/Win32/OpenCL.lib b/ext/cudart/lib/Win32/OpenCL.lib
new file mode 100644
index 0000000000000000000000000000000000000000..c06b10f396eb1ee2175d459efba571400892e47b
GIT binary patch
literal 31126
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
R394JGAoik89HOlC1OS&SynO%w

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/Win32/cuda.lib b/ext/cudart/lib/Win32/cuda.lib
new file mode 100644
index 0000000000000000000000000000000000000000..56151c765658e5be3e672dd47594ea6a8d35e9d1
GIT binary patch
literal 147046
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

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/Win32/cudadevrt.lib b/ext/cudart/lib/Win32/cudadevrt.lib
new file mode 100644
index 0000000000000000000000000000000000000000..a8f1e0e36f27a0161b0f4978256857ed77758c0a
GIT binary patch
literal 606674
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%0AbF&{~V(4Wua7;^!W0S31
z#>!gD&bNw{EsdGEhmnPYO{io#v$8_wVFrd@%y9}O`3i{#S-8(Ju})#&S7KmE3@^&h
zOAndC$ll4~Qc$Uo(#e#lkd|MhkUN)&Rf%Dde?e-VyN^PCk-`Qh;|PW1X-xX1c{`ZJ
zI6D}apEBtumPj!(2syWKi@7v&b6GQ~q!#6}^GmQYDm&+U^D334u3}={!ETV3udtil
zK{q+EAf1s#nV-=^(7GfwxtoDahMOstiM4~7@gM`kCkDadiwumJOv0sqSSu9D^NX?>
zN_{w-6<nR29r=}0^YZxgQ&ZNnF!P7-vkE%*FmP-TRQAvN&MaB1&nB7az{%Up$h4bT
zF(CCFtAKM4178&nTP-v5R3`pLW=1AY1`bt5CNDMySGEHs`S}XDiFuU@Njdp}0t}w4
zY*QGSHF#N6*)OK#rxxd_mndW;mZd8EV=Pi|FUm|&$T`Rp#E_V$kSWBYrjRMj!)U?6
z;m62Y!oYTgIiM)Dur&1wGvh@j<}wB*b_Rw;ESkj%|9M18_A_WH<USKH$WJRV=M@N>
z&7hE3GLc2WwfF|3LT2%4W|fkRiwtbr`5hG!^HLTvh?j(NvmIw(G8AQ5#=>)wfj@|k
zoxy|Ate`0K41-8YD?4jD|Aw6W{Or^eh0+3rq;dhq^9&4OLR%T)<I{8UlM-{{;{}C6
z6p|BjauQisx;fNSQ^FWnT3PtR7}x}IZt$}>Gq6?(3Md>F5XfNQa41U7$c$iSoX4(^
zn5V|T-Yy`Tn8@H+l95>QnuRf(F`=L+zbrGQR)|HAOIaZ?g_XC2fzgm5&^I7hAz6f*
zaWXUG4_3BjMuxo%3~CI5#XtD@(}h?=6v{JF^KLSmW)>^FWtL~KVqqxIDArWSEY>d*
zbx0~Lu9RmLFP+cZn3I{8npmWeHiL`Nl#ydI1LHKNt9ki(x@kH2i6sgpl?AGdmBpzg
z3gsD@i&z8`)A*GYGGiEp3-bBd)-f_YWK>oto5;z(jgf;XjLD%qzceR?k>Nk{0)^bf
zip<>7T!oZN><p(^h4QSJnVOiCQ;WZ{2&S%QVyI$NNX?tYsFax(%xIFBn`*-ND6v=}
zvqT{&H9awp!9O^aiK&f+L7tJTjFHcnNzFglUYJFkgPEIApfrX@Ss~R`L`XrMfkBwT
zrzAf=r<#i^j=?c0wWOSvsW~IHI8~vfJU@alvY5d!z>|ZS&4hvZHUmQmi$Y>f8w2}S
zUdB8ow$lvE+ZYv+Qr(%{((;RP?HL>jic*UwFbNi$i}SA*VPW{kz_gE1Nx%3kE6Ym(
z!D1_ZW<wT(;>;=`aTX>H23=N#($s$p3JN***cjwF1k(DM+wv5QjTDkHOS~A>^YSIx
zj8apqJ~J>pW?^~F$@YRXK|_-vCAHu_V{=||r9yI1YT_aW<<dMBCZ;EB3>gf?iFx@Y
z8L36T8QJeMFqN}8E2NaBZsjO0N-fLGFD+(g7fQ)wWe#AN!jP6<RGwIrqR_{xkeTzC
znIVfQIkBW9HMgLV!8|WN&xBFIBm6u&PckoSEi+>rGn*v~V*(S4KQs4y_F%s-pUgZX
zNmfn{mL&`fW(=(E3?dBGj3z1hsTQm$MMbH_1^M$hMT@lAS)Q{p2r(Gs=P}G-VX9(b
z$!21b;Z-cj-^P?tP@<5RT7HOyc^_LsF+)LOQOS2khRuwM`Dqgw*lw}0q%tTc<}omG
z`G~V`VNy~kOXp=!V-U}57Gl(7WYl0_e!;_{$-vdZ%FxKkFo}`5k+UI1p**uBLm^R|
ziERoaLl^TWrsRyo%sf4Y)QaSs(&EgrR9yxh=4wXP6fwojJT;!iq)LTEg_O)RJ29ma
z1sw(kU3P&)YaZq)j0|U4gYuJ;ON%0yS(#Z3Qu9hQnGEwwOa2Ke=BJ%tV2R`~PR%V%
z;bFMQ&NzjgMT&vt0wa?Y1KWOP%iPS0MhPZm*1)3F;?kT5W`jh9Tn15wEQWyM)PlsK
za#rS}ObQCcQy2yELRgsf#hApn*kl<?QZkDRauO^18HMy?`B=+D9dna1^U4?m7?>Fu
z+*zIS@{4jeG7Bjvv+>!pB^n#)CS{gLF|)g|i6n|MGrwZxc4HJPn#C-X+$id)kegZD
zE5I+u&c@KfZjh&tnlA02kds)voXI#jzlfVnIFXl;O`4n0g^6{R4A*Q<#mpijCgx-o
zuD$HaWvSbES*P=|%QG;?vM^XPFh%n+a5JznaBRrWD=Es)QAkNl&HceFS|r85{DYl2
zn1#`VfklQxSs}5CNkBJVLN@0LBl89h=65X2OPQEDnVoX;OHzB;gHlS15_6(h*$dd%
zs~H%ZnOKAwIL|Qf7Be~KCT6E<GcXu&DJNI@F$yWnWYtp0&t_yy<7O{mWH;kt{KKY@
zoS4PT|BaoIp^1rcj--=IYFW@fW@c#~ru*ECiah*B7zLT9F|oVIvV7*_Kg-Ajx*BUA
z4_mK@OzK7k1~0~h)FSm_g>-%%rkS8&L;2#J42-PalKc#eEX=~pj6b>Ar!x!a%;z*r
z)h!MeVVTHfQmmjcn~N!&m*EVTYN~=MgS=)6gC_GDZji(_ZvGSo7KRE&fpiujMTOEA
zLW~Wp%>B&FX&fw-42<8|gOYPfQ&JB~8KkEcn{gH<XDF0q=I0z@XEc;7E=tVID=Ah;
z;t@#R%_x-VAt{)t%D|D&02=j?kY>E2&Jd$!8|uIypdrnz!BE@jz`*c2mO+C-TG&D(
zsbn4l!vR?l2Bj`W8x4jB>Vleb48{xv42%qECVLndayU~MSW+~kS7<OKEjY@+5CA&-
zcCH4477vpKL-2=V3=BIo7{upkFlcqNYA~p+IHAEHK3{`Di;Gi(Avoa_1H&E-2Jr<N
z3|gH$8VqVOXEYeZ7iutQaR_KI1m8Hzz;Hx^L41)0gI2q+27}t1^BN4|i!~Uu*u+7)
zFETJ3&|nZ>qQRimDy6}orf^w<L42tOgVs-34F<IbS27sImuWC)DJp0%s2N<-U=Uxf
z!Jy@-q`?r}aGil6M1w(mg$9FGp^65B+Lap`4B{&_7_?@pX)pw9++tve(O?i?rNN+e
zP(y=3t>v}`gZOF<2CbJ`8Vtb??l3S!XfTMc(O}RL)YV{6v$&_hAih?ELF>34=mzHd
z9-0gq4C3oR-qhD%5dWgVAiiFMK{`}}K`G+F9<byF4F>5o8VpKv9?Z}JDc-2Tz-a!2
zU4tQb&jX0tHfb<Or)n?+3p`|C@X%lo->ktP4GImA&091Ww4@9nAt%07gF!k6bVv5X
z71|)9wrMa(pVVMbV|es|L43OggO-w!1_MKozOaA>gZK^&2I&|L1|@?>IT|3vJ2e=j
zw`wq`1w7SY5Z|T2pv7sd!H`t&f`Q=!lLmwMZVd+MBn<|&gx4Aj;(Ih0q_=1=1P8oh
zU{Gja65p%Apv7*Y!Jt;~UV}k=p9X_;xCTSggbxf10xTK~;`=oiq&H|Vs4W2b|9}RA
z7K^C{L-2+l3=9bpjN%717^Gu07}Ny*XfTK$(qNEYufY&p@SlOf;RJ*DVGRZ?CNm8N
z(+v!u^mIgnK{`-_!SDkk;}X#Q=i)~-7^IhLFqrOOVqC!_eoTWw`a8(O%o+^h$2AzV
zyv#Ki#6e+pLW4nijs}DH1Puo9lNt<K3>F#;;-IKLrNJN_4@xp1ho078klv)hAfBPY
zAbtiE1eO{M;u|y=#LsFlNT+Bpi2u-F5I+a?jRUI&gZOz+)LLmUn0Bx-zF-!=pur#=
zrNI!qf|ZfMM}tB9q6PyfLx3axk_LnHZw&@h2R6nI7V*m(3|f)a8VqU?Y$q7RuV^qx
zABD!^RSgC$NgE9YwHIt37{sq>Fi87rFa&e3GlG-ab!aptum^xWpp|8-!64qC!61H9
zgF*Te)Qnpi3|g^v8VqU&*gr6c-_~G|exkvk#=)V%Abv-KLCeNogF!q%gF*bR27~kz
z4F<It96K1r?`bede*i@c2P1=u27~y04F*L^hbvrcGdO}c7#R#$H5h~$G#CUp^y~y3
z?r^bcFa)#kF*0PFVC4X%f5tyXhB*R^5)2$CxEKT&w9G(}Py)&GN~f85z(d+K0v{My
zG#D6Wb7^g53t$kR62KrnKY&5Wi=Bso)q?}%srdm6S|(fp4B}e?7{nI@Feshm;$dJd
z0Lv{1V9?sk8^9obC4fPEVE}`Y2Okdu>l{OnzJ&n{T1J8a4B}q`7{nI^Fen`t1luY8
z2g29dC=$S+CIV8iIDkRPO_Ya$m4inN%GWZG2w)I531ARk62PEzR05*a2Ex}`FCD-j
z9umMHzBGVA$wdYt83W;K-O~$T5HAT}5MLL-prr`P=QYrL4)T2qBne3$*I*Fu(O?kY
zsKKD6VxYkgJw=d_LEr=zsCaDy6<!}8Ir}jre~E)~wh1U_U(sLy=WLMXHzydxLAm+`
zv@ii>>KY>r2E#vsj124?3&5sb&|pwIBLvOGn#Q2wQW%<pYc&|uazr3DNMF)mFt8D2
zH2lU1)~BUlqQM{z$|Rr+Tn;i+lyL(a)X>wQvQbQfK^&BSRZKM))YgcfU;t;{3JnIe
z8VP9TJ*&Z><|7Hsxzc8k!ciQQZwoXS)Oe&Guz~aJK@A4A5UB=mmempk<<cBTmX%J{
zU=Rm|87Rl@gE|P5W0gQTc8dmsI4H-00vJ?7fHLe^4F>Ti&<v{s%CMkv1e9T`H5k-H
zq@g+Xf(C=Q4m886S!pn+xkz`gfb%OTl0a1eD6fKwRZu>^q`{yi0m_{v(iY&nDqXL^
zAYKE_sn0bS#HVO5h=X#fwhhRO6_AVyayuy1f->n>kdr<@^5{ZP9=!v}qgs4+8VurZ
zG#JEhX)s7n(qIt(vjCh$wV3Te4wixBQE5==4stLki*5tCSH=OHMYXsbKtU{X0-Qmm
zRW%rrVq_Q@9)R-p0}TenM3w|0p#pi)PzDAYRmKD>77Z>2Mh2}1?4VSkroq6%0OrSY
zYcQzAXlO97+yKoXY2D+~U{HIbslmXq0nCpT0>!Gf1_Mh6n14qU6n(lH3@iy?ezYVg
zUFm5suvmckw`4RJ)N~9q7+3_rd|r7_4Q9y5(4xV>At9<|s;I%B=3orr#42krs2wqZ
za9UM07}Pw>Ae^=8AZMCGI9D}6^^qln^H&>`0<9n%RXtG2X#?g68_7tp$T%22uw^WY
z5@MEMFk%BuV5w9yYA^^22rvXEI5L8o2QI>l3|txvTEAF8#l5QrgSe0egH|O6sD%Kk
zA_O%Uw0?j>WdW$<7SLeOD(43^E&>=C4hRT~^J_3@eG}4P2v!JXWH?~K=fcOxz@x#S
zRVoHDAWDNloHu|$>x(3)`2*U*&!)lP!o$eGtHGdEEStd?oRH4Q&>$e}!p#UO0JUbz
zgS3Gv8ZHe6?Zb)z460d-782r|8Vp*mLBXQ{$`GJ}Rai}f!SF#Yqa{Cs27?PbBLjy9
zgSNGX27_}xBLk@5XOm#mO4ia~P)aB&WdK#>tQrj3-8vc!Vx<jCE-Z`;+!_p8n?WJ=
zphAMtrJs>ONP|K88>lj`(qIsusKKCZssDgcta^cn_~Z`^T2u4`7=jgQ85tTruqsYv
z?A^@B$RPb#gCTf9EjS?6rZIXjYq=YMY^;l92H7}6gF$A627_4r2?m$hj0~W_V>SeN
z5ahnOkSfeDp^4GQjd6kidj*5^T2OPK=>vny0!9W_P&3a+gCR+wnUTSPU4y|Tj*&q`
zgF)I}gCQxQi;<y0T7$u5AtQr=27~lmkf}>S<)sFL%$op)po5GI4wBI3o)@UFTX0K*
z0o2@+o(XE9eP(26c){$loRL9XgF*Tu$kRVH!0kP4E0X|*pnss93!o-n1%vbq4F*#M
zB~WW;l?H?KbCB(>ObiXO&?cWNsMLFq1j_G_YEvnpVWJx-Qr0puNPwK9!64QSY42&9
znrSdN_c1Xz9AI`?&&VLC!5}?BgTZvcL?#7h@r@qLGIs(P6elqWGB8RAu&-d!HZj*=
z5StvpAigz#K^jy{D}YKEP+9*F<l`w7;1-*<tAz%G*wg@U3r%_!C=jPXi}sfwuT9rr
z05`@0EJ0~}2DI%pS%X3Rfd-_o{s?l!Or{si;)h=_YdM3OE()`lB-q4{o?w;f*I*C>
zRRG5{7-Sx5FsROB>R=H+UcsPc1}X~^=AB>=KXHOVdKt*@`H-Smiwo3Lc`(0%LHtYw
zgR~te2p53NJJ-M@4XPOu7CJDxTwr7XC2TWLIS6ver3^Odn;-`-(qIt3Qo*3DZ5O~G
zwg}YT`M@B30_3m7kOrETGN@EcSOO_LrAt9pFLhuPzh%KGb2ETJY-s?4`0Wfvp&1Ok
zMg^d`@=}FmObll=7#JB?7H}ypV3P1=)nF+7aE^%qw6Bg=gyV;&JevjsJE-%aKaUf{
zTA;z8FUt#JE!1GppCbTbEz)4nmlgrB7Hcr*&k_f*mS`~OOG;}nurny|HgGVY0MJpy
z4h#$o8T%o^Nl+RzRc`|k0+S93U<yt|d<Lx(U|?8O@9N{m$jE36(vZf;u#cgPfsx^>
zAjsi1j5Z7=3?Pjf3@<_V_2?C66qgj0BqlNFaWJS?=5jE6h>b7K$V;hU(90{+%gjs5
zXV3#pZtBHH`I#EWd-{dA2KhPq#2ciUSf&^yrN$c>#e?RC<5NJhwW;w%rFkWpxvBBV
zrSTR?hKZ&r#^#2W$$14uB_TzLdBr)2C8@5U31wG9V`smBRBndA_|&}8+<b<ukl{i-
z&~$7)1AirhzkN|^&SQoUrZk54@p)zO#U+U)naS}cCh_SEl8@u#qYTY*!NcS6#wnT%
zDV|wAnTD<`40~M50=zQ<GD6~mjhPvQvltl|_!z<s<AaUjQyBTDFjVJ*W(ZPKrZH5p
zsWS0TWvG@<3}tGXpA4Sd$}2IL$xy|w#pow*P|w@|BAP%%BZvUAT0yKzd4qp!4IrY4
zZyE!CJ#zt=4I*0kW<mvU=;!~(R;Fa&I+cO{ADasQ6b5(xe{6LSQ>6K)GSq^d!&lGD
zKa;_Uzn-}kWFJ<C@c(100@+BuJ5sHRQ%fc?sDQ$)(6uZeBO@!M7<9#r5GdGq8RQH~
znE5*yviLHY`MVj?_>7tO`xw&rHJJS54K$caK}0!-r~(mr@&*Acr68glL{#zhG4N|J
zrGli8RPqO~WGflCb}{e=ut@TEGPv^xuoUxkgSaC6eGK0G8cao)TJk|A5@WVFLl(m{
zXLtA1lAy%A>}`zP;tZ_%!rb}{Tp|qqplL*B1_mZ^20mv7CVd8W5r#hu!IgQ*pb4$a
zs#MUpx;F!_JOg(y1Ft;;zYGI2e>ejNe=q~5G{ZiIcb<7AMVWcUnaLiY>E|B|d`b*_
z%#3`l46O1Dg^=lYms^ZgVMg%<CB;?A4E%}=Oq@v!{LTza{BjIT{P7Gt{ILwY{Lu`Y
z{9z32{DBM{>^=;?nB7xL0uqZ7b5l!Fiy(7VK@9u~42+x+4E&A^jI6Q@LP0UitK3sd
zKod}z`FXJn{PGM8oG}di_6!WnwX6(s3^(G7bBzq*Q!>lqOU+CKS@~rd7+8ZD1bweD
z7aO}cf+l?;8963H%$))@mtU5FnLm<&gFl3Ulh>a?-e@fY4~XCe5uD7j3`mmvs~NcY
zS2FPMFK6Ij&ST&YW?<p>V_@g<WQb2Ls5Ew2%)r5`z`(PVf!C3N3g)tVGW=q4E6q!G
zPc3mQDJjZKDlJJZ_J?>o6zpwQ8HQ7?WuPfr$dZdN1}-TE&Oin(QwA<^hUB2s<ou!(
zZbse!22ME!P7g*tTLyk<21fp11~!n(c{~|jgJz>kQo}P#GTd?!)4dt_l^B@$q8WI>
z5xOwA1T<M4o|svp$-sPufg=SpImOJG!ocs!z|1etz{(%bz{MZMz|9-Vz<Q05FPMRk
zhl$^ufq`3sfmef(FPwotkCBnzoq><z0K2e@C<jM01G_i_r#lC`J_D-@2a_NJhaxkV
z4<t%L!BN6j#1QYCUz%64jDdw&hJkN21G^;yha>~zYYRKS#N2NT>{1LoKN;9f8F<AR
z1cEcU<kS5am|0{P_yRyGStS`J1*E2CJC^t)7Ar7t1vBu<GH`}4@LDtQB{2#HujcLc
zP0a<*(QahmS7Tu3OlRQtWnkx1W{7uAOwLHnVc_CaV&KbwhJm$PQR;q1CLsn+7X~I(
z1~z#%pTwM;d|x(Z5e7~R1{O^QR%f>FQvS)wr3Hz3$(6o|6_D9{r=0xc?BambBHz-S
zlFWjle9*d~{GwE5jx+{-2L?sXNeujr42t}=4D$S28C3Y!FsRBiyklgr@X5^evgMay
zVC2kY;IU+2SLR`oW?)a_`@`yzT2Pdl3|ga;=UA4XnUa{7oNCR(Z^|IT+QPt}%^=0S
zje(PqpYIa`r#u7a4JJ_5;GfCI!WF^5Bg4QM3NnuWDK7_41SB5g!12f-&%nNmg*%3U
z{}T%<pELviM0<vbpvkIq&}=Rr!~BAx{F3~V%7WBT2L=8d`w;##248L!Mut!Zp&}Q?
z*pS4eoK!)EAlJN-qDnV*b{&R1=ez>n!~!7(c0GpwT=DVFegQ!t@nNn(!Jhtp@qVGc
zPOd@m@eFf?H5sM}_h*CGDHt1hGMMO_nRqg2F%+xvO=95pWY8)!Ght9EE-7MVP*O2u
zXAm-CXAm-G2i*atq+-g>AY{hQAY{(YAY{SLAY{qTploQs!NBanAZ+N#AZ+NxAZ+N(
zAZ+NvAZ+N%AZ+NzAZ+N*AZ!@GAZ!%CAYwFwff>RCaj|0K00v=Vut@-eFfrIPfI*lT
zY!<*EjD(s0Fe<Ac@!@jj0Sv;#V2c0-VPddl0D~|AENXdyNyLDYLBx=gLBxoYLByDo
zLBxcULBy1kLBx!cLByPsLBxWSfhCH8O`Dk|ih)&^nN^RORiByFfSJ{hnbnAy)tH&Z
zgjvMUlv%{kj9J9coLR)sf?34Sl3B#iidn?anpwoqhFQeWmRZEmj#<Reo>|1ufmy`R
zky*shiCM(ZnOVfpg;~VVm085ljakIdoms@tgIUDTlUc;ji&@0bn_0xrhgrnXms!Nn
zk6FafpIO8(fLX*akXghqh*`uim|4UygjvKelv%_uj9J7moLR&$f?32cl3Bzsidn=k
znpwm!hFQcgmRZCwj#<Poo>{~&fmy^bky*qriCM%jnOVdzg;~Tfm083vjakGnoms>%
zgIUBdlUc+ti&?}ln_0v#hgrlhms!Lxk6FYppIOAPfLX+_kXgjAh*`w2m|4WIgjvL}
zlv%{Ej9J96oLR)Mf?33{l3B#Cidn?4npwoKhFQe0mRZEGj#<R8o>|1Ofmy_`ky*sB
ziCM(3nOW7)l7)@PSP(UgXJd(CU}<3%F~W{TjdrlH?qp-z1yaYlhmCbF8|ywc*8Oa(
z2iRB-vf<H*%S2q__C_WavpBT5g}Lk<i;4mmOqtBM7y=oXS22iNPU7X~=Jw%NmCNNn
ztB}jzz~IVPs?6WO5YNxRn9B5rfscWazkwl&pMfz)-jIPYho6Bdg1^Ann7^CBTi&pn
zp;+EfjIkU<6f+4i@`*9>cQd5&Lxsxub(rM&=Li4)FB-2BA0HnT%wT2YYH0YJVMlyQ
zVo73rypgGyWe*d-B6GET;vS|ZJ|`{ynG6LA@dZ|rd~ccgi&=B|-!ccu8@y$10ulBg
zLfhWN)Zi_12#5_9ZRMZIAkF`b*@yoLrvm>oW<Pm@%j``c!X8BE+Z!8MJYx<3vB9F?
zcJeb&!}%Ggo&5}C_A_RC{xj@43|f->&zOVd4WNRp{AbvqP3AM~kS6mPc5svV47)gg
zFoPBEGiEyjbHiuM{F4|#CaCa(yzvaugnkBULZjQEZEt8{IfLJq?+*k2Gv-Q=RUlic
z<PFZSH-LyH5Md7@^!yFYjZL002k=c|<bTFo2ol5NcnwqI>qh))OkVs*u2<r(SIOnO
z4Qfnh@Ld=hjp;rHLH?CtT#O<NEFHlLmBkIN3*(*LgX7avOX7<R7&z{`vb!^|MhbIz
zGw@#yV`mXz;Ll}X5iB-f;LT-Va%bSnWnlDX;C~w?#VEtTU(3M2)DXZ`$-o=Tz}?8e
z6VAXZ#=zgoz{;P=z`>sis<hR^1whSO{#-^jkxX?4<@gMD2CnH0{Fw}l-19(&Gw^4H
zOS8x^cqHc)1WS8ZCFd2WGjPpi;7?>=;+(_4pUS|*zam_M*@%Iw9b`5;e=`Fwe<K4k
zUkw9)Is*@X5(9@k!`*N`P~+G>Ij_K&fsvyg(*9~?;16eD<mZXt;Fn=w;V5R{Pmhr2
zcZp!<mttUITgS#H%fLJ}gzZ5%-_sC2Sq6sXUP>hu?^zWM^p3GGMKf|<V&V_<X6E?C
zz#qfF$oU)WVP0_t{xuA&{Mif~{AmoFvJ9>fd_s(TvJ4yyA$$r9{MQ(m<c+Q|Ff)rY
z@E0J|Ni$SL@LyqI=D)<i&3}P`hyNS{6Z1?4{tO02{$vI={x}A9mPiJ+$q{@f82Drv
zxaTl}n%;95c^pBlLS&O<8TLf*Ut?ef*}?-NctHfFeeVg`C(n=&$;&6hV3V9zAj-g1
z$-wW=z`$7#>IX3JPl@DV5odtJ21hx#8D7M|<;uXnHd2hano%>apf8fQgn>hsf$KOU
zpAQ57?MQC^WCk9PN8}l9MuK9UiRCT>lLP}_6{sc4DH_Tj!obYW7$wJ=$;d6iz%_vZ
zB)~a=fj@$QnNN}d)L|@U5aQ2c;Ff3bkK$)-Vbabk&}85%V_=nL;4fid;5fs?pA^N*
zufV{}+Qh*3i;>Tmf$ujXe>ejh$InRiRt7c^1|~~R7DWb*GH|mzi-FySfg?YR)q#aQ
z9n^<mfTfU1ND66!q>x8ZJRFh?9G@AOwHY{4nRsLv`2R96voVD5b4T+qi8F8~f*a{E
zjBKV1{1VYzJdzB2i41Hq44m#!+?EXdn$g_6QVbmF;HG&71CKQWzjm}Nk1_+(Hb!1c
z29Ajg{P7IzoU<7ClNs3g)1vwL<r$cmW;1XaGVo1j;89}Wo6Nu)&cL@ZnvtJDFinJk
zBZ+}Yje#?Wfl-Tre|Iz!vmk?Tt^@;z2Lp=^1E&`QvjGDGHv@lZbTFGO19!9_$Xk^R
z5*#-f_;)fWa<Ve=?`2TnH)oLI*I-oSmuFPq7h_c6=VertXP6kn23jJ`<i^ab%D^#^
zmB*2RvxkA(l|er~zAi?V--tmnKRK_!xuhaTgo(eBL5lSdDB(--YcVkL`ZMy+Wnki$
zXJFy?WMtqG6y;GD;b#(I;mQU#$bZCeTQV?DX5;6M<>bF9$Pem#ah8J`<xI?y3~cT~
zoCXa1-`QBWq!@To8Q4r29x7*MX67&`XXa!wDCcDIGcd9;BqbRdB^es=G9)l4XC@h%
z2{SPAGcYnTXfP<VGjMP-C^IOtF{m;qyEFJRD3@ivj+N(TWKc3<U}RX<z|6qF#4wj(
z5(6Vc1~bE4h93+93=<zPR5LO#lrS(%nm3(S;Q_-DMg|5G0fum1CI*HO0fz7}CI$u(
z0fxz-vt1stF);85Fic*;#K3Taje&tvfI(oj0fRFq1A~|V!{kj&3=9_R3=Dz-43l><
zF)#%3GB8L9Fibwc#K7>Dje&trfMN1+CI$veK?Vj{0fx!vm>3v@I2ag21sEn@Wny5+
z<Y8ct6krIy!^FT~qredUn2CWwHi2RCYbFK;7kLH-GXaJ)(2(C=u?q~7e={*K^eHef
zSO_qLGcz+V)G9EfaWgY8yx}fj2p48%V3@1G5H8Kkz`#0zVX`ta1H*M81_n6+hRNE@
z3=C=_3=HxD43mwS85m;u7#O4l7$#dYGccUyWMB{%U`TUjW?&HD5@1O4W@ccRz!AVW
zIhdJ&!CZiWK}LWfJerw-L7jn7Ao&0TdjmswHZuc*RszH1VrB-0J=_co5&{fq)yxbG
z=Xnem!<(5I7#3|{nB2|Gz~Cvtz@Q|+ATYUsK}=GBA#FA@1H*3K3k>0lnHd;l6&S-;
zGcz!(cVGzL%*?>x#K4%go0)+joc{tt_+e%ShT{SZ;is7y7-lbE2*1qCzz|TtIQcd+
z1B0|I1B0FbgTP}026hI<$*-9i82*YeFerioi<yBTS6G1|={GY21D~7+Gb00&I|~ED
z{|1K1+$;<Xt||-+jsgtf!Ym97h7JsqrCAslT9p|X90VA`m01`Vcpfl>YqKzbdQRcS
zEDQ{%9x#PlvoJ7(H86!cvoJ6OUSLe~W?^7>E?B@25zNBCAkDzk%)-DhL5YFER)8Tb
znT3HNLHq;5<ZKoOhK=&z5R52hVPLqzz~sTg!0-}6J%H#cl4D>n7GMaU%mP~2$2fU5
z3j@Ou83qPz0fz9!EDQ`g8yLe^voJ8^DKLa@W?^6mKERN+n}vblj%)+t<ijis42L8c
z7?cGV(oVB5Fs$b@U<kj=!oct~fg$`h3j@Q<1cva(EDQ|&1&raZSr{0c6&S)lvoJ8+
zUBEQ?Hwy#9QaJ_&Q&3uBWnc(fz&M$km4TsEoq-`mfFVMdm4U&Zfyteff#IbBLxeIb
zDE^rk1Q?vv85rU~>4=qqVTKd~gNguyfOP_cvl;_KfB-|dGb;l_a|2_VH!A}}3)cq5
z$-%4)4D;C;7=#2E1fm5P*bNxNlUW%U9(`br$Yy0=aAaTs*-^28VRAJq1A~q<1B1E%
zLqanv1H&olbxW887{a?*85p)SFoaKLWnk!WU`m_K%D}K!G=MRDF)IVZYETHVGBB`T
zU<lvL%D^xofl**j0t5R3hVY}T3=Am-4B_Wk85nF67{af!GB6x|z!d&~m4V@N0!#Qy
zRtAQj0SuEru`)1durn|S2rz{IW@TUqO<)aYVPjy>xxf(4%f`SEtH3l_jE#XIPmzJa
zQh*^`o{fQ_sevV2gN=b<s{`|7LpBD6BkT+e!U7CQR%{Fmuh?DK86PmZvoSDaFJMda
zVPjx;Bp|>T9?HhR@YsPdEsl+Wp<7shF+81(fx+B?A-sT%fq^4{DZG-6fq_|pVR922
z1H*e61_m9F=h+w-@*9}brm!(Ea49>mgwJJTU^v*o7`}{+fuYKQC44;_1H-=y4B<Q2
z7#NNoU<g0R#=v0fz!-jtje+6f0><#mYzz!*8JNQFurV+!Phbpx%ErJTqredUj*WpK
z@&QxYcQytFInf0S;SB5y3}+cw!#UX*82%bCg$uDWFvuA&g-f$DFgy`pn5@Fiz~Cv%
zz+foA5U$J4z@V<c6mG`Oz_6!*-O!$$A%#JhUw|RpgPnmvr-3m%kez|S)qycQik*R>
zb^=3qGCKo9i2;K^&H@JZ049Ob7zQ!<2`u4t><kR67?{G_*%=sOHZX-xU}s>sw16Re
zCOZSeiw%qdi#{;0A7Bn&&CbAJ_kbaM3p)ctZvad9UUmkC><ygZ$JiMd<~T4+KF`j;
zASJ`Vpeeu*euJHX!Epj>_(OJZ05SYw5|5a`9R8V|f#H(^!{k5g3=9vY7#LIq7{XaO
z7#J2QFog4QFfgb)FolbAFfja2U<_B_U|>*gU<lXbU|?u`z!+}C!NBm`fi2vcgMq=}
z1ADj&2LnTK0du%72LnS|1ABNF2LpqI1B*bs0R#I2rtl0728I_6i~@y_!m^5kfnm=B
zhRMww3=APk3=B2`4B<T-3=H-L43npFFfcq&WMHroU<jYb!N4&207Lk44hDwm1q|UE
zI2ahL4={x9<X~V3zQ7uOh=YNlbpdDiX$}U4>kC)}t^_c$A7D<q%fY}Pui(HG{)~fx
zVWR;<_<Ifph9wP5;XgPS7}_2%hBI<9Fnlav2<PHtV5m93JXx5Nfq_k$fk91xAzX$N
zbTl(#xGE<DgG&NKxE?11!!iYiaC1%uh7tvaa0gBXhCd6K!aX?|7_K!iga>glFt92x
zfpW5#$_CEx6ix<)fC<cLxtt6PW{MLy!^=1s7`hc0C)aZ_Fhr>`Fn9_ugm-W<FwA9O
zoIH_}f#HoR1A~tML-;IC28IO_7}6GVGB8LfJzxx9!^yx9zknfpD<=bkU;=}{z6}iQ
z49t^{b22boRbyZX5?~0wz{$X{VgW<=O-=@estYU(JRIWL4h-S1IT;vMD=>tA;bdSC
zy}&K-cLF2(1g>y4E(V6v4NT$uTnr3HKX8Rha4|5<eZUf~$i={LD}Xaxi;IEb#Q~OZ
zV=e}UrvgmjHe3u0cO4kQUAY(-jx{iZ`*ATaoOEEA9L~kSV4=pq;48oop1=jljf?`B
z1`N(B3=AFu4B<sw3=F*tjN#Q>3=E4C7#U(X#iKs3g!ghWFqltZ4WGuvz!1BDVe)(~
z1_oaZ28IR!hVT_!3=AR@m?m%JVqkDrW?--rU<lvE#lRrHfO+y^E(V4+6$S=p0fz81
zTnr4J4GiH|xfmFJ3-E{E<6>aQdB7C@oQr{>#(-hb2QCJNKMV{EcUT1&COdF5FiZi>
zC@L_7PvmA`IOD)z#>~TDAP_3BmZ6zPR=|;gNnni)XdAFX1Cs!Q@oI)<0R}+^0fxX;
z49t8Cj0_3~7zG$CSAvCCyaDYJ7Hkk;uv`uj2wcX%4B9QMaDYvK!DJ~zp8$gZs{ljz
z5(Y_-5hjZnmIyEium~^&E@IFJZ6+2xuz|sHA;T^KhVTUpuEGog43_g5E`U-w!%-0i
z0m1Nj46j5P1Q@=vJ!EJQV_*Qyk8*G@Fz`A&WDt^IP+(~8Wmql2z~I2Rf!njOmtm6v
zL->4#>yiut3?7dda-{+o!XGjG2i=k>-50<R-p4RQhCu;j*IrqWlE)0easdqCj~SlI
zGbk`f_XjY9_cPQffRrp`SgZ(A@`S-sDS#pT3Bze+kdg@j4B-<PQdB@n7BO_Hf|NXE
zkXH*}2!G13Q5~dYVgN(<L<TPnkdnm=`I;al&lp&>0vN)dF-+G6DVY?&5I%{)KnJ8`
z2}7tZNXc`C*SY}=;m;Xr^+8G|2QY+BW)L#~DOt*3Z3t5Gg5jcJ07Li-hGb)qk|_ZU
zmQxu1C@_RCW0+>jAiy9x)qp|J#egAvDuap{NaJ#bedY`T4ARpK7{aG9_*j6%RxmuX
z1c^;IU<jYiP+|oVTgkv@0}`8Iz+gFpVU7Yr_$mf7JCMjs0|v{P3`Z0g!dElIIe<iF
z88BGRVtAv#5Wa??%?Ttj+khc_HiL*W$fUIl>s&x$a|{^5=P-D=GAJ-uu4C9Pz!1Kk
zLB|agzZ)1f3NVCkWRP?R@isB+6<`S8%n;@Q;%#BLB)|~9mBG{##M{QOUx2}JJA;%L
zH-iC#1A8%R_zng=FOZQt7-|F<jCV531SO}2E$NI53>w}biCv&HXSti<p8!Mn9)=_z
zkU4u9P6;rC?_<#N1@ZPX%o1P-Kfu7?2jU%MC=g(<Jj8HCfFb-agN;8(><Ghb0fz9S
z4AKE0-Z6$A0fzA7p!>rF7%WdPqzW)to@Dqazz}|lp(Y5V;xxl!P&Q<U4F>VfGCUGs
z2tUW*83N*+2dCx>46dOd-bGOQ55L5~6$av626-a<3WIbwh<6p_F3W2S_XHTiuQP;2
zFn}s4hPp@)eUl+Q3Z&*1*xuU=+oD0DcNkP+K%#dU`UM!m?=i5%f_V2C&I>SDdNAA-
zU~uzf;9#7<lq9S0fI*VchL=TvLCJ*CfE7f$G5Sb==p;rS1{MJZH5*q4j&LD{bqsME
zm>GVvORiL4uwKt_T7f}W>;SW%g93xs1_lo|1qR{y0t}!GZ@iI#;R3VZ0RaZ{O$-(f
zm>CQhRF}HH-JZ=L#ITv+wgQ9nYXJrg2ag2|URxN7JQNrt4=OMiZ)K1ZU;&wCzKtPB
zfrY_<L1U%o1_tBp45<t(3JuZ%452$2)_Q@KBN#A9?-gLs5c4)*Fy6&bF2JDRASu9L
zxtrmQ0E6)!244Xdg$7mu2Ftym(!+QkgRlULf`hUEgXMmP4gm(^0}L+(7!(?01sFUI
zGQ{}_Fqj--*ss9C*dpL@m_f&1fWi0(Lo3KoW&wuKqYT^qL3UnX(BKN#!02_1!6-n1
zL8Cli1EckEhUE$jlAj$IJWeq91PU;ipJZqW0K5D~U;u;HDF%Tc1qO|bAO{A^(+n2{
z7(&l5{0;&cX277~9IU|Lb(WzvSb;(EiUNc6Ificv3>rou3JhN78PY-&7&P{V7%*91
z05zV~OhO-UM+z}qWSA(x;BkrJTj&HPkIM}4VFe84R~Y7BU||Sg&|nHzVDP%iU=^;w
zpfNE#fWi72!%77PjmzO1n60lfyjNh*kdL^);B|vxa)bhdMnI$jgV#-lO_2%=8X-{%
z3|_Yw8ln^!G>%3cVDP%lpd78hps^rYfx+VrgJ6sRgU4NlvX}=9miHJwD==)h&%mP3
z!El?Afr0f2i;yx8=&WBQ7C{~cMj2KYeGZ0O609Im78M3o9)>`D4u+eI>dcHP4B|JT
z_=XCD+6|Dv4HX9QYbp$C*Fc<WDh$C_7#SGYR2bB*fCR3nFo;|_zyLK%{E`ZT(gj8x
zIR+I5wF@Bm3n~oa=W-a-&Ve}R6d1+NxG*Z7VN_-S@y~cLh@ZN_pmqwxIi<oNenN#o
z?F5K(LWM#6cn*WwaS-RY3PbQQMg|5h6$Z6qAc12l4B|&s7}Sn}I7d|&#1H2%s2v7z
z4y!PTAKb#Ab`ZolsKOw=Uxh(!KZvtmg+Y9;3WM5S5NEFngZOS02DRNF&TbV3@m(qm
zYP&$3T`COXJ5(6dc7QlLt}u#kQ(;it26gW?4+inADhz5{L6Tcl7{oU_FsW?@aW>~L
zh;Q^@P}~SrxzU3`X+2|xASfKxgA}ayU{G4e7y}YeTnACaz{4P{p~4`(R)s-vEkp>!
zR$9ZDBE+D=ptuGi22z%x!XUm{g+XyOL<qzdU!}sJxC+7tDJf845MQanptuqu1Y#?#
zU<?rknY02TCbGhY!Cjw&VYv!};&O<P_;M8nk!3uv_yZXfp~4`(RE0rtDOAN$6$bGo
zDh!HCp!_9&7{nK<FeomB@)xQwD8(`Ekpfv12N7fC0o${ng;{L@$ny(S7{uqLFsaQ0
zaptKoh|K-N1x+y`b60@X&Q@VioDI<}K3j!Bd`1p~;tVK%MhBDlG!+KLX%Ift^r>H%
z)TV+AoT|bgGC2h11@Xx$41yEqursMJs7+*4VGx;k25dpU3WH)l!~pSr6^39IMg|6M
z6$V8Xh#1sRRufh=R*<2rDh%SFM9v1{u&FSJv)^D)V+V2ARTxA#YIvaT7w1r65a(23
zP~!y2ajGzggHkCMh{L7AAkMAApvDd2aH}u`^Dr_n@TxGV@qh$)R2am0|1hZWf;hY?
z4B~t~9BO<Z4xb8xIKKyj8b64`ufiZMpu(Ug0OAO!Fo+APFsKQFID#q+;zBA6YC<56
zkP3siunL2kFo*+UFfx2$VipJGGFBc2MRS%3M>jGWFn~rD8CduoVwf0gm>6W382&Ia
z++k$c!^kj)k)ei>A%>B`hLJ&r5!B+m!@#hIfng2<Lk)u=i^+#6EX>S2RSZ9v7#Jpi
zmhztfwG(~_FjyKef>;>>4AL_M7^E)<Flccw2{1@o2rx(&2rx*m5MU6$A;1uA!OXz$
zL4iTbfLVbdo<)v@;Xwc+V*nQigE-?F?uh{m%#r~NEaE&C3<ARcq*Ol$3NTm-f!f}d
zf($MKpf0(C0D~nzs9$Bt2O1o+<OL1qS%MnB43^xWZnPyAgN6WuB`0XK!jgkQL4d)M
z9W<_G$p#v_vSbAf_gS)lMgT0CLBoBPObi?X43><b3Y3wNVd4it24-mm1{PUA(13-E
zOav3d0w$#kj9(ZhbTBb62rx4+R7_!XH&I~Nu!E7|2&4210S1O0jPeRQ7+K_Hb};^5
zDzCVM@xQ$w#|}nei9L);I~W$Q7XDylU@%}}Si{J`!YaIC4<m;StC9rs4Mq+D2L3&a
zobqaW82_)7*WSbU-(Hkw52LWg0mjJ|j0_AL7#SEU_AoMZa0vWh&=+Dkz$hNEfie09
zGXui~0S0|WmLrVZ@&-p3|2wiAU{sP|Ji@3{!E}U8U`GTOXh5`pg@Hlii;fWM5k}J$
zEDT#1D+O2?7&urN1Q_^_F!IWqy0HHDHc()=@P(VXftg_g$Ak^c3=9S=3=BUq4498F
zibot_jK0AFwv7J(Bd5I80mlD<!WA{l0z1qZ5?L4+3RoFd=qb-&YhmUnVP<g9(_{mg
zeSncu(DndhybA-fq{{@xH=?WppkZ8I4jw@P4FRPM3@!rt8H@pp%<>KajQ?%rodX#E
z^K%%m7zi+QY++SoV5s4gpAf>xBJUQ$_}@|9GlcO!KaT>Bs6d2Zas?v;!wW_oF8&xs
z26>+t#{YsW5sbnaF^mjrn1p9+5YmreieY4z_vc~xFD)oCfm3)w1fy`p8)5zkMn?Id
z2*&@43@dm9W(Y_sGBd~s@O_XJVrgJiG;z2g$MS@Wp+{M51A_nq!yZ1Z9SjN#S^}UO
z3PiZ|1(;G8nB^y>Fa#(~Vcf&b5yFu5fq{YH1xT$6gS>(Z11o<D1CQYJ6b1o<I$lOb
z28Iv@;Rz}%90Ckl9iT7?VPG%jV3^6sz%XkMgIWZG1p`Bas#XO^%7cMdc#a2y)&~X)
zMm`Tleh&s;e-?)Mj1mmY@-r<MIC%{i1O*HjLKiVIFf7(!H2=U9(ZQe;A@zZcLx4g0
zgaCt<29p4T_yhq4=?O1H7z7w(Is_Ql5AZ7)ux=3K5MU4o4I?*jGcc?$;H&(>&cN`2
zok4)Xw1NZV`UPf|CpbZk&I)dZ00!|B0u0d~xEUB;2r#If;1OU*bKqlOc)=^ckR`y!
zz`(&Lz@R0;X8_LG;spW>(KGlM7$yiXi0=?!h<?Dwz;Hu=LF)rw0i)UregTHc83JHg
z0S2`d0s;&I4-!mNg%|`FvLb{T7y^VLg+i8rC<B9rr~rfI4KaoQ22%}j1_6fX0C8}q
z+f+k>L4Y9*bWy#BqyR&7fg}S%h5&<Bg`@$vs1d&)z!3dIl7Zoa0E4N76i6rNdJzi&
z2CV=o2Sx@1W_<%D1!i&607lTU-#(DyXa~p_OacsQ9ZUiYN)5~opn%k_U>0CtS76Rk
zU}a#CU=?6cGhh{9P^#e05M%+3jWcV#U>9HzFHm64I>5=mu!B>8L92i}0P1yau-C<R
zC@?d;VG_Tgz|7!jA^k&ufkB0t!+=5BK!8C!18j<PhX8~41_%>WPQKtPU<9j|Vb<yp
z5MWT7At1oOaED3lhagyymIo-DE(kDWDTp#KNQeqBXk8EsU=WuOV2*YW2Tu`*OF(S3
zxWE*hAj!ZG0dg5AfIty*0&EJXm=YIYU}lhE2DwGcL&|}XUx8WL?EsSnqXR?q4{@+I
z=?Vb`=^Fx|CGpG*DUzVHCH_KyLF)mh0h?h38^aVQP;&Yqz>pQd!NA}FO58U%0~pjK
zxC9sk96nfc3xH-An8PRVFfbS}Fe^pyD1a4Z@E9<FJkH_39Q}ZY0hCI_L8d71GB8N+
z3NUCH@H#N+f8b4E<K}Q+7T93S4T=Z{K?Vj3K>={0%#sjhU=R=%V9;7262Jg*RF;4!
z0|N&*JVX`P#6K7?Gw3jD35W|Y@F%eGidP6QL@y9$V3+|(oB|IDn7Bb{Q`~`({{xe(
zngQqzJs$??07w<3b%9ZUK}~{LfI;a1^ByS<0S2`j%mNHrH#iyC7~U{xWv~e_h<^}Z
z$a3IdV6Xsr`~t}1pm`LAH%y=~73cWC6yCtYz@RaK2_)npz@QZY@^=L^!rw4~Dn^hY
zAOi(J-qrwl`vtE78@Koh0S2uFpoK7Rn6wN)p57tA08+;R^79OkpKk~-Fi1Ls5|!2o
z(GRTRFFt_m(c%ynV9=Kk2boa-)*=mxc2Ej~Sg7>^;$>;c4=j9)4bq@YqGiA+z`zlp
z!LY(!dWQgmcz^(>k^##TP_I(>hY!g2S{y6}4AL3`3>*qFS`91?pdvzi1}Jn`R)FOB
z0%Z6V82?*^K48`WXRRDJP*7@RfC6m=vj77m#Z6$y3SePiuwYSOkoHhu(3-%az@YVm
zMSwxegB5HqgK&h80;m)FgDr&vRGfVfU=Ux?z%8($fSX-_A?pA;1A_*K0)y5HP=52^
zy1*;GVFIfb1Fr(8^wOHZYrv;<15_$a5CH9a6kv#E5M*HZA;2JhL4cLv50`j>0BiIN
zVQ?{|wL;hcTwX%bo(KbjgoprxxCf|Q5rLK~A`2Kf6FB6=CvfX`h!(Jd<0bruECYjp
z0k=|ulnNgx1Ax<k3<HCO3@Am(1~8af$bpKU1UYanQZtYjU???EWMH_Uz#zaN@Pk<t
zl=L_hAt5RrA;1vbpvb@gN*F5y7@{vIGBAKj@f(T>j3B2~Iw&zPNGO3?R2BjZ`~obX
z8$9&A444BL9T>q`bcFze^aoJ-0yVN$2r#H^U=m;u*l|RX-GN0*g2jPTYXWNk3#bC?
zU{zocmw3P|VDW*U{Q|S$4h{wte~=$6E-+_J;9_9t-~y!t0ci^d-slB9ko;2cfLY6c
zUqD#;hk+QVna9D8>~el2m-9ni&R+m_d3c2Y14BjtOV$TL28IFw1qQ7bf(i`c6&u9z
zXGkzG><~^6;0C24tq)=aydaY&NWfxE5*%wB0m5k$q!}0tqy-qFBc#DIO<Eb!kkSKE
z$w)(r4-N;GXagArP-~ATfrUSTS=Q78oDiX9{0spGtrv`-dVooQL2Cw+00Tz>v(g5p
zCz7DlCcv_U2b2mMSPPgz!BoMjz@R3;1}-bbBNCVyVwkm7fP%>&fjO&zi-Dnn3slYW
z1TcVVJ*62uQ-ndX841h+3Llu*13(%;DPHRbp8<oG1it`-M1TOZH$Ny87(hObKEThw
z0IGK`@E0(091v#kVHS@FVAgsd2yws-P&gGNfC^~+4Z;@$xV0vTGDvCN5CgRzK!J2Y
zfPo=~85HZ{I}(@~B;3R`1i-d}%NbAzfszv_+s812%NcO_D#O4a0ZOC>G6{_Q3Cz+O
z0*noo0s#zMpadzwD8K+tPA5Q>9TTY9VFP7ijsvDz3s^UBG1O>FX9zHGBrr=aH~`wZ
z3#x4uf3ONGatbhTOkftUSik@>$Aj$v1HS{~e-EYr1;Gs#jFJm96qODztx;nEmBCEl
ziX2q>gQ^oqzX0Us2}}hH(lZnow01BlFz}yX;1%8^p{QoTV8I}eu!NCYfPsI7BCq_G
z4~i!8TP84=$Zz*xFp=MR14MwhdqCWMAmRXsIOM^gC&+RmjbDL*P1D3cMNI1h;}ssQ
z4U8q6dLI~VnE8DeoD}(4dRX}-7+K{{CNP@FpH5&j&_BzV!N9L{o>75OZ3aUG1A~VH
zs6f=Z0cw|3FmUQ$WK>|_mcOjPz$1Tk2ZMn8^$bQKeh-Fl`B`8KAF%T$FtDmEVzdE`
ztptNIYX2TRhAXZN4>TAU+!!1*gh3NO5pE0y8p1OcFeuGn>;MmehcF1w&QKSgEx`cB
zb0rvrp_swKogqYBc!2-|!xnepI1UEkMH~z)5)8tNIT(azfvQ~w;Uxyx@lpc@VQhGr
z0fR6$yj+7p7#*+BU=T*fD;pSuS86Z_ue4wgUTJ{9s|*-~vEkJQ48p557=%|_FbIR$
zAie>E@ERO=tp<ZII$o#2AdH5U)-%Siimw*{H7<lVp5PGPD8T^6n*%t6H%l;p@m2{2
zVHn<K!6Cd&f&q+o9AFpTA;AE~yCfKdVR-incH!L;3}C#sf?as81OpiF_h1*^FTnuD
z2PN2r4@xkAFoT4j@Db1~AcOF62S(u&25iD7Bp8HG7%&K*Vqg<KCBXo~3>N+jS6GG5
z2`~tsJHX1IqbPil1LSIkGyV)ItiqQB7#J7=7(!TuuLv**U;Du#eoX)*AbdlD0gi9p
zU=+S7!2rg$elQB(zQ7=STLP5MT>kz4|6j$6g~N;GjVH?mPnH^PmKmNbHJ&U9o-8h&
zEE=9HJf18cJXm;iSax_YFnB02FtB*AFfs`L)nHW$h}B_b;9wA*$iW~y3DlZlRSJtW
z0SkfBsspQ1bgT=A%V5E(6d(J9L8&lS1k}F=@l#?=Sd|)L4M2TJ;d!93WDW-51r`hp
z0<21<u_la4D`Q<4mDa@mU}2D85MJuRAiRu&fuVy%sWUc%1!U{W00!Yz91IK}n3X2P
zo?r$|2d!XMnjPB#VhXR<U|{HBR$3fez|7FWAiRl#L3pzQgYXs(2H~w748q$u7=*WT
zFbMB(U=ZHP!63YggF$$=2ZQh)4hG@91`NXcI3V$LfP+E!pap~QAr1!N!x9Xj2opZa
z!61B$gF*PX2BYu^0S4id91OyzI2eRab1(>>;Q%$%mA1z!Ff%kT2%nc=5WXP52#Pb|
zO970+mpK@OuNW{0U*%vBzE;5?e4T?q_yz}q@J$5<;afWx!LgDoY^c@4sKaTfE5^uR
z3GykZ1;xXl#K7UhsjMrlz#uNIz#t^8z`!8E9IUIr$S{F}L73wWle(^g0)w!s0)x1!
z0)vpM0t3SqK0{qCMjZ}N*eEavPY_{X;AIdvA;A!&&&UwK%)tP<(ei=_$mkkvLtPWb
zDS8YX42%v8%wVw`4MSZ^MhO|X7y~Z@gAbRH)&xcl2E|E?cNBxQrZ6&ia4<0R@CIv5
zXJm-rU=Ucr!Js&kaSlJjVg`ou@rGKn7(bYRqVR_V1H%^qeXThX4D1XY42D|s8BfH6
zZfLBK;$RRq;9yXCAqmm$yoeFh6;uk4^k7iZkgQ-R<d9%s&|1uBqN1e55~IQZI)OyY
zf`MUzw4qiUV}&>a2ZPcDJ_QEh4i3<P4H^u>1_BJqA9z<V2=OK`D6Qa0U|<kYQ_^D9
z0Uha~)WL1Rpj5yS!Js^WErEgI1A}uSBSXOn24M{j2BjO491Kb`BrO<(I|LYnJuWZ^
zOI%=3`XOGxAlz|*LCHW|gF)$rm<5B<3E>O|r5A!63`!?JR#$K^C|U4nFbHc1FbKc6
zz#zQi0)z033k<>*7Z`*uTmbd|EEtqBI3mF22%osXpd=xo!Ju?OoP$Al0tbUqfVc$%
zO9i9S53vFUr3)ZpgJ=PRl7}eBdJzo<r41q$3`#o$GZ>U^@N+OI3GgZ~C|%&;U{IRC
zqro6tA;6$y!IQwCBmg2la3wG(b#Q?k%moT9P74O*4{Q;jGxQ<$3tV6jKCuHDVi22!
zKY+w8FbJ=Jy86Qf2Bj4u77W50E-)xv;0L9$3k*spKvs5utSk^<5H`5LAk1+A;^T@7
z3`!ax>uzvbfJKxzSUDJkLBbzcG#G?8a4-lLa4;wtuvjn%O9(J1-C!<YP}%?@444WS
zluj^SU{Kn?sKKCQ!Dzvte}f@`Ay~;kNrFLGfP+D4hayC~vVmd-Xl7aYhC&8|5a?D}
z0r?DuMICYs3|edq3;}W)3`##_Ef|zuNEt9H{gB{b5RTZv2sYw^um*$D4q;GdTsVP2
zDF8%l0IeLb0Ih#8781~4P?{lN!JyQ^8^NGFgPVgvp5+F^X{8Jq4F+KeP$H8C1-G;X
zG`OV;7?cF03mBAFNER>%NnT)3`T&a384?x@N)tpg7?f5BgB;GU0QEON$QY2n`4SkE
zHh_o#Q2KnqbAds90*?g?!wqI3&Iksj0Co-rr5}tJ7=$BEKs<i}WN`<`V&p&vB`;6}
zytu%iGy!C32guSH!W<038+I@VXK*kmX@Kk$5CA7ZaKwUA^o<J)>K!2aUa&G>U{La4
z=U@OuzETDoDE)$RA}a@j(h61!2H^<;3`zm41q@0WAmRilnj)A$dYCjAlrJzAFz_cZ
zgb06-U{G4Y<iNnt60EGXA%I1A!wUxI4U7!X7>DF;P%iCY@L*8#VDMmItl*H}bb^CL
zev1JE1HS|VC#YG*BEJ*H+atliBEJtr9FSmO@i@fDU?9LCd_;pmk(u$0wVqa&0O+_L
z`9%Q?Eb=EM7+4ffGg{avYn?UVVvt~C=3rpd;F3Py!61E6fI<4Q0E7J13<ehY>k<qy
zO0yU_7{nGwa0yF109AoX%!~>QhRjTi8P)+x+>8u891KES0Sp03oQw=D91Myaj1>|A
zO6-gbH5?2=Y#iK%O00};YL%2&5*Qd97=(Qs7=%3>7=&FM7=#@h7=&#c7=$ex7=%q6
z7#Qx@1SknJGURYD2njhb87c`f{-`ii5@2i)aZuuCWO$#Tq{J7&XsE=?=u@Yp#Nz<!
zbqMP?FbHcnFbJzSFbFF+FbK;yFbGRHFbIn{FbG_^QRcwF$Z&y!!Qnpx!wC)shkpzV
zM>rT9{xUG^;b2hw!!V&NfcZBADBK->F)*y*U~u@!z_5ga!Qlr3!vYQlq3=t~4Vk|&
zFq8){e`NsqRq+dh2Uh^|X9k7_4hDx$3?Oehd}LrK;b0K@@W4=s`TZBe0OofL3@IE8
z4sRJ4VmKHa-Y|d)dZE`AGKS2r7#@@dFu!DAaN%HZc)`Hnz`-E&JVPdc`56O)2?vA2
zQw9bd4hEqoD?9_3A2Tp0a4<MLVqlQrU~qWIz#ziGAoO65j1u$xEuMzV_ZSXTEMmUP
z!0?Bafr0tX0~sae+h1e?m~SyKyy0MQxXHlqgo8ox27^Im0P}SQh8r9V4%ZkMu5d6o
zTxDQ5!@=Ni1so<qmmBg8nJ+Ocs0?7f$iT3LgTdhfI7AfBGgz<&FrR}2$XN!4IUEc^
zXL@9nm`~484PZV64iATu44`NiIuW3x#C-gSYyk5ya9}tbWdKLykvFmd%!e5m5;zzf
z4nczBAOk}P2ZPXoKblI+`&HxunD;?KV=n`P4F`kJo;5Z~%)6&p1~BgehlRsV1_l)l
z2B94rER~qIA2AMK-Ubc{hph|@JRA%{TPFA^GH*WXkifvaiGktIfm(-+3=Cg57=$(i
zcn2`AXJB~2!QikC92gF385r(xFbJ)gps&QddWn7j^D0P4tOO?up%n-8m6(@b(GOr=
z1__9z;54DQgh9bSfO#=ENjNM52ZX~y28Jmd3_=TZw3V3WZ?O$vo(B#Hhq>S+AvDLw
zK#6&Fg?|9^EO0<L%!DL~8Q`E0n%-g%z?=;Z2#0A53_ctTLR05x2QW_orwE71;Gl4r
z1Wpq|6Au_DF;BQ+5Ww6I4hn}paEcJ>U7)VS+~c7Vz}yWE3WqKR1{MwmfzG88P7Dmp
z9W5#W%<bT?aA*Uk387XWodD(*28IV53=YlUuyAMsCkdfO9swoh1`UA#=6Y~gIMji&
zh*0ewQzhn_3)}(B)!?vjsDdPiN^oEZRg`E1Fqeaa!l4YDAcRU~?3I{Hepm-E7lVVs
zp$L*73K<v*I2eQqM05j~^C5we2Tl+|xgAc1%sC7Uf(!|a0zMoJ4q4y?A(VL{Ly0+K
zMo0j2IyfL4(!dEqD7D5ifH?({Ig-Ia;gAGQ5<-b*?3I`kw%7zP$Ag1nQXB)rA0`F{
z=GX(#O3X1WfdS0X;E-^Lf+UDYa99XMu*3u~hl4}HAq<=(ghCGpDlvx`C<HJEgG0h0
z2%IE@0t3{Pm;+MO44M5I7+M0D{lLjV$hSp7iP`6hU;wi>I2atfz{x?#GonO^*@MS5
zfY}`q3~rF*;L5;|!NK6*0!|JN&ftJ>Z~`X?Ax9e}C1!^X&H!e6a6mZNfs=!ft%!>f
zvrUOo0JAkXARMf~$wASQLB?5$*+RrFfY}@z4xl?wKv~1IL{X91WUk8t24-UhhChr9
z49rI0^dMw-Kvs#_;EHSjvpyss^uVb>NcV)W60?qgh!V55g@_WfR)dHVv*rpBC1#Be
zB1+8a5~51XY6+rB%&HxtO3W%3M3tD8e~2nED>;ZMF)QW>D={l{2nR6BgZ=Ix2abOs
z*&bzK<`9hlW@(7mr67?n3HG{>gosT5vpCq}ied~Vo=VK3OO%wDMH(^#n1#XqRup2`
zk*mZkXk*H7q*O_R@kW!O3L}F^nUV}+MID2TiV`!AiHH(2cZRqjGZ#Zeydg6u!&7m4
zP^HEI8W+HZR~3C=clgI}LT+m~(|m&fBL;>AkGSF+7#Oa+`@p{NuL6SsE5mm&2gPWH
z^yv;09x<~jFnr``Xn4!c_>bX>JOewkJ3|9=b~H1?cm4+U88Q6V6fgYv@Rr@-8^acP
z7FLG#XF4Kg7NDDVHhy4V@SkCeJOlFw@dgGK3kE^fX9jC7m~CQT@K@o0Jc9*;BJ+pR
zUPs2i><bn!uvst&wp%dpFJNHP{9vBJz_x%vpPgv|1GlvM0tWqd5KBIM0RxLZJM#ht
zZuxW&vmL~gE(fV(0SUG{FtW;nS<^u*R*>%HAl)FA{PqP5OpeS9>}(kf^2`eun4MTY
z6xd~eDt1MO#|;buHyRj(k2f#~v3oF-Ftal>FiON6U@&B6c3;3G%o4%S$j<Wp|9|Fe
za|eb^f8-fhSjz1f7#3JKFeo`Z=3w~1s_^(fJHsD_26+b1y-EN19Ug%iD=HfTI2eQ<
zC@}CyfC{J&EZ^7_9x?m@-EY#)(7-;!hk+qn&ED|?CxbW#!-Ti|3;r`4iDzJsVE(|x
zoE^>2(4oq};P8n3KRa6kbGG+4c7;C-Q_gyR<eJXFz#<XD#K7M0pHae+fr0(Q|Ns0l
z57`+M7&o#psk1RK2>7rwnR74*^0R3gI6Qj$fMN3ic?Na{akd8L4DaX8hL71f3m7(-
ztz}pE#&ATQfr)JcL*UhSENmShJq8SkIo_|?6aFn!5a5hp4)CyGU=UxJtoVURf$?JO
z`;QC{|1xZlXJGlyA;7@Hz?krt{lQ;`Jr0bF0%|gk6&Ui~vp4)<IN-qOz`?-IX29t9
zpMAkU1%@I9c7_J&6(4r61kQNR#=#!n?I_5v@b3U4g9Jl>fbV-wW(TGZtQtPdOzjK@
z7=Ofk<X`rOp+%m7iKT-11G`5I3rjk~0j3|(Oibns3{37ZkJuIdEnqNYW|=O)puohQ
zz@T#XT?d2VBlZUmm{=AtFi9{OGdyNjU=)7;fPv=#0~-UQlEOCzMy3izmJCKV21fq}
ze;Ill7}yyZ7;TQovoJ8StN?Xs<+nI6aHcZ+W7;Cmu!F&X^EvAd1|~Tb!wHW*G%yFs
zbMSM1mjK<w<nZGI1Lp^30|B3n4s1q8m{}?q0x!H{;uHt1Fl7SG=Dd5rD8z2Tz}>(g
z@Th@F{f4~*BQpn+BB#0sL&7(9hkp)7_WBflXJudz^kK?iaT4%hVk%$=_{6U8Pa%O(
z2y}RB1(Wy<2Sz`IKMa2u7+F3r@E>6Q|NsA2i6aM?1=Dvh3p1TyZi#1C_~&>dp5p@Z
z24;qEhK70pe<p@-J#GcRZwZV7Uk)(jm@`N)8brTfb^u*Zw}6S|12fMHW`U;<7?>EC
z8NnRkzX=S2{7rs34v$_iw|rn<@Ri|+90ORY<s*B-UxqXC5T3(F1_ikWMyL^Q9x&?d
zk$=F*@qkHwLINYZz=s58lPeIVOf4VS6&^7jf$*4H{<ACmJ2(Z(b9~6|@aF*wGuQ_E
z_v{W1OkBcmA25lqD=>0vFbKS7U{pUM$H2(-f?4>z0|RKQmhfW+Mpgv|ZU#ofkL(W}
z7<gu|fU5kr4h%L2<}>VIV0pnT@K%A1L4k!aELvv*$RD5BmA)~YfLdwvkzwHjM&=L9
zObHBZFPIq}7#SWganE32;b3z3#(&^n0t>`bObIM1@(?DY1EX9^0t4Fv7Uc*3A22f(
zfL4OEzhH*M!U18{9n6Nz4CNdQlLOfoyk|IK&%ktpS(xDjvl2V&3g!bJ#g+cB9FgbX
zU~Xr<!R)}ooX&cK*@=z0o%I3p#H4=?2jm%;n9~&)KCm+}t20P28ALNPw=+mE8$|zQ
zSNO+qWC4Rhht>jS2M&gC)(!?kHjqslKe8+Qa{yi7$IAYL*^r$n+=GEdfJNY;0)xW^
zc@EYe%!w=vfgH@`3Ji^G%;szi%nX4J42%z$n#vhwFd0O%vRJUNG%y%GVOL<_R$^mu
zU=d`Gofaq%!@+9K!NBXlBG2Z)!XnJzz#_zcgGrl(-GPPCf`LJTi{F7IS)S8@g;$Ex
zfkl?xfkl401B-}IxdV$lhXacYNSlm2y90|2h|8%b&$xhx*MUWl!+}ML!GUGNNA^?y
z9B#-nurP%y1u6Tn9$+$LVG8G97Wj04N1)|_5Yq={B^H(!%!aJY<pvA}-`Ec+uqZRI
z-C#0eWllfAB*ogmqR+zGz@nV+k$u5G#~TMgcb>B>U|{KBVQgR!>o~w5%(R0+g^6ha
zi-5ud1~U#OrX8Tn%zA)<=>SUtGjlkD1j7$z<^wE3%o`X4o+U7f{aL`kvx0@+frsCX
z;U9y`0Ty9)3l?FP11zQX><WJvTjUS0D6z4uU{PXbnZRQBP<+7wJ|$L`4J=AbEC*PW
z7+5kG1s*!^GcI6cTEHR9x`1T@JA*iD12aS5!v+q42?-3$3m7M{u(LKWF$6NRcrXe)
za$uOyA<w|Zpw2LZxq(H{Jc7Z1o$dQU1_hQU3m5}0$TM)TI*2*2aI&*AvKY#8aVUs6
z%6?*RU|<sDT)^>}#XFjd>pMRKi+40Tr#fo`vx3iG21X?=E&+zg>|Esx4a^zQTqjr!
z->@Gzz#zmC!Qd#v&Y_^epuoZYfzepV=PQGtAZr7|MS&PLj&z0w<^wUDtnC5}LJt-A
zl{wfpFeq_yu3%u&U{F+uaS%*ABG16dF<pSckexHVfkA<jt$-m=f#o;<fd!n3{9FpG
zj?ru!6F`P@c(AAlf@(^BhE4`H0Zt1>XJ!UJ?hH1@21bSjEX)dwj1L$Mm>K*gFe=Vq
zS-{A!fWe4?oh^Yum?49aF@QOU`H;^y{sjz1%v{?oxP+J)*p%3rKd=gaao|$m;F!Vc
zpkcwuw16r8fDZ$UIs+TCB76G-23`g>VQ$cUO*2>oS?sLY8Q2&t82odh*|{0mSmfCm
z*t}I3*eV$K8Q7Q<1=u!7I5Ehwursh3axk%fU}a@sW8A<juff2^A>7Wu#>By<&&0{V
zCc~`2$fE($!zRzbz-A-Q$-u^8<01npS}yPu{byhBm+^r7>8eDA36I!0%TF)}@^dgR
z%87o<e&C<OO>kB5;{)phCKDD0KMoc~2DYFZ@*J$J0jx@_tRAe4FPNNJ82p|o2nn;_
zU{YddcVJa#Wmga~YLRD{!Jzl!gMx6%fqx7)>@_Ty8ray>SsPeR_;fI+FfcD*HI`#w
zp1`2Q%-q4i^no$(!n<ee2O3xmSsBU=7#I_nO_&U#JGcZsE|7`(BhSFhU?Ie>ASBAz
zz$I35fR*KdD9Z*`frkz(Dl_E2&NuR7W^&*&WMDE6U}I}wEnLppP|x7U%)t;K;K#zS
z{Fj@8-?sw{LNgQ?92gii{8n%jC@>v}VPe|u<tF0e02=)`?!X|(!ojdez>k&bI4c9A
zfu92-vjT$wNVQbq0;U5o%*@w8V-I42M;N5pf3Q0+JZ5FuAbUtC<|BL4KZXPH94yQN
z48oim+=gtd(-qha1=$rI@UcX28*;EtS70z?VlnSvGyKA?)WB-U&SEaXpv20$gG-n#
zfLq|p0Y=6KQK51Ne&!k6EFIj2U)dKma4T~#KVVa2PCvk&#LPUML4pOe?ud(}fm<HL
zVtl~BUBS(g!OhsfEqLVs6Jr9a080nAJrhG<12^c>K~S;6%_73uz%A%r!D`RJV&1_0
z|EIn^Lj(8!4*mnI%rdM8ScO;*uqrXJ9$>X(WmP}Gs>A@|v#}mv6=3FI5Mw&P%AmmT
zih)7HkBuRnVFBZT7&bPLDz*cxMoetS9T-yCj<Yf_8-Ue;Rs|hkV{l*)WPY}r`2efj
zj03E~3>#RL9<n=d8!|DNGq4-8Gng-6WGY}~QQ#5hWDo?6s~51EFfjNjFo1fC0t~|J
z5v;-t4Xi8<3=9!$3;_)CoC!QU2As_75*${6EX)Z!A{+`Fip=g3+*+I*2|P+%><-+D
z+?*UdR<b-?2|NPa2e_`Vct`W_eCKCi^^WG`PT*-)_ycOy@$e+@DDq5a;1=TYU{H{G
zroh1PfJKNaf=7vqGlIvMoqf6k57PmLjT~I<3=J#?Vz}9tOE9Rgu_Z7HDljk#b8KKx
z;^tn#V8F^Y-Gf)b@ACtu#144|9=7Qp7#KYm5}6fZxVg4-FfbnA29+|bY{zFXE3tDg
z;8y15Xy6fMZ{T5;U^nF8+F-$8&&Ac=z{4cMuEEIGz{8lpZpg+QK7rGa6I2r_v9kv-
zFe~snGO#eaUtnWY;1ptM;1OzQ;1T$zz^Kg1+Q7riz^=r_Rlp<iuz`oUf=8IGf=8G^
zfSs3tU7ulj0}l)T0Wn^|<rBE{8MqnPlU3N+D;W42cvz&^8Q85knaUe@<jWg)c%-H`
z@bELR%d#ji@*faOmFH;Sk(TFb;9*tdnhq)jG?@7tco^0*hqE%UGWfAFyEpLgsWGrN
z@UR>ZP-0_qVAE%1Yv2(#WxOHZz|+Xeq0Y*{dcr4wS%hf;8z^f#Fv~MH@NnoiFg5VF
z$p2~JVPtnul9=J3#L%`?!QoK{XvYN00Vx$Gh67w24IGLLj~_4#bSz+;$j;WlDB;7z
zp#FfBWre2jM+YXx3sQ3Y3`~OW7?@;Z7??IP|92N*V3_d!Bm1HT1|xQ+>lF+_OcI<%
z3``sfj6xg<43^9c914sq2@LYj928hpnamv&7!sHb85o{V;1Fh*A;D6>$j89K-yk8(
z-@y34Lo)q<Y`{nUL;su<w77T3vTTqQ6>DH*+Q7)Og3<UH|A7VE5Vr7N1`ZamD64}C
zGnircp8Ws=3lF#zD_{t^0aP0z5%8B?L5}GFD}-nNp8dc9X+aSNuqKuSCXg`<O!7|}
zxK;QMF#g{ycH{t~Fv|``d4>jA77^wZj3O)zvd&3=Sq><GHpVKIvp!%H41WOXlN|WN
zabp3a0teRxMg|LU#uJRpA7oe$2yt7m8nZH_GYAPZIq*7iFfpVjFtD6p6kvV9D8TeU
zP-(%R1?)^S*jaus8nUv4KhPEa=%B8}#QKAgZ2^m+!XJ(XZsr^OLd*{sg;_r^8op*%
zaNtwoXa2yLz{HTj+Q8_+E0{5XLGT#^SD-Qj6GO!Z24N-+CSz764h2@h0}q(^8JJj&
zKJqVc;8$igcVH4u_h1xE_h4jf;A3=PV=`doS72fin8U!xr@+MDz$(ntz{A!c&s4!E
z%5Xp`oZ+9Niwpx3(+fsnHV!7mXW|cd#5jI1GTmTSVq)l!GBjjA;K0aoLtd2q0Rz(k
zKGA0nM3@?Q6<L^X@G8i%BrrKJdPhGyz^rg3UO|lU0k07Yv-tyF<^W#M%Craa0W9ha
z4U7?@Odbr30t|-C3NZ;Hf>#=t1h^ZR1eqT21PaEmu%>q~2|RRQ5N<gj<iem~!P+6O
z$f|yTOZZKLHe&-5;{yh!3VxOqOpFUe1TQo&GTjj1e!wpLsey%M0uxUM6R54<z{2J5
zfnVtn1HU0VoB0F=Va^#$O8jgK7!04WA4uRZWM#-u5HMtBsNi7MVrFLGu;XOrP+($H
z;1=PSz@)^?*1;sq`hkIsfkU|b2UjUOD+A*pA5I1ixdjIp_#4ENgr_%%gRu1U25~T6
z-XJc#9fGB|H;99<*zp5`3=O)P%;5)EgxMOzg#{1D2(ub6vvi0nF|aKVWLzL7FyR5C
zaC?Qgpt}dNAt#Hw00W}~Q{owU4hFXJ51?vldIOU%ONOw+C-#K@3F0gk>`F|`9n6du
zc$gbl#Tgq|8D_9@c(C&~u<{yxWk2K~&g`J9#L8U3s>I4%z-suBy`h1X=LeHMD?<aT
zxCCPZs}O4gs|*u_He_JV=-{<vW6o$`Whe|{P+(-b7sAlNEYH!vDrwBX!1{xU`2_<@
z1}h7Ls4#<rFxv?ct_D_pCguiKX?_OgJu(~&%q%aMgv1&oSsOHkSsyS7vprxk{>rY<
zz{+I6pv=PZK#chT6LW*AG6&lPCM5<Y3ua?>ruGIY1*d-pK#R@=7#8p=GnFr3WK9rf
zOkihGU>0E60czU?a=l;_{-$7N$ilqbfI*3s#eq$UjkSY~WdR$5fk;vVlXo;5TL+sG
zD_aK}qXLt_fd+8__r2lDF`%kSfPue(4RmP@W6*BN=?!d3EG!LdY!A33-5b~#1Ed)q
zurjY;;B8=&XKrBQk!NUN(_s#fW0}Eh$<GN=F@xEFg~5+8f}?|(rGZVKiJ^f_Sc!qN
zgPElOB*6HCfu(|3mFbX!1b+jY?txG23UZ*`^Nft_|0@_31Q}<D28O&BV07nT*!Y)8
z;UD9Tcm^g$b^!(fK@Y}6_8Bn(4DKAD`+7MV|Nl>CU}zAEnLNvoVZoyXq9)wg(Fv?9
z6AW2SSU9nO#tZ};4*X;JvVc)ZoN)mU(+)<4H8GA13<{4N7#JS#i?T@YvNu>TBuFVV
z{7qm`W*1Ok5EA5I_{hT`@PVI!;ZpQN_JqGIN0=Fy1wZmLFkFsi`cST5DfmBu!Kq=z
zM}`Az3jdiK7*!h9JOEjz&ai-ip}|;~je$|vMS@Yu<-G>u1ef<8#2@@u{3Gwc$l%Bz
zB;&v!uh7851}doQRKBq%@G}K48vg&!?!m~Iz%9&uz}neGhJj@VgCKv`j6jD+%na%m
zScN}2@G)l3b!C|Fh~)&opg9MF{JRD*UIYFEe-4;{8Wt52N-XRgY@7}@3=bq&BkTkj
zDi{^m*bMBP6j;8oJ1{cr5a-yzIGN>txg7(OtJ&WMQzi*UJ_Rwx22%zH7Va4g{12>I
z`5hRQG;YW{FbXnpurY67U|7J((7?d6gMq(+L6q@<DdPer0dWJy05b-L26hH!LH-6-
z1BXWs7cem>a4`z-nr54^EZ|iB&fmbmn83yq!D#I8m?gp<bPu!wgD|@SgS5B;15<+l
zivk0a1T#Mai=;w>90R){BV#)Qs87kTKo*oN&7Sc;VC0#>%rb$Qu|b~U0VjiXBFN(m
z8ca+tn1%l;Ft8*rvaDcaTEW0@z>aAFBZ~qD{{lt^#sn4?2L@p#2L_e}%q{yF82&N-
zk!M-JEXX*6S)W1X0HdhDrv(fON0<*V3;Y9Z;XBC?!Jxpzc)~$3<UIom;{g`I;}Q&p
zybRkp7z}wBmUA!&KU82a<Y$;Jz#zou!Q~jk4QkIYKHyJ0!p^|OkS@TWz{Yrh(NMsL
zYXgHoD1)?s-2(;%PG$#wLvJ&_0}RHY?>QJ44L&j^EMQjz-8Zfh`o4ovk)18T-bm)J
zID;b33`VB7IO7SAJ~*)Q%wS|OU;ynYXt3m-!N@X!k*$G=YX&3B3ueX#3^sq57-lds
zIWQKvy#K)e;J<<bt2~neD<gjcV<}4kBTECLJtu>C1LGwY2No94k~<bz;kOK8tUnk8
zSSr{PE=DtdU?|To6?hGr<>FRk_`tx(B;ID&u!O(wl!C(}2R0wZKlThaSojYxiw20W
zFL=!8AX&hd&cML9BgTXA0s})s00+bK|Ns9p%E&p$IUJFf;E+&oVB8SHy+h|CYdu3W
z7e_inM?FLINA{#Y3^(L0m<1R%C`9velryZTXNcy}U~p#Di2n9K&4`O<xrLGfNBJoZ
zMh6DL6%GsnN(qWzSR|M^t~1PFG>GQrSk5qm)gYReQ-MKn(E=s`t^?d3m>3zNng4HR
zU}zAG;o`i`Ai;WoUqJ1EoTCIUhxrT!Lk18j$j!kJpb-6uUByAckwci%Jb<B*>;G~F
z1`fd(0|pf~4F?8C27Zp^4h)8T9LqHrKCv+HvNJ4TJrMJeUF~1P5qSw7j^z;yLYx{5
zg1iC@feO(d*|i!N1cV$IF0pGw^Km?9n89uk&Ch87nkP;=a73O1bWOUUAm?%kMq@6{
z<qsH`8Wb1v3LR%yz;+-;i1P$PBExggZvO@bh6DyB9?lyKoB0L5GbnHzh~eWjZ(vYT
z`lG<eWWgvPm|$+esSzE(=*-X|5W}GPk(WW3)0|O)(;%8h@Hm44`+*n^&hHEi90D=l
z*bg``IQ(ZYXDnb~{F$2EArQm-zg>YrK;Zy`qXYxP@(B!v+zjap7*seJ7?>24{wOGd
zHhMTIMDsE*Fc~ucH+NuQY+yD#0vi80z^W0=$u*rpf#pC9R{~1|3q$l*cBOv~3@Snl
z9~hN57;Z2caxzT6z+mu&UCn{Xn1PE~fdO=EDhoq2=l|&(ObicL6b`f~FbFOeP%-3Y
zn7)9)kONG9W>;fi0tKU}0s|B1Rs~iDCdLDNj1LqU7?^|@W-uCZbGJ`mWIn)XB*DXQ
zfl--*nSqH>fPtZbQBco;L0O1_fk~Kwfk~NpxdJ0I1CtQ50fT^GWLhYTMl=^lsRIKG
z1CtUr_YX!T9_AAaj0+eNkH|~#F;6#O5EfuyQsQTRz`$~VK~PYD!AT*Sf#C<EfRJMv
z;{ztaBnIIYKIZ2P5^M(18jKE{%<PN{7==G32u|h~`p&R`<3P;+1_nb0hVLE>LLUz>
z3Q80(I&%obaB(o1GIO~vU|=}FXvo3kK7qlAo6Eg}L6Iw5fkEJt0t17CvLaXb0R{nH
z3kGLKjcDco2E&i+S_c@6__@AU@C$Hh2!(1ybMUq|Fc%&;BG16h6`sJL#K~O2Ajl=a
zpr{b7z>w4;&%nd%p1>f)+`(YX$Ly}a;HdD=;i!Tt;|>M^0S8d<I5TW#P)J}9bYKu*
z+Q4AQ&3wE;MTv*GfPvY8-BE&1;JO8~Ag2S9n?MXNa{~jz0YN2x<{b=%|2ej2Feq^`
ze*lfP1znM6;NgG3XvoR=Jc3b}K|p{JbpM2!;{W3j42(M;uxBu{I54pkF!N+E3x8(d
zg0L78R2du?AZ&w=><tPGA`D<9LQff(92qz{-6eR0Ssa)c1SAX@ID`~f7#bLi|FccE
z;7KWGXyDF?zQD(zAQaqiL|#Dr0-rF827?j@y90yp#|9%ou4N|-1Y}qotP>d)#ISON
zg9~3FVU7n3O8?nFgQ{HY3LupXg3Jv@#tUNj8yJ*W*a8@YpEWQFvpO&^ED#oGNMKL|
zjgAU_WZ+;pAk_5ze?8*@OIB7627U%^aV7^&2S&#BpADP}@{AQa86ofG7>~0ya2m=o
zwhJ&A%79uMCen=T3Ji=60uEA)$5{jz3?&)cIT#EjKyn*DGAYzC91&&^2em{T#2Ak=
zb1)c+f)qG>WKo!>z+foC=q|uuD9p&t!Jr_-xa>8X0)w+4V>{Cf0Y(l6L8c2Fn?v3|
z<X8B|bYwn*qy(3s#0i$b88PAv(?RVVcZGifH{=<_7|I10ghdYs2#XkSI(%SXAj`m|
z#4d4wL*YN;y6Vj#@7cw_^E0TVMt?lO8^FNOFo|)7?`I|+bp{4DZ!>nu@B9o3snKs4
z7<idCaB*qyJ2^al%dfzo#4eJ+!198FiGxeg;jsco!2@{)4vFcEJJcNbCDIums4K8@
z1n>oBn0;kma6o(mzoa-r14D)xyLkAlEe+A^4D5;x%o7+~84sAU6fm%O_$jc8>?~2>
zXGzdWaCjik!OW1r=pf+3&l<ttl;zDXazTnUf#DMiD?3AjN{TnTh&wX_OO7|Y06Sv>
z1A_xMTLOa$yW|T#MzubbM{gJu8YI*i8q|}_<ZsS<$dYRIU-UaWgMov^8+L^Q;tt{;
z*dGKiIIuUcCvq?-fEEp1><IYCpzxoe#h!tI(cOWOsY4{;#|H+{bVdgjMg?sK1!e;<
z8#MkEpb*U}n(kE0uz-`1fkTObH9}mN--6qiSuEUvLC_(ATUcCz!GT3AoKb<LnO{<!
zp+O<Z?16xz1hbg?0Zx_%1`ihI>5K>14A~{wFR&PLNwO!f7&0(VpTOYsiQVlFgP7p-
z84L<+%qJKVG@_X$mopfs3x7MnXUM?DzC)a0fh<FYAj<>>;kOQgOdFUJeth6(;Myj^
zt?*yWfpMdw#YaYle-2038UAnJxft^Pzxelh1_Nh{|BS~47>qvfD<m)|if=z4X2`(M
zFoTh01&`84#s%zx|8MYY33)Hh!Ok#&Imb*&fr0q}v#_)PgRp#qfS}w37AFRokL(T%
zhJp;!7YG~5Ftl?pNDDbI2+ImEFs)!p$TpK>_|5-<!SE~l0R>)RVFd;y0l5eU75;_;
zOsNO{Fx`-6_`xV7azI>(nSnuq@c}1;f-&O-i3IOxCWdmx8{!JmOa@Gf0x=BY3=UEP
zO!+*4LNUzJ><NrY%%DT5pDoZalwvR!kYMU-P!Wvz5Fq&I0E-ec!wg1a4GV?{Mqy?H
zMg|87HKs2M7@Zgx8d6S(2yzK9IDFt&d(^;a$Sm1zz+}MA@cdJWV+@02dj=Du1GB)5
zkM|TBG%OelnI+jXn1tCcFp55Wz#s_nB`Y(#1%t5s3n}5R3JeSufdT?n^@{T1D;NY=
zFM#&!DX}pmaD!3;xPWzL(ujU|fYFeRHC=&OnDqz41Qvns|Ns9#VEI{r;n5U%2F?%a
z3?KgUGqSNgPhe2~U!I`N1lp)`fXA7iA)5IHPXp`!@BjZZ9kfhfQD9i0z`!IR&D3Dx
zkQL4FKZ8NoHGw(Mo<W8oeFmcfKf}K~V~0m<3}TE9A_7O^lr_Hd-{2ErX%I_gXZXkH
zA=AJpDE>k;AtjoDi=FWUZ;LFy!#~Cn8HOLcg3Ld7FEYq5bD1+V2yTe^$bT$BMwm5$
zQJ5`(k>!M;@G}J-B@WgfB2KK#?F<?Wg6#o}hF{o^EnpX57ho`C1l1%Hm^7kUS<@L7
zFfZVksPON=1$hZJR(A^q(1<9fATtN3zH#7TSis1*KuS>~nuCS0!GJ}<Oz_wNMgf)!
zTw+WNOe_x40dLtA{xvx0G8|xVV9tqVURc6-KuS=+1GF)Qfk93fba%nt*$muIivBY(
zGO)YHJP<Rs=U@n6WIe$oAi=<7%rEn)L5b0Xfnfm?vjUT#tOkRTLCjYLDI*3J2?M55
z*8kTT4>0~<U=n_-Aja~8QINl`k>LTOSo;G;-7oSF7+E?PmV97$c*Ia*!yqnkgOS05
zo$UmF&nNx`j~R~GOWa@t_0gFb8Ds=zEYO#1zro0I0W|Bl>;WUs4Mt)16O4=tSQ!}X
zSRODcvZt?LWx2o@@R7ak-+>40++ek!;gkeE?i-ATEX?f}7=@oPurh35;JCqP$j;op
z0c6w?1qMrI=7t-LqWlUBObTplHy8z*ZZNVbhzc?|=&}SbDv8T@FbZ;hU^H}j|3N{5
zp@Eg@1BW34*KrGG5y2OX{0_|gf`1hBl$nn^FiRfKU}Q|-m%rk`%+B(F3Dj`UU<A#t
zFeI=uI4~QsGJH>9Fl1)<9>Ffi#=*esz$`e!L0ACf$`!0(3d{#$SRI%Z{vA-@Fkn5-
zxPV28jTJPn&YGUVD*V=g+mN04cmSgUvy57WgpdO>;{pb2evq|-hcXz2{wlDDa1=1`
zWH1PSUBDnL|A2|5f}w%=zc@n!qpR5h?qG#4@(cn$*e!(^roRwY`peHC%Htry!oVu{
zCP9(WOjw8|L7d5gQ;=bT2!jHv(Sd)A3L?xA(p(wLObSe*b_z_wtQD+G1)QLvgl`Oj
zhHMPSB^a1~u&KDbS1=NK`+!NA#e4(D7bb@P?hFj<3oIDq%^&bHJdb{MK%cpSi=lzd
ziGfif#=~6Y$~y%PVfF{o1{@#QD;bp;IUAUSA2RR?a|tjAb01&;E&H|q%g&e}%EGX}
zQf<N`24*G(MkNLojYvVk1a{^J49;)l7?>+K1Z5tu8@s%hR}fYD2<iifC@=;#ED&cn
z&cPrk!4Rp^ut0&qP?Eu2fI(37L4;w$0<mlDYzhp5%m*R@8x{zGMi@MV8ICh4FbK+4
zfaIAvxD6W?NCiZIR7p438#XNX-@(kVl~t*oL4iR*Q7(Z=Q1C;9L&E|Y1_xfnh6M)9
z3<`|;{0s_=tU}BRj7$zJJQZRr2V~h2Oa$2#7&O=gGGtYLd^o_$vO$*T0IU9Ab_Q_)
z)f@5)#CTRP3I9zn=80f15@2KpO~yqqG=Nt2ikdHA5aiQf2-w81;J@Mm2Idbed<krz
zi-c}Si!k1h)^m8Az%6||fm@zEft!Uv{hj@UNAd~WJkm@G+$;s$^1=z+EG!M&!h#$O
zvN8$W`t6Jf+?>Kf3%L0cxOIi461WwZq&_gQCvbz<j2TuO3ET_~%%;o?ED78U9gN0;
zF)R*@!e0-tutae1WN<5eWLOZ&QozlY!Oif!mgxbr;K2oIOa<J+3>n<QG8x>$9~d~4
zm?aa~8Dbe2EErT+B^RhNCvXd~GH@v|vnFub%d?s%aEr@-N#NF%w@=_^&_B+Yz-`W;
zz{H=xtuD`y!2LgxMS)3PI)R%_aJvLZG*+1P2BRS>SNIJ^ZD!U4ZcWzq2u>|#<^<3*
zmH7fjC3aQ~W=02JG3Eqr1_g$~4km?YHjeTGoZ8H63EV<#pfZE)1|y>agE(UXw<0sU
z0T+J)cb>d#0yisD1EV1W*L4eKd7%VuIpOOL%!1cXFz_dE=gP1pa4WK1|G}li%C>;P
znwc#;fm`r;0HZ!LNT2j|2WH7j3EV6Np!_BJHG!MSfrF(2q?1)%Fo8QsRxW{CoH>D8
z5H!Mby@Fe^J%O7sK`iKoJcBv&3<g#YZsrVb!)NS{2@LC5gxMePGd+)HVM*X-l~+&T
zjuI4lz|NPzEhu|~-QMNBa00iBuwVkWu#5mVivokNd;zzxbOyJuR0fDE&y>K;BP=w5
zTU0iITi!f@`@f{DeF8Vj3I>6-*^G`~>{*y1BvoAApHO1)U|?)eGdW<-a)5zJgFz((
zB*wrk$n-%{*o8q#$>qI(6e#mD2nrcU3A;FeL;|GP6d0Haq=a1>K->vn?glAgmjfW~
z1u*x6l&}kfG)TKNC|f)bXJBM90P!8989US%9xZm4`Op5a!GJA7nZH4L>%@;N3V#@n
z#53@GVActF-yuEuqxypX97p7t#AmSbbVv(-d%(mpL0XkvB7s?8a)C7C0%?;i@(dHC
zSr<q%H%K!!FlleGU!bMp@VG#l`GA%TM};&?fwbXQb_NA)9xz+@?Ez+K_6lj13<jfz
z><b#CxWU2>U)h=dGblmSuqH5YS4gutq$?`?V=!Q?kXCFEX^>zpkQRQpz!joI_~QdM
zDC?&}FqHKqfg8eNVc-QZ9!MGfVqf4O3t|^YGc$0=NPsP4U|{w+a6%r!F?__{uz-Q5
zLRyJ|&47y~fk~R7LYip;Gjjr~%@KBn3Tajb0Rwg=y9dl5V*~_*KRPh52*|QjNV5nC
zuqdeVR7gupKi~&R7D%%=fJ~B*bzopfVB(e#V41+hqTt9QA;40=sPs(y0V9YhARzFp
zfr0UW2^ZKk!p|0PLUc1KxHB9u<px>L=%iuskwHNNB(Z=|@uPSG8`Sa2g6s+M+!fMJ
z3=9mK3hW98<Q_1AR24|GD9C^q0s^3MD+d9P^#TIIPag0<EM+{vXmduMK|+8<K)~=L
z`+@|JQ&}LY8;l{UK{1uU3{qbp&5*#%kiaL%f3A~FLO_&VfrF_5?ED5s<q!N0d{P1u
z0{jak`K8$xNXoM>kYr(Az{9^ll7Zm_4~qkzG%HwEUz**44~`ie_*g(wvEn++3=#t3
z3<-h)jxcvJI`G+Ck!JvhsxoM411Md5U=;rQfSX4`K!TltOZR|00~d>cfPj#Lw#^B9
zkVh^s3dlNWo86G-xWTC0&bWe+(SVWBL4+|un(GE5%L+cjuk30Ld>l6zIacr)ePdT}
z0HrII7lMXg*q1%v;(@d}6!;k$ShytwL|GRw2rN)Akr4m~k<eEK1~G;kjFRmu_=Nu^
zu<%F-urY8eD11v`1ch>eG~<I{n-Uv_3TaTQLiqRs7Qq7v!aNny{10SAg`Y8iLs3A0
z#R0~60M^GLZTOA-*aB#jF&+?Ma9{>`wLqG&!IB|?k-I`#jg>)xMbF{N18GtD2W&zI
z6j(tD1OyB|urF-j(Pj_=xsO@k0|P5V0w*NigdZue@<<2>@_TT({P^&V{{XN4cm4ys
zj0_4)3=6y=?ls!To}j?U$RN%JN{-SD510fL76^ij)({Z>l#l~aCH!##Cn){}1cW{|
zFv_q<2(T$IGB4ngVv!I4E%sx8W&?+f><Ql$SV5Wu1XvdEL-eqK)@*_j7>EH*-E0g3
zkYvuRzyLChr9fKYBZGsRjy)*k6d2hx8kiIqSsXy&%c8&}{PqAp>j4Ya1N^G&j0afd
zz8qlXY+ztu-~jnEfS>V!F#iD|E+z*ikbNEu0&g9dZB8&TNC+@#Fvq*R|I5EHfsKhp
zKtS|w0=FcnnDOA|O90outeh3n{0ZEwEDhWeQVQG*3q-jSxY--H8NpeWr2rxcrc8M%
zq_r8O61cf5q=i`$xET+yC|{9J5Mu*Hu9`X%sPy7yexL>|-axZf3Lv#C1=1`DpdyGr
zfm_^v!GDI91a55x1|CqNNZ{5LmrdYic)-Y?z^w*q5d06}sgUMN;N}9m%U7BetW}+j
zHG!F7fet8MV8+4C)nZ@+D}uPTOhz_=TkAVN%m{wr>kB~jl>GGs?jjxzs9RVHKqf<s
z<4fRXs*u(Ob;7tGfJ$c81a5s$?a2kI7&90YK*>^=tw7pwBY(ob1}4T2Z0rf#%mvay
zZxYyLKt&$dFd3EvZctsA1ge=?AilE&rGx@$_5*61;CKfIHOvG23Ecmsd>FSdf%12O
zG{XZ1K}7|2P`dDN4E(~t@J}&88pJD*W?_)#sgSl5Vmz(@E}lT88g2%I6UcG~a|NMa
z4bn^r($aDX(!#O{(!w$c(vs2%(#HG@QVG(+k_plx5(&~m%nA&`;tA5iVhPeBq6yL<
zu1JEkuy6v%LePko-~vWLfd|YC4bm#^j11-s4(duW3_lz|Mv6!$NDHVt@ES8SNPS>b
zVV8Mfro_(Jz{~u=EP+#<p@GHwhN(bag|rg8Y=Jb}12d)t;w%rCcpsR_OFb}SWjesD
zATD!2>VAgVf7$Jf4b2hJybMeZ(o9OsQV!D63=Yyt?92|*hWt|O4$=bb4PNXH(gFNZ
z?#vAi(!2|#nG$>rS!K3QU^irt+1|kp>M;r_9Ecabp}-Ktq!ImJ+Cf^4fi*#d!9j-M
zfTJk`<AMY;L52$q2BBt86QmDaU}j*K5ocgfNi}0g;1gm2oo=nkl%VCn&(OK1f!XQ5
z?Du*GehK#kEmKAY*#o8wac4CiNhD~g9+77-QxcbX!6z)Pz`(-bEGz~Z4dY;tkWA2G
zP>^S4;1?FD5R#C0U|@gXDk|W>Ao%kIpXfISEv5%7`V3MITFk=C7x)ClD>xh!VnoG1
zNU}R<35d6CaS)1O7PV*KTVN_G=Ab2?zQB}6*!=*XC_4j>I8y?vlAz=d2B!6U_#Lzu
zgaji*6(ktMwlh0uF&tn}5j<`oC7@=(pf4w=pvA&i!OquUD$lN<#lsL`!>OPpFQ}l!
ztisN|f={|#LCdh5fk8n_zFa{|$y$V=TtQ1j{D1&s0-H4Z4mMEP%B`R!BDjK2UR*&-
zMoFB}fm=>oL5u%^8aLwtW*!R(76S=>1ub)7@f$oKB`hF@oPdHBLj#K@v-k}jLx%rC
z8Qel25*W2P<ZtjOFvu`4$@42{u`x|ZW>?S>kx|gnS7%Vr5*9oDfRSH8OHf4S1|vfT
zoBocN1rnlc4FX&XB!t;6FdBbjS99QH5^ykPXHGxC$Ryyv(jZ{W#+-hG(L9_%p+SK0
z0UvvV0LuwRVb%wXoDBk;3R=>~8w6lj^1uy7mIV@g3R;qfK$X=2Mpgx85fKkYL3aga
z;g1XWSY~js9FXTvVC0u}U%)5tp1`Oi{0y{$g;AIxfzgAN;W=XhqaicHa|w1v2?j<E
zEoG1Z(*iz*4~k+8383YN3=>#b8KjsOFbFd*U@&24295M3Fv^I4j9b9RBIuOB$i9G?
z*@1-#-0TKTEgWEAp1~(9ID?OiL5u%@Ium09AIpPamJQOvavglK{0r3i8~AvI#T)n-
zBp4VP_ypYr7z8#QkYsP*6K09<Vho5kWbm*^U^6)(&(OeU$ROnYK$7Kxr0~WA?5q`h
z%nB?l1$>MQq6`n5xGVTrUT88LU|@LAEiHI}L5rQG!H%bbPnffSPk1APmY_%lyRplA
z<^*<Op#naU-wW75!~9Yn#hDEYWI2yBDDVk!Ch!@{aI$kSXdGu$U{GM@{J<61ut1*E
zorA$cg0r1Tfx%FK^Ehb5Jf{P9M#BPePIqPn217B<b^!(@2F@FNf}#QW><xSj3@!`}
zd;**uj1CP8L^xM)D>N)<NM>3ft*_3gz{tk9fQhSuk6nR}F~Px7kiq={t1i3X0dHmn
zJ}q%Z1wK#<tAdX|!Jk!>DT9H30h1_`0=JI2oCCi!p96!wIimvui{SqQMLZ6s%qO@Q
z983in7jQAn;N&^M<?z8>!EON)O9U6s2`-icOe`O`SZ;8!T;O6k047gxiHU*+(;0;2
z1Q>)xI2eSP7}yyXgqX~TXSe{;Bl0allKBD`%Ly)Fi4$Cm4kke}<Qc>yE^sL`NSxpj
z5VL1c7l>itW(;5u6+gixT+SfM&tS?b=FVU$aDc&7l3hZA<ph_?M|K8PCa`%745|zY
ztimE-j^RW01rHd6<u7pYyf9%^;MHU>uaIPUVImA}O-Zt>;4pf~p0I$08LU9~X+xzY
z>wkBMlBWsMJQb2G7dS*-FfcP;;1Xu4kYqW*#hf54!f=60nw^80`2dqPgWLjU9dW@0
z;!GE~_!*S>xlVAgD6mVjT8Ocn013o%o#5hIAPynr#TSUPFkRr1mOH^^_<`NYfsf?^
z7mtSnV?(_24SNRB3!q>yWd0w1K}Go60v1LFCNaheNtOU<wg-&z#~&~<F)m=x^^jq(
zXF0*evw(-^g$c_79>xSE#sn^|6G{vYoD2z^OcE??6_P9&k|3!9Nk$6>mKP>WD~gy8
zc*#gqND8xpWt5oN9x$?02=Fc7fdm`d0v_fEcKXZ*7VxkzDKLN{Q-PVMLQ+Yb$%9c?
zuz}T(flEChkmm#!{{s_oC3OZ1W({?Q6I`H>6lJqu2Kk$T5#*f{T&xQuxgVG?3NQ#W
zB``8SFkwnyWIDkm%j)1Ds6K<mgN;=kG_Ut|0gE9!vwDS)7BkZcF180ITIvi5jH*fu
z4@@L(I5==+FfcZ-*&L8(IG_Sb9Df&Z@GEezvMump0tb_@{0T1MzYfgu{0qd`xDJ>I
zvoVOVOi(fS!0vEBOoZhDmmtFmHdmMTEX)VE7$0b}I!H<htuWy~z$L)Qz{h`pi<f1A
z5dQ*BCjJ9l4ARU8xC8|YKpkt=16)j^><74%SeZMx1f?FtB{nSh$f#h)Ag0KCT!6t)
znz=oJOF-s<9J>O8p$te!Nsjpdmxl;5D6=XFFdyJj5(NoJFoSZcvN-brE=6W{4+eKJ
zW_A_@24j~0%m=uHm=AC%3o;+z^5<XhpXmUX0b2wYXf#Nlo#_A<tG+tJ0j?x@`2$><
z{0mGtL>v~FFkE2dUtl80puxbVA<4GDgkcAxu*(8*C71Ub#5oq2Fhnp3yF37KKY+Ok
zOu{Y-5=t)b4J1IaAZ`MPTL9)xkPvoRAi<y^sdb!XfeBN9B+~;4Mh!`Z2Z{U(O!)X5
zV)z{-cRPG!R`_#(N03v1MJMFFhor+t@dN)7a)qS>BzZg}86Pm&Y++`wkYr1c<X>RI
zA}O`Ngq0zZNrG9$;jw|F@LL8|9t%kp14(8FZW#_R%kT&Lq6R^TC`$qZl(C=+!Vvy?
zfCIu}SimIcupod7tjYKhd&2=WE(=Kqeg@999n7o>8r&9=Y7DXp8bTZj8k`oAEE#+(
z32ZzTk~|4~AOkY^SQdb|qM&{24}5jx87w4O9<Z=7fHX=oGiZPm8Aw9-EC!OI4-<?*
zc4hD>e`H8d<hGDxRbUkoSK#8YkmLnxV#(kW{&qkT#DAd9Z6PVo?qJNrVj#);KwVz&
zfjTq9K(+_!^5qZIrC1Ck`5vfqW$+3AeE@O?Z-O{;0Uu8WAAf>4J5vT9TY|W}_yQFr
zP{sl2%;4jHpso&)U|PVy16BcX5MP2gQwE>7e1bRw!vr1+N&W}wtkNKr57hP586Kz$
zOM}XU1q?h996I7M4gy>jlKc(=>|7qcj1B@eH{>O5h_i6;3V(DE-~qFk8<=GzEF@VR
zK!XVaJQk9S7Z~{;s55b8@bNhaKuG!H4gxG(7Lx1^;*1W?5C;l>Okm`(kmLl-4l}SO
zFfv(4vS>&!IxzDmF!IXJNMPh*Tp$BdY9Pr1R>_jVC-jVgPedYtk>`X2a{{9bC=v`L
zLG#NFtlSnLWkTN^IKZySU|?oo<Xr%YNX7;Z#slh11$;awxLF%)xGf~bgdHLo89=tn
zgL<?q0ep-Lc$H7cF^IB((}&?lcEtvM1_d@y8Y|#qY48I@lY%p-YA)boOpxbSaAuGf
zRB%>d0jp<HaE7Fa0zT#i5>RKcJdl96o|VBF<Tz03ForN#6rc%}L4m<XVFoxc74Y#Z
zIIDsZfP%A>;0kp%1wMK42fR%Bf7u%tSeX*kSwP)vKK=zvyej5$54f2?Jv}~_0zQ5R
z23C#*>P!qOlI#|e{0u6*@&XJhJkk;jD$?RNxcC`VSXo|hNy{;)fFhegMU}-uQd>-d
zL515wk_RT}D=)&J!lN%QsNg5T-w>$?V(>B<NU|}gfa0G)MHb{2P{9nUj5$~mm{|-!
zcKtVli1Rl@vdW7xsIWi+gr7krluyBr$%C170S`BW4U+&1+X5w!QUg#80%5R%oxoxs
z2~q=gd72252cy0^1A~e-vfcU`-x(n(z(A7m0V`tyBPb=GkboE<%q}1aVSzFUgNl|C
zXj*20G)PSb13!a`t-L&g3dr*;54ac^R2UQl88@(jBKiQA;5P*Y9XSRIN&W*|q5>Zs
z*g@qss0cs6B`eB&!dBA#0GB-L0WNmN1JKBX$0|GyF&U6pwP&!9WIezoFMfbanI(XW
z_W+kXv>0|^V$}c3et^pbR2ZB4F>YaEOfX_N!N{LrB*|dFz>#32<j(kjmnFdn<Oc&u
zHsTnP?iP~#2}Zp94wCXr48_7?D<p(PS4c1|U@&H85ZNFhEbPI^)WN(a<o!oRg*b*U
z{0uuPSx%HPDr7p`n9m>-k<EC6k7)*@u)qTe<_G+yjO;=`n1ozbNUMJ5f50!cg@Ki&
zfk~ZR@PLF&%K-`9A0HM-$O|rz;E@(wAR#WeKtkrr0tt=<0!#`8j{k+e*EdKohFy1^
z@Q9yf!9+%dOeF@P1YVXGtfHa{yi5#if})3hxd_CF2{5pMHrWWVDp)XoU{GLTIl$<0
z<sGYN0s}Jx4`?^e309^DjQkAp{45K2c{Es94ovZ2U|^7YAgj+H_&|-@gM(R}@qwBl
zD~I|5UPA^B@g2NO0^1Y?Vh$La9FXVOz$?tIz^25^x`9{e8$*JLk`Vg`R)!m#3?7^c
zLhJ{a6dM*WSUDe%XW$ZG6cn_Wq0+G61B37v2hffw2`0ma1#BzkrD|Akv9mKdFkCpo
z%)lz3&cMLoZN|yYz?{*rfRo*w@qmCKC;M^GRVN;kG8z^zv$r!VFev?J7hqHR&(6W-
z^`G6HNr8c>g3b6p`*98irUEvlPYex;N^I;FpoN-D5?>Nnr8yQbF*z`ciX32tRM;X3
z@~ryqj0y6ZEE!xZE13Bc<i$kAD%dzR*w|ogXC?&}1_L$`js$tp9}BvK|2D7*@Z0e7
zE3h#Le_&u{lK|~65q3Gj!nS~wrJz<+=!F#n2NSabgYq9H1y*4f3s%M#!Hgbk{0$Yn
z{0*%C|Noa{Hn0V=oP^~V>X;cK84lPoIH(A^b1<+vq%%uI3d=}D3QBiyvnenLOI4@{
zOID}|OBATEGB`3<s0fQys91`E7P$zERHz6GSEvXIdGLUg3Rb8H3sk5GGZm;9eqvy7
zU=?PqP*G)PIl<~A#>B87fnRV-1EYd4(~f2V77j*%3mLWod<qOK4f`1iTp54t6J~H=
zU|zt?*05iYp@ElW0lz47!+wE<3?e2R?93H>Od1RdJS;C50<M^SWKUYqW5B`7vVqaz
zf*A+P0Y-<5W}GY=7@RJdZRBSVP!!_{U@(}#!193M!DTa1p5y=j|L>o$k=^0D0)v78
zuR@bye*?#gS%wWQ!U|G`4ILXBSPkVE7;Z2IHT1~wx}RWB<aIY-aM;MMAf~`zD9d|X
zf<cJwg_J>u3~vKNLPNtwMuo7%$A;3p#|0P^C3qYd3@5PiYA`r9Y-UV2z-q|M3u@jm
zFl;~ItimqFpe?xI!5k5J2S*W(21eoZgm@+fHYIgo2?izb8CC3}D^v|1@+&+L-^eNO
zn6ZJGA(~6zv4)5tx9md&VTEVv4Gh8Y3_P+A6(j`JBN!5Rg^w^YFf&LnffgYO9|0{d
zl|E#_V8|qWNPt23VFQC9yTIZZm4=+M2Uk>pmi<H-K4N!pVA#ke{Dff!n?W?Uv{FO0
z0T*W@lYnyc;{*mn4$j6OLJB<GruRx1qItQQ7*;e$FfI^bN?<W$=WLXyG-TtxWKhlH
zz~sona-5}sNr)wZQQ(`yY|!e<>l4Hj*cl`^k}}K~K7=ziFflC<WpQ9ol4ACdU^$>B
z^kxB@GJ~YU8YOng2u8L8OiT)@tPKo`66qDuECL<EZx66ADYUBOm|3tIvWp&{5Y3Xn
zI+b1YIU|EYMl^%RA*KKZwghJ8A1p!=9t_S53=RAT1eqR`F+Wf=<QLl>!BEOCcAc?7
zA;W=_ErLOwF+rV4iJjGfQ<%+xQ(K(ffm4WeLAQW-0(*#RiZ?&211Hk~1|@z42Tm3V
zMwSc)28IfT1?5Vt%n1z2{LCH<%my*63(AF<0~nOWSrb5a_pvQtlVp_WY-ITVoxfqe
zLX3hQ;{gYS1_=R1Lw4Ei4UFpi3<ns+z9^I{@v|?8W(r_nNa$p0P*C8MYX~-0h+&Rk
zFl3P3F2ErCbODnJH>ZOM(~nwVo(&Bw3e3X12GUBPQ3PS;2X!n9W;1=L3si{aVwkQV
zVaUpPT!WcKp~jGn;kg1cgMv7NM2!IJgvq8%2VxSK83aJ*^&e+yU{Dfgy}%&+s)30?
zp@yY`L1hNxfnJ6O42%xq3=51IcQ7k)N_f<&a7i%K8o2#Ckf5%_+^!(b$iX0}z!1)`
zg2C_$`vK5u0g2@gn0a253x9Z^$eO^&x`K)6Laguy2j)Zn#l#sJnnTU_8M>}@#4rgk
zFdkqO`I6wTvf$B+Wlp>d9qbC4Ob<8}nLj9SDKq}x!Nalvv^$Z_`2sV;{{uW?ObVLJ
z3$z#(cy4B9_%CPPV8izy8l-ALpupb;rea?XFgq|Xuq!aIvNdpkyz`%(L5rn<LE!%b
z2IuBzvyTZ}EDa3uA`J|T<}a8TW-xF!Ffcu+65(xNU}=yOkSt(PWME;?WL#jzl)%kk
z0XmaTiGekPTj*=U1SW?GiHzRSBBJaT+)iww=?o3r3Jrf7xDDCa+$C5P8ALo7oMl8r
z89>X)859^K4=^|g#4w9;Fo+7S2z2<su41RaAk6lGk>v-kH7k?3!$zhJpzVnV7?jwV
z8yJ-SiYqW1GBJk>FbJ?WFb6SbM6)s-SYr5*-3hd&g291-DS|1`!-9!9z<@#csX{Qz
z4IV+}1PNoo7<LCnfkz4q4rkaI*bXolF&~OKal)8^g{^^6<q^AsIBSADqXdI6>j_4N
z1Xg3mBg_e`$qtYIi+-<v!6?jdfRWKbL4{fLfC9t**Qyg9IcN(pIB>BjSSj(d98eGz
z^zdgopb!|(Ar4wv&T_+-(ejBQ1A|P0j_Uz=26+hvCJjDe0S7*|2l7k?e1^;t=_i<l
z860GVKPa#ovr42NU}x^A6q2~$qx6lVL7SyQN0=odkYz&v;{iqn2TNuP8DSO<1sP@s
zOXeGm!W;)0RoIvp$S^ZlDl)szkT&9AZEuj~aj@jx5v0Vy!J#1X)PX_qKl=d<BWBKa
z4rzVPb_Yu)WoFI>X>JEg76oZRaRp{J4h6%H{09^mcy<J_Xz(yU$WdfqxxlRx@?Im4
zjX{%ZM-V@QCOcCCBg=*$mIN7o2g`D%9YHJ%OneNQOf!O5HU#l8XiBnkD2RM|;K#Zn
zh|2>!(Pt?j#=yjILrb!O!-dho()oZr1M>wY6&5iL7eR9YCgX1m2OOf95}5fPXfZN4
zD6mN=$frNhVvx0GkkSzsd%y_di3q1ZU=&M#z{vkVs|v)HPH)g;dB7-?{(w<jtU;3#
zqKri{NkV}~K~6<n{6G+s1i!4%fgt&Eg*YK$)(l1uHr8@R1qDNP*76Gs3>w=RJeKQl
zur(+Ow=c*SZf{VOY*$cVh}gu?pvZF|h+jcLU7?(D1q+*k0@DHp6;{>-EE*u~3asLG
zpV$=?^jXUlTv+6b6yiVwmMj?zydX_+JeI-?(|0hkISBC_2+}{!cp!*J2(*xb!-Ihz
zq+r2U21XVEE<xrU>`pH4*~KoTCqLs?_@i)xAuft#fdzvQL!8K?0~@%1Xt8V%W@+Fy
zW@9M-!OYcB$)do(&mhVw{ER`A<$)1@gD?|=f{_42{AacXVI~a@6-SE(OF_;A&@d&d
z28STW1{Q_{1;qv59*8jC5D;Xq;Ba(#&%oNjpdho&fg$;Z90MDpy95K%3=KiS102i?
z6jYALIhZKQh&OODtPo;I5MXP_6OuF#R9qk>p}?S_pmCg`LBvFYnf-vJ5aR&_jdn%_
z29^y9!qP7kM1&t$vNUKjFHjH`nV}%el%c?=z~FdBo<X#No$-Ms;|m2-1_twnwV>13
zI6o)|b39NGVP~*nXwU|2-q00dIiR4_&cdLmd7R~dOTCaf0|TeG*#giI856&PC^y><
z5v~<^d<vra?2HPcn&5Fw1yNx}2OGyN@+<-o%xo6Hpmj6~31SB<*(`z?Rxq-y$YWW+
z$|k|jbVGsV0vDr#5Yqw%d5r|#|Nm#R2=MYJ@UpTr@UkTEiV7#V>!&j&@G`PY012DQ
zvL^5{EnrY$W@X^fW?@a>Rb+KHVBiPo4Ch?n=6%GTfi;2GfcbxT!<NM8zYGWdF+PxF
zn!wDn!i~?tf<J+mQC>cQS5BT)A%TrKfmf3?J%N{BA%T@8ftRO3m%%|!t%C{71Wm+&
zgoGIibiu|?R%2{Q;AJ`y#g@P;^u~diiy^^;Wr4*6UDgC%d6op;UTOCPUio&AOG;Q4
zFetGz1Te64Ffc7(aCUh7jXj};`35W30tO}p28M=ueua6=!48i<@+&mBGZ-)lyDU&t
za(TZ&k)y$#;RmCz%L5Si1DGqoB<!M~#NeT))y~r3E__^}hDkz?sX&RN!Ckmrp@wNj
z0@DT%2Q;|O^Z=xgu~U`5!QGJGK^e<IM{djlF8m7^nb2kJ_!4-*V&&Wo^M&0Vlr`Ad
z7<`0fEtG|2ER=<%4U`!fe3%YoF*_(TykKB(P}XQ?ahNYGZlNqJW}z%BYM{*4FkiUc
zK^df1i=DY)KEn(~1_x!3kcK-G!){?|1vVuqh67o`k_kSBf87-rb}LCRH24UMpU4sx
zd%?t_z^}?KEz!al!7z=1Tb-eS)!XdNgDk;~53+=%7AP=hunB)SaEIqX7U*aPMb-mM
z0$dJk#u;WT5{jUsG2b4LRbrQDU{GQgOJI;-VNev?@_=8TU3!56w;{V!xdwkYyVP_>
zh6M`JEI$-@7APpONH{34YV4L`S)ic6E>Ym^oD<E@qOsdu!kw96fdb2p`7ApaSTYz`
z7APn&h$S#6vx|8!NHHu>P+}JgU{K~~NMK-X*sZbPKLaDn0tHc)1qw_H;#e3s3>hTL
zBNS9v84hGKI%FDgurVCSR^pIez@@|~U2uRUfn9-J`U1ORhM5HeqXQ??i)@jv3pj+N
zH#{?BU`_YnbOPOl*04@c$w5JxLHb5Ea|eSGzqA2|!y|SDc?Lda26kl@h8_G){0tn&
z9+a{=2ni`T2r->_#A3j&^Z_)Tz~CSx=<dKEA?hH+ctB8^{eU3D2S$bkObQ8d4veBq
z5)6Xv5)1|ZCD|MHa6fpU?E9aw#Xf;ikpXmED$COc+{O&d5(<LMCj^CAP6#q8a5*25
z7ht_0$YOERRg`r(qrzu_4Gf%20t`m%Ea4{v#YG*S3$!r!3oZa%^C+so$Z$fC!6DID
zDCX${K|!X9g~kFgtP)((EC&Rc4t!Q&U}3my!pa=ZaG5cI!BB+RU4TJ}oz+7~pGD+=
zAh)>)v%>*FapnVpO74sY1jXAA2nI4Uuu6m<5EN!PASle*z^L?y-GPJcfFRQfMspTM
z_XC1T@(dM>t`3j?OL+tcWimv94iRw3Wtzds(jd&TKv4MO0VO4V=^cWGG7Q@pI7EdP
z<T4&O&bnX^3&S)P11=Va7-6}F03|^=1qQYTCPs!_PX-3T?GJXFF@s13hU=OP4Hii(
z84LIwl7jW+84m1@XIjB6_)UR<Ax@S{fs^IM6b1!Gc}9n%|9tW%9Fmy$6E<)QNP{K`
z59}6~mp-stR%|<TaV@Vyl8E#TM#=3Rg8T{s>`Vd7!rvT{?AckjD+nktCImA)$YWLz
z;K>l?cW9Gk*}<>C!ump;xj}$IL4kPzgAog>d554T%XWt(OBR+5HyG{tL2MSuO&x;5
ze;fFCBJx-!@UbZ5vM}&Mmc#NlRLe7MNak75&fid7&Y+;l*HA0`)<KN_z-}%18wYl?
zvp6vEHB|FA2#QJkYY-G*Saw2{VFE`HUxOga31(4_1U`Aj20<>S1;Q)=Nh}FTEDusu
zH}NO5$ulOj^)N1A;qlnO(jdsfkSEOAz%IzHz@g~!UP0gJi5!D~6r%zkvx6X$2R~~=
z67zy7f)W;t3@4^A3NW)OBr!<vG6*oR{Fovv{$dL2f+S{zslw76Qx&8cICw!lW8oiD
zgauwq5tP*cb(94~e{dK#ED$*{MS+QdgD<dQ!AB-V1qNYegQ>#o5>uVn7~EML7y=gj
zXPhwqz(fg_8A&WBSd~68KByLE-Z7Ow0aVfn3b0f}u{sFK3od9YW^)kKcV}=AWM)~w
z!0aHX&G3Bz15*P7%K`>DmIZSB2|WM*tFS154trp!0FmI?G}#0mmJS}41RfFD1Ri<W
z1Rf?4jszY{Ifm;AJi^};n0RL7@h@28CNJo)kXQJ5LM8u#HRg;5*!dDF`5hK=@h4RN
zm*8<&$P~dN&)~3-RYdxQtTKbF0yASmCCdah))%tO0Xz;L`4`ADh_HN+wPa;ve<91C
zz!S>yL6+@>ELQ>#Ljey*1eXpoa{>?lg1kVmE2qdZCh&+{d0@zYATON1p;CZx0Sns$
zCZ-PzEDe<`1^J8*7#I?Gm@C)?Srs_UT;8)K@Nh0z!xF(GB#~jwq#(<fFiFULfvh5D
zI|qZXq(LRCf-UomN_pu6l`O*28!CmFS5!(1KbRyex1mx=fHQ%|LzJ_fd4ViTMWqrG
zX9N$+iA78eQj7;GnQr6>aYpb6vz@41^p~OG57UA9EHa!4JfaLISeY_-guf*u>oagB
z@cdUv`@p|Il;O()W??1{ITnu&!@vBF543nHl9@CZ7#OMq6&0A-8j^+GJ7hK5nG|H1
z7-WQ9BxHnLG-TKm7=%S;$TCI92)kr}cuWm4!Y(spgk4sEc?V>KU2ez-yS$KLdyve;
zAS>)5Aq!fJJVBQ2K{8jxLY59${s!5zEDU=Exh+7mEFH2e40~B7$ntc^GAi(ZS2)V5
zvP-{U72U|Nm%)KsR4Sr_v4TOAMFBL-%u^xDQXtE+fSIR4RtvN;5+tC(ApGHh4T!aY
zoArP!H&~7E-vmCM3R!&?i3K-Um@8zp*(Da-07)sx3Vlf6lHu6Fz)~Q~>aYkTRv;_<
z_5lM=g)EzbJyU`@$fys@BF`FlA(9LZ+5!#@4iJv;!w0+|1qHG~&lYgVa6oMP$Y2K%
zRQ$<sfS*}GgsnoBML>|rflJ4pK|+v4K#+|=kPFOUbl_)K$YzlcWI3U)^qC=nkw-$1
zHG$EQU*Qj<0uw|HbAx~kgM^?stAoB`!wrVJoM4@-4*F6ceFB2Q4;L`;fW;UO<S;zo
z<%Y8L85-CiY@vq^qB0y{VUb@A3?M-RPR0aAn+|!1dl(ypAZ#55W`-^<2|=a;Mur1y
zf=UmxAttja=yQQRA@uP9gA7B3EZc&8f{Q@QFF|o2^r3-CMglA^E%;zBONA`c#6L_2
z1Q{ND<f)M5R}hSpXE?AoN?!cHUKxG`!T;{^G6(i@$x9#Dt17+y0V9I~vyME&4K5vV
zX$F0epI7j+F@WtWkY#Mp0nOxq1J>{(yP5+(Bxu<ZY(Q%bJ>>ZlY(yb$WO-l!VemdM
z&}Z4spwGf3A;`nP4-w=!uvcE_K)o1~fFKKlK97W;78`4W5JXP?*@1dDrWFDpTfw2k
z*dPH~9|&giG3ZMlV$f$fP!Doi1_Pr5lg$BnXwd(4(BW6$V`Y5c%8=j&3ReL^!;cIL
z8bA@k>cB0}zo1J{$BqH)eEpB?3%c6mWe%L>lx9{Cg!qGBL68-ciWy`fe9#y@ST$RN
zEGWbaWZ@!A3Jf~jEMQ6SdRI`$_x$B=_``C79csg0@dsTS<c~0%V^nfyIKafuaE_Zj
zK~SF2L4=vHfftmDz=f1Lq$uU7kd>B8;Nhu|m4OzZ><kOoKr!a9v>s&n2~C~^Yn~ID
zED6>;5j^}3OGTAFGCW}6iQv%@7i{3-is0c-ux4k9;9&{iVOhYz17-++ZQz2im_c`{
zSX)5k`4X(TPH6HaSj&qiShH|N@bD&B%S$I%i+~7LIrao={sbNmh<VH`1+x4J)}>&_
zPLgI!;9*|CDY)<eD5rBKSj!zruoh!akY!9@<B8xA<!WH#TCh)Akb#YrL4vJ<i*W%9
z%L@h;(DGba6=vB5`<N4W7!^1`nec?Bz)l5Lh64?d?8~|!3c_GZfCe^O!UmAX3uNI8
zg^vsi*mXbwEX+_KtMHNO0jmx(B)EH?h%@|CxdG+r{{=Z$Q2&5^!Yu)Y4~+Z=mI^UD
zNHc+A5ae){0$DZ&Ypx1eVG$S$E`*iA&tPpK@V9|OSX_aTg`-{Y;{s+wb_US}EXE=4
zMILaoaI`CYWO86I=4TL+;NjtD7yhdt%TnRN($Op|%ph9|IzEx(fV@Jxk^qB+tQxye
z1FL|50;drJLllDoQw0+TgDk@VCYBjY%Ixe6vWy8){0y?J-akID3p2>di!jJCD*pJe
zfR|&zJ|W=<85!0GH<<(471)Ir@OtM&^D{rVDJ8r^hRq?8S;30g;+8$TNVtL(v%H9c
z6$fZKBY=TLfrVv4J7WS91A`>@jCPg@?ZQt%n~@cT#XNW=#2k3NZ^$!<&uHglV9^Dg
z5Gc%Iz$m;ifr)iSJA;Lj2Lpo)8-ohJf(kc3gD{i4D1$J+kd6Z@OM@Jf0uyV;Ss`Hs
ze*OjCtUL??!psZ2LC0>jTQM`MGYBxw;1|fK;1cA>P*G-301u8Saj`yVH)Llu|G{s`
z!0OH*puom8fq`MhA3=5w1}zRY1_2g^4nq#E_5=Kk99&EZ3``CpiX5Q5=^V@q0!$Ow
z1uizoF)A=Av9U7<2y=sW=y5eTFfcX<I$dFB;8tKaTEf9z0lI~NJz&WPc7?bGHU)Mr
z2L>a-7@-dK4NEwL!x<P@4#j+AI^b)>%^);`-CzkDn+1ar1B=iCc4h|#Lwg4H1_mPy
z3y~Y_DoeN@Fg7tU{9`)8%^>`PU1Z6NULl48c7r7!nI0$_aWilPunR9qU{_kg{ehiT
zfkB8nfZcfsH>knDaDs(RfkBA*0=v?Z{|p>%Oa5~nS71m!!OifWlU;!UG(953eu3S8
z$zOGb1?)<~q5;gj3)tmF7qGL+hc95)k{4LO&dJ}v#h`93{y>%C02k{6RnXx=1{|QN
zTb6<j-UkdKEDsnIIv6|H85gj!J20?xu=6#rGdM7)xV*REU@7QeYhdT9=wRw#V_TrY
zQ_;b6f=$9@fr=0lgAgA>ANaJ{|NrZl4|sr?Q4VqpU)U8G7%kXXcCfK*U}I<qW@xYy
z7TCbXa)3dVUBH2n@qmgT!%sP<1&`R7JlI4T4!AQNU|?Fn>g4d4fk{J%je$|Y;eUf5
zi-07{i(tY3D;U@o2r@Zb5N&X{VD_KkxB`Q~2?Yiv(E2)IcMb;m_5?v*VJQVx_5}=q
zKR&Q9xht?3vwl#2V8G<S&N736$Af{-fkC+4fkECJbO69{2L|Q?O#BWE@}O0x4D#*`
z3@XCz4h-_)4h$-S?G6kq2A~c0maHGr8+<?qZ+u{2VQI)_I>4;y@R)&x{ehY&!wY6%
zb_Xw2hJOxboC>~74a_3n7RWJJaDa}ODqv=LFqfr*S&*@Ung79DamED<{0WN$MA>eL
zbG%^Sf55=Ye&CWQg9R(&10j|RpyM+{*%DZo0=Vq|vp-M};$l<~R&4<t@cV;VfVE(;
zGn2R3vjbu*6<j<FOe_tIECOu&4;XxT99UTnFtS`=<Uhc8m%oAOXgmvxIs-!k)BjHX
z0}TKF|72p|<~zW^w1PqSZvz8Q!)(w_nGXpJVt*EJFzsOAcQ6-cbT9)g2n6M8IVJ^b
z#RZQJ95&e^&mzGo$ea=3bmbi@a|gHZrUlXhtP;fx6=e)FJ~3)ADtCw;NM=?LU}<1v
zTCho&?SmHM0)6K#@(dgm49e`R9$J>{$JrZ%m~RL%X>d6>JmzG3!KHY?OhM3Ti#!V_
z1HW<ui-x%pJ7)(2V*(@N0WF0No(T*J>}&~KP8ZDB*$o(25@d{7Sk)^SSPw7=aV{`p
zQjk|*V|&2we8G&3Ed#U@-hcsgZr%X_5jG131r9a~28I=SOb)Ih2M#C%Ff=eSm~k*<
z2{0>|v9mcaf(~hEU~p!5|DT_MPh^Gz6GH?alLxO7GfM!2@V5sH3s_i=GfZGqFk@k<
zU{JbXc0%5%q2Vw40bZ65Ts#U){0vP04=^}z@G~%p3;%Us;aVWT@4&*(@4)uIj4^?M
zJwe%npP_?6gN;prjb#S|&jCTE23H;jZc(NLHf9HL5mpICjRvk2f{X_k7!L?3F|glY
z&<JP9;AVUv%8?Mk905Af@I!*A;2Q@ah6M~tANU#4LHo%Xmb_qQYlx9oZ-`+M{>H$_
zQX#>kz)-)Rk>MZHANvGuHGT$We*OdO-uw*=cljGw{?Fq-z_6aFfr-n4g};GGoUuVb
z?u!E}O8^5)f&l9SXVwP{><J=_4i~u=2=FNg@E>4tX7FVYEU;!3WN69LuVr9lC>LgA
zVF+SkU|^_UD5%7c8VNd->0m<ugChe2!$~!zy-Y&6LY$f=$_$(=42I4O47>IQfi})?
z%dS;m;5lU=$B@Io!pNY;#K6d)#tb4@Km;p@U;`2CAc6x#aDoUP5Wx!~1VDr!h!6r1
z!XQEfM2Lb2F%TgRA|ybBB#4j#5z-(+21Lk%2n7(K1R|6{gbIjI1rgdHLI*_Xf(Shj
zVF)5jK!hoXa0C%fAi^0$xG*p>aQtCZO9F9HKtw8tNCOe+Afg^boB$CgLBv@QaSlYB
z2N4%Q#6=Ks2}E255m!LORS<CvL|g|EH$cQq5OE7c+y)VMK*U`TaSue?2N4e#7#YNM
zJekFHc^Jg?co@X>c^JeEco@Vd@Gyu^<Y5s1!owgQF_&3<4-W$a0}BfygZMrk2J!to
z4B`iP7{m|qFo+-FVGuvc!ytZ)hk@ap9P1lKb{+=tlROOKr+65|PxCN{pW$H;Kg+`)
zevXGh{5%hX_yryYafL<}aYY^maU~uGab+F`aTOj0aaA4$aWx(WadjRBaSa{@aZMfu
zaV;JO@fIEi@m3xN@ira?#%&7Bj0_A?W*~=j@-T>Z@i2&Y^Dv0_@Gyw?@-T?^@i2(@
zL!JMehk@a@ItwGiXX(6rh18;={33?r(v-yD(&XgS;$nvU(h`OIG=<#M-29?ShSI$3
zy!`S!4TgtlnK`KndHE#@Y5ApjDdr3Uu96JjBpi#2Q;SL%5{rrwD-|+}6><{`3Q|)T
zGV{t3b23vD5{uGHb5rw53>kz%!x`8F87_rn=BDPCmN2BGmSrZVFnnV#N=;0uWJoN?
zR7gwA%qcBORY*!KPBmt5^vf>^Qf6QmVi0t(2Oaz><k`fa5s<9Ppj6^JpWy>TZf0>}
zPG)*uYKlT)N=ngRhUB8u;{4L0Mh50%47|P!Ul>a&7&7xROEMF4GOH3xGV|paS>7}J
z<j=@2E>S4R&&(@HEn-M1$}CGQQYg+SEh)*&OIJww&hUXHxTG}6Co`!iv8a+EIX|x?
zwW7p<@i%8mYH>+Xer0M3Lq=jzN_k>YszPx|VsdsS1G6q;W^rY1Qhv@OhKk_Qf`a^_
zl6?$aZkai$e)%PCyBN27=H#TNC*}l~B$k*no(##)_f5>J3`k8aDvn^N4@fP_%`7Pq
zV`PX4OUx-voyEYy%E-NuAw9n+B{MH^6GMtmVrgD-1`89b8q-SW#DbF2qSO@EGFv7l
zJq95+Q6@HVh7{j|;-G?LaR%-#2Ig2sR&j>-g3OZSjG0Uf%;y+*JeUL=Z!sx*7F#m$
z{9%v|Ze(N;XJGVZN@mDQ%uP*M%E)ia%p{oeiiszN!Pv1N^9+NnQ)2N228XoLyyR*o
z-cyXij;ELyDj5%^7iE@IDkNv5CTADBGJj%7O<^d_D@skyPtVJ&N=@-+a#u*sPkGJ2
zbe4fnizzR-vbZEQx0JcrwW1`oC@(R`n32_qSt#*31B)B8Q+`2ekuEa>GoxsM2NR15
z3#$b~c1B`eN=~W)gIw_irkdcA#G;bYf)9)v3ySj7ixP7clJiTenRuo$8ib@)gfQ`~
zWn55Nl$MyB%1}_0|BOYn=m3LZaY<q&1HU8#gH-+|Mj`*r3`%+F+Kg!o<%yXk3MUv8
zN-{Z^I3F@G_cD0-<(D|+GX7<7E=@@+DhbWY$xlql%uCm0+TfU6SejXsn!=EldV(n_
zttdZNp~RPg<s~C;C!<KB2?I+pBa0zJTTyCSYEf!lvMZxdF)t&#6a)J%R@NRycc0AM
z%(D!_0g8+nE}6xNNjZ{?2V9+<L-UgJi;7Z{OQadtq!<K!)7Y{cb8_;N6VEfTE@xGA
zEUsl{H(?OT+|J7KhKYljB`i3#s4P{6jpY(UL2^c7US4WW6zjy~qRfJl{33?pWsHpR
zOs<uwB?^~W8C97#78j%@XQpMQrYPj(u_!B~WiW9pWN3&?E%D4P$Vqi(kxbQQzLA&g
zl3Gxb;aZWLnwlcbz`U8E-#^VcKd-nXv6_WJAYc{?lOHQ<4g*sR^9;ZI5}(ZE)V$(A
z24N3HHi2LTHepwJw#~`;xdn+OnMpaR3Jq*546N+-%+5uriMdIv?!Ku->G=!~gHucV
z^Bj{)GRsl}it@!c4AW8*b(mQ782NuNFft!v*z25AT3nJ^6r5R=I-e!UGq1R$sB||A
z%N$1LT6Tsq4%uWeMj_{&45psNE+XvgMNIOUd~9sYJq&xjQ;YIab3Ahs(^Jctjoea8
zEE)7uQ!1F4>;v*MomrSV{ql=)gHuaNW-?#&%quQUOUq2oOwB8CDPiQbVDR<GFD?mT
zV7krNRUDd^SeBTXBgf42oss!7vzKRHXz@F?K<E6tyi{*So}&y5vJ3(_T?_&t8LSF<
ziOU!lBq{`iL@0Q9hA7A}DP`tNW#Q3fVf(@1sE}B!aFLVu1OxLCCimci#N>$#j$WB1
z&XElIsYU4=44ej>jKU1O7uXvzb5eto^9xcJvodpV73vmerlcw)#&H!WloVyAr>7od
z;Z|hS2+iBW%qq)}?^l+SnU`J3!o`@*91xP9?~};D?BX2i;%LCUC9_x|QK7h`G)W<6
zJ|`C^JJS=!Hs8$R+{BXP3^@h{6HY-#FYW-p{1Vr^G6tEH*9^)2r6vApLB)(*`&o>9
z6DxKx_7?}GCMIX3rp)GG;q_o*C}Hu>D9X=EW@Mi1Qd*FcnVeXX`kc+zFEKYYilN&%
zKQApay|k!{wca<gxHvN}U5<f;HHv}d3>#+@gR^gDMd~JoDA$VA<Wd_3o}Y{ia~XK2
zF&MaI=J>KO7cld$WMW~-<l?bqU`b^Z@(AVN|Hs12aD>%9GdWY1m9-@_FDpMYFEwQj
zk6?B%i-JOC2n&M-6Z3Hvwrn;IO-8n4E{Ecb#3BZc_@u1V<Pv@^j)lI71x}@DX{km2
zS`0k5nK{{*<lNY}IG=G?Ic4VAbFj^0Vn4yof0mKKAuO>db2k&?IYxzo)NdS&W(<rH
z%*+8CGO2f&*rhoN0!k{vQj3abGcYV=WcbPBn4hMQbc2C~nUT4gh1H%Rz`ZE3AVZBQ
zH?$xnu_W~pt6;DrBa;{-LjVhp6eIUmM#dS;PN^vj#Tr~n3TXih4horh3dRf$3Pq)P
zlQ{WBm{_fg^K)J?u|8yBv|{CZ#=$&`alLP9ZgN4TOJ-5(Y({3r=L|lX$;Hl-*wy{=
z*RqMY-DTlR;A9qHV`SjgPfbx^;NYIm#iGFA@0VZVX~4?J)W>Y)n^>`%LnPCY)j^@O
zIQ1A~LwtO3WnOYgMjC^Ev4$o?I2&VZd1A3biV`COBRf+iE8_xAuk_5~k_)Vf&WSlW
zL8;5Rl8gOP%TtTI*g2Y*3^Njo&6!=3Qd9F<m>3lqSh7Gxaze2}YDGq34+rN`Ci&b%
zW^VRlOboqD299ZIacr`c%UD@!+4)wnvZXOI_b{?>unCn+XI56oJj}rGi#blABwr!%
zAPe_7Ce|qo{7MWgiQz^0dFdfj7}+~nTnZ``QaYIu71HvH6msV>u_`ev@-IlubN5lm
zFH+dRWE`Q8JdH`eG;as97-t6q^HV1M#1biH1|jDbZZVf;ZZ2ykmDHkKc76#~MrG%G
zZ(gOc)KyHZJJ=2K@)dToJLo1S7Nj$>DDyLV2wIn<CU-Ni$#65pGO>0rGah7M_{1Ps
ze35}MlS#Pr4{L=&d45qgL#Ypkvx2L$vm?K9YF-|nern2k7H0ksepW%}9tMsLg3A7R
z-<c(g_1Ppd9XNTL8JTu7D+Z*#V-;}jVc@IcVXI|kp321E$jr#($-tq?$mGSw;L3KO
zBtKsvH!-hLAt@(6P=LXcm2C<mvj#7VD*MHh{M6z+^%8}Q#IjU{e~d*6?nRj?3ONUP
zf*2C>6f%W))D$v>c^EBNIQ$q{OBmR$Fb5Q+7M7-7VP?F@#9YR}#LmF5h()tl;XjW^
z$$kbch1_QX2Ki|v=DY%7vl$dJOD3`?xE9}FRLCqo&8$+Aagl*-JHMksVqVHZ2Jw<m
zZnonLOopN?%UF0$GVllSu`_runiUjfo?#G4X=P_^=iiW%pP!wYqEK3(kW?<fc%FeF
zOlT`Ze0+LNeo|sie7vAgh(dB=PEH~VOE-slYDyRbODhY17z3L?&JBJRX9m_PK>>xs
z0s<Kf91cav8JQ8xjPuwP67$p;*xLm}6B8LcOEMBmUb8TUGbR)i<(Flq)C#c(aw#h$
zrm*ssFfbZ21o{R9D<q3>Gfrk^{K3lB%*e2pfkBNyu=oc*f4UHBh(dWrYTiv|)68Op
zx6JYkRxAt!8pWClnZ^2Lq7F%=#g+1`;-&L>8*?)AQWJ|5(q?cmnlf^1W?-DgbTuzO
zPd6<mKe0riq_RMjv9dU|M4>z*a}kSRVj91)LS_u3a6vvl+d4+3hm6V!WfM91w=r@s
zg)upl=a=ThFf#mSUZ9YhSdp1qnyZj<iJjpTt5BX5GgA|ja%%Bc7Qxi@Obk_w3aNRs
z7?m>ff*DN`b5l(iA0-wmWR@r-rKTt5G580kGBLHWFvv4<l`--eGpYFp+Y7UZb1-u=
z3Y5n1C@ZA8iU=vFGcX7<_>|=5=TviX#W6T0rIwWQGBszU7N;tdl;=k<Miw(T26%EX
zvzah3-)3MaVNpoTX=7mj%FCF?#CDp2c^jibQmQ+XTUvfmu04Z8K~ZY)1SY{^b8-IF
zA}kF57?}1kD(M%WWo3COAXse0&uqwIP@GvMB+kOb!Jx~kP@4LWK|vws9vg!^hd^3C
zb6cK*v5`VjW{DT0dS1RHn^9_t)n^8V$1E(bIoV!tCTM6fq@)(yXKc<(u2e`aN=;nE
zpj?{A!o>81jUj`fI5983BqO!xHzWIf2Bva0XN8o~)U6!FMX6<(`K86|>_RD-tjqxn
zQy9|ni^>y=QWW}F6*6-kGc#l{B`21Yq~;bhGMMM(=b11nc!Zy4=Sk*etz~A6V`j5t
zVN76R@n`0q&mQa-=98IcB+1Ij!Lo#b!3;EHDZ)_AXp)kjYQdUPRFqm=kUx)8v`Cws
z<vA;Z5Q9N}9>W|KrYaVeY$hfdUd599ZA=*jB?@_|<%d|9_pv1uGZZ8im3(Jp*vzPy
zpEi+!?G_tLDuZ%j9s?tnk2w1lCMAWkbY2EE2Jy^hAx2Hmna9j8cvv(UxLQ~l8aWvz
zF)}xDHl!$&XO?6rB#JY!O<`o{V*bRGoROHBr^k?5k(^UnoLQEt%fQ22&B&S}rkI(h
z#?zQosgS6Ul9^^Frc|P!!@!`+E|6%=!#stN;Vf%VesXeYQ3Nw9GmAlLUWq1?VSZ`J
zKS9O(v=a<0ksQXUxuq#Q3>VoMr?9g~F|b@<WRhZF+s|y7n_1B)!KBO@Sd>~^niIin
zkf@N$Aj*)%5Kx?2kXTgC%6ybbL7{jGqd;B=3$wl$lNcA9EMrMZW^qAIVr4(0kbW#5
zYniBHZc=7m8G`@=Gb4jLt5aTnQSL@&Aq8bNK6|!AV<X+9%n~VPb~iSWL~&;3SFGG_
zjABKzn1zxXMLiXAGmCo#_~qEy7+Tm3@)T0jr5zM<5{s8J87Jo#akB|0@-nhXb2GXy
zvCfj=n$4-0S!Be-oXo<tmtDCmbsI11bY6CO2Ig2625SbUXkG?x237`+4f%N`Mfo`j
zDT%4MKbS>}q!^fgurmj<Fq$y1$Z#ktBvvsA=*COP=3HT9-oU~9j)i$C6H_O%Q*M4q
zYA<_GN@-DIP82J90ULWY17kB2i!cM{83x{BCdb^w>{M+A1|u%z<VrtAA%&T&S_=8u
zjErgA>?MrsW?YPa*c6fzvzYn6u`@C>F)_}ObaF{83;M^*EX~7opPNyUhyMtpAoDaP
zb{AQe&wTu68JR$LJ?-OR>lKkn-N?Y;#h8#<q+YC$&d<X%6Es{XU%Zonk=0w0pMjBu
zS(useCpY_aW&xe~oQA2o#o;0>6S+)^6*OjZF@^IooZ(VURWN0c*Gys1WM0D!lGw)0
zpTfYxP{AmW&LX6!Q2IiMv4NGjpP4z0gQb#z@jH7^a!zSV>Om=k^weTA&cfsjg|f{2
zoI~u4hLXiaiJ5sN#R^G00?E4>g)%)P1v6C{IPw`lqdpSSjCa%-V$^Iy9T)^Oq`5U1
zYC9bm7+%LRXfQ|%TWBPe%wu3UAS=S4)Wv9{!SFy`P*aY<n4y4yks-}w4+BFEX9@#L
ziiY$G4ThuzM;RCb7&REg=V~x$@i1vH1b;Zjz_3GuL42MDgH|`I27}s)6B-QS^EDW>
zxHvT!f)h?LFznG_5MQ9dpw-Ev!JsB{MuS0op$3B%hkyn{@Qt$!3`aB=#20BWXtfJ#
zFsRKrufZU`Sc5@}O&p~AA_Kz#4F>Tg8Vp*kQW^|u3YRq)#FuI?X#JGcU{HH-C4*6X
znFfQFqJjp4n!z;<2Jz(@3|gK_8Vtb=*BKZ>G#JEJXfS9Ms%S8%UAdvbAih$AL2IU(
z21BsMEe3`d4F>U58Vp(oH8dF1T5fAFh_BXQ(0Zw*!4Ul54g*7k27~w-4F)YiT@3~`
zi+dUj;%hY+w2td(Fepv9@1e<{!63d4<V}4I2JtT%4C3oG7^Fir7?dI&>;X$|&|r{W
zqrspw=fMmukm8LR42<Sa*fkh}_dI~OZIcFrbgBkJu)sqG1`iDe@y!|x(xA`)*}O%A
zK}*UI5^~~OH5jCGKo>thT%ipzYMTaw^hpf{HHJqY7{s@0FlZ?mX)rJZ=?e>JFo^Ha
zV33Z{U{Er6l%oMsyi<cgdaDM5TEJ5c2Ju}Q3|gGV8VpGVFBlj;FljJ|@77?DPSRjd
zOL(opAihU~L3)b@LvX-51_p%&Ch@%*3|j0a8VqU$?==|2_h~Rlhifn-P58jTAi$!*
zAiiINL3)D*gW3X+{|{&|Xt9`TFa&S-!N8Cp!6<%EgF!l0gF#K;j|PMIAq@uU^%@Mp
z1^*cs98NHZAJ$;dVlvZUFx|iaN>4{L7^DL=7z{r!GA;q#>Med$gF$+^27~DiCdL&^
z;>R=?q`!ka%&fs6eq4h=%gbDYK^zojCo~wO=V&m9PtafxKdHf>#bBYqAP$P^QyL7?
z@t`CFa_DId2I);24B{CY4B}@%L13xDAihC^LHw)+gLH}pgZK{(2Jv%H-#D;pFo>TA
zMXi+vgJ}mV;|pf-3mOd4Q5p=vD_9vBd^8xuFKRG=G6Xo{FKIAH|JGnIbzo!cU=hEp
z!Jrjst-+uc!FGZ{{E7yH^igOmUe#dGlC;raP<z4lfkFJ527|P}2176hJ0m!$U57?f
z0($`116o<O8VuqM8Vuq$H5jBnLCv_O!Jrjur@^3hfc*o5_-zda=_eWtY8)II4B~e*
z7_@BcH5kMLG#JG1YA{Go(O^)U!Lfr;{GJAb^aoJHa4<5cXfTN1*I-bzbhyIBHiILG
zgOS02Rf9p8L4!enL(fjo;SLw82176lA0tD?304kJ`e*!OWSAqsD8aySf{Q_bLCXvj
z2_=v`uXLK32Rx)*Bk+NNMT3E1HkZ~`wg3k4DFF=P^8*-^yx4gdSUosEo|+%Ppk=}p
zz#zUQfI)mg0E5y=E*=Kf0<heI00yniya5d2R{|Ks7Y2atedl3donr{nw=jS~%SbSQ
zLHtVqgZQEV2BqVIU^~VCK=@i4MFJSqL_jJQ2QVnPiSjV8a`1>j`C0}N0Sw|M0Sw|x
z0vMEzN<g&QK=@kgr2`nmLjoAYmj*B>xyV2yV<3F3dwKy3;w1qL;_Ct!v=l-4yat-j
zLB4N+Bq8bJ8Vuq+8VuqaH5jy13^W*`rwB4K2%O*o6|Zfe!s`PhXFrDIFL6-LHUZ`A
zD;f;ooDI_a<^+Q{C|AFL7ABxfU1OxdVE9Lnk%66K0ob$)8VqV@grK=t(->4-3PW>n
ztp<ZyjtImC=}Q_61~#IMhTk~B`m_{GG#JD|nFN%9%Rz>UGHzgl8hRR3Hi~I5h=cO4
zim3*J+8Xf_4B*ULp~0Y5BLU64XEhkqd?cYcSK16xIEsVvZGi@Z8jsWiHgKLjsKKBX
zBGmxSvRa~`T$%&PveL;K4C0_L1LfF#PzQl>tP&{4ZqZ;62jy5$0E21>P=-CL!65zw
znqhT785UHIfHG{g27{W2G&ILv&|nbPfo51WD-8xU7wHZbaDD|v5~vCQ<yBCz3d-k~
zG#IobK)JI-+5((crRy~q#A~2A^|=Ov_!JEWaZpaxwgGvu0+LZdZU?1WP$vBfa?%G#
z9$g5^qjw;AREy6}gF*a_27~x54F>5+8Vurp7J##;7PCFb!7`9MDh(>#K@J9G(QP32
z$~b_ts1}z4D2QcFfHSDHss=++j0_{g15n<6puwP+$dVu=R3I-J%D`Zw%9voqqQS+$
z$e{Ir9h556G#FSI!2Eb_4F<Is4GjjC8=yHPt$TbL3~FyQH5gbnfcddPpjg$`U|{J0
z^Y4g)qEA<Yfh7UVkCp_bD?JSc77H-{mW&32nvQ`61B(Ed&npkA!3-H0S~M6qBt*4L
z6*U;t9E>5HSY-_cwIe1FPOGX0gPMmKgtJy1<V<r2=c*>CKC*;x{%V6#pcRCpss}1L
zZNMC1BN+)683)4$wv0tlLd+5jMr@!7ER|}|k@5lp48aMGjG*R$i!dVtmj;8@FBVX7
z@2bHdE~LSrRmlNrA%Lm~K@A42AD~cK04li!G#IqX`9Y0~07ixb0>a|_8Vp+Bgftj}
z6+#&q4p{KH@G&y*XfSA%ih&G>(qIth4PemvA_;2#fVRT3X)w6(Ff#CJFlZIaW-taP
zq%$%!2nf4yGlB|0t=aM*ZJ>&VOM^lCuwnp%Y8In~ggB=LgVt+M@F;*X1gKyYR?}cG
ze2~j%$<Ls{;KI(xz@fpQZLOif;GECM04n&|Bp9`lwKN!%5{gP0Kvg-b27`9Djs}BR
zX#<lB3nK%!27}gSP>4OKkYIG_XJio4V37U>s?4i27{n)PFlbxqKVTHAULYbq`2&O2
z6#W2(V1-&nhK3KUic=X|H#0IaNI%wK2wqSN4oJ0Wj2_Hd?gk(m>mr#!HqOvskXfO@
zAXa~Z!DTih11RvA4M83Rxo<9{3NuV-V)SuioFKqn!63aB)EsE~z~Higk%1M|%rnwp
zNK$BKWN={DU~q|JWDwC{kha%gNJ{8pWN47qU~pN;$e^IXAUzjk>QYd7slg!gCV(O6
zAR~i=B(%Bb1uE<o+|pnGHTR@vf?8;w85tU0FuN>gWDwV2kp2kr^iK_Ndr#ZSB!D64
zA85fpsL5BsAU#8a!BjyB)Y@64!65w{WV<U9LxU`|$>$0x^&TXF@;jv3R7z-==mv_E
zwTuiBAm?Z>h_yr7d)lUE8Vt^TObiYOm|fO0G6-rgNKepUFkLW_Nr72>qX)Chod5>K
zNlbzaj1mIuE10xR%rzLqCI>KxZw+9O1{Ko^pb`dD);|RKcuEDh#is3Qp}`<FH2~Z~
zlb!_%#A(o?{Uyk2(=`~tjj;erP#T{BZF^1DU=V+x0V%9Mf*diE=>@a+;TOzW&Y-4?
z!Yn2UHu0k;SY`S(7{ovoz%dO5nTHw-s`HpSSj3N4Fld>9%EE+sCm6&}oM4b%1~Pm;
zq$t+n0yR}0%&%Y&KU2XVZ3ha%1t9azH84qoYKDY`4va1r7#Tnb+YD3=f?RSbgH8G-
z$ia&=7{sqsFlcMr1u%#$0=0KOFi4*O`D-zxfu^MlDisr!KnhRkQjpb49T>%LS#ZkS
z3}6sj8o(faJA+YZ1_Q5A0cftgRACtt!&wamMh2DzT#5^rB)nNQ7)n2!V`AXoU{K%{
z;rQVx&!)k^4(fd9&*KEK7HBZ&%kqL)3pE(@=LmpUi!>PYrA0uj#TpFyv&2EHB^nI+
zlF}Ls><kLL4IB)}0Cc>r0|Ns?#(s!s5|jqb)Z0RYz@!7{q)9LfLPUH9EfZj1SXA%o
z<HpFyXbjSj#>lXbp^Sl%;j19X-L{Oj3?>X9jT#IuL6_3#6=xKe6qO_<G3aqHs8{B4
zFnoxOFV4tIsbJ8{E7Qx&OUq}_1I=yf#Yg#>8pnJ3g}4U!Ir_vKq?uTz7$v2~8yUre
zriSBFK$Eqp@kOP1C7HRY@yVs}7D<MQrYXkehL*{B1w|zxMTvREIf*5yuAup3S3_fG
zzkpP3hQRpLywco!hOLm%LOsxIY&`>iC4;|xQEJX(h7hJShWGJ#W%0!&i6xoI@g^qm
z=?s#O<Kv?Y&2qt`<MGBRnhYtPSw5MDt}G0DT+0HyGXgR~;)9Ku8HBSK85sB&!VTkt
zjp9=n`KK^c=Yu8)Qd6ceRI#Zt@lR!_mQM_2YMP%6p4-YRF__6v#jnNaCvQ;C+yEk)
zKtv;m0JB;_tV(%<e{2mPqKR)B1Ajep0hkRUTKQ%|1#sx+|HoFQWZ*iLf&U+y3jY)a
zcm98Dbr4ge`KL0}f}O)x&&)rQ!HK_~xfWy}R)_HaW2*w$NWME#t%_4iCNiji!mZG?
zEFdEzE2Nl#g_%JJ6l}Z<at0;L{GAM0e3{Jr-3)1b#!UQu3~BrtOn&kP8cd}iq8vn2
zfrvbLg8-IN5K#^ys`&aC_%)bPK~hL6`2$$8l?+_F82AHNB>6iT-1!4oiut-hToL|0
z25){1rXox&`5+UCF<YD=i(#6xyL)O$P-0&8Hb!o723CDxZhZzW5e9$IETS_51Cuxd
zpECoKJ_EZ5!yks=%DiOId{$;vDri{Un}JuJfjgLi*Pel2hJl$soPmQsn1NH8VIRXg
z&%BbN%)H{vWDn5n^A83-B?dlbMm|>tR(Xa($n3kzEyk)aqxgc7;;Li@enkc*&LjqY
zX9gyIIR+;Fcm^K+SO#AHXa-LHFa~!1Kn4zWABJDd?x`gKiA9OIsU@jJkg2L52GCje
zoDmHCjtq>fvJ65&G0dynQ%gYePnr37u?+n33=Etx4E**C49vBx3~~%N;)`>Q4B}HV
z%i>GTOaxi^Wf>S)gBb*UuQ3-JyEua8d?Fb+CPU1f0ydXlmVuc+l7WLign^USpF!Se
zEdvjT-~|z!%(4tflKiU~xcOHy@bE8Z;9$;U;16bC;rC-;=kjETPcEo5c3I58!K=W)
zvy_3?k%0>4vU@W8Vsb0ZOLk8!aV#k*%1kOPNiFt=csmsAZB`kEQ?6y88C%GTi!cT*
zDF)6!1};+uE^&tBpw#62q7-gM-T($pIR;J-Mm}2xerX0q{$K_+kjr^I8D4`Xqf1i5
zGfOhuauU<M8TpkMnE9d^c)=06Ft`LXR~??1S)$3ne1?G|1vEFs%$dT#@5;c;FVDcr
zAJ4$WAH~4U8_K|Xjgc>yfscoY-<*MgTY`aCgOM+sfj^Itk>8zxkK+Klu!|@MM>GSw
zI0L6U2fIE4s|yE{AOnXYGnWq}N<zU=!dJu)@0?$nSF((Og;|DyZ#4tEB?E^f1LJE8
zJHN!-Zw%~G3_L#>*i9LD#Tf*GGr8o`{TP^8WEl7YKq^@!872j!re-^q_#_r9FmMGk
z@X9i9hA{A2Gw>xb3I?y{?e<O01y9j#WZ+k0VCPI{;P+)<=Tl~gcTP;sNX=p3;#6Yb
z%YcS~wOdi@enuuC22K|SCRGMDc{ZQKoSb}LHf9k9P74MWO$JtHw(nB@$;qV!iFwJD
zzKIo($$Y1r{N(K7fYc)2(wvgaf}(uTvZ4H<RA!De27U(yMb1eK{EZBX{I(48{974R
z_}4I~$}_xUWU%nb%=NP6mtkP!%w^!QWMEh3VUlKGPviT;>XKSel$s1$qLb%XmY<oD
zn3tSt&BJfXAi~<hz@N<^#l4MzlaZhA69cC_1LqAUP}bm|$;ZMK!N4QKz!?fMj{hky
z2Tuef9^=6A$RW?bzKexBhJpVR3oD;A1OG&O(1lYuIq9IuTt0^R1x5KK`6ZPFsi6)E
z{5kd^{Amon+$xL=p$tMrE{w4uiAg!Bf(${fc_l@aZtUzj40+CZ1-^*|LJaJB4F9>}
z<DLBif<ofMT!Vr={r%$oLVcZFgW}^E<_c>vOcU<U1}{@EHu7XJ(Kj>kWYA(LR^^+-
z!0*YRRcL0ypi*2?#LA$gV#v-QWW>%OWX#UMq{yJ8V#>}SWX8@QWX{eYWWmlLWXaB;
zY-qs2!0f>wZ0N}#Z0N-xZ0OA(Z0N%vZ0O4%Z0N@zZ0OG*Y#6{GY!tvCVl;z+8Nvi{
zv0~!@24P~bNdSW|G1xSKL6{h97Qi5kgqi;^Dytyz;d15y48p`<ivR{;Vz6ZZgD?Rs
zYI%W4#DJ4Q#E_Fg#E6qY#F&#o#DtSU#FUdk#Eg?c#GI2s#DbH7C5nMfo0%nwfmN58
zRgalfpPAKwnbnY))rgtZn3=_dS;WwkS;WwcS;WwsS;WwSS;WwiS;WwaS;WwqS;WwW
zS;WwmS;WweS;WwuS;WwRS;WwhS;WwZS;WwpS;WwVS;WwlS;WwdS;WwtS;WwTS;Wwj
zS;WwbS;WwrS;WwXS;WwnS;WwfS;WwvS;R1aS;R1qS;R1iS;R1yS;R1eS;R1uS;R1m
zS;R1$S;R1cS;R1sS;R1kS;R1!S;R1gS;R1wS;R1oS;R1&S;R1bS;R1rS;R1jS;R1z
zS;R1fS;R1vS;R1nS;R1%S;R1dS;R1tS;R1lS;R1#S;R1hS;R1xS;R1pS;R1(S;Vk_
zS;VlAS;Vl2S;VlIS;Vk}S;VlES;Vl6S;VlMS;Vk{S;VlCS;Vl4S;VlKS;Vl0S;VlG
zS;Vl8S;VlOS;Vk`S;VlBS;Vl3S;VlJS=G>zg^kEq5H*ZvV~Jv5X<-&I!j46acCfMT
zWMkU}QpdW7jdd>@>pnKt{cNlU*jNv;;n9i9L|o$bMkW@sIJCKix$GT_iUJr+nasEt
z0vVWBF^F4E;^pV&_Tg8R%jG|-kjvk|;L2C3%-_He&(FY^%JheUkAacDfgy^YfiXwk
zkbyCWpMfcYzrfg-znj5Z-msgYSl&>Ku^dDcGYK*Bi81nbGo<oEh06JLnB@8A2mk*s
z8m|%`A0HLWU}fZLX!x9AM|?_RNn(7wk*S$w4->y4bG3Zp9;PNfCoTS&3<V1D1y+)L
zZ<+avS#$Z{G6%^Uyk%|z5%wTL+up>~;4O0qhz%BP<)6tQ&Hs$qhyMwu0{=5+KY4@8
z>`frT9z^Kd8yi_XV-5hZ!J^=H@-tAw`5CC4{S0LGGiH1KGweDHT9W+Fn1kgFpn|RZ
zXV{@l<}>V&Ci59~aFh8AyEuO^gB9;HW;+9O!)MI=lNdoJsPKcl@eI<0eg<knquZfv
zZ)jmTgWs3$4+H-*=1P!NAX}>B4bHGPfQTj#VGkno{0+^GO`b6a@J(Xmf5u!062s$o
z4O8RmM*M0_Ui?U|SK_Z%$>qBZYD{PFT^JgT={^QQ{*_@|j3Nvy9l;8f#SN|t<DK1u
z<I_`1;)@IzIPSZ$yECvx3Uhfg@LvvNXAxoG&t+f{EH+@^&1GP6XW+|aVDx6-e;X#n
zD8s;C%fP_Y5WrQ*z#GiK-N?Wb&cG|iz~9Qi%Ad)=!Ji7MwAI4}K+RhITt+sLOmzn3
z_zZUjuIUW?nGB5F^FW3(@Mncfv&b=cB<B?bOM6%)=M|_kaLr}lPh?=?oWsDM%D}|G
zB3y#mh=HpeWHvj0GXpPwBLg#E4Fi8V0}p=^1BX1r-Eclo<JdkqufUjrk)s~c{%U35
z4`*QH=ZWCpmtkPxC}!YKkC5kgiD2iKVqjuh$Hphiz&tgC?Lj!-(-1yc28QKcN+lKV
zSrrZRj<GOBGjd*H;t%v@=J>_HAH%@N`5WwEUU3HgH4Lo$*$f=~X$+jQ46YG;LX3Q}
z3>*w0d<qQw*BF@Ojjk~;GmA6u7a-J0GgL(IUtwV8zr?`Je}RFA{~QAo^GpW*3<gI2
zWCk|=I0kl>NCvja5qu{Y_+%Nl=P-hr-g6jv96_x@WRqkW_C)YsV_*i^!UH0BK?J6K
z?+Mu_&yWzw%O}HNlblx|%D`30!0*q%z*!IK2QctYiR57sXMn^8M>)6|Uc|uV%D}%i
zQjEEpQ8TZgFOs)}fkT&p>o_By4+H=0NN)aQ1|E<{<QZ;8f?}PC<t_u01Os0cs3prO
z8p<ESz|7AWCC8e{$SuLZHGu&nz&U||KZ1doPm%%DVJv14;?HB?mS^yf;%9AP(#|W;
zWZ)}fV3lUzFJWNdIK#xB6vfN0z`)Gf#K8B9k<XZc?>8fVI0GBU&q(%G1~w4}CQD8h
zMFx&CaI-v%f!&6IBR`DQfrULC)Q4e!rI1QU3Tc9*kVjEG9FhzipBb3788}jzcw`v(
z|1vPMF@*4QNAoa=GjJz@8|g8OY^DtS646{dk_>!_3~VwCobFNFmJIxw(cHXJ3>@j;
zrg;Vfk2M3ocC;*yG6T~#MqWz>j)@HX@eJ&ovl#f38QA&LqWSsd8JL)6GjJL*@J(mn
zQDWem%)lGYz_&4)k)J^@O@x6XiGfLtfisAKQHz0pcQg~TAcJtO1OtZ$1B(s=rxydW
z0Rsa!1Al3BFq<s{ceEhLTa^qF95)&GcQPn)vNH1TWl-QZXOQC8U{vInXH?)9V^rbi
zWmJ`Cm>9zbS|QEk#>}kBz%h}P$B}`vhk@IbK|emeE=HE$h(R(xIj_LEq#{RziNBIT
ziuDjE;Y;yrF);G_GxE=6VB(i&VBz;<WZ)4L<xv;mXA)uI$_6*cf5dQGGB8hO<L8d$
z<i9D%59)kzmV+AQOw5uDZ0<sw1`Pb)*;u%w7<f_{*i0E7DraV9<}fH{=43J`=VbCT
zFtRcvB^eqe85;32BrqsvCK;LuGcfWqFfuY|FetM#aBwpyGbpn$s4^(KGx#$omu0?=
zmFH$;P%>g*WLVa~%)r3JFqdHx10zEQGs9el9}EHv6CW^CGcqugFfdG-H=S4E0mBhS
z1_l!WhHzdc28Iv;hVU>Z1_luUhRO4p7#JS1F);85Fic*;#K3Taje&tvfI(oj0fRFq
z1A~|V!{kj&3=9_R3=Dz-43l><F)#%3GB8L9Fibwc#K7>Dje&trfMN1+CI$veK?Vj{
z0fx!vm>3v@I2ag21sEn@Wny5+<Y8ct6krIy!^FT~qredUn2CWwHi2RCYbFK;7kLH-
zGXaJ)(2(C=u?q~7e={*K^nq?96krHvW@cchRbWWtW@cb`!(G4-F3ilpFjs*gT$-7I
zfpr4IWMyUshU-EM3~~YtleL){7}P`<7~};QCL1#|FvRjPFh~n9OtxlbU^vamz#uNb
zkmk(Hz#zaSz>wz6%)l^#BY<&oFf#*#xc~!$i~vJ;G&2K(Is>CX@&VA+%J6Jv1_rGJ
zhRMau3=Dg?85kr47}Bbl85qv<7%+x6GczzO+Q2Zmo0);ZQ-Xm(Nq|9Masz{yqyR(O
zY-R?A-MkkV!WT0$Fvuz}hOcI3U|8?K5Wbn2fx(G^F>N<914B6f1%~j$%nS_21sK9l
zGcz#EUceB3nVEqhpn!4mZDs}rX;}saJpl%R#|8}S42+XsGcz#!6=Psf1O*l|14FK`
z0z=YoW(Ed6IS*z=1}1kF28RC)43oK87#Lht7#JJ{7{Y~F7#Iv47$!@zFfg<#GcY&^
zFoY|!Ffi~uU<lV{VF2}<!i`xN7*0K43b$rqU<hkq3U_8<U<kaxnC8vG!0=qKfFUB7
zg@HkufvK5=fnkCY1B0yqLs~Km14DxN2ZqVnEDQ`A<-s8sQOv@?aD{=%gN1?NC4_na
z(N!eJz+f!E5I&g&w62eF@@y6ch9fcz4B7$=;fq-q7<M)=hOcH}V8~No2;a=Yzz}?Z
zA#FDc1H&EJ2FA&USr`}&Nir}f3oxXeW?^7h&u738ewl@V;cEgz_-z&jhM5Tr;g4Au
z82Sqs!(X#7FgPnPgnwpXV7R-0Y4UFt28N|_3=F2Aw8YB55VnAEGB+y&L#sLiLy7=H
zgfJ@ugFge4J1YajO9h4qWmZu9GcgD-IIA--#DUTgD+9v}DFy}=0R{o<1O{g{28I9u
zhHz(A28QMa#x!qM28I@{4UCh6Ss57SvokOV2`~sm3ox)7Foq|yGB7;)z#Ngy%D~{r
zzyh+PVgbYCYE}jY9ccyzbpeKiW>yA<Q_|~}FbOb(ce64uY-wN!pUld@(Br_AHk*}!
zVXtTaWB6iL28Pw35MpIuV86f+zL}MQVL}3<z@7vK_5}>#M_CydQVbZv&#^Kv*d{Q9
zUuR`tIQ)Pq`~fQi!{-E+@RzI%3_k-HCVygOV9;P^U=R>s2>;E>zz~|i8qUJTz@T%1
zA)J?ufgx6bX|fm_14Eu71B0aiL%2K}14B~-OSlFb1H)Da=E;U^3=Buu89;YLCt0yE
zFuY=SVP|~6=+4H#kiCE{&4-PF;gNs<V|XYV1H)qn#<Vy#28M270mkrjHU<WB2Zrzh
zHU<Wc0H*LtHU<V}1%}B@Yzz$VWf&NAK%Qq~V90M^PMgBUz`&*Kz!E-}je+4{17r9y
zHU@?&2bS>lYzz$lE--}eU}Io7dVnGPAR7aNtpj8DDK-X%iwhXTFS9W)tYu&dzr)7B
zusne={3#m)gNy=0_&YWRhR6p@Y2Vox80173FoZL(GccTGU=8PFXJGhiz!WaT&cGmN
zz!Wac&cN_QfMK!<I|GBKECYj~07JMgI|GBd0#mpdI|IX>26jVxc7_xNVSWLIa1V9{
z2Au}R@IZD323H5h@F;c$hS~`X;mPa_3?&8(0yzs9*aMgZN@Ezr<R`F%*ReA&tYTma
zZ)ay<h}pmtK7pNq;nD(z@R{rk3@<h?3M~4-z<z)^d^I}*gWUs$@Ga~N47~v?;d|K`
z7_v8Th96^RV3^~;F!?+?1A~+d1B0djL--AL1_s9otl<yY!2!hZhe<qQ0(1Chb_Rw|
z3JjC~urn|`lwx2|6<`Qw<zQe~q`(l)$HBm$?!Xi-&cVR&KY=k^frEiTxq%^ElY@bw
z@d0DF5eEaqa|gC?YYqkmhY#%GE*uOD#Rbgaz8nk;X$|b*VH^w$5)Lc^@dga+3z)()
zI2agSG%yMjLJG?&4hDuj4;Uslb1*Q3C^0bD2rz{Aa4;~~8!$|s%E7<@y1(2?fFXPy
z2Lr?80}SEIIT#qK7chix;9y{|KEM#ZlY@aF_yTMAAr1zH)&-p5r#ToHt}kE_xDvp~
zet<dcE(ZgHyn+K$_%jX$hK&Xc;qN&Z7?w0Jh5z7SU}$^57|zJa!0@qvA)JeofuZIA
z^JHO81_m~11_m_&hHx2928MqQjNz)B3=A#_4B>j53=GQ@7{bjt85l|w7{VPm85sU7
zU<&u-WMH_~zz`n9$-uy>zy!+4Vk#Rr!&5jJ7y>3Rr{!`oFqkP$;0!P0WMJr4V4Pgf
z$-oe$%D~_$z!2WS$-pp|fpPLgP6mcIstgQ10u14^I2jlgOkhY`%*ntYrSyO?d<`c9
zL;M1U@U5H-41x&^0{b>Furn}EKF-O&a8-?gAxMBB`~oKf!-@qA;Ws%M7^*I?Fz|4Q
zXFD*2zvg6MSgpVi{)Ll)LG%K*z~2ds>=U@c*|-=OPB$=x^K&sU9R0u*F2TjXF!upV
zxFQz=!>s_$a4jwdh8G7|!i~8Y7@i6+h1+m3Fx+)u2zTXTU^v#m5bnptz;M!mVRASZ
z1A~Pc1B0&sLwEugC^s?+WEwCyt1vKl2rz^faWOFTGBAc$b1^V1PGDq+;S`Vhz!Kie
z#lT=bfi-*@7Xw4=0*1-+xfmFHH5eEg1Q^0sa4|55OkkS4k&A)BU73NwPJkhN7Z(GA
z`~v35hq)LS+Ef@AoCO%d&u}p?cs4MEU*%$8_$|O6evgZRA?E>8_;W4>h8hEgMIX2r
z82&IYFx+7kV3_Q{&A>1PG^41%5I&Kcf#Hk;gBddqgMmP(z*>f89$5iL1}1?uHlSU=
z3JpvG492S&nn8zG3orz(VqoTDU}R7@z$n0Axe_eA;tgn%uwa7#gXMCNK;SY4X3%C~
zg#&B?3?@q%`UDsRSOplumoP{QG6*o3EM{0Dz#zaPz!12IK_9f2Sn$9G2FryEy95}*
z7cjUAGYBwP&S$s)O63ekMHmDG!{;%)5@irz_|Eo_p+Ss+0W>|z!NI`5>+q04NP<Cu
zp}Ch~wFCo$1LFp6&&FPcO$rR*^BJy7G6*nuJYvX|3SbC-#PA<<9i(($07G~m!weY)
z1(02PWkE_FGX%>8FoZv5cq-4Jz#!cpz!2WgP^SP=vXEi1B1p*-21}&?hVUm0r<FlU
zCIm2qPhdz<0V!F;(5VVi@{~bdEr22XDZ@r}kdlc34B-<Qyfi>c7Bl2)f|NXCVATp>
z2!F;fT^poiQUF8vBnAT=kdh?~p}HU?&lz6p1~7y_XQ<T&DVZF=5I&hf%mAchDTB2k
zNXZL^i-rLV;V&4HjX_GL1Ta`mVfdrK5Wb9Inkj<-gXmNP20<4ChVZEjDrO*!%Nh2W
zGYBw9PcvW$pT^*00TNrm@XQh<Hr;?Bd^$sk6-aC)1D_2@Y=!}Y<qU>73Jl?^7|iTI
zA~OvbEN3ztQD6vP%@F4R5}9SdU^$E7jRHgX8iqC}kjQKUhVa=8BF-R_)-tSf0g25q
zU<jYX;N{Aoz+kzKVY>iB_<9B%H&Fa;VAv?Y5WbN?(jCOx#IRR@A$&7Km<Ncrh2fF_
zL-<w(Q%?|Y8^eA92FL9TQeNB)1`H1D#jN2w81%eAM($v!5nwRh$uJX?oEo;IGcqt}
zc!MN%fzq7iZiasX4B>kil6*ks>}5D5z!1KVLCY7!+s`mdfFb+<1A`xkcaWh#fWh(*
z!xaIB@WTu?{vfd<46_9o!jCdY2Y`6T7<vR4!jCgB2ZDGf7*YioEKf3g6krHH#ZVIj
z5<AWC7?ceeVuL}vvkZ>}7{bpnc!q#@=fSD@0)uNPh<6c`{=+XZaD{<*mqDHgzrr9L
z4&q$}xy$kz!#x3p@aqg=5e%S8ilHtNMBijcj{>Q=1-AD#!?tLU=p6=?7?9{)hJFEt
z@Oum_u^`@khVudpmL3du1sL2s88{dxFeS+<JYbMywBcnDU{Eq)G++hMZj3$>AUcVW
zhk-?aLCwb1fg@aqVI4!<24;re?2;=L7_8SboK|2E7CXQ!=%B#hwSmFIO@Tppz5oL#
z!y9j8V7S06ctC)`d=rDk17-#T2GynRZ?|VN2r+DCxUIk-{aS!Q!@*+#gVz>@A`b-y
z$%6_E##<TW1Xw_(nQvnVQUIOssIk&>1B3B)hExU?g$8K>hR~f1YrR0r5eyil_X;p*
zh<O_@81G^z7hq6ukQ89B+|BStfWdeVgRcOKLIbM+gXLaO>0!K&L0EuA!9iJo!E!%C
zhX8}|0fv_X3<?dh0t_Ap8RGl|7)%Z^>{no6Y!UD{%%I~hz+ilYp%r8(vj9WrQHJgQ
zAUiKGXmAB=VDvi1U=*Ohpiv&MfzkRn!*T@%$<Gc99w!)l0tFb%PcpOwfL(qgFo419
z6oWvJ0)s|IkOPC|X@-je454Qjeg}aJGhong4pw0BI?GTStiT|7MS;Qk9K$yS1`VSS
z1qQG43~3<>3>tew44AAhfEv$gCZP|wBZU|)GE5X;@VLbAEp!5t$7P22umT42D-825
zurLHLXfTB<FnC>MunJdT(3lt=z+ioiVWk3t#^vx0%+}W#-YYO@$VXgY@Vdb;IYNO!
zBOp?N!Rsc&rbq<_jgTk>2CrKT4N(dV8b_lJFnHZ&P>xn$&{z<yz~FI*K`=&u!Q(DN
zS<C|l%X<u;6&N<$XJFCiV7Sf5z`**1MM#;4fq{`hiA9iyfl-FlMW2J=mINzEltqPs
zm4_ivpM&8hqdGIA3WNAfD88Y>pmqZ!a6^Sb{F(}b+BFd8nhHbk6-EXIHWdc7D<FX@
zDhwi*4lqE?62GLvpmc#zM~*>-LG1!a{(=gF__-VgwR0fOIR!@XGcJsZXBd?kK>RZv
z4C1G5FsPjZaZaf)h@VhlP&)zQoKRs9Kc2&&b{xbxuEG#}jFEwXONBx07)aol3WNAj
z6$Z7VAkI-02Jyo=3~Gl#oWm*%;s>`ds2v1x4yrJS?^j_^+YjRGS78v}tHPkR7sT1C
z!XUm|g+XmMh_hRTL421AgW4_-XO{|t_zo2YwH+YNjw_7f+f*17w?W;z&4WRFs|thK
zR*>XY6$bIm4oqsBL7dGw4B{I-7!)@`Rc`cPP+HHJAqWbG^&kc7Js6bMF~)!d6xTr%
zG4L=5Yp5`YuT^1CTniBbv6a>^rU)^pFet8ph=G)4s4$4HR$)+F4G{vd#aF2?D6WF=
zK}rf#7{phqFet8s2!Ys2D;PtBK_;z$h>5JQVQ|;yU|6ogptu|&B)(jQL1Y;ZEdD?S
zMW`@{FI8bsTnbgORE0r&i3)?_5-5Mk9|rM-Dh!GXq5Op^3`%i~d!#@X#X-badBFB8
zXkk`c0P_3-6$bHnDNJhfK%99h3?g&?a6way$lMiRwX;<i6lX(pi_cbJ5TB95pg04{
zpV7f2K23!|aT<gVHGS$ACbg*`1E;Dmh)fQFc|m-#3WMOpIqXa-3~Cb@RTxAjo&j6X
zufm|%4>3TzUxgu<g^_`QTZKW91tJDDl+}b)jTK}ls|tfSD3P;)IBY5m;_NpV)Yw5B
zb`=H@jv5}Q`^7m_7{obM7}PjHa-1p*;-FN@1>$h2Fo<)jFsN~ZINT}>!90u%47@4~
zYCIqT9u)?0-aia#ydVy*3WGSG4~H5bh{LDCAkOc>pvDj4@T)L@&iz*t0C5CV7{mot
z7}Nwo96=QZaUm53H6aj3NQFUMScO4N7{mcF7#Y4WF^hw887mKiqB+ZiqZ=6w7(gS7
z3@rQ(F-#0LObjwi41X9I?l3a!VPu%Y$WX(`5W~n|!^j}R2x@WOVPM$9z%Yk_p@zYb
z#pJ^j7G`FiDuy3S3=9)MEBQ}=+6g}d7%UAKL97e`2I(0B4AK__7_>N;1Q?_(1Q?_X
z1Q?`O2r!7>5MYS5U}j+WpunJIz^uR!&mzad@F0MZF@TGML7Z_7_rw4OX2}2s7I7X6
z1_9xJQmP*W1sE)aKy7bJK?WBAP?y|6fWeX<)UUGSW3Uilu;c{|=UIXpzYLb#pl-A!
z7lVcXgC!?uw8D~uK|z4Qk{vXzWyuB_y0T;i4fk2HfJOi;nL)#SmP`yB0t}XnpbC_c
zkzwKoK?Y`N1qK#bKhS`Mj7$U*!vZFy3yfbFCv-3|FbFU+FjP!obT?68*sz0<;RvJj
z3jqd(9gOk{I~ZByWp*(BUn;M-gYmz;Ajb|yVTnDAN;?=9uonJcWMD90Vpzk-z``oL
zVh<yS4Xcs_^9@E00S5j(jGXdndl>((l-J(F_}^ZXXAh&W#sS937K{uG8yFcFD)ulk
zbZ`j#V9*z0Ilw3$v4JuA1~UW01px+qMwTOt-0}uT82>x69AH$EU_8R8RKawFO<+d^
z7id7VfQ5lU<BN_E>k&rN6)X%}7%K%>85lTN83Y*kk1+Deo4T<6_cl;qxbTIWxq+Es
z1IL67%nS?$EDQ`kG7OlHFp5VUVT``P0=A6*03)Zo)d9x;fx;Cv%mO>i84_6-7z$V!
zR_H0uU~6IKC}C!B(9>iCnSFqfQ_%JRW4sFkv!u%e#y6s@0-#}BUJf2X0Sy7A4Gb;<
z`WcJ?jLh;50gV4`<(&f<|MPPguowt1bZlW&WMHV_l%Ej7$Rh6+!ua1&-ZO;pKR=HG
zkElR|U~&Z`1H%hO9WMSDMh1DG7{>pCED?;t88M6uYnX&*Y!K3qV2WX6m-pvk`7bRf
zGJ#WgLIk65#T#M%2u4Qvpa{nQiVQ1w1ZD_GDl#+32=IN76k=&$RWxz9A;<EBi=jtZ
zZ3BY<1H&FZtsM*s3|a!9yU9hk^#zzx7?|ZJr7#32O<~-_%@M+o^?`wb;RQ&o3xm9Z
z3j-^E3ImVe^b`gGgF0SDMh1ou2H^=REF1z1S{<M;31MI_=3tn~$iOgb4})3+g9QUa
zgQ`{qNXmnOS9p#GgVqNI3r0Q<Mt%<lUw;;c`HT__%<?lW7&v(i7z70j7(y2@GB7OG
zU^M^06w$$;6e0D2jYEJz`h)<3mIjjmgZKmi2I&beL>L4ZWI6;G*bne48L(~;<PcyG
zw-8_mZ{TKNSYg0d`GcK-;R8E^0E1}-2gvmc%q&lEf*PF_+zbH>;wJ<cqCapmFuV|8
zP&>gRz>wy^$H4G{SAZc)fRBNJgHM1#OM=e;oU_FX1Q?=c@G&q<5MU7BA;1v*fRBOU
zh5&=s2fhMEwHN#X43#qkz_J1iYAXZ;7z7?9n5YUd2ry(t2s1DQ2tx{mECW#n1`SaG
z2Fn{_3;_(L8sZEB4ABAN;7+%xh6IBELmKFwb`MDbhUfxG28Ij)2CWK718`9zenEgC
z`iCR~!v_HdQwb@MP6sIlP|=_jAmzZwV8E<zz@)$|ZW_P{I!xOKQXK67`GQG+L9K&H
zfI+E&*#Q)g+7-+K4D1TbSqiKS3=*sY3~C0f0t`wO+!=x_ps{ggtrzS94B`a}%vlFG
z85nkO3NUCDa0fuW&JFgu_zneThBr*&Hx!r|JT0Vu2rw|HFmo6%NE-++h-ZLJk?s&+
z5Z?e{g38Gkd<BeP^)k#_9RdOjYBK}`7#Qv_sr?WHE7I}+h0_HAhAah91_lXH0S2uL
zVgU@|5(3Q84&q?1ic3IjwYb0(ogm4;5CL)-D1bl_a{_D%sF)HLU|?pDVFtNH%R|b6
zkzavX+U)?71)~E)^bc{cHt7lh2I(6DpcV1V3@MVJv?cyRfI;g4rvaN`1slT@Cs1<w
zA;6Foz`?-a0ZQCAI0G2eB)9|^1ROqCa|?iG7?{H+@GvkKFfc1c@F;*4W$+j<fIQCO
zz#RR6hXIsI#6hMg@G>w+@Cq<!8SpwV>VM!(VB_X+U>4Y5%ngbN2SEk~3qb*JqRf&I
zW?&Ey7GTg?Arim<a#WUpC<6lrI6OoZ*u*~=Ff-^dYYB)8Fz_d^@rqXnFhnm9XJD8C
zNt^-?3YfS-X;a*Rk^cjeteOF%0|SE(gLD9-iqg8kD8Qg5!7RX_bbxt}6o&wV+6`s_
z2CW;M3~UT<n6xt31Q^6W2ry(ha4;}ffINNy<Z;kE3d0*FP?(Byd|(Q1;9+3Un7{-Q
z@(^IqiU9e$0vh3Om_QXH$Pkc$0w8Z|fV};J*MN;%e1!mm)&kH%m^VyX1|U!G5MThQ
z;{f@22FTAh1Q-}3ok598>xAeBR`C}fK=x>Hhzl_2ONfKaC;)4b21Pq4g+VOTdI9mW
zwB!dCKE?)VP$tnbU=(2B2+&|yVK2QyfI&P!fK$nU<q4=)Dg46+<a;d+76S%p4FLuY
z1sSad76(ufAwB~XIxH(d@_Yd@{0fZ!twJ9#Yk;#>jvFW_wK70~wt`uJ0g~b-Fk}U=
zFfdrKC@@HSC@^SEU{PSu`oSW=pyj~|wwFOT!bbtriT%Nr!T~DIJ_s;~uV~;F*igXD
zF2Im=fSrLsgF}HqYXvC3d2n6e72hy{Rf~aF0aSWvP2e@))4BmFl_m&)wmk|kL^B97
zF#Hf;5WgV6%J7Fvyg-08dWJB#7}8oHYyd7VA!$#9fk8q<fI-{?RIZ3X%N3CYjGPG^
za^e%X^*clhSi$iU{zI05LBN1pDM3nw50nAG=|F~o!9oU<qGSUYOfBR<MNfhpI2WlI
z$O|x(8YnU_Tu@*TU=aAhEDB0`9Ey+-6^{^Lh;C41U;rhI6#@*=7Ze#7K&AK%#RNu>
z(<&X57#Jj!KrJc@0S0~n7SPQX`d$Xi0gMie;4HdAfI<2LD1Ct%St|q>)HW~)FbM28
zBFXN+q9wuNz^OHXHGl<FfpxGdFo;V$U>30Wz|Vex*>DF3gNi@M4;B}gvnFscFm!N%
zQi6cAg#&N&0v<?yDR{uFWxy{WEd9ek4Ajiy;74{jKa$J&p)Thy0J}WALV$rGBY-9A
zgCGM#fq(*o)(b%e2JwmwV)-*97#Ma4CkSwZQjyjNu>#P!`C1bsV6i3%jx~+|;j{_T
z3=9U+0u0d+(%_jUtqf^M=>e%^q#?xzhXYHrfeZtvwa1gd!k@q_Yw7_`h|n^Ah5&=s
z3q}D3tpFwg2CW%P0t_4l%t{-Wo=AdHn*hra9#AT5U@c$<1ycp90)v_W8@Q|#k4Ru<
zh+)=R0SYFA1m>&;E(V4QE>Jbg6Tkqf^^|7tOc4gjW+X5RD12aI4*+QZrFg9$d<G0!
z68r)T5&;6t-u$3YU;z0z`T#!z1E}7)z+b?~aX^^Chgm!#fLZH-AjAPTK;cx704kvM
zHwa%4;MSTT${?k6Lk!e@00q(o0S1N`W>Bn)??_-~kZ=>%5CGc>E@wa?1WHbzY#+l6
zE@!~ys|*8!1SpXj$bin2W|r0vU~I4y2w>m>B}fTI0S0h#IsvNem_XGI8z>WV95B^d
zz`B8pp+;LeLx6!JfmwRN0npA}P;IODgH>3OQ-FbE0<(a{0tS#d9&85~_#GJkdoTqk
z2yU=olw6>psC0m7jT#H63}ymX<e<_YRGmQj1t2$1U@Bmco}s{?wS!54f&T;puka=b
zMKucs3kHFNC5+qx4E!q;dF8i!P&AR>GJ(NFe!B;QiTutRAOghQ1LE!j5eGoTArA&U
zL6#e7{0a<gnkEJ+Vp<;<ukdJXU@YO(`@m?!%<seCq{z?G!^$tg$SQv_fzd?%bONJ+
z{#nKh27aaUj0%iuGZ-Qm7(5(61)|msP`j*xfm8n?qXGlB{AC3O9{H;~7zE_6XD|x!
zdoYB{&jMTcfSo^qfmLl0qYY?mB^Z=Z`}gQETybT1puxc4#^9hK44U|faAPpg5T3Ds
zL1_kK2Y3iPgh6<AhPv=<2?j8pE5RTP#S9ki3?b^m3j`P#wzvz&aWDuk;$UErU=Uu+
z!5};fRP8bdFEPN5ml`k#W5de~7=*Fm<r)ma=y-(&gD^T?*}x#YQiDNwr3HiVN&^I5
zWxybe4X-v}5MHgpAiUawK^V*i@eLS+*WkcwH5i1^@j49#VKl6?o-u}1e7yjuaUs0%
z1c&fO2?j9U9Ka#GS%LwKw@NSw!|*l>4&iMQ3}C$D0K4!G2?j9UCBYyJ!@F0o3-6X-
z0OP$C?818`7{GYH2fOfo2?j7eD8Vj#P=W!386^CKkAP+Y8HA5JFbbbAU=uze!61CX
zfI;{a1Do(E2?h{mu<&QN!YX`DfI;}&0agYbMd6DaAXhV-@n=Y36}}|Ez`zi|5W*^a
zMSwy0+7A}-YXTqv;TsYRaD4Lyqwq}$1~9($gHibQ1qR{U5}<VE^6&ru|0-TA99}GM
zJXtPyvea<1%<yEX@nlKxWO4Ci(ePy9@nren!NQ}%vcrRc!9$6GfyIM`kwN&c2CGs)
ztPU#!2ZQiL4hG>#pw<klQdq1BSO}C>9axp3V_iU81`AfD_}C{5N`<i^p#D9GpAu`r
zs?-o`0O~^u&jXDmb1(=muwY;iU{xxOHDOd*8SBERv?lfk3xfoM@KO&3;bj~Q3>_>=
zov|4#AX`@kFbJ>WU|{&btTZ9^1T$zlXa%#<?AQ(vQ+T}w149q9(&E?xW`+(1;Y}P2
z!kZNsgtu@o2yf+J5Z=bYAiSM}L3oD)gYZrc2H{;C48prT7=-t5FbMB8U=ZHN0g0~z
z91Ow-Ef|CkaWDuUmS6xynD9{!2H|5I48q4X7==#=FbJRIU=TjV!61B^gF*NV2dJU0
zv^`dVnW2F}_`C#z@C5-zP@D;03Sbnz%)uah#ehNhDhGq`wF(B|>l_TiH#iuCZz?bd
z-`c?lj+JC#L#-Z09Zo}CF-8VUkWWD^C>{nS1`Z!iWnF0n261Tx1|ew$1_lY{U|j`9
zh6x-D!W?gy)O8gU7=%?77{pZ-7=%<67#Ozj8R}{=>TrO<Mu9<if(QcxFN44d35Fnj
zMuq@p4h9AV2H^`LAfs!v4RuWzr|2<oFfckWFoVT%Gz@hu86{-kVhp?t3_e^&S`!#K
z7!)Tl-cbzJn!?E7!NI`L!yBwMosl7egF#>g2ZQ2F#yR{9iy0Ws#~W(RV*FqNiozcf
z3=Cfc^tI+lFt9UpFc@mhXFL(lpunJ1A;rNUY{0>w^g<G%-FXoss4J)xAnC!Nq#;?s
zP{<*{z@W95(L_Z_izP;d0dxR~m<0pF1ZhL9IK~R_9jF)h6c~g%I6&t$XfOyH2rwvr
z;9bEW#GAmNw1Ovrfk8w~NsCnnbfSk+2e$=-QUON<gYpEn1O|o=49<y+3<W0`gf%!A
zlx|3JFeuHCv|teK5MU7YxWFJRae+bUhj;;laK{A(B?EB{2BjNf77R)!gfkeFUI=n9
zD4hUVUBSViWWlGwAgm$4ApGJ2gYb?E48k)mFbG>*U=Y4=0o4DqU{K27hya@-eBuIw
zl7xf?gVF_Y4hG=~91KbU;uZ`n6^u$h#0nUcE`W#)q6G{}9-<)YMKl<cHi%d-DD4o;
zU{Jcj&%vN1z^lNZbb*J1L1_Yy27_>g0E3bRPXdFI0Eqa&mB66X!3A<K7bvtiEf|zP
zutk7Q$cNZ3aDhSi#13ePL2MTO01~^vAiM(V>JJwflvapXFbHqBz@T)2AC$^2Fese>
zS=j-yvOs`A*x&+#FvkUmk1H-PC~1JKyTNGz7E$70<zNs734Z`xMz(>2LAZc}LCJu{
zf<ah9fI;a7a{+_W1`uJuRKTEgg7E@_(gsEi1|<td3kLlg3<(UuN(M?248j5&3`#o`
zA=;G<6f;0G%gQ$tG8lvuG8mKu<TDr+b;vO=Xt6Oc1juPHDE*MNU{HD?Wx%NPLxO`r
zIARAQ*oX_l8VpK1gh8Eg;RFVy01&YOv~s`#wEn?ZNI-)@X@-CWgHi`?1cUMnZVm={
zmKzMGl`>>B7=$G_7?dtZgMwSy0vg=X1q@08(gh64D<lgTgd{I8D187$=?n=A2Bit2
z84OA*gh3AHSAhDPA7l*3-+T!SN*h2#04ROF;JLt{K7q%Ah2aLX5N8B~QUE&#gVGPi
z3k<>$Cm^0b0kXIQWHEA}gOV300$yBTP?`X;v;$=63}Fri;SD<&gflo8lr%tg3J8Fc
zAUI+{Df-3*2K5e*eJ@y<FEA*1uyZhgB3~(k4U~RCIgyovL1_i61%vPe0S2W2)&d44
z4G?hx6ipFKAU#YP49XW63mEtl7(#?UNH8d^U~*t!XbD!<+7Q4Zyx|3d^9Du+XpBR0
zHv<QQQU`+vgOUe>2LodThy11!94zu%3>X;rB^WqC%`z7GoiN@W2?iGVeIVk11Oto5
zAw~uR0S4hC8VriejBl*<w7LX9r}fA$3SeN7KPkb$qIjCo!bVx^tN|B;1RFC41EU6)
z^!W}3>5Bpk(w7Ao<gaEhu*hGRV31Lo#mK=Rwm5=ISmFVw3RGfdRA4Y<W@5~+4p8D|
zWa!~w5aJ482vFi=WN6`FP~>2&kO)v>XJn}1U=U*C;5JlZWqebsq{NcI0J<5{$ALlE
z!+}BA#eqTC!GS^8#(_cD!hu29#DRg~j!l4)Fe5__2ZNB11CybWAmfh;LnQ&m1`!7(
zeny7(2}(+Q5sZdPyo^3|N=iHqpk9Ztjst_Rh697JiUWhNf&+uFj01zPgad=Hhy#Pb
zl^bOa42%pHI2auMGccUsU~u@yz;J|v!Qn3h!yXO>#Xk%a$^w{wGl0U~;THqL8V&}B
zp9~C3I2as$Ffc6OU=aGg#N3ei8v{dm0P|M{kY5$QFnDkUFn?xXXy9OQ_{0G6ro%@D
zh7t}2p$`uXm6+duF$`dS$H0)n!Qk+gfgy&2!Ql-9sGt{mZ6RaG{EFd0c>wcE1_l=n
z28S063=SL&LeDc~0+^pMFqm*KI6P%w(BWVZda}YZfcY^4g8~PG!y^U;84d=AhYSoN
z91KDa_Q)tP-{0bC$b66CK*b{Fy9^9}SQ!|Y?>vxEV!r)FCV=@C1H&5*28Wvr3{N;1
z6mKvXR0c3#XJEL&!QgO>f#C`VgTqw@hBF)t4p+coB6PVS-;ntd!-C2H=8FsrTR0dT
zE`UQs@jQbCYXI{(NPwJWV3@<fAatfjR*Cua4AlVUQ{eD$ILQEtcA*miN=nSfkH`iv
z9|H%5!%+rsL>_q~8^C;+fgyo|!Ql`jI1Vx}gm5qj9r&ZE#JpccE`WI-BsBIiFxYS~
z2<=&8qr|*>ie&)vE^t^l>||h2;b0KjvB6S_dHWIL0OoDrkZ{<_z`(=7AhczIpCa?-
zvknOi%$pb({v4=v*vP=}g@Zw8Lx6Vx^Lhq`7aR-@>%f8Gu$F=04hMtKnhE+!%&V8^
z2QaUKgv3g4vJhHvKwpV@`4#;D=4Ft8SPD)Pic1(2`~#R5gOh~AB5*)BEM#Dq!oeW4
zKu24NdHxpL0Oon%fN+=#P7*?Md<>MBXIJ<KFwX)9gu_fol9&Mw3ZdyO1_8|3;DB(L
z#=zji!5}nsj&=a^6mW`gm<$dIhe_ZxAvE!TffDnCD+U3~{otT*=mVz+q22}RO3XbT
zDgn&h;Gl5mVqjq5U=ZkBD&fSyz}(TI62ROJ4hx4iaGDTm_0b7nZed_}z`@|q3=Rv2
zCUBAvYUB}6Vs6k72w<)UhlN8OIEx6??lDzjuDQS+z+4Ru3x_I5a;O9chEPR`MgVg;
zI4B&-zzIUARK{M3x#Wj+0CO=oC>)9)38IjJp@4%ys6a$FfH@x$7<u3XA(Y$UWXPPu
zz#zzwz$oCu!QhYuP7p$wCo+_nGiHPYFsFk9!XXWuAcRtDECZNRAekc>925>o;3OfG
zc*b6dIbn-U0CPMzC?>@*F#KU+U|^0t5Us=<(-IiK91RW$hbTybhy;g)Py|a%0CPAv
zBpkxPNkS;}fS?j{h=D=?b1*n09D=|}LMSjmO^G=mMa_`epMjwzfY}e69E5yZ6qJ~K
zt_TJ&dxL|)!3&%mgghfkl$bquTmzWhA;I7VNe-?I3>h2@4ldy2;NT1n2nQ!{f)H}F
zQBq=d=->=swg(4<gB>_I2-%9bC^6fVC<QQEg9F0B3Y;7iEg58-m6$C=>;jn0!QtRw
z22Kw`rX`As%qDYP9xyN)Gcf#NWME)60;dNd!vnHP%m!Cv1DN$80ig#@4MMsngq4_e
z1VogWwJk)Hn6(;2l$bSFh$t~@d=OD$R+kV}VpdBKRbp1{5LIGUxge^<to%b%iCM`(
zOo>@BM_7qjp+h);Ssv_n2RU&33(58<3p0mk1TafOye<Wad`Ym^g(O650+_|Y9#<4&
zF!5Ak7G0vG#4OT~8Ne(I_P3%C!;V}fW<eWMh9jj)8jLrZ3{@BzM9P$87%S=+WK@)x
zc}zr<n7K2=4Vk$ZD&h^9IT@ac+k+}K2GF<wHoU6n1G~dNh7)pI!<ptA1Q;<eEO^8f
z-@w3d<=qGNg?|+o3|JYyi#aGpGo(*<nDB_1Re|9nPea37cE*1UU*s9sncW#0n6smq
z8NTy3u+NC$zovNM$A`D<4&NBI$g{9Av_I1kF|z>OwX^X9`-1-rTjUv-KZrLluvjn%
zvOY6dbHQvA`+~m;2jm$n7!;X5l=eC@{$*dVfPu||L9pF|fqwx5o8|}e3<kCZ4EpR$
z3mCYi-4`(Ew}V*n;R_g8^x2sgFmTJKgP83grgS+-B@0Nf-GPx+9?Y5!VzGjBF9+!c
zvE;WeU|@1&W?*N_V322Cz`*Rp@}a;k15~jqIy`P*5V+C6Abh-mL5SUhp@f;8p@C5%
z<^Y2sGqd{wCSjHchDLUl@BjZZXPY}PZ2AMb#;4qlfnkA#1A~&oV-AK7tO}3+vori*
zXpm<BUzf!1@CejcQP~i{!65uVfq_Q?R6u=T`NppBh~W?DdXsjB2KE^~3=H9F_KqJo
z8N@jlCcNce@SovGJOg_K^9L^G>}Y<54pjyQhez!H+1VPHv%SBuEBs-Ya@O-B*K`I3
z7Ks=p2KI*kj1ra%4D28N|L2!^$j+d^xRH%XosEG(z=xg5oP$A-pH0)i;nCX%44V(g
zGq5v=vo$bhct3YGe9X>Sz_7t=ExW=uh9mL}Ol%t%0<XSfVe0_tF<?l{@qW#o@Nc1l
z0A~bqfQJPGgZRQ^#Scshj2C0ye`I+0mtliE1IvF70R|oh#)QA@5B@UjabRQ=P?LGA
zz>xQzz2OhT0S8704hD8M14hUH><j)WFcdMcGc-uA_^^W|aK?K!4)*wNM?rpte+L*D
zBp3n&eBX02J1~7<)$n0vYG*jW_#@^c|FS;}E%FRZEEUWj*gaxcSkf5|F#U*TVlro7
zU~-Rn#IEpf0fQkk%X9$-1t#_c29>+-Iv5Neu|Igg#Ik^aNrK6k;W4`cqwxC&3_J%I
z*ccd<6uvPqGF33LWH7QZF#13E%h2P%z|P3PXmdoKg@KV}1*l6azr}%pGnL^V(-wJ#
z9SjDX&sldcFv+PHPI&a8fjLl~gP-%e1n2@LhaVppI6p8O2>5JtU^6<x%u>M+c;Our
zr#NVZDHCWm=iLKFA$AJ}?gj>dM-5EsH|!l4nK_sgIn_NF627rJ{Bt<6*QfA1D+7a|
z4^sw<lYkEsQvpN3Cw7H@3JHutptD;mn8a^5F#0L{Vfe$q$nt@K{{Zv<|Np;A967)&
zn7)HqnCS#_OFX;6KgS#K92b~3Ff)WRG}H_DGckngaVz+JOJEfEa)2SnoI!%oAo>Nf
z1L&f;1xzd-n0a0>3p{<mz{J4J2<8a?O<)k@Z}QV|c=Up~<pcYIuM9`z7{F33AK4TB
zGMtfz@EkreD9AN1LXCLyfKhLc`~yag2Tbx45*XP9J|r-kT!AQMYWcvf@QCpUgvZ?S
zpIzbK!6{Il<3o0bKMz=#!8X{xXLoR5;u3!QfJua1fstE-LEt?Dqxum!21c$I%);*-
z7(iRKgda07vMMleGcX!{WPj+uz%zpdROP>QV6ZtbpJ4|B%L`_Kw+d_w3M`Ca(K-`A
z{`kbM^o`*J)Jmg|3=1DHGJjxZN?>4n!OZBu$nb!Pdj<mw2b04${saFKSRkHaN?=iu
zhcFo(80A_L7}y@LC_niBfSIuXv=XHK1v4ZT4hXaEU^ZlCDCc099LT=lJ;M=u2BsU#
z!VD*vmDpKVFdz6RuJniHh&%@eb35w|W(OALbk-ZpPHfEWtPhwcCjE0bAkV<WoUXv|
zft`t2ok4=hAex!Eok4=xAo?%6!at593m6nSv=%Tsa4>|kb}$&Sfo$6NkzL`R1Lzh$
zR`wsvhU`q?9t<o3ECLS|7#uFhbFltkPGn&S<X|pWU}$7xHfLjCW(ag(V0^&TRL(Gi
z$sn4Q#e#*Ufx++zy8;8Z5*v#Hiy(XKv_OFv4pwsx23`jic{T?Y7GVYl79sW<Oxi5$
z4lIlo3=9%n{0=P1@|+GVyi%MFEVAqlEb`MGSVV-%9a!W!99U#P+GOO}9awBYTuwcC
z#sxgQ4lIHk4lGg(4lEl!vY-0ra6_Jfg(+MqNZF6|0FxmLQ#c2+z^4N|0xb`Om_9Ho
zv9P>gHe_WkH()UM#(qeFMVW!^29pshbNUG;Db@xSeHPXR7UhJG><j)m-Z;R()WE{B
zfPtlhg|UG_tm6QKFw+hO6(*(yECLD-7|b}Bn0A0NGwT5crUNVq%*^2o5)40>nGdiC
zF>hcHc$UB@_GbYD&k7cP2OfSmhJOq$2UvvJEm(wE4zQHkvn%{zY>_{}qQu6sf<=j$
zWde)gL-7R%_>@>#Hn1o$u^eDgVqnQ&6nN;s&$xh*X#s~Y>jIVu><r?p4a^LI4;wfH
zCL}O0FJPR+!p_>j#1P2L;=w5J$bn%(hdcutgF3?u<^~o)^9Tk5cDC;a85CHaEMN@0
zAkV<T>LBL8!pY9g$YLnV#i1bPDEo=Mfq_Yoa{<R^7Vl^-uJ8N|EZ))Voa(F%%nCk#
z85otgxC9s`vvZX*G%#mGbDdx{e8Ya=0D}-m1cRdtJBNY>g8~Qp2S#HdpRWvpf~*Y;
z7X@P2IMNv!m=DBovbGB_2t8EbSLR^bz@Ws*xq^X7gF#Ut#z8Rgh&%%)$8-S(Lw3&e
z1_lLAwgQGg1(x6Z2NrND@^dM$I!3c`OaK|q;lZLJ2&yUh89Eu*1UM}iotYW@xHH%o
z8yFcDurMnyGCp85U}o@}z^FKbWdS3@0tO=ncD4itVTKGw#sKCZ=0iT;_!lr3F>`IV
z;1XhHU{hje{=h2y#eqwKgJTA(gN6ks(*maW13nBa>I`hmitOzV7<d`jgt<Z2HO*iV
zWU;emXJBKrVDQh0X6I&LW07ZPVDnaCV5?x@XJBJe6kyvR;lv=z!p^{E$ic+^ft8hk
zjd26Byaodshj2Rs8xsecJ`*Pcn+&r8Baa4151Tv#1DlOJCj%RYjf)JZXt}^s^q+mf
zU&aISr>hbfCOl&2EI+{@$j`yNC@1<Y`+<KBH^EiKj}NR5m`qq0{5V(`8Q6ku$aAo=
z2CyozvU;#GzF=}@VeosVASBFwgGq^<-GNn|m0dx|s70P(27}&@4+_F52mUeKu-C9)
zYG7kiXKi3P;nTsO!oa+M)mV;!c>;qHGjj(6(+9@D3-6w>A824PWMwEfU|>vOHeoV|
z?%)#mxIiZAk30i2gM|>kf{-X<1D9CM0alg+qAVL&1s*!EsLYW6I^W2TnaP3Akb%iO
zfQ_wzwQxCWLp_5ZGY3O}fFBFP@?UNWe%}r-2+dGnaA086@LR!Apult>hKXsrmz#)>
z18DT)xC4VA3kSm@0Y6rz<E#vf27V5V%nA$!Ak|WZ3z!bXFf(5VjXj779$}DX|H1CS
z@R*fpgX|%pn2+pD{}>L)bFeTAFbH#Ma2v9*PFG+z6l7O;z{e87ZOFkoU4g-niN(Bw
z&F~AmQUj|YJBzslgAyz24lZG~0B(UV2N)R}M1{&7_?c&LvvhD9eq~?Oz^%-|{D4i7
zIsE{85;OC31_>6>x+5-@25xx}i}3*icLg^~1~+2^x8RinOpFPv0xTWe_Dl?c4cwsn
z20_INH;V{s1Gk`i1*<&=i+Kb0|DXEy3=Q1>JNOT<GRv?YU=?CLz^cT=dVtlEl~w%!
zs}ci<&&GOyRe+g;L5%4DD}w^VD+UG)KQ@MRh6RiVV%XR~s@M*&8ZogQcVI|mJI>0$
zYyegVS`~DFjlqFIkonne<^!y9GY+r{Gi+d0ddTj;ZOFu6&cJTW&S1WPk*R={MS(}0
zlR*$Pu3o@u!oc9CzyRtk3NQ$>N3aSrG_bNbFfc^0F$6Hkb0+Zc7;rMPOK?~PvM?v`
zh;S%yC^EZCaBFdLB=9J4u{&@pa&vO<SjqBmCGZGvAK<#e;vLPy^PQi8)jOJ#JAtQJ
z;SZ=)$HSArqsTLzfm?{ngF!*&nF0gD0~R5!2p%Oa&Ilf3cJ}EGJWK}|Hga&aGc>Rq
zh~Z{mF2SI}#+JY+sKCG|%&~z%iJN-`g8?hsbPrwyzt0bt5<BD>c-W?YU|{rMNMu%s
z;pW=T!N7Qc8&t}$vK^nnti;Z}fLocHqk%`5y@7{Wg58jVYl8)YJr`Gd0}qo3y9Og$
z0}o>YyCEBM_ykTvPEbv##LgbTz^uUQ$iTwveu0fqfm4X3fk&vJfk)t<0;4i3YXc86
z1G^FzR{@X6!v-Ga3Las$3Laqw0d`&nc72BB4LmIT2gG;<mrvl*XW(XFPgY@PuVCPB
z;9-$sXJEJHWGZjqkuPuH;gOo&z{AhLF3Y08$bUdARi2}PM_Qh%frnL*YdWYD&|v0o
z;9*$L9L~zX%HYS!?B2k`r^dkAz{7GtK#7gbflZ&4t$|0}l<|gq15YC>hdL_*>j|F#
zW)Y?ZY@n>|z%0+)z{8>6z|_FwBLAm>hmqYuNn(bB5<}Zo1&2o+pdAw|2c%S(7!Gi8
zG;k;~Jbu6|(6NAVB0F0Hql6C=gZcwjmKB=9A03z&FG$JpGcXChV_=evVPM+G{NG)K
zfnmb?kL-&Y7>wANu2(P!F-dS5F)(o`FbZ)bFjz7(a40acBrwQ7b5LMaWioeAU`Sv#
zWMFtcfkT*Kh6GCiBOe0`e}jZDe*@$H4$1TbvH>6Y5B+me(Bj@9%d$aMRIGuKX#*qA
z3P$5+{0A0rL)gN988}$LqO1-o%wUG$d(b7SJm6NWfMJ6i1A{h1BH%B(f*jKURtV4j
zJ^O(J(t;ukU`;FuOdw+znB<={aI5eiVEn&Z?8pH|VU`_?@(c~KEF#P+7)4kbWSx`#
zvK&wVZH!eaXMMmZ82$j%Cpqwk<HiC;1rDwYj0_gyj3*eGKgh5i5aPCAHD+Z<XAlx-
za^Q93U}8v5U|>1HD8TxHQGn@zpwfar3)q=vu(SMNG-PE7f1oS;(Lr5{iS-8~+X5Ct
zg+Ck(+{`!lg_s{O3bTG-G<?mj;J~NE&-{Tgfr%l5wSm!tS1@A&gWxj;u0Ul5CWeX+
z48lwtOvbEC915(02Oco-Gcd6ledJ%@z^}|~?!Y9R?!hRS?!m~|z{lvo#$>?EufW74
zFo%JWPl1WQfmN8PfrqU@o~eRSl;MC>IKw|j7a0a7rWcIDY#dCA&%___h;jU2WV*qu
z#Kh1cWoXELz=4tFhP){I0|ur8e4@`Dh%hzqDzY%&;8l=iNnmnd^p1XZfLY;6yn-0x
z170H*X7dNU%mKWhm1z&;16b4<8W<x)nLHR61sDvO6=D)Z1g|tO32-+s2{Jw42^5TB
zVNLH~5_ssqAl!05$b~_}g0(|lkyZTwm++egZN>&B#s>^c75pqKm>3s`2wrGlWV#{1
z{eWHgQv(aj1SXyiCQw_yfrZQA1HaNE27W_!HuDJ#!kjahl=#^eFc>~#Kajv-$jXqR
zAYjPMP{F~h#mvmWVaLhLp}@qZz%9Ztfk}y(t%FIJ^#cPN1BY<=53W*nRtCmHKAa33
zatjVH@HdDj2~Tej2Vv>y4dP(Dyg^)eI|NH_Zx9DzvEv5>85(ponZpmT2(vYa3kx2Q
z5oR@DX6X=DVqjY!$hbgEV8R1N;r0q~L3a;kLrxZV0R~0~ro=Py91LvbA3)XA^adtj
zmJDHsPwWZ*6U138*p--=JD3?S@Gv*9iZeE_GR$D*@L=a}VC6OX%6`Z}oY_HHiIus6
zRf(0kfYtCLdqV>&&krVjR)z*vaS6r-Rw32~Rv9J;ZOFi!(ZOrU#+=c>%1{`@puos<
zFNC3kS)QYTRnnM&f%OLy^9u%+3|1BfQDFuLVYU+@Tn()HOw0|e()<j}dt^8mm|0#h
z35hjGvNmW6vp!%FW_!S7{FPmyftAUCL79c+ff(}xCguiJWe&Cppetc5n2p()+8d-4
zoc<jEEjkxqSirB$RK9?bH9?#)ft^KxS%75+sBIU>^@36On}V4k3-fXV1|?P&2R0=(
z)($q71#AokB1sKQ-qCDq9c)UhY#nTj3QPhA8pH+M_l7ISfT}712L1*%(494mLAxcV
zH?S$Our#o-J>ZgbZ(w5#kY;$m%DjSsw}DNbxq*#Go}qzFhdDrwWd^e)KPO1V3}yos
z20z9Kjt*v)1~z>rh6XlaB?it8W|jhw0OJn^mI`K7rb7-A{0(fn2R^YY$bojxGcvOO
zuV7RVWSk)y81i0#(Vc@~<6kC)e~dTc8JHN^1sDVbJs1<&XT%6FxN|TFe`w%n{Qp0l
zfuTVtX7VgUh6Rrnh?;O`M<=kdOfY0QVd2CA8Z!`ZIPj0<%K}CvamEEaOgk7E*2Fk6
zFep57U|@K_FUlgp%idtYkRYYd@Hc@$nO#7EK}e8;;Uf=&zz2Q?hD*^8*%SV<9ARc)
z7W~N1z;HR5=|j1KrQrVr2B(G<9~lm?Dg0+{U{q;X^8jR>I>Q16h6ZC{HU>sv7YRls
zm-iZs6I|YZ5P$Gr@sGR%BZDJ@kc<O^yg~yH8>pbJQ~Ac8z|R!GX!!p>y9Xm<0=F>t
z0c&R$83vXe41)Y!GXfnRF*B%NU={x8z{i+9*Og(yBbF2Vg613y^6whNcn$au{5fC(
zYFJcAD6z0}uyH!rFg%c8jj$7Bs9;oJV>7UGQegSU?!d^fL!4s=<7Afq<#r5Au4aE5
zOqnDY`4q$$8%!A-Sh!~}@ISC-<#%9I(zqe-z$nPX!N$CSfnfnBLjwcP4hH@P22sWb
zri=@i1jG#(1I!p08rT__1^F9T4ICalT)@Pjz{M!QYnpAwvVc?hJAVTMV*(pf1f#LT
zW0nYe&=t@M48rUR4ASBX3``9IED8)v63qMzERqThat!Q-jEwCJpgtwT0$EV9G<(MX
zfRSegGs^^K#s+zY2b>Jni6D<NXfQFoU>5$Xz`&Bg$g+ZwX$1qr0XwDzj4TQq{0kTv
z7!z1P*M&1VFt99OZrRVk@Q?A2Jj()RLB<)(`V2A$7)1p>EnrYM!hC>P;2&rU-${lD
z1_dU@6Ap?Y?-^Ja53mRxmtZjDW!TQaV93L;oP$C5p#p;;Kf`nZ1|dEVF2@*dP<w{)
z0e|8Vb_OnnbO8nhHpT;th5|lZ8yEya8Ked59xy0yGCS}adYkbbU@#7S&%wZG@R2cL
z0lOmTqH&eb_Z^Ii>}&z{MlyfJ85DVDFfzr(8Bcih!GV=$1|y3B187e{gC+M2MwSVT
zYz<6YGZ<N3Ff%@2u=&HpFoTiFfw9Qt{RjRB{}mKi<(U*%8TlI+OIZpSSsEDaIT_3w
z7%#Cnu&{uZ+_A_Czhw|({lOr>Qo){ZF`D@ULwSCwz-!Pf7q=qA2L?ta@ixPTCH#G-
z6dWEou=z0lv1ho!!he8SG(d!X!DB`T$pXG~1_s6*F&>N;7#JD?I2fM)|Noy+M$SRb
z;fTBhhlGLy<AxaS9XcOb>lvcCIMNw9>KURxvM2pvxFK)BEWofqA)1$?oMA;hLo|;D
zgEOl}^tT6UMqE70EtC{E%1?1HIxq;Xa9|KnN>Kd5BEigYonZ!}K{PkVa)ueK2GP8n
z3Jija7BC5L9pL`J#K;iM{C_(GLxW%p7w2^b3DyJr0%`~393^-;%x5qdGJr@yZVrY3
zh3HT0Dh>*c9KxLD0St{?|Cci`a0td2FsQI;I50Re@N+D8U@+w4SgyhFiG_ieonZm%
zftZi%YX2IJ$V>2WERSFi;?!Ue<P~5DREYk_uGPRGAmqSsiCrU_kK;MR40eNPeoh0>
zJaN*2Bk~*qoCXYrf}G1G7>&6&mp@=&YEWFvD|DP;0o#EXA<h#Fi44y{yZsv&7!nwi
zcsOq`Y~~mI&Y-|?Acl|Ayn#VU>5l><lLe!IV1l^;r$%%DqccN?Kn#QCM_vYDPIE>H
zPJ?J3!Q%`H><3~vIKMM6a0tYFV?W@);P9WpoUwp`@n>pshd>PT|8@li0fhq$juH$E
z%O@}xax<haU{K*?U|>>E`lFx-+UVh=5Y5ZLz+}k$-`s(Lv4Pp}2x$E00INncC)aca
z1(pLbTnQ`<EDX_K*_Hk|FsKMId|*`KV7S3($jLDM0)xR9b~OhkV+Jl}1qRTusVof9
zod2hDFflw}Q8>_|z#zC>K*f-oVfq3FLk=+cnO%*62^5T?3Jgr3OBGldm>3W6F+Naa
zU|<qrn89es&D}nMk@*0lkpvIJ1x95KW(Fok0S1N!MnOFX24x`z1}0$!1}0_Z<qC|<
z3`|1I1`Gm%k!hhU8qr)Jr49@%3`|Pg+&>tVc$iNxFfL$7JR&c_$2{GDL0Eu+Nr|8N
z0Rzhc20=jq1}BAR28JJu0z!^yj1QOulNf|s_?VwFNU#}1YcM)+GP5%-U=;qCAUK&{
z=sUv#jsr3O8yE~37`}Tj2z@-jC@4|D=*%Gy!^Od5%FN}yfPvuvqag>E`ve9fZZ7u@
z21TxL1qOjn3JeSm%8Fd!2N(o+Ef|~`HKLgV7z{tMYaL)P;^+Ea!7sq2Arz_+&B5E=
zz+8CXh&%%~S9k)05+`#7gCLgxgQ7yT0z*=ZJOdB2djf+Ha|eSlAG5mxgQLPfhocIr
zj5`<v1ROxY<IJ#~K_P)b(1AgKX#;~HH}mlZ6(t_#0tRLWc1H<5f$J8`f}9RaZUQm9
z%nb|-2LzS)nRhT4{^!`9!Jx#&`~fuD7Ia0PfrtMAqai2f^9V*^1_1#^(Df5)ivN#C
zFfi_Xz@EX(;=sgGz|51uEc}^)3&LVZP-SpnfUpfdvNtF&h%kVa2t8$Ba%AA-beG@}
zW^rI*5Rfor;1E(^VQ645{?9huf+wY%p@BOm`T`$=f>3b75qSae3w**X8VpJt><$dV
z9~+DWxt5(U5RhSUuuf!H5W~t54laC!ggG8CDE(&x4XSdnD}Yoo2r@Sq883+8Z(vYj
zVGCdoe%8P!%<90vus~R#A%Q^=G&(Byk%5EZfKb!-|MiRuELmAO82A~u#hDy99T*wg
ze>QL`$TL>xWQ4qzV?55<z-cJU*e<|eC<AJ3m`F3SD=;uR2slVF9%m6?FqC9$=U_0D
z0Lg9q$fQuma736v9MlqV5Mw;f%)wwN3R2+kkwsyi0)wFlqq_iup)eym2ZMqT<FeOm
z3JlJIjO|P_1Q<CO1eq>yYz}$<kYC{+(~<cMk`i2k5+_&!XT*pzOb4}d+!g)_+>mDw
zV<;D35EeZkAS`0Q>F|Mlfh+@;61&6!4u$`W>#8@0yk{5x&d;Ed8vXGAZvX>B!z9KT
zzMq+R)EOAqyv^7pzw<LFq(;AGVBlrmz{RD(@8t0KEx!VT61zwO1Ir5zCJrt|hsO#W
z1rOvII3%Vs?oe~!mq=%Ppsv8q5x^IiVfK}M!2$6N{F34f4GbA(?Be0GwlqYuGq5W*
zFi&7`WjtWYQoz9C;iteVva>{ipCv&j!Qp{C2Qxzgql17CKWhYoQ<gWo$OS3Z1cpy6
ztn3U8Dk<LVBJRu#EIHon0_=<l3=9t3YzYi1?2<3|7}fez9=%~uXpm56Xi!fwlfOCd
zAxo;+f6?#k3<eGsZ`c(Mh&zaXV1E$6;K1I%p2)$V09rJ3u_NFkgTjA?7JCK;Mt28B
zrVf#WA0HS*(-|FD7!|Y`6qpUbY|!{ufI>8@Xu4A|!vao51`Z_#)(CN7ehY46X0dPw
z20@1eZeei=1_u_ga7G1|W`0R^h6aTsvj+l>63k-m2RK<87(7^*r!yX4Gh~-!zrbS1
zCCQ$^V#vTeeFB5iCw8|#3}S-QXD}$RF`r;e(1>Q1T+U#iF8u8PpCJPq`wnr21+oko
zf-Dmlgx@*{GHqZ^`0;_Cfoq!tx59rh2gZ$#79SZI{y7|BXZXK?=VHkF|Ki{484R2)
z{xcpIU@-c?uaLl?D8BuGm>~m0!wg226+B8G85gh%{=dPqCFH$02Rp+A<{UFA1qS8^
z%)-(F48rma0)lcESezJSKC(M77z#2>Um$EK!_dybAT8v;AS^4uz_fxXA=^xj;Wz&a
z2E(uH2NZaPg%uc-1mq$ZRQMYXFr^;&!*oNQ;RmCT$N_OBW(Ecc#s{1X3dW2VBoe%%
znHb6$Z-^^MGZ`=`3dAsoGdM^IFy-?E3dJx>vnMbrF@p}JezrizP>R7^K!T~SK}9g;
zLxA9;11w6+3^N#wH7pn+7=@V)7#SQS)R?|3V02<&Xh=CBBFH7c;P8Q8?NI}xA+uz=
z0h0kc!}Cuijxh|9?HNpr4$J~KKHgJk(6C@IWR_&lU=n7(z$p6g0fQjOm#oa}77W7j
zFQkOODljlu1PTaP)ho)2uV4^hy#U&?r^LpPzzs?X-~!f}NhA8<0Y*bM)^r7CVb&iE
z6IcYk|NsC0faPZehDTH688|<vGko~Z&&bC1Jb^*^e|ds76KJE(0Ul?5hG^y+JPoY>
zzyJTwbkH(^MS)>~0t1tPG*g3#Lsm4y{|p9U*97K3dj=VX^cjo_{0#r{j2#}aF^Dlb
zhzJ~sQ`Y#-e}hkir9mu}o#7v&hfD*bp!f^Xgp_CoE_TKbye+c)4*wWSWEg(%3NruT
zy~rTL%w^8dAh;psBmc1k8DZ80Mq#!DMwSzX!p{_VlsH&_h&Zt_w=-xk2(||>8h&9v
zwt!uLU4X%m5mb{*VA6<YWld*Tz`THCqQbue7vv?_SlulcKqI1@g3KJC`o@8WVF4rK
z0x3m}Xbu*}1_KraGr?mA7zJ1^aEUQ7FtIpD2fSrh_}Ac|%W#0ffjK9dd0`3T0VzQN
z575RK1_n7{(A@=lXESg=Df-XE$iVI%^FYklo`WHPk@W<VfCK}RF~7{G1|>!l28IPp
z%nD3`vKkCV1~Fe1q>LC?Bn+5JS^r;WJiz#afl2tSf*8vWMnV3%MurEBV(kwYb-&0z
zU}WiFSn`40;SocL4THGE4MqkJcD57zJ)ig&JZ3mzFL8qr)JJD#WRMY<u|Qw4{RSh;
z1<<VHvImSjHyDN4PcSkrU}a#iV|l=+$ezA}mE{6sz(@ABe+M40bA#1_hEo#wxNk5T
zvM{$_U=)7Fz{;?Jf#U|FAv<&X29Qxp6c{X-nHz2}it;NkFe$LH-Cz`Ky1~e%AS%e<
zpvw}#s3b1q!6?Z2fzi<A{RagJh6Yxq4;+RJT*ob#MFd|k@;fl|3;t2iQ)WKyz$|$@
zgOM?TU;c^%Gds%zCQ!pYgAp{p!jQnu;J|Fi%J4mb!H}8Zdjz{68wUfk1GC@^2Vnt_
zD_5|FDKH<1VRc|u_;)~o!+`ZT;{p~XHdfHQI%|3ctMFR~ZbNqF;{l8c%ra^f5<(8l
zj0+g7`9anS9?D=8`m4Yq!coA$lffYTbpeC0`~xPI3Wf&e|Kbb{jIL%2xPukG$TJB1
zV7C-vnEpao=`TNnD35~(3j?d*n*>EhGhrc?1aT${PC<qVA`A+wMhE^eDu^&gNONT{
zGbu2M+9@yzvsSP&6>x%v6237A8nQ7QmtbJ}!KUK!UcpG{?E@xd7V`}pUziyFyE8Db
zFR);cH-Es-@I3n20e$8QE`|m+Ck94|7!PxmEAJFIgxMcR8*qGJuVhqa<ZNIPe#pQp
z%q74e%zc0XwCvaZFFRv`C=0{>O0@}(7?_zD7?l`UG$I8B6WEy_FgU-FV_>e}5R`eq
zZtU`2UO`mpBd8A`qQDr~ut1#QI0u8E1Vf}s!vX~cLrDgA0R}<Q2N8x13&gIqvnenL
zG9QQtY*-)!8e#AdW;o8Iz#u4F0g`9x;5KYnAQcb+QYGDBZ`iQle+M(eR#v5U1_cHM
zMY#kfLBS6Z4h;)r7#w&N8x|NaGbk|X^D`(gvI;RPFfuu?@KlJg9FS#8FcD-|V9;O}
z$dFa}@!<d~%LZAV1FZUg*%`zIRBy;H5aU_FB>XqQm?wh4NPv+YG#MAc&;VN5D{8)g
zL6A>_Az%~3g8zyO7??k>@FlQ;E)u#SEy8$1TF>Ee0=M+>1a5iu1a1}v^>_9Y9?2(g
z^GGu(aI+L}%L^xPv#>O93kz~E$jT&e>$fu|aB~U^E#T%);MNtEO5j#tlKQ~Jp1=)a
zGiF$EByck{Fq<+nuq1FZbTAqV#;`ar3V%Jo!V<y3lfkX@kzqk7O93}q1~<d^TBZlg
zf(I9<F%@tNGh}cJ%Vcm1e_-HHVwOx`XNYBBuwYPOm0Y08oWL!_%D|<>%$mSyFVAY8
zz%4HSC4pO4-adhwLH{^o0=GGX0uz4%x4Jw-0{8z&76m4G=>%>z!R-<t(O6;D8;pjm
zT;VquwV7EHxHVbZBRI8~nG-<MROSm9mDpJ|m>C^>#h4Sg859@_JD3!r**MA%aB4HN
zC2$L|fyxZF8;pz!4C0Il+=|TX23-6J+<Ee{3EZqq4UC2iT-Pm_<%JTs<%F+0FbiHk
z!N8xuoh!qZz^%x3{Rfv4E87AFYi73a1a86W0gU?0Abrx;9hfCAC2+G8fby5<*92}R
z2M(4BkWN;4!36FkS-AvmapnYWLC^@#^$Kpu_5^Om1hJqS@(kw8GZ<JsxS2D!4WF?)
zCNQjL5oUkD&-6T+g(ZQTRbD-TJ4#UK0Xts;x1j6|c6*oi!U^0i!h#9h!ZHHfED8+5
z@&(+&(iz;sQW+qwJW~QUkFd}LZc*6;Zh7+r?*Edq_6gi9D;NaUW-~f|v1eh5kW_Jb
ze?p1HgMqO@&E$YR%K-)^4F;7EkQf8EAkzm)VHXA|C71UCQlQMsASh%YCG6q=5($uE
zQ(#~!kP>!j0C6XPxf`T}T@HY_7r@*PQo=3_(je{9pltC#oPm+a0K|8YX6#U7c(mAE
z=0E$x1_QPTW&Q@~trI`8DEwhO63@W%fmtWyeTVeqkLnBla~zRp5}(1!(;+SV?Ew?Z
z1Zh=vi3DbW$pzAk3#3i9$TLikW?dl7+#t=^z@)v!eu0*X!{Y*J<^x(X92L?m1=5CJ
z*%=hHdBAMpw+EP|*(;=3G8l{=vM*?m;sy&ld}U|)&!7ZR!<xXrT_MfpkgllkkHLVo
zLRzswq(OqYKw9|W0#}F<;g1j4psb$?!BEzd1a1h6g@G5ucpzo?i+zEEEQnno&CI|d
zBLTLIfq~iQzzKN>$M6w*!vY4L3TY(<HUln}1SV;Q3TdVZ%*+X_Hb>YQDx_H%1Ps`f
z>>e<Kj1dqJ{^-EKA|T6BA<ZHnz@nhaQz0!a{eT}NSs=~g05VBJ)`5W`fr(o}fMo&~
zi-IGMgaAtcqtY|+2aF)5fPlcW1_s6hCR||G2tQlE3DM1{;LdQslpAC{qmzckM+OBA
zki-H;#gF0%Y*5E53$iE3b5}?^F)%P_DzGaYkbA%cQdJ<$q96le2nc}2tsDeE)(Z#-
zKY73dv6S%uqs<w41_=Qc0Rh90><bb=PGy0pZZL+Z2E|kYGe~`bG(!S2Ljs>5|G7>!
z2?0@d1rDYLu=5)jl|S%1@JR_s2=FhE<d<e&ASutjK$3-d0T2HINd|@!JS+};(yU-v
zeQ9<FJ~(D@;9~(z#fs}NGe`)CGb9KKIKte?=)h-lMV<j1s>-0H4WM-Kfl>JH18yD(
z0SR^nF5Lt23|uS%0s=w~+BPTbK_0olC?M;gZFWPR;|8O0JL3vQMgvAh2NA{uX|5ZL
zEGzg7zp|@2@NwK=<XFLH^o?D?0hF#-UI-d~VPE!uiwDx`P~c~1VBwY!5M^D!Ah1Be
zL`DD{L_%K`7{nNEFiN(s;1m9vz``RTz{bF>pztk$5fsV=(u@y+ZAxqyDx^WJ3gP1m
zSOgCw2=i1(^FNRg6@JD54n+Y076%yP0azc0wBa}QV+){B#&|%4!GRg%)dFe821|wn
zM(zq}HC6@%7Cnb652QuqAFv4>P+$cq5D+l<z`n47N1H(i<UVGB4-Bjf37n946Mm$?
z$|E5l$nU}B^5erd{sX-F-}w*lGBPMIF)Z+gxYuYSdx8QZBZD{_C^<?qJYW(~SRe>8
zT0=niQ$h|zmGH*}oS^s@5D@y<z$n8aA;6}<$h?3{ibX;IwAhaUnhhK_vL}33U<GLs
z5MWur57EN{TC)jCU?2uKb+a)DK$1DL0t3i2mI7&oj|>iOI`*KDQ($D*Xkb!cWN`q6
zFN*?`@Y@6YtOqPu5Adt9Gag`-`*MJlvw?wufdk~v0Di^?!u$t>xR@N6K=yes2)uP*
zwmHGXAR)k{!5r`M{xAQ+1U4oX0Rhp!3EYyPV#b4;F9BTtvT{~P^Cxh#vNUi@NGWhL
zED+^R;AU^&W&~$hmI8<*m@?(5kk)39O5o<MkQQc1;AT9)qI^X@L5vL)xoYZ6pwf$*
z`GFd=cmvH^DS*_n6iBlqfQlgg1a5Kv1^*dZ61cS)7<fR5B7s|1TsDE5;Q=Fm0=F8d
zLGV9>r$U-9ftw5LE?;R@uvT?8)&ypT1v;R3ff)xkSBrrStO(-TG8x$fZmsY9FeCVd
zuP*@AQ}WjnxQlo=pl)F)0GSLijxT|msX|&C)CuE$04kYT6S(z3wI>&-V$5Jr03}Od
zwgPF#jr<A!8kiVAu(2m_GZ#n;y-8q~0Tp>*!(><zxIuMc5~yZof%wiAloAT0*$=33
zg5w<=)G!b5Cvg9l@?qS<1j^q9(hLt61Qiw7LFvN7G4Klm!#~9YX%MeKnuS4{r$X9N
zi1D}rxOf7UYPcB;P9Vz}%oT)wHApihNK4BlNDIp*NDIp(NJ~m5NE`DrNF_)MOD0H*
zNF+!LF)J_#izi46izP^lh$cvbxFQMC!omq43qd1Vf(sZ01s*UnG)SwsGcuSnIH)Vh
zF#K=;87U&2AT6Noz-!FRAoYP!g<a-_nG!o=126Lfvjk3ch6Wbz8>Rwz71B!VvIWv?
z56qYrh_gIk;(cHyFZIBTmFWPpg1F29srwmb|7Eu`HZ(^>^D;0wNHZxhOF2kOGdM^q
zu`@eJ8}duBJ4g$#H+Zo-NC)ssxidF7Nb@d`W=iliWR=-If!&ZnW_t%asK+Rza3Egz
zh5|znlScG^X$NUF2G#@-1_v321CFK)j0+OX1Q{+c7=)TVO^`lxfti6_Mx22`CDn`}
zflr79bh@=BQ-YQQKSSr524<)Kvft|&_$AyEv`iTpWDl4!#GTc6B$1${dPJVVOi5hk
z1)s3E0s{+!v#=OwG>n5mLNY;%K|!9GfnQjpLP$d1fr0&jtEhkjgW%5>e4^hRw3r^S
z=rc$;XfX>jU*HoIui$V{h!GY4Aj$5aB_Q6m#X%^BS=63^Z-J?(n1hyl`T|oPVfO=k
zqU;Pj;!FvwN`jI<7?{@Y;djtt5E6_KRghp1+s^Eu#c+T@Mew+Vlz^HAgT9=gf))#7
z1v_7ZsXV)a77s&&4X1*Zyr6;>vkE)=3O?y}1uesJ1_lK!`Ems<C2J9eas@3B@dE;k
z32f5rJJ>*FE4PA{h~Nr7d2t0T86|N>2W~lW1ugyuYTS$qn0YKDSPUfi6|~HS#c%L{
zl(2vpasmok3=J%r%;GnA3>p3lWpE39NMO|FkiWsBz#zlGB+sv)#l|!tnO#9kL`FeN
zU!6fgOIYmq14e!YEkO~P8;lGYZ2CK57D$M)H3)DmkPv3Oz-au9UCn`)Nx;FFojLsk
zBa?swOM`$h8*};%M)Pn6g$4n}2Yl=e0xTyOg;^gkayAHXDriX`ZxDcC$pbeSSr$m}
zDQHO^0##NA7+DpVMMOLp1>F^xg+DIfW0}FlazLIxfstR@eF2}mdjg}9@H5Z~7Di!)
z1V#^5hUbh4jE2k%&n4IyB^Vevw3I;tObhrJJ}8PYB!HG5GE87$WsqWCz#z=LfWd^F
z88p(Dz$haEGHwAMi=a~iBl`koW(O7~aI+gUwQzuec?O@b;0!)41}**r>P(Ccd@K)w
zSvE)u%XRR{@-I;5Z{Xt<7H{BVkYHeF;1hHgU=Y}JK$5+IPnadbi!mVHkio+ufz9NE
zJVOJYA%l?n14)((lENDgu(MY1F)OgJ6!0-Jh%!8I;;!Ihd7;U0fPvvbx3u5^1}%1$
z20NY#K4H!RKH-fFT7n`K?8YwdnG@KBg$npYelK7L4f9KR6lXRpkmWqipui`@nZRc(
z!^zIUpmCg0fkA<p^8;64!vc9ucMb**3C?yV1qMR_&f}mJ^PCRc84U}>Io+8R7!1WY
z+XWbu7&ve635o{fvp4WDFt{)@@Ck5sFgi3W5aC?Gt<bQbA(?4`w7xo{0wWva0w%5s
zK6V8@#smjTK?e5+th(%i2fUdT__V|s75G3ctO`E<1b<dhrVIxD1x%t$3fwy8at{2`
zd=3oy=8O&uEQ0?J6!AEiGN0gLa4;2QT)@RNgOle3m%|5l1-k`IED>BhC%9M+FtL2#
zV!6S^a)FEG0GK?%B_;|QOlJ_56JQV);b0JEVqj-n5MnYTp5X#WkI1(KN#+Y&EGM{x
zB~EZLI+z5_kY^B+xWJ{%AaR0AK+K*&T_A>mn=ybvRQv>&a5;l0KZ7Z&m^*{1zyStR
zNp=YdmJ?hmAK4jHnZV{TFsL#punLQSIff6}7d&7PmcPKo^TLExfmf5kyh4)Yg^4h@
zH6_Wig2U(`d%^-1X0QU`rwx^stpD91N}eW2^HfN(T;LFS!NAOXflHXFLXzbK7juHJ
z2*U*~X?6}~<^xRH3~~#Yb;Jc1h%;T_;%89i=Q_c~qQEZAY9YpQ0wfU6b%Kj;fjESe
z7hfRG!gPU4TJ8jw;Rkjn2R@byTs$5Qj1BS5H|!ZiFMxu<kokZ31r_0M3s@K#n8X+>
zBv}Ha*&Z;;AAi8e#JGS#*F%QEp5+7=&jKEv7bYwVco-9u7!$a-PAD-ra55xtGD)zo
zRY<aANP?saBpEFjSYDVgttetX;3XqbAt}rXmQiA6d%(z2A;7nQ2NG;-3wW3x*y%GL
zSir-=q`&}*Oa*413P~k#CJ#no!3I`C1}^o4K%Ns^{0~gTmDCw5m^IWHPH=%jQk2bt
z8RTyUMv!+-aIr3s<bGhnD8L}hl)%XRz=SD*k?91NEUSZqp!y6J4>neH(7fK;1uTZ_
z%<2_FTFgu*xY!<;XsI(KFsdpsJTQ^C;o!iP!NAzSW^+KE;eZM#ar|At!LPu<%C^9Z
z2^>tq@+Y{2|2i<s^Dhu%<2qm>%*G(bGC{@Q1G~ckF%gyrT!IWM*j!!SvoIgvVtk;@
z>L4j4w8Dh{0G9wG10VkZE?$-eLi`IjnfMQIF-S8X;1U!p0ClWc4{$MwvLE15VrA~&
z5|nxnm)Nl2Bcp;HgP0=oaRCNHY3B9>E&-Vba_kBWhB6=_B{}8;Tpl9Kpv<Zyz<hv9
zNfaa?!3@f&%HqrixD=V)Js8}@nAuqr7>rr|Gauj*Vm`p7EXaI-%b$P2f2IRm25b>r
zpwS?GcBTVdtorH<2e^{t<qvRa@-Hyq5OG*w!f=6+e}Rc0g9Zbeh9uhp6NVj(!Y&KM
zm0aF$5a(E6!VtkE?D7D_{Q%}FFbTUTNGQ3yH;@3yg18AFZULA(K|<JNfdqqwq}Fkk
z1tv@Zl1vXI7&Rmr9whQFFyZ5Kh~amT-0kp@S>ewC9zjk47M+my9+D0p#Si>T$Q70j
zkmT`@WPHG6vxS+#LXs^(l7E2-i=@;76IO;uCJAO0hsOqz!fzQ=c`PJZ3?!KyxMeuN
zEW;n{iy8zWqAUpvP{x8P2t)Ym0S*X@VF8n%!-4=VuqNY2><tIhxGW?c_!&6Yb}+Ll
zXmDFdsxinaXb5pAXmDCcvSjeFB(U*VNb)4`fegstV_5*=ih}m7Kk(I&XRwfDdBDQT
z0MaPU%%A~MWFQIQvlvK<K1?tM*_FYk{E;C+k=sI&Re@DVT!D+nLXsD(i6w(i_}c+V
z5dVQXw}qrUyMr+gi-9EX19f@92kOia1KA#^%a=b;mtrxH<a?mbmBA<c_W{Tqyb0pW
z1$;aieEbRG>`WPaYzgA>;tN!iKp6+5GlP%+fx0?Gf@uK*4_F1nL3|0~Oc{LQ@(JP$
z3=?=PB>5kxvr2<hK2X<JXLz74EDb6X7BKKcaOjB3I0$fANb)-fuyc9%GCBy@+>n>J
zA<n|VEBw(xfCtQCZeW&?u#jYN01YMx@K{JPUSQ;Zpw7gV!N=zy03qd%I|#6FSxB-w
zh%-7kLmVjlF@cfCLXs0SJIuhEz{q4F$)X{_=)laMz{o2<BY}~Nae)j-sevR5SS3pa
zpU^V~J`sroMxGNA%n6J#phz%~1kEoyuyR{~lnH%v-~hWOgMpcWk#_+oA{iSv7!Rm3
z74Y$#;AU;G;kJ+z6LyGXWB}PN59-mf1n@B~;8i{$#~{iEP9KIJ*%cf385Gz+X{>;c
zrNIvrO$yGSs=0uVF+rYR!I?o`P{CP+1+1P)!5NYw3iy~8NI;#%@<0OOdR7K!kmEq9
z!x+L~QGg~?1_cHmg&E+)RKUlt;H(Nt01D1hf-BV76!_%DAMi5i|7CArU}Z{BX90Dy
z`S=$w@v4~1J>X^n_4N2y3i$XP7+5(Ls53FBNU~c<@-wLL$_p^4@JLHAs7Q<7;NoXc
zVP$#2B`wFG0*Y(~6;&1sNo_F+1{H1#NgkM>ue=C@3Xi_Lpn{(Se?z1qh{4NbAj!s{
z0*ZeI6<Ls9Km{|XGUi}OU}iA@+4bKHBF^6s$to|(puz$P5Pk-gP(B4eCJ$!T1w7mg
zHcSF6Yzve?N)13Y2!z23b^?omBuEX|<!K^J9*p|x3=AsT$ad>%d}oBD00T+J2ds<<
zjG&Z!LIPrdFuQ;xgayhZ3@TbmplO)}(jYY%4Ezi#w({}}Dj?6ZJm6wvP+?FIWZb|8
zis%Deg5MMrbmSN;B>4|;i3)slU<Z}kpd$PLm#irB30q0`16=Z~2e{Z74?rUm9;@&;
z#AHBX)t<pZlJx+Wy!ZhwWtIRg-UD3n&|=tuiBbPA`vEQ&P+@HD$GC-wF~Nx81S5Zf
zktBlw14n|9k~`xAUX}zSkRJ>r*@$CEx?4!{Cm8YaJ4nhiF%%1nt&k8FT_M4=fWerV
zL1cr3u&@UsQwQ^!koO-M72+7a@H6bFWI0jFsF3M!V?KjWL^k6MKBgIr!U7K@m>=+)
zGO`Q(U=ng!A+7qI{{g?)76w+91}1fO!2=R9Ee9lYe|%UVAuqT<f=60#frPl=0tuNf
z3nVxe2rwxWIQ|#<Uf&?W7<S!t!Xti`1rr$+GL;yF5_nl&u!@Q*@G>#535p*2<suLx
zCcwZ3+GHcds$jwVfkA<V<p870m3OS72@K2(JfPh;Cs>&tF!D3V^Rq1A<<VeaIWWb8
zfq_Bpfvi4*-~%;o4-RH^#s_MKtQ_hKcnuji#CPyA32ajoh&f<vazLJA1FtZ<0-F*u
z>jqw>Zwv`0N<!=(SQ&0`GI($*2(cevQfyejVC8&3o`Fk%QBcrghDyVN4-CRz96&p!
zB$x~v7O<_Dm#SgG#m>&;z;NLRGXtxDIs*fTw;3lp19L{h0#0^!#sdO|ob1OzSDkoF
z%4k@?%-+tdz@YS>U4TvLKRXAT*MD|*CItqj3O3{a?8iA6m<rgGJ~1>XDzUL!fEH>p
zNqk9QmF8H$#N@y%Dsq4oQelfE$g}FZGbYGuvSe_vtYGF(kQWmbt6<~QU}J-|otYF^
z7!24%I1=PVe=O({{@cJNz;DCPufWD2{DFa)O#-yPMA+p73)=!#mV#PQp%+#R98Am#
z49b6)6j+5_ELa&|1T%WD@i$cP@;9*l|Nmc-*}xXeauSwfsAFb`WH?~U;GiPt&cVRy
zkj^X-DJ&xqDJb2+&8EO0ELEW*ELou<EK#7s%HYUcp&~3+p<*ctTI3=uQlTO&T%jT;
z<iP_{Dp;W+EKs2$%v7La_=$nRfmN8bLPeFG<pisf7!$*S1b)FS4U7uHOgowdSU4C3
zE@apW@F_5`H0)<6aAo|lPnf}hfq4NlTf=@qh6Y}i1^lAS4f_QaGKiRPurpWiF=;R;
z@UXmK2)JVQkv(Zaj{yfS%LYb=3uYWF2N)eLnsKshU~sx*wvnGfKv9e*fWcq_1Iq)3
z2bax6d5-`8|G$62Ms|nq3JeMYyb4W*{S6!|W*IiL2rEb#Hgs%kU^SFuV7S2;)X*cx
z>wbbkk=NaT!C@o2f|vq>p)Bul2?imy7g7ctGQ1582@MS!85P139~(;Z9v5Ixl;Ck-
zFr2{3tHI#du$eL80IMN0FQ|FPz_9&*vkJQygSOy;2XjQ^9UMhC8W@Gs6XKZ|*p$?T
zB^Z>zXH>C^u2406$gl7~d?Tm8W5xz%hG;H<#~LDr+_Dc9gcY8tH!uXpGw{ehRFDu<
zk6=jP6+Xhqz|0`Q1X_eBd<3+-RQiwwgCUdjApr*AhYbvd>;j8tR2p*19$ZlYTJ{rV
z_=w%Xfng(?@Dqj^YzEQX(n<~023(wtOajW$j}sUSIXD}C2r2Mzo8Bv7i00*HVp!22
z!MH$#DS^e1owHG*(vXe&l0h|(1Ct{Q%W;+lCLxvtMuBe*vq7sbuTKzDU}uovNXjr{
z_z=$6z{Ipbl*NHTNs8G+g5`jk(3=Hp$_$bYYn0d}BN*8ZFfl2pvNkX%N~Bjrvj}tu
zzdgXhq|mC8V`jl>$S!((LNrSP>r{5p=Zp*r8PN<LhnNBw*b<nTf3OHicrZ9KFf{NV
z5M+8##{59hkY8+j1Vbsm*mcGRg$xHywg?7!#sqaHC3aQ^PGL3&PHk~^2Tmc@1>FMT
z3G5-NDc=074xCH}7?k)G95`7d7+EqH7#J!T7L+ToGAA%7^D}!eFdM|ME+`jb4q#9g
zXH5Xz-N&|oO_EWfvytKdcm9U?3NZ?Lj0YSP8YBc54cTS4H!!O6GaO(P`=U^;#LvDU
znkj&RA)%A0K|z62t|8c1A%;1E!H_|Ay8wgm(*;Z_+?)<3Oh0Occ{Vh#C@>528b~XF
zMiGRWAJnldn9cN|E>Izwi($Hggdr>EaSdh`g&IRPhUW^*3<}~55;X#>6DFH79f(O_
zW)J|K*MFR;fk8=}^#X(Ns|F?pg&LL$29+6%2YMMEFfclZGb}J>+`+8GDdAD8!X?2_
zYvA_pK!UmwbGw2#BL{<^0z){%3I@Y3><2)r1tgX~VCH#IF8twvB5ML8>k1~O3$el<
z9GDON7ZYb_Xbv^wXXv`t5yK?Fz<7XB<V%9T%7RBPmO1e<bg(OEGCkl_Wd5MQrOfz$
z2M@~z(C$Pw=L^gX{}1qpF)3&=FVJFG;JKNZ;lG@DgALz<XppJ}fdYRYn2LQl!0f=l
zz^=f+%GSUE^3H#D1}&Bb27&(%7@V7<%|0e@u{1Eqi!?AWn!jLXn8Co^z`*pNN`$w8
zfu%uCK(c^Ek%5IllW~C=Qvx@G1?WsVB?i_EZlSLY6PO$(Br<wOi-@vYa67SyrZY5f
zD>VFV;5KAubC+OIWDxOSaF!7fWdJQFXHZ~}Jiy=}5W_6W!5}KQBGBOjyNaCxgD~3%
zMwTDE)~rnC4jY*^fVL+dU{GRbZeURQE3Uw7$iy5jz#zchz#PP!5zWeUV2R;Jb|=u9
z3I+!TrU<4$4+|#d00Rc$rwYL=H+Te@6C{iUW7r)S1s*9dIGkZ;U^~EI#C#~`#0g^t
z7PbaPl}GFj;;aesj1mmOtS1;55?GBLk1!{&CObU-FZ#Xy1*0&-0Y*j#1r=t|0}2fL
zU#m`d<e)9Y;K0SAV5P**azH^?(8HhUfI?tAhd5|yIm-=SM$0FL3=A>}I<5!g8RR7x
zm^Ao=1swR;9>_Bp@EI~oq@Q3GW^j-d{-D5W%qo$7fStLcQb^*0kJ2}e25puK9buM;
zK$Z;wj0YGQ94whFWQ18b6l9nkESYaK3UeH2RAFOYAj8aHsmSa;L)wUgwY@=_$H9_&
zN01T+2Zw^lQwIjc|Lg}ejF>swIi&SD+Z`;Kl$kjjq`4g|SrnuN#TA&@I1~&&@*hxO
z;MozxqQS%bAV-mb<pQ@($a{@EHU>?u9YOpIn(Ryoj4T_1SQ2FT9W2Y4b_B67F!3>H
zGR+8L*$~9Xpef1Dp&;_<fgkIRATAH^M4zRA7y}c-4K2wA4i`oTOXmaj49pjpR9M6~
zTm;Ppn2f(M9B_zYN?_)HpvB1Gpui@fAfNs~i$T_&K}ttl>;WT)CnB8wfKe>{0VDqd
zttt>(I=w-Y<pHBm`U6IBu?9^}h%y$*Bnbr`1vwRQ@dH6j68y442ZH3w72<@1Su+?t
z*jURM6%-8FS<5dlFlcON@K~<H!PcNC+`b@RxV=G9vRy%eAz~9lgCfs?Abte}b%k=q
z6)bED3QP+aR9IOTuxNm^E3k^&ePUNo&}S`IaAA=zQiuZ$Sh8d=@PahO@mLBoOy9xC
z<{-p#AV~i><AER^A<#k!4i5%?kb(tY85mgvxCEJZusgZDXBWGWp8Sko;g7-%hPWt}
z1r`iK3~?fl4s785p~bR6n5BW+n2n+Q2QybkC5r+BKZ7W%@G}NcmIp@s4Z=(e3Pu79
z@t@fmgqburR2(fDECo3eK*N-*8XSTg8(0_;6ciVHdmzGmLqL$dg2U0}Jp*e8gM!R9
z2ZrPuatv&Y?h*`4Gc*JR4{$IqP*6D{=U}2JBi_KtutJC-L4d6xPe{^0P;r5jgaU(x
zg2r)%1`!hpX7&S?LW~C#G};*z7+5wa2ur_E5D|W0$<m<Byg)%%WQKw;Q-%Vg0)yij
zc?Qu6cE$&mj4u>S85qnP)`CuB<NTl?%<(`$gq^{Pp+Ot8c|%u-<$!`xI}3xN=5dw-
zF7-m{3=Ev!W(z<=WK8@DqTFmdM7UPu@hOPvvok7)YJ$f#6-0#@9c&!8$g>DUFtb?%
zgVxa~B#0fbWU~lnSi#7)B9CPOE1LvA(+vfd3tWr}LQD%7<TVm_|No!OBEZX^z{|?g
zz{`@rD=M7euAk1Bz{|)o0VHfH%bLK;w17d0nU#S@n}s!jSCQ4-fPo*RGn{jQoA(iW
z2G#^#1LptX4O<eU|1uo-$M`^!X#z9P3O7Cn3;qONMtS)JUO9PIg#<R{1YS+n^aNgh
zg#=cX1YVvBT?Pj^wGJjQ6EqPA5)x)8&;=VmS&gwJftTq-6k7tX&>IJ4E`|gXmIW3Q
zbXgO4<yjJVd!^kIc;(wcE-7JIz@Ws=5Wv9F!N9bD!P(*QH}-@Y<{PYB3mBLb7#JGr
z`4#3d2Rl6e$gj}g&S1bK?6N>n$>se9MUDn{h98W=E)PK54`8kUldy||5`%}HRy#|B
zyYO*^8YT%nrUE6726y3hg&L+A2}~P69MIr8(*uw~#!glK26sb#2W2b=9l0?JxbQDv
zWI~s<<4fQLi<NUX%olcdP}X2)WAG7{wNMt8u}~J4Hc)0{@L@WT#q6NW@PdKCL0O}n
z#bLg%xP`K?n1!;isDUzD!+ha(2W606Eq3OH`3y4{861>BLK^N&47-J;71)%d7!G6!
zOD6aj{&iPi*sUbN(BLC1ej-a)>;)5x0>3J|v_uPI1j952ZgqwRR&TR653&R|KFAW5
zTA;w3!6y9Sz#X0kS)ijG6j={232-^E8E2TWNGO7i#(aA~R*7ArfkBB~EP+9Sg+Wnl
z%L9IWcIgEQ+=lE@<r@6q>{8Pi85Sr=v;0utS)icABH^IGs<B&&Wr2bMyF`Jvb51lr
zi^gtu33q0O1qv)X=CkZzV98)$S)icAAeO+O%r54^AjPmiL5W=~fI*p`A%TIlVYkMD
z{|t;Q3lv0I7AP<+h+|>kFl3M{k5EuyWjK({=#Xi|!NzbPTZuz@0hbb|bio0Z1a<{>
z=?m<N8D<s?j1HVkFS13xF5nQ7-tf$jfi>NO(+PAJTEjX)B?kp%2I(8w%pD9${L%&-
z4v*Ls<Qe#w8Q7Is7<TYG@iTB7dr->iAS9&VAjEXy5sLx8(g)CV0)vB)pt}Qugs6iM
z;{icw_5*?p9~c=HFexO+IWUScNiYbuOE47tmt=3)!~NiavhRP!7W)K7MF!AusVq+)
za2qo)ODG63pAZygIU&fXz~y{IUV!z2AdAIKS5emGj0&FxHZX892{0J3vxJ`z6c=@P
zF3`f@FSr17&7-ISBf|+n28Tprp_r!+1O=HY78(o0uu5=Avm6j)I`CPAfra6+2`h6r
z!)3+<215~McL4?^c2*A|eHM`eg52gJ%nk<x#hDKXD!DTr5EO4eAQ;HZz$y`bKv0<F
zfS@pI1EbO-b_Wi&1A<H|7|mH2-46&V$um?ix;i}mFXa&+l*teYIz+%BmuUtkOM@`W
z0zu)A2b7ffrFRG#$}nta;1CsFkjr@BIO~EvEDY0F47gYvVua-y0+a;h6d2eVm>3yy
zJsB7Tw?Eiz#tb4E7_MtFG*~3DWGvu!ND9`MXE?Aso@oWQ;5P*ZhB#R+1x}V1Qy3H&
z<ry84{`1M7a7bd}PuRdMAPt%%Jg{3_Ui!dpS+VWV#kIT+Ng~oW7$vuN2=XfkurmcP
z3x9J+vS(-At{|Yqm=MhHAdgu=fG0zk-=R&GWe2|k3+oGY<^}-<1qJ2>3`Q)h<{g5X
zEZZHDELm7K++eil2eDZsH+2XK|83yoiO6G_z{jGH%fi45Sq{tJP%Y22A(>}IJAXrU
zIfH^GUqh|%TL&@z1G}~4Zyeao&f>tt*HF#hASfpBuR&0NVc7{)h6x-+d<}vuCzwS!
z68Pj98w9zS76`KhB(WqUu{=ms-Nc{JCeN7A*2B1fg~ww9OM@T_L!K~e1G^x*0*9i@
zdj)-?Cvpq|Qj7|G%npJ~9{j8gNz4nT2ufHmGMt#gD8S6Bki;Ot%OJqO@?(my_=_p5
z3zC=>rV2}QOjVF(;NS)IjD>$p5f*qcMNn1))KL}`{lQ_}ut4O*6a^**4!*#K1s|Cd
z6&Qq>4W<gSOH6fQV{m72U<g?7pK-$c0}~}!W+btkU{(6W_@G*tdB;@#1W-vQD8Nz?
z#p)m^FSwwsn9V^@-<`ohkeOux1G9smHpBM?3``9SEDIRqSQg0fC-D6Lufn1LI_!a^
z0z`sm(_|BPSUPxE5_m*p6L{oh6L^?JI1+d)<ruCf@CbiXVB(pP$G>2Wo4laILSEtL
z36=Z{)|fLMVCPGy<ab!e#h+05UxLSBAyWj8JcGkRRuSnJvdRpy3e1cNl`Iq3SYOC8
z2k<z2<X<4qAj0xN){>Qx{e>)l0#7K*2U)fkvRnx~3<W$K5nMXV%n3aF3-SWNuACyv
zn7|`)<$)ppfxK}3hDrg(1uSe2n3z5=uryS%6y!5LU|>k#VXj~oWL4lWb9v8}z{9y<
z4NC-%kVJ+xlY%T`!XzR01+t2q?Hmlkk_MHm3bxEMD&?gQRI&(5Z>SVzUQsD6{9ux>
z+=fae0nP*-4^hr`<^{4W6_rX%oDn=MCl)a^NHHF$WV(?j#2LXO%yy!3(O-s!KTHSa
zv&e8J@Q5;;U}ehS5&o8ttk1xi!1G@v?F0V;QHC!In1z`*<XAj94FB>wKG5Q+NM_Pt
zU|^^cR8(MQYe*J$?~v7KXHt-5VvrGbk&qE~(U4(NU=S9WA<GmYBkYm^;xRSI2)oRX
z5q4Pt<{gj`cDW%V?D9f}?LjgVgRHQNge+(=@&sA72gzI&3t2j3`5R=<vM}rw<hB6K
zvUJF@FzjWSAj{Js%c#HuUg0RK$}ataRdgf6UIqtlQK^Uy#tH^e76s5SGf#yqOMxuQ
z0%o2HSuN1YNRWUAgYbt3HXzmpZq@^`++a1re-rq4DrEIpBo^FYVXlzXW|vrS10<y&
zEA%0OONL_y151G{tHUCYSb?nY+XoCh6|!s!_Dl)tAfrAoi#%)Kg-9|uXbU(rI6yeU
z4<GP?6coq`JzKyb!vV4FBZD18Q1K_j0e)r$5w;3h76Cyf2QD3Z1_?nH0YNqfK`t<Z
z(Se^`A)7@)kmZEF(r1PQMji=4)&xdJeuY1b3QQ0+%nbrE3=)FktPc8$4L2C>a)NcT
zI_OJ*^a%(GKU~1X0~TXEki+nRmmA8~XJ}x9u!SBvh{|w)g++cfFn|ONI2jWdZ93#3
z?qO^Yg0OWMm>IgbBm|iX7#R+*2`W9%hM3Hzpw9*NgwV$a3^EKAvTO_X2`&OHzXZjB
z(1!*l840kwwBUoiEETd$6aO$B5M+4pk*7kIUqLWZp5egWD0%S%du8|)1pm9s%N*Ft
zB`<woud4L+2aF5~%sTQ6H@I}fr5W@=eqO=P#sIdjK$fvV2Q-rd4p_sF>}n4Dkf3Et
zumP<#^pNLIun~p0k>!B_gu(m3K%ZqhgFXwFgdh(CKSYq{z+QQw1NCA|0)i|I`aBYX
zT5PNhLJ&FmX9w!tm{tgYYz2oBV}k@}eIS_4$Dl8Lh(Vv_Kt0H584QdLOg0DPp+W!G
zL5E*~kCpL(D?@@CC|m^u4L>q0XaGeBs{^+@|AH<-9XkfF^YuTnFX(EMmpO2jQ<_;p
z5aJJh1wmF&DrS&{@IhnrVAX65vY-$zkcEpdDKO}8vw$VR>s>)1-}9Hh;Sb9RcBl=1
z#UFHSkUzq3j#0^-;Q$jq!#QsD1VMR52N7n*23}Aq0vA&1kfM~QLRMNXfrqC;Rt8#t
zvNJ4T1I3ub(t42PCp38yta(movLsmZMDXxCEEQGy$nb!LCxS;uT(E(QD}skV!J3^Z
zf`=u5hh+f=511kRwSf!5Vg}u*Vr>DD=S#5WI-$vzU@b46V9ml6!NZ$iEiav5EdnA~
z<=7Lf`4f0NAm%Z%6v*-?SeJqwJ4u=`frohkr{KZ^pq$Q`U@dnf!CH(xL6$LrjVFRf
zl&gV_Yr#HgK?XKf1_`zbF2)5cEH4;XK+AJwRhVTL>|;*gVN~D%Wx^Ah0y`C084ff+
zvM=j`C<ucs0UFqB2^&BjFOY>Z6h1O6VAlZ!urNb`ting82dp~Gkl^llBF^wn<pz|e
z{}<$3LHz^v3AY3oJ}~khSSrNqAk74dL6E~)3S`+Bthp*=g+*X2xDZwbKZCV}z~2TA
zVQ~dU7LInoj|-R$*%?F^uo#ED7kR+V!qKkqk;#F<n4dvNf`^BrUHGqpEK7w4OGmS?
zFoSF<==emA1M&*(N&*ZPvTE!?4XgqJ3Y<m^3{eaUOchKV46+Odm{?{oDYLUP$TB8G
z@iWM>djI&qF3cb+FTx<psQBZ<0$z><`-FreWMo($+++@DS6~-j!0Vk8&CmScrj+mw
z88(MVW(6x|i(B^WBH;>F%<>`%Rve(|i~t4}1s0YG?TiUb3=ERoGul}uv<p84ZAMlU
z7W3eh5Od)5z9G*bKBJwJfkhW|LZC2<0i*E71SZxQ?F<%99t;dJYz!*=3M$<E48lzE
zq71_PLOKqtEDdr@3QVjWXN80n`1u!jv+^(q2s1D61|7TAZpF;3&LF@zgI^${f=iGi
zLq(ZE0X#US#Kroc-H@Ht{0F}!1FJiOfC3xW1O|o~e+1b%7_>Op7z9`tIt)3u+7IwE
za&R#vFfciYC~|=IrgJbe2rx}x7r59U$Ed)h#Kz7bAj}Qgp~uzWz`)ob=yZjhfm?yy
zXbA^<1?Uz6_JAcH*cIX$*c8~g92krQV}v@`H!R^04rgFsITZ7e>42{hH-pd&c7r8s
zY!(bg3@kzm*qI#|4DA`%8yJi<EJSXwt1RJuz}UpZ@Q>*TH-qpGc9A77dW9GY*bSC^
zWO|@z#Ld7Fz%INbfn8|{_Xl=X1qLDR0Cwjk+@J;n!wD8P1qLDJ3+zfu{xfj6E&0!R
zT!A6^1UJKfPId(b(DaB9`vrFYC4bc!7O*P`iv}?BE?}1zUBJ#NAHINHOI~0BJ12hw
z7lXRF_ybjj16-^RR6&Oe8E}B6ZdnRCcpor`usmQ;=wR$%XI#L_?!ds(!Oqvf&fvhH
z;_}{tgQcK@t%04ZqJyb}jctJnPeljQ2{s9r1u8;J3_^Siec;n(|NpOJKHvdnMmfka
zd|_8$V6<Rk*}=xLfsLUdn4!T+SYQJi%K-*eb^!-Q#seyX3_s<Z7Cd5S@?aBXIN;87
zfPrZNtCPcH1||(5HU>rohyM+NECP}&FM<XCuV7$XAjsr!LA1f)g4utD;|dG{ClnZz
zK<n#--8mTK+Y<zNg{2f&*%vSb{`kPc<gUPC%=$t7fdP{PJIf3P9uEdS2L|DG2L^d_
z&;bC)9T=DoF!4Ju$b(j$GRV6(FsKN-J21$HJ20pSwmUGe7=Sj|Te5ygZ}0&fyzzm7
zg{2{z=>W5)!(#>(_6KUB3@@04*&V!88U8t#aVq#SH86{OTOh|^!2vpAs(_j0!CaOK
zW<kaZX8s3r#Tgec@Fy%15M{d|&hdhQ{{aIp`+-ZM3>K`64}@4QfR4`)WlLaT3gEK;
z&;CF`h>KA{ShWRo!0!)c0oH=W&P?8B&kl&ORB-VyFtIc+vIwy8KVb0XabRURz{qle
zk^cbWUH%59qwy>(>I@7GO#eIi4>0`y|C5P<o9_Sv(+URRzYPpL4YNTzWj-V@i2Yf>
z!L);c-@#m*(ZLL~AP|(V<(L$#6&E}@aM)yvJc|UUAah29)0KCu%pKgqn-)k5uu2p&
zRFpBy_{6BesN5lXAemV~fTe+vX~8C8whvm23-q10$TM(MFetOLdT3d)A7^h6V!k27
zq`~Fj@R*bB1()IlGX+7XE%Gd!4E)LsEE?uY?3^78j0ud42ecGAcqT9?u(Ks_IbASg
zXE$JANsuvSVO6hSU_HPf#JRwXNkLwLjqL%y^93_DwhYitcmoE|xp@Z!MA$4C6gb!{
z7#LRQF*&%395|p5z|g?RV8+3aCBUp;#?I!z2s)&tfx(&K{eON2K9Ly?ObiixOdh;S
z%q#&6!rvY+EMQ?d&M<*d!Hk8af<ftm*$H{4hK9fF2Y6XNaPcTG@iQ>}KfvI?!Oy@X
zF8tSlg=>KTzXJ<DzXRL<GR6c3_5@`QeufSP4K_9fHkKU>JO>1s8eDlCxJ8)~*q9x}
zMOY;mH5#~92r?dEU_2nC#K3-oK_i?YgPZYzC`UpBa|Gx_!w(6ff^Qsz7#1)nec)$E
z2kj?oSn`6ItszEUy&;B4_!|QwON9iF0z>_NMuvY(f9w;u)%Y2h`S}m9d-FFi+~sdz
z`9F{U0K<Bw1|}{G7XAh%amEG#xi1c^ECCEG2?DGSoLL_*uqTKxI$Y#hAi$>}z<+?n
znZcJqu)vyCkf9|{zm|cKp<I}eg&~NEfq|iZp`a2&Y9#1Trh^Ru42}#83@6o;_A&|O
z3UO+hC^K-fFc>;BFznhJ1ll;mExT5Mf#;Ng977HR3nPOX69XfI8Z(Gs0THYqf(=Bl
zg9r`~!3iRGKm;#{5C9Q^AVLU42!jX_5FrX8#6W~Nh>!pgk|06~L`Z`O84w{4A{0P`
z5{OU+5h@@;6+~!*2ptfi3nKJDgdvD90THGk!VyF`fe2?1;ljYk!10GsEeXU)0THPn
zA`L{OgNS+%aRNk~1QBOJ#5oXg9z<LK5f?$kB@l5LL|g$8S3$%z5OEzu+yD_bLBuT(
zaT`S30TFjW#61vkA4EK0U}O;2@nja)<zW!l<6#ij=V1^x;9(G-z{4Ouk%vM23lD>M
z#9U_aJv<By3@j{+4C4EE7{vGUFo+-EVGuva!ytZyhe7-(4}<tI9tMVYa;$F{*?Abm
zPx3H`pW<N<Kh47+eujrZ{45WH_&FX1@$)<k;um-r#1$G@#1(lM#Fcm$#Fcp%#8r40
z#8r71#MO8h#MOBi#5H&r#5H*s#I<-B#9Me6#9Mh7#M^in7`G`fGcqtpnSmVA$-^Mt
z#ls-p&BGwx!^0rn%flev$HO4r4|V=?9tMWr>MV>5pQZEi6;g|e@{1UfOH&eqOOumR
zi;EfZOG^~;(-d-3bMuQT8A|iA^YY8{G#DPHW#*(R<mHzrq~(|9rI<4axJoj7lW;69
zPAw{7NGvK!tW?M>R>(~(C`e6V$jmEC%*jkqNGwV(%}vcKF=P-54QF5zWVjTPnVXtl
zTEdW$T9%od!tjl~C^a#qk|D7mQz0!eGpDpDRUs*{IMtZJ(J#LwNST3Mh(XZB9(3@l
zkY^KvMnJMEgHnm_e1;DUxtYa@IhpBssVNGHDJeyN8Ip@qi}Op18X1_6G4T2_d|@o9
zV93nNEXhpF$*f8&$;_8yWO>i<lRqQBxJ02KKQpf+wTL05D6=fJNTE2Rw4@|6FI^$!
zJHrQ-;F8iLpUkA9#G*=u<ovvn)QS=Z#^0PNsl_El`IV_D3>k?<DdmYpsS3p<iOJcS
z49vQWnZ=d4N%=XC7%GBG3kvd!O7<~yxn<_0`sJ6n?PA>SnUj;6o|qF{l2~HScrqkE
z-#0O@G9Wdzs5pY5J|MLyH?yQfjFBNGEHS4vbru5)D<k(thV=ZRl+3)uO$;eMiKThT
z87xe!YD_Dg6AMa8i&9fu%WRpL^caNPM48yc8B%-;ih~N0#TmG}7?@)jS;ZOR3o=WR
zGiEX|FrQ=K@n8~gyv3yKS!~I~^M^q?xRH@XoPp7sDVZTJF*h}3DI>ovGm~J>D<+;8
z24ly9%rgwOPKm`A7#z|{^OCEXcuz43JDy@<sAN2tUX)o<sgRtJnw(wi%KV8THHD!x
zuP8M+KRqwADmBHQ$z35iKjk$8(^&>SEvCHS%HopL+*0Od*NT$VqP)Z$V@6gdW}(FE
z3@mQUPWc6?MY_xk%#5N19!xAMEUXp`*%^s>DLJVI406R6m}-Jc5{pVo3qCMzEGWuP
zFG|c+NX{><X5yL3Xb_TG5yHf`mT^I8QCebhDnmh0{xcTQq5}+u#U+WA4E&M|3{v@<
z7=`>dGbrVyYcr-XlqY7ED4bwWD9Pkt;(W-&+{@tQmtW$P%lMbUxilrQs3bHmCqFSI
zGcR42X@g^OVQFSjY6?SI>ItT#w4(f6g%V!|mY0mYos1%hCJZdaj4Xx>ZAGbRsYR)I
z$*zn-#k`E{QVi_7SXp}*-F-51GtV*z2PiUTxMUV5Cgn&n9&mMb4$Vu>FDgn+E|F$n
zlVT9`O=HV)%*n}5PCU=Vx|~(fvAC9*-Go6Tb2}@`8zv5BmayQ|qOw#OHkL~a1<4tS
zd3mWhQLGb_i!uvJ@{1UXmoYNNGr3l#mMC0iWmIL}SX_{roSBxHnxc@C$D*u|mchia
zkf9+mwZt>GASczCMKV>J`9@x{OKL$$hHFJ~YHEr!1M_Bve*ZM*{Ji3l#A+4>fq+>o
zOn$7aISfoO%rpG*OMEhuQ}c=g8H7C)*#v?W*o0l>*)}KV=N2TEWG3aLDm1XMFtD=Q
zGdmZhCgvuwy8EUUrROs|3{EZa&vQ&J$t+6^D9RV(FicBL)L~-PW90wAz{q@vVXt#e
zX>mzvQE+Be>U@?Y&%EN2qSD<gEOQu{YuOpfIAoK>7=@g7GMIW6yNIx}7ct3a^0Bco
z_b}}BPA$qy&GF1lOiwLmHgZcXv1HIsO{rjFvJc45bY@}d^vf^G4Nfg7naO<7Gq1Qb
zEiE%SGc~WorG$~!g2C4#zqllXf$275S8-@wVp(EljvO=7cSh#V%wC>(p~dgm0-f{o
z@>0DSd5$tL$TA4zbTJ5oWUwmaB`#xJkf;z45~1Mb8KNM^q?DO6m4!!_h3yB2qe5b_
z!bMKr6Aa8pnB0R45|bw~IC^E4I7c$*rxvAiFmM`hG72;BUSMy?%t;MS&M!z^%*xEc
zRj6B>nUboI7{^thP*Rkco}PM;g<FwPBQ$RhGpj5^zF%2RW?ptB3m0QLb3jObzE2_p
zvx{@6i=zSamds*>M1|s#(j<kP`J7yw>`YG>+k7*Na}!IFGvpW;OgIG{y|@GX@=ILv
z${1u)UNa>7mzMaa1r;-L?PoFaO|00(*k2r!nwXrCnlhV%h1Y|Lp@hXhqbNTwnUQ(2
zOKCw)W^!Ul>T@<<zr@_sD28t5{JgZx^wOd()_UK};^NG_bU6kV)+h#+Gi;nu49>op
z6{(vTqFgIdlS^$Fcz!Z6%w^!6#$e!<nd8gCT)@n~l8J>SlZ(fefhCnu$Rm`4{~rr8
z!x2{d%;Zd2R@Ro#ysZ4pywsFAJc8N5ED8#lAuJ3UOw7kw*s|F;G#S~Fxg3f!5{no(
z;*+vclS}xyI2QUQ7C4orrKJ}6YccTLX69sLl5=C@;(W$o<&>Fc&%rj2iTwmS|5-)`
zhp@z=%-u|k=NJ_VQonI9nlUg+Ff#{m$fVw7VwdJ92q>utOD!s%&A_mfk>MwgV}6=K
z(hUX{W=7^}7FK(P0QaKAf($jL+|YuQ#FErYtb)Ogj7(yT3;`@WQjFYN85w6VJEf*D
z6l-uPDWnB3I4ET1DHt<2C=`|EP2%JiVPdr|&d+(p#QKnh(TbJt83*$$#`V6bxyc2U
zE}2ECvl*EgpELMmCKo$TVpsReU&|)qc9(@Ofs<K)jgf&{KQ%>xfrEQK7mEUezh8cd
zrvWP?Qy;UHZ(_x64v|bpRtJUB;?!e|4e{~Cm3he}8EFju#TuFn;cSet<%z`#DN2kC
zjO<L6tc(jdz0xy_OD?b`Iw$7j1f?$LN-p+GEl(}-V&`aLGR#OUHfMHCN=?mcVPaHd
zV95d%$qB^@sTCQCJsg}%ndEa5nYr1IF){Qq891h;#j(j&E@Ne_W#?PP%9h5=+{4Ji
z!6sBPomp8S^DqO$FXlLfl6-~4gDl+Vm{_MU@GCK}B!(B|=cR{CVPx-QaVe-&Na<us
zR7lG&Qplal#Hz%w$iE;p&)r8Mzer&NlW~MX@-!y>(!3qaVw@ce%ukv06HBC+8HAi$
zxW!zWxw)*FR8os_+4&_{8I_&$y?K?&Qdcpt?qD~_%U9UV?x35TSdh-hqRh|eA!uEa
zn%vF6Cd17X%f#Bj%y^K2;S+;k@kIv4OeW#dKdcoB<@rU~45dCC&I+#1&W`-bsd;&P
z`l%`FS(y1l_*n&=dl)!22rB#MeP@;|)@PH<bl~J|W@OsUtQe5`j#a?9hk>t(hpm>G
zc`6fsBQqnDCj*BnBa;^!gDcyClKgyy+{C;}g`}MPKmi6%R<<dO%o@Bbs_Yk2@>7fR
z)JqgH63bE*{xKFQxEE!nDC8XE31UdhQ^*wJQB%ki=3%s8;qYT*En#50!W>YPT3DKT
zg_-dp6LT2@6FURLA{NbJh5tMvCHon)6mp*l804pwnDYvR&1O)@ESbon;97ixQ6aPV
zG_y)c#zh9U?fi}kiFqjt8N^FMx!I00Fd2%nEMwt0$-p1P$IjrvXjV{^d4@qGrInqv
zoqt14etvdpib83DLQ=T^<9P;#Frlps@$u<7`ALa6@$rH}AqvTfIXQ_eEZrRHsVQL$
zEUhg3VGL{nIXC!OoEccF1O*fh3kYN|a5xktXJke&GtOgINX%1XU~d-?O-y9)EXhbL
zdCkHY&X`b8lwX#aQY*wF$fc~1n8M0i!oX<A5a=5atdK0i%{ZBv@dqngGb6)Z1_m_-
z!QvnM{OLlhAqwRgsd+b<O*4xX-ZINGSg|k^XcTKIWESg}i8>^e7FWu%ikHskZOqBc
zOHC|NNSndMXv)a3nSpT{)78BEJl(XM{KOK4lF9;A#>(Q<5{2@N%tb7MiD~@G3YjsC
z!Ug&KZ0i`A9x^H`luhL1-^R$n6vpIGo?n_1!^rTTd4WQ1Vnt?dX|6)bC3c2WtU`HK
z%uG#8%BjU)Sp-wpGci;#Dx~JkVpPh^3uZJ)%uO|6e3V$MkXfRTl$xHH$KW5F%EZ*h
z!XVGcRmR9?%%tWYY%k0r&cV#hC{P;1qpXnXDk7wy&cGnd;8T*HpHt1n702M1lv+~G
z%ha5aTAZp-Ql1~d7+K8V7~sjl%x1#Ce4Bxxghe4Sr;UOAD=%Xn6WeJ9=534$NvZBk
zZfW^Nx%LbW1x2aF6PN^x&Bggwi?A^KV_@3HsH9(fmX+nDfMBr|KeHi=L2+i4kT?qy
z2ZJuFLTTzh1_gzjdu$By90F<m%x!rJ#zqQBnI&F~>UsH+Y(}XmR-YLd9<#8#=45-p
znV_M`kdj((pRqYFxl$pyC^c~rgK}ve3lq~5Hiis_;>5iCl8n@%-;C_{8JNo1oE1_^
zQ@3&y7p0bE=9d<;vkRqUvN8uSOkqgNFDg$gN>S)zRmjYF%*>F*l$=;nlA2r4$Y7qA
zpJ&3T;1PbFohO->wU(JNj+xDpg)xDN#h;mbK6|iVm``S&kt8c82g?!$1~br*r3gbc
zqe)7Bss(FGQBi7fLH;~W(IRbjmglStLJS7^c?@${n5tM<vYD7<coj?Xw=rcDlqlq-
zmLFna-p7_u%utY6RPvpXVKbv*e%eF^wp(m0sSL`Ac?^tPKH}_Kn3NRC(s>!w7{oK1
zg%~wKXC5=Z;9=2Z;A&xIXyjy=#K_#p*^r`8o>`KikSNZ?HieO)i}@2%az<iio*qML
zMRHDQab{VnE&~s9H6v?^m||w08c$<Vr9z@YN@kj!m{N&?4g-TOyFj8f5Azg8hO?|e
z`N_$pMG?%b%q#|}c_o@mhWVu>{{$8D(@rq3L~<CX=9Z@LFkED3oWjl`#lUibkx7by
zZ9lVRZe~TJ1d}prU{PvuX-)*QL83w~gD685LqKtAL1IxkEAvq%1%=`%i~@NfEX?|1
zOk!MYvWz7unZ*S;iIx3~Li(|MtYxB(xk;IMWefrg%!~}~tWJ6PMY$W9g%p(8`0Uvd
zjg54ZGE1bG+1=Pg62+OBU$Jt#F^Uz<Virnn6!lcd%`EN};Fn`(V`yPF$Wus7mv&Id
zNi1H@WSpE|#LXt0$jitk&CTe-#5zlcYc{81W|0vSb21CpUUucO)NQ=1(|OtD8JJ^P
z7_1qXqIns(8CV%OHst4(6y@hAq$H;1{$Lg@l44-~!Ok4a!f3+4BEzAqkXXeepc^kC
zn{$Pcc>@RYI~L}pOiZ23PPzFdslDt$DWye;IZ>?a1#Ilq42;c8EW!+&XBc>knH+Ny
zvs1Mh7>u}-lPmogg%oD8YANJrGcu-evzIWkn{hGzVN*y>%wp#M#?Hvl#Kbs9(#a*Y
zEa)FIvosIWeQriY9{wYYg3QyH*j;2<KJ)RPWn==~^|X(Ntye@Qbt40V7h^(dk$SO0
zIzJE7Owe$leDO{OMpkc0eg;MsW?^Q=pWN)znFVy_a~h`V7Ke+lOyn{tR?wKu#T3rV
zaE41YRl$@&UNeP3lX(p{NMai|e+mN&Lj|KiI*X8^Lg@=3#s*gAerD!04wgy=#_#Mw
z$vLGdsRyMD(o>7gI17_A6v{I5a}KdH8cG%yC1&Q86e}e02qf=j6w36F6wFj*;K*kH
zjrvGPGu}~Wh*7f*bzl(CkmlB4sO@xMV0azNpur$5Y@v}<GLM1bfUF3EQWv9*2Ezk&
zK}|UZV}=3-Mus$#Jq!#voGA<}DH_r%G#HW=9A#h#VANm`pR2*3#lxh*5d7g71H%pt
z2Jv|s3|if+8VqVHPG~TQ&(~nk;^Nd`2u?V~z_3SyL41J*gH|Vx27{W+84U*Ug&GW6
z90D2)!8gt_FdWff5MQLhpw%v{!Jszhyat2#Vhsi@HgS;diwq10G#JE}XfSBCN@*~t
zDO}cI5MQdnp!HK$gF)@Vl?+DlWf}}xiV7MGY6jOd7{r%rFlc!yX)pvgTxVbi(O?i?
zp~0Y4sG`B3cIAc!gZN4f2CbQD8Vtc2w-^{=G#JEJX)tIV)X-p1Yq_n#Aii3ILF=WK
z21D?JI}8jF8VurVG#Io5bu}2&EbeJAh_BUP&^oTC!JstZzK14*27~xIkT>-;7{tG5
zFo>_$V2}>gU{H#9um>!;L4!ehjRu3#oCh<sK#DhNFff`wVb@>?-tz$BwoMug(y1B@
z!2%B%7(6r>#5Zd&NP|KHWb+mc1}!N=NXUtA)nJg$0bTt3aD_I=sBIby(kC?-)EFLp
zU=ZJ~!JwsNq`|-tq%SO>!63dvgF!k*gF(sQQH};k@lFi}>8%<JY5`9*7{qsJFlcca
zYcM1gykKDXz@)(-zFUJqI!S{;E#b8WgZLf|2I(yt48Z~K7#I{9n8f#LFle!xXfUW1
zyw_k5->1PK9j?KUG~ojSg8+*LgZO?82I&nN3~CEN{y(6>pv7XU!4SOR2LnTb1f%#t
z4F>604F)xVKN<|;hcp<Z*K05Y7yM^na5%vreprJ+i^)ub!E^%yC_Np~V2}>fU@-i^
z$hZV_tGD=34F>7u8Vsg8m>5?ui67Hokp2$xFtY}O_;C#eEiZEo260fBozP&Ao}<Aa
zK0$*){G<kh7K4QbgE%OvPiZhn$Agj#$f2h-7^F98Fo<VpFo>T41%agogZKsw2Jy2R
z4ALnY4B|gD7{t#(edEBY!61Gf6tz|w45l5dj4znQFK94GM`<twuV7_l@X=rpzo@|g
z$`Ig)zofw+{ab^<)Paq$gGKzZ27^|lwFZM)1ltJ)@hch((nq1OcvXWzOVUPzLG1<G
z2L|zL8Vu6@8Vtc4?2O=~b{!f`3G4x24`^lCYA}d5XfTN1)L@YQ1U2K927^|tod$#2
z0rn3J;<q&zq@QRosBv&;Fo@sLV9>I$*I*D2&|nb1tHB^WMT0?Y2FDIY@p~E!(jPz(
z!@<a)qQM}3UxPu>(%}jh+YF8%4n_t8Rt*MW1`P%Q4m~?ThdW%X8VtcKe2fekCs;W^
z>7VhBkztMiqXYxT2`&Z!1}!sCB$Pn%ywYiA9`KNMjlc&677Yf5*<4y%*#a2ErvxyF
z&ktZw@?z&<VD;btd1`(DgO&+b0E76J00!{|0Srnfxp){@3&3&<0vNP5^9C@8UkP9k
zUl;(o_nn7<b&erO-@*U}EhE7I2JtTe4C0Fd7?h3+g6$Ol1L13J6bWEZ69K7M9KfLD
zCd$LW%E2QB<!c#81Tcu31Tcs%31Cn<Dgn`I1L13}mkwYM4+&rpUmC!m<RSx+jDhgA
z?&$?Eh?fK~h_4G^&{72D^BQPA2l>7Ql7ys>YcPoSXfTLx)L_t3G0<R$o+8M|AaH^U
zRJ^u<3a<~4oc$P*zr;Z~+XR%euV^rUb2doxn-dJ;pj`a|T9|+`b&Zh*gW(@RMh13{
z1z^)IXfUXq5rXDoO=D1TDGbfQwHgd+IU*1nq%UbO7}$t18h+yh>(f#&(O?h<WfD*Z
zE(aMZ%D90IYUpWD*(j#LAP&mEDyA9?YHP$#Fn}{}g$9FKjRZ9Fp4DJb^O1z+Txl~%
z;V2Huw*?vuYCKX8*uZ)Apaz3lh*SeO%W8>&a%m1E%StC}Fo=V~43uN{K^+9ju}YvE
zyG4UR9F${00Su}kKpFO|27~w$Xol4RWmr%-0?M$}8VqV8($E}xL4!eD2by8ktTY(Z
zT%<c#!1)yvNuVkKlvhE;Dkz^{(qPb%0OigSX$x>(m9E!d5U+ve)aM!u;!`vj#6dY#
z+Xm#t3P?r;xgC^hL7DU`$Vnd{d2}HtkKTdgQ7t|@4F>Ty8VusMG#I2OX)uWYSpd$W
zTFmw!2g^Y6s5Gc_2RRs&MYn<6E8_spqFP)Ipdgkx0nVV(su~PQF*1w{4?ubQfd+$O
zB1?jhP=UN?C<B9yDr15biv|}1BZJlhc2KHN(_mm>0Q2LyH5k-lG&C4kZh+>HwC?d~
zFsQxJ)L>xQ0OrREfnrr#gMp<3%)cWFiauQp29^XcKUxx$uJkk*SS-N&TQV99YB~lQ
z3@id*KCe8e1~X)2XwhKckPy`}Rn%Zmb1;T*VwE)*)Q*@yIIXH03~C-`5YAe4kTcC8
zoU59k`p6Q(`Kt{|fmRTXsvfB1v;lL3jbtQPWE>11*fJJH2{B7B7_osSuvDr+N6HHb
zFa#$!GJ={1F2alqTpA2ozgR%Uy{iU;xR3^eRwW0hg#fA|1T`46et<${0jT5_&|uIi
z=La<|0vH(%2ndVwYcObi6VhM^RtRNeIAFo&!pF$Kqrsq6Dh4tjN`pb1H-JIwizKM|
z1KJADrorIC!^ps^!Jt(vo52{Ikj}`^ARz3*%?K(0wPwqMw1FxbE)53l!-@e6s#%N{
z65^a13|g;2!J`1m5TJrpSWSb$@Ifx4B|n1(g9|$&1BV8KwzY-^gL6J31E}C<lVH?J
z*3w{5N+>F209ECz8VuUqIvNaOr439jEQ}1?8Vp*SK_T{_LW0qypOHaGgF*Tms4}n8
zU=W|E!Juua|A0}fdVz@e<PQv5Q}hEEf)#2R85%yYDo$l=-OR|yApKZ_A$UP8I3U%g
zF?uj-xf_6Ntczp@**HUkL1u*pgIN6u2AA2444}YcHUxPP<i5F(D$FpUiP6W6ae@GQ
z1%vcjP;;Q^1B1%~Mg~?;GtWqaAxWW`k->pogTW<^kwHX*LE2t}At|AYk)c6agTZAX
zBZGnlgY;aGsY^lSr3Qn{n*fHOgNzIglF;U!7pSmXa7%*$)ZCMv32LEzW@Ko1!R)e}
zkwIL8LHZ-e(?2!9?LBQPlK_UGf1m~bpeA1hgY*my22%wkP-|zE27~l-knOHa3=Oi-
zCZ8*))O(Nw%I}bBQz@Zgq8lhu)-p0kfSjYjAl43P?`fNwX)rkVF)=tCV0Ky0$RMb}
zAU#2Y!F0hyCIx2kjULQ0cLEp`Cou^!FiHrpuVB(PG1p)an;gI(zBPbB8dOXxfJzup
zS^p5^<0%#37Mr%Kg$9Gz)Btb`O?nn65T`+l_Lm^9P1j%mH^u@iL1}yjwCy!ngF*a(
z2Bfh52y(<srWefOhhH#jIfI%m3bU9b*u;;XV3q0DU=RaU0LL^KWFBfTsLo^RU=crF
z!JuUZDhm_lonR0@ae_g58OZSYkfK<N3)ED3Fu#I9{7eOdv>hl27l6z=*T5tVsu>a%
zIxxCiU}OL#Y%@?f2y)4#3^wVTAO|nfU=Y7j!Jw^e7r-F42-M#Bz#x4B<gdk$2AY;K
zs8mc?0x3MDOF>pIbzl^~Wx*+PGk`&CX#j)x?F>et84SEe1)#a|QiWwq3}-bM7#Ua=
za49ZelJI8LU?}}?j){STgF%5;gyV;&JevjsJE-%aKaUf{TA;z8FUt#JE!1GppCbTb
zEz)4nmlgrB7Hcr*&k_f*mS`~OOG;}nurny|HgGT?1JLoh4h#$o4M!lNbx;~KQ||^5
z0+SA)lP19|2*JV40%k0#clB{&WMni3X-H#a*vC-Dz{v1b@WMT21~*1G1``I5MhymO
zMn(n(z2c1GlA@BtBnCYW2KCBZ4u%i0@x>W=DHRNQd1ZQ;d1?6!dZ4*Yz4$0UQ{#9~
zzYy0TKS!T<gESM%6r-fncq5~D(A02z3TU!6HNL1cuOu@!H9omC-Xh5`(KN-_+|V*P
zub`+Tq$n}3I47|r)fF_K>}qK2>=%&A%@7!$npc{e&#)CTTBrw_jjd<kuVnDIFG|gM
z%n-tq#_&EquPnZ}B(WqjIo`x1KAl1GaeRD~p;<0?bUfZTMUx@LGs`E_(3OQ@k84?g
zcSb-)NPMs{GlOszBLf2;L%3mluu*&pBmWeJ>U_`yL2Al0hAK8yCjO}m)$)m<OilBX
z!E;-AB?dDYs`#}S{p1bmnHxYv6NqR85nxs;h*c?X@Q<wlL^SbDW8kl6E&#JZL@VD+
zr~nTA{Qua>lnh*_GVuRnQ{kV&;LiV#tqx*}H2+kFTCj8Y>Y4dxGC1+qGuMLb!|D+J
ze{5AC8_9P^s#S4n$wUSfP`DMkmIY*FWQ7znurM<Sfr5>fLC&CrnZJ`Ei!YOzzndYA
z&zOn7k0Fg;gUL_cK!d3iM3jSwDiDz;ZxFyz3L?ruL=|5j1HT4SDo6@RC4T@*wvvHs
z7XyC)izI(1gFAl!OEF(Jh%3V1$KcJc!Bm8)B_CuWF=mT1WHC&0c6U!L2};b%-p0r+
z&cHTHh))u9>pByc2!lUpCNYMAfk~W!FNT2)BF-+t@P{F|GA|i4ua#Mq3L0KdVc?Z#
z;K^a&S7c!1S76}cmtkP$uVCQdFJa)~FJR!5X86PK&NHv1C^N4(GuZ<)9qrG^uf)K>
zQ^mlq!ob3>%)rYk&rk@Nly}KvstPlTFDNOlY6ls~#MQ>Yugt*8uf)K^FUP>d-^9Sf
z-@w4fU&p}9U&Fx3U(UeJU&O%4pUc3(p26^o**&!+Ah9ShH?<_S2r`?M#{fDGpQ{8s
zW5Tb<z|AVlAQV)@vdTTR1T;;RnV(nBz%S3hz*Psbks0I(<}GXtatt@(i*t<(;!`rq
z;!Dj;JlObU85mfD83cWKS&NNb96{4VI~X~(fX(Ne0@BPPpQyyZ%`eNq%wNsG!C%I}
z$zRC8#hb$*Z}f(Nhf9Hhzl;IQ<^u_EGRrccspEgez|A4Yz+c3`!2gVam;VU^2Xh|-
ze=!3Ke;xxne<lM5R|-RXazUlB%RL4TUIhl8A_iVZ2Hr;uyh;o-wU<4G;TMxzX<o8>
zYKdb>Nl|7}X-R5v79`}tK%NJO9IFh&Dc3U4{4ivFM>zwR6a!Zg1FsANzcd3YmpDUm
zP-=31QA#o+Zw>>e90S)vP_kj-muKMQmu6t(FJ@rl&tu@=&tzcdNnv;mng=gQ4bLpe
zaLY+dKMYDa%zR~_l*0r~ISYeJKy&5ciJ2vu49wh&937yTX6EVuDPjXD;+JP&<!@%-
z;;&=i;jd)i<}G1htzhCSV&FT)#4pRh!Y{+X#x23X+rh|J!odHDk%`}ffsen1fr0-E
zBfGPEYKhBhE{+BUc5wzSOKx@p22L|>b_oVnV{Rrv1`aD0u2gUe;K~Ep%K}Pad{Y?W
zo%2icN**$>Fv~D-RWR_&F@U0nokNm=k<Zr7FEQ7jkzI;`^AH1<DFd%KgFx^PUioxC
z24)r+2EG6Wc1s3UNrp)Qsj1nHB|eG83JhGq47{?SqgMFk85sHH7&!RmGYSU373}s+
z%>_>-Utr)@V_*km7Yzn3esu;xK4pe@=fvcU)F}*HoJtIQ6Bzj182EY^c$FDg<r%Eq
zic+<hn1mR(G8mZD7&y(Cn1mVFBshE$b8_+%IhaKlxO^Dc#TfWR8CV4wzDxNhCzlo^
z<|SA9CRRY!AvopaCubK2q!#&>=9FX>6y<|fJmnV!vvAZf@H;Rla;;$CcVbZCcVy7!
zw`Gv$|IVPo|BgY8|0#p2Ji}xr1`D6e+*&7o83snKW$^G}w-sQLW?*+0{=@2$T2Pdl
z3|eZG=UA4XnUa{7oEj>?Z^|ITwuph>oI#e~j6s3>Ed!^d2%kG6r#u6n7bBk{C@Q%4
zyM<Y}Dj9fW7`V#dM)OY-;@~L*#St@C4Logd$TP4fvvD^tuuCy;MKME@X=_SqQfYd8
zTG1kQo~5n~A`CpL3{r_g3=G~9jfpuq>7WU0K8E=PMfoN9C6xuKJ#Gs8i(Nzb(-?fY
z-5D7|8H9>T7-K^clX6l88G>B%N{T9@IN5a=@|^Pud=m?V7})g~{&U60JNpF$g~W%s
z1_gWi`^Ec(`Z~D=#m6&Tk<?^3E7_k7UYcQS<jG*7Z)W1jpvACCn{N^WzbAuMp_vJT
zN^waMD}$1XAv=SR5j%sBF*^g3B7>5ODLaFZ89RfJIXi=p1v`U~B|C$%p#cX2vj>B)
zp(lf|p%;U&p*MrDp$~(wp)Z55p&x^=p+AGLVE}`$Q2>L8(F_J=2ouD`ij4ypgo(i>
z0Sv;#VAB8wVPddZ0D~|RX8yydtb)Xc%b5o-2or-X0vLpe!Il9G!UV9W<pm}Y15O4J
zLrw+}BTfbpV@?JU6HW#ZQ%(jEGfoB(b4~^k3r+@>C<ZodW|k-hR$XRRJ!V#YW>y1c
zRzqf1BW6}(W)>4>5kpgE5koU(5kqrk5km`R5kpI65ko6x5kqTc5knhh5kp&M5kos>
z5kq@s5km)N5kp625kn_t5kqHY5knVd5kpsI5kog-5kq%o5kn7V5kpUA5koI#5kqfg
z5kntl5kp^Q5ko&_5kr4w5yJpx5yL=c5yK#65yN0+5yKE>5yMbs5yLQM5yNn15yJ>(
z5yMDk5yL2E5yNO^5yKc}5yMz!5yLoU5yN<95yJ##5yM1g5yK>A5yNC=5yKQ_5yMnw
z5yLcQ5yNz55yK2-5yMPo5yLEI5yNa|5yKp25yM<&5yL!Y5yO0D5yJvz5yL`e5yK*8
z5yN6;5yKK@5yMhu5yLWO5yNt35yJ{*5yMJm5yL8G5yNU`5yKj05yM($5yLuW5yN_B
z5yJ*%5yM7i5yK{C5yNI?RYOY_HX>s|)G(fnC5nNig;~T1I~FzC!N$6ijcpf59qS%8
z*1c@3``B3bv#}mvV?D@*M<*^5af#a-nOMx?(B>BAvUe;h3Scm0GUH+hWME#!AZ}T~
z$Is2}!yluP%g>^o%iqA@%C|<7zkwm1pMf!z=??=R10#O}Lli#)V~)Hb17i+915*V5
za!X_WZU%38!)}IRc|$SAau89>B*e%k#>n5zkjf7gD(BZ>lIOn``TxIYyh?n0d{i)l
zm65BV;d6!^@hOQViShA9re>BsO#F(>)$)mZn40)14ftm=6ez?Ov`O;4W#%tt&E<c~
z93*e>mbnQ;*n<dddlOTGx6C0RHdwTke<p)8|1)ME{wJIY{Lh&E<P9#fH-QLy5TS2x
zY-I6_IRL~4i-P+G&p@4pXP~~tGmzQOnC<z`u<I~rN%B8q4wg573byi}VTX1T&agwe
z31`^B-Gnpj;{3r3R=m%c?F`HfpE2`KVg#9>!VmJsGiGqN;TfpgfNqDjy`hEW41Qm}
zKMefOm@7e6fo!RgH#o!I03w<|gguDR^EWg%HhIPzz&DAJ{~2>3NDPnTHB60_jrrA>
zy!eq^uf$)klFN4+)Pcz0yD&655Pb}S{KsRs7)2OZIwBM*iyK@Q#yh(Q$ET;3#1|Pb
zaA>=+yECvIfp#bu`9H?6vxqS8w=u8?78@||wlOfdGw`)R`xT7*%&}68G7S9F7#Nrw
zLbxU|@CGyR%mTG3L2W}$UNHv#WelwRT?`!jZ46xeO$?m!3|6rMphi3Y5k@wVOmzn3
z_zZUjt}P7wnGB3PyFt}EsAs{$Ul%LQBFEs7oL3Nh-@__7uRxuF>mUPvA_EiG0Z7lH
zgMo*CU#tYP5d+sM2L2Tc?EK3Z`1qGF@bWKWVCI|4zz<T;%)rTC$G{=a@F|uL)D5st
z&MPoxVC0w$YHu)dEd(_ySU_z{ex*1Lei;T9j;Rd%^Wq%%tK-=Dr5Kplp0e}FGB8I)
zvfYT~I~vI+%fN8YTdAZ%ja|_|?+Gi@JVwq^X8tQa%pB5;{4orSoWDW72X`m9c*Pm`
z&oQv__cCzscQ9~*TC%bXwsCxcjC`^T92pUO3Jm<Bj7;)IqKteXf|*&IfqxRJ25E+p
zIDTP9W`03NaQ~v6fq|cwk(ZyFk%@U1$cv2p%?xb(bqwtMl?)s#B@ArcaeT}m3%JFY
zK-~;>Mo>3{laWUW)Lcb3UY21?9KR?dGst>yH>VfW&B5!Q*Ce<{o}nzBmrsVlCONM_
zl!0ps1HV5516Knmh?v3s%=Pg+EaD81=;fFJ?s7~9cR3OnSox2{i!onj)XXdBiszlc
zz@f{)t-u7jHH<%pfs_AxJU4$c0}m*2`70UN<r&_@gVGffiv%N+1OwkxP-~oT9w<FA
z@mDbL@{1(Mv7TV$mH?-<5C&#Yl2c(|<F8@h<&$LKThG8hok56y5(5u^F9WwcLuLX$
zs~WR*UV$daELLd-zR3(+vJCt(46OVm34;6z49u+a8Tjg$_<|Yu>Y4ae8Myds82C7@
z$Fr|uU=v|rI>XJP$iOih-1+Ed-~#u<896PYStD858$ewO23S&@1WAgs5lQiP0uP5I
z1BV_Xvo-?<BQuW-1D^#Ww;V_p8^2Sc0FyWacRi@#%lU(W)0BbVKaq<^l7TOgflY>i
zQ#gU!l7Zhbk(*bFfg>H<`S4(bc0SnotrBH<lo^;lGxAz8aBN`Uk7r=#+R4BV>UwlD
z2=Z4Z^7G3xFfkow;5205+t0wG#J~s6l%P%<5C4@!21b4c!88#Djy6#5gR6{zRfK_C
zn1TOJA``P9gK(|{14j%4iw*-<9H<k*E6TvY&A^|P7|dqNz`a-$<mE~R36A#+{5u&G
zxuhAP9Stpha|S8?EJj8CL`DVv2u2lte?~QaH%3)?hE+*ypf&7F{4C6>3>^E}cpMqH
zj>7r|Z2Ix>bxE@PMhudf$$16NB^5@JT<oI!l?)<m4<LPwEes0$S`3W5OBngDFo1fi
zEPV5z-3?B@+Y<5&UnE$$dca+dPPnnm<{bQT$(;O|V*LC{49r|pLFow8CFNn3WMKO(
z#%aL7zn_DJONxQFlY!lgf%7dhr!>Pu<;={?90ujgoJ<DgoJ@WOMplNTBtxSlLnB^>
z1P0~IBttV{PyjMAGH5U;vommTGbl4CvoWYLD7!QGGbop3Dy8`IGBPL`F)%VLYhYnu
zU}8AWFo}VYA%mIWJi`wL0fvb}jMa<`3?&Q<Osl8!DhM$iVPs%15nu@CWny3m5nu=p
zV`5+s5nz}+pNWCtAsYh&j{w8uB}@zqH`o{$I0YC4RvR!lb22c92{26F#Kgd0!Op-S
zD8MjzCldohATI-hlmNrz156AIZ`l|a_yiaxA7^4<uoPrqkQHE<e2$5ML5PEaK~#WY
z@>M1VhD;s?21x;i@H<Ql3^oc3;g6XZ7-SO|CckE4U~rLVU@#M4Nc+shz_3^B0>k9r
zObiTtpc^Fx7{ZyE85n967}B_z85rJh7chhiGcz#ERbU90W@cbuoxm_znVEs%x)1|{
zoB+dQZDs}rH4z2|c>#vW#>@;1v3v{+(gF;Vt(h4ZPIEFahzl^JIWsdb2yh87q<J$l
zFihYGV4NJx%)nqSz`!6Qzz`nI%)p?|z$lP>0JJqWJe!$;K`Vh_axpUl!yax11_=R%
zv}$GshVwiIjN#493=E4lFih@dW?=A?U|>)ZU=Wzxz#t|mz>qeZnSo(9?*)eN#mo#0
zvI>mhtC<-X);lnSZ)Rp-aAIIg+s(|t5YB&rA^b2i1H*9vhVawO3=FduFoa)bW?%>?
zV4QrLnSnuCmVrS}fI;A~0RuY&<K)-O3=Dt87#I{mfyK<gkSnafko23Gfq_rXgPD<m
z$(@CP;eP|eWYE~Rs|o{yqX0v=Fbe~Np##HYX%+^CR%HeT2LXm~Wfleoo(Bx!+AIv9
zUSPN}3j@Qc2TbACEDQ``4NT$AEDQ{R7Z}sLSr{0e3l=a$1hX(ONHZ`svoJ7BP-0-P
z6<|n9W?^7R5dXk1Ih%!nVWT`a1S5)B7#OZFFnO>rFua6N4<NdV<QN!?1sK97vw+rR
zGESb&!oYAuhJis_fFXP_3j@Q>2FCE!EDQ{J3Jl?!Sr{0C4=|+dW?^8sBiq0@`7jFu
z!y!oq24w+;w9_mM4D0y}7{V{JFfe>gU<kj>!oV;yfg$`c3j;%c0b}@U76t}q1%~j?
zEDQ{H7cfo!&BDO2RE~kc6qJ@&85qJAFiz%XWngGkXJAMXV2BWAWnl1UU~*?=V0fv(
z5TVQpihm{s0S0Gv28K9LI$~vDm?6c$pd!E^V4c9=tj53)Aixmr%*w#f+`yRT&C0;g
z!nJ{Maxg0c!+drI1|b0kfoK5+b_2%nWL5@-M<19YvRN4z92r<Zc2q22m|V@uz@Q_|
zz@RR`kkHJ^z;H@hZX=TbLwGkU1H+aEhVaR(3=BOEOlh-O85s781~7&%W@TVl4GJMv
z1_t&E4B?wu85kxcFbeERU|?Us5Pp=Efg#0!A^aRG1A}b>L-=)828P2An8F{hGBA8j
zU<rT8%E0h5fMN0{Rt5$Qb_NCk0fzA3tPBjH39R8PYzz!K7Z}2M*%%mN6__TAu`w{@
zDKaov3NVDrvoSC<HL!$hurV-fbzq)s$i~2Mgq;C&$9Iwy8w0~Db{BTW2aN7)3=G)|
z*wTF17#JQ22r!0+vN13`c3@14V`E_G78YO(PiJFbFn3@GFJNO};0Ry}uViCjU{+w5
z+{DJf@Lq<2K?me{HU@_L2IjOWYzz!s$_^~ybJ-Xe4mL1`FJoh1sB&NlU(d$C@b3ac
z_zpG(hNA}<!Vj`BFxWaUhM!_%V7Rz|G5j(c1H)Pdrtmv#3=GQ?7{i~kF)+v|FoeHj
zV_=AUz?Al#je$W<bOA#+13Lr5Sq9c{PId-{zXnX<LhK9-at2J{((DWjPXrhytFSXL
zc*-&`7z!|i>#{R2s4Fmqo3S%6>}g<kuxDprNMR7>7hnkYU}s>^X<!TwWM^P-bzlsS
zVrO8eoxl*D%+A12V!$Afvw(p;fJvY<hCxhz0!w%uI|IWi2Bz?Kb_Rx+4NTz^*cliu
zEno<r$<Dy=VgsYVq7Mx02bjZGvokQ*Jzxmm!p^|Z8^992mz{wjdjn_qF?I%qISvey
z&$BZyNXalTXbLcd-(Y88aGbyz{*WCULJWVH#3Lp!hks^gVEClKF!>KV1H(fp1_o6D
zhHzF628Kln4B>nn3=HZHOyS}j3=IDh7{e7f7#Nfr7{WC<7#JEKFoqj(FfcrKU<<eA
zU|?|gz#i_x!N5>lz#Q(&!N8E#z#bmP!N4Hlz#<TDz`(wMDLjLNf#F31qd*~~w5;M_
zVA%73VRADE14D=s1A~nKLwFAd1B1N*!{n(P3=E(P=&b}8!sl@?Fibwc5Wbv)fuVW<
zL-+;`1_tW`4B<OD7#M;tu!bMvU|?unz!`p;gMs1t0v3TQ0gUVinA7fZFfhm~I534j
z<6vOeXuuHuo`Zp5Ndr^(4-N)~wg-&ijGPP%9}5`5xi}dZY7Q_@7UpDNV3THGP!nJX
zm*He!_~*bFuFA>4;F7=)uE)v1uuOp=+?<nvp+tcp+<}vU;m-o5a8FJKhHDKB;X#}X
z46F)FpsXyWvVk)^g_D6HU;=YmE++$nnc@V_@G?#YhHeGM$@QEJ3{k2K44wiE;T@a|
z409P6Cr{*LV0fd-z~Cdm5I&2OfnmV}hP1_;3=C3A4;aJOa56B&FJK7Y%E`bWn7|;g
zZvz861M}qLoD2+C)fgCp1Q^0Ea56BgSilf|laqm=>H-S`4~KZR14H<0P6me63Jl?2
zI2jm3FK`R|oxsRGfh(Mii-F;E15-FZ7X!o54_x6ATnr3zAFzZgaxpO63g8Ua;$mQU
zaeyV<n2UkosQ^>B4HpB$T?dA6S1tyIV+{=9eq0O;Cmk3jhjTG7Sg0{D_zEzDCvbtX
zBcnj30fVy&1A~VELwFGv14AzZV|X<e1H<A3Mur$p@u&|h;k{f84CWJ9!>4gEFvKok
zm^`10fx%aUfuTWwA$$cF1B1u}rpX(*7#Q4@85ryY7{YgPF)+w4V4i%Ki-Dm{g@M6Y
zfFb-07XyQ514H;#E(V6*0{r3kxEL669x#PJ=VD-}F<@Bqfs29R4+8_k9aaH`$qw8M
z3{w~w7%~(X!Y6VwFr0B<Fk%L6)n+gd2o<=`(99z%;K;xvaL<N=O@P7pE<>{bXfdS#
zL(m-tW<CZ+21Wq}%iADP!CP;5*aR3XZ-O{MHyD^f+q?xh1Q?93GxUKpu?jE*U1N|0
zZTtpZ?`(3FVTk|(qXI+t6$X7Fh64<iml<{mFoa)Xa1~|{V6eQ%a6y0}^a8_C(AMyB
zW`+w4uS6LH7#xKe8^mTa9B1I*U|`^N5M~sTU{GLa-p{aFf`K7{aRaw!<9>!s3Jl>F
z8Lmq*2rzhvFy=}HFocUR{s&#-DSaS-A^ZTt3>gLmkX3tSK}tj!gXIDk!bKUM$}=c1
zNFNMf2tUYBrvOrNnPIUaNQoGurBVPxxESMUWss6X0Sw`X7*bR~O0F<;s)Ce=Gs>$4
zFocUUZd3;;IUK+cewe{a1El0CL%t?Ri3B67Rsch|1mkpVkdh+-4B<x@40J$Bt}%q_
zf|N)yzSa$32$y86)dwj#8o&^KltIh@q~tn-wIN7}6yrt10ETcW#$;oVl4Ai3md6<W
zC@_TIV3=mgAiyAc+<-yQ#egCFID?8ANaIb0edY`T4ALhI7{X65_*j6%ZZSNw1c{wA
zU<g0SP+|oVyUoC70}?xBz+icbVU7Yr_#Fl_JCMj}0|v{}3`Z0g!tXM~Ie<jY7%*6#
zVR)m!5PpxL%?TuO)_@`WEQ5$M$fWxW>s&x$=Rh?ngO@9V0)yoPP=tm*WQcQP5MT&@
z#K7VXisr`*odOKuPZ$C{K%!3>cs)U)&lpw-FoZv6(DVZFUNBr0VDNa!5a@kDH2f7q
zsyE2ER}7m47+ha7T=2fnBEWF|fO(@2$mTZ;EWRK;ZyBZuFoeHj5cdP|-ZRV>U<m)f
zAmtC@ePmc8z!3h4K|cV*`^<1qfFb+~gHs@g_m$z407LjU2A3cZ?>oa&0fz7&3`M~p
z*ZpMR3;~J$VrT=^`V3~FAl@Ian!gO$VIVdC7?{FAqW{5mFfi&wfOw3IR|OctnHV!7
zK|E$gP#cwnQ8x<2V`bbY0NO0q8V%CV&ZrRs66Ih7<#|p<zF3eb7h^>nh~{RT6%V3$
z7@ZP8G%urFB1knK<5>ZQaDK+HBoI%4@x1^;xFF-9WRMyb2DTKCs3)j<;^xJ`!MK1a
zNmfCKQIgSzmqma<$%N5?6-2u+#z=tZBt{+v76ArT8`oHdbOs@Y2Mlosm>IY^Bo8St
zSU+TVqQIc$;dX%|ONikSLzSBXgW4yz4ICLl438NK+yxlSpD?Uo03EieVd+u8;PsRt
z-$Q{xx?X@m_`3juV1ogJ*E0r9PXz{znVt#^uFn~Syv`m0+46$H%>blLct1#)0)xp*
zhB*o>0-6F0p|2U9cr!3EFc>gMe-U8N$oDZ|Fn+`E7F4LH2{3rPWoYpgU@(5iz@)&U
z(7-LgVELY*Ux2~*0|PTiz(jz-<Ril@0~SUB2IEf*5+E^M0S3#@4C@6LOujJaDzFIf
z2{2fG1r<NW-x%~1SOgok2$+9oNHAbwxWJ%sC1?Vp^$$=E(})dLVDS3M&>O74Ao){)
z!Q&T0ZioPb`EQ1$1t7O;$c8E~c>Q4r4OL)}yr{t7@s}YoOn|}sA4Bs5ki6sz1qQGG
z3`*e&3>x#o6&S1;7!N2gXoyBAFnBRCdPXQPXdH^Tz+}zD_)dXABRsN!$&#6IivWWM
z3!`Mz1SStw#)VM@454g{52HZg5x}646Rp7D#m=}ST7f}BKIQ<E7YCzxi~@s3Y0L&@
zYfi?A3Je<8V=gdwaWQ(wDllkx#VIg&aWk%oQ((|&k5^#u;$hqzufU)omT-W<i<hw^
zL4iR-BT<3Dl8<qh0D}iVqivD_qlW<Fy`%yL1wqFDTpu_=N8d6tu+&UxXwcwkY-rG6
z;P~Izpuxe-AiyEYpujOzl!4KOkA;zeL4iYnMU<7vkU@YYgH>F?hk=2EL5AO#L5Sgn
z04pN{iwlDqi-;$K;0-ATejkPsc^MyuY7tf+1~C;M2KgU83@Re*J`7@Od>Hf@7=0L&
zL>p!>h#B}WfYd4LGjRAYFvzd*VNj805@BM{_hIm1r~pY-i8lB!h$;9m$j8iJP!VDF
zVGs-PVUSPoVbEn4VUn+zz^u#e!yvdtib0=2gNIc@zlC7|18Aq8paM680INEK5EC~8
zgE@l`GdDxf<c0<f7H)>1NevAetlSI<6B`;d*jU=Rl2|7+G-$AMGYB;0F$l1D3Jb6~
zF$l11=MrEGXHaF4*v-Jdh2flh!~!NpMneXB0Tzxe4D5nUTNp%3Iv7MbIvC_RIvDij
z89Eqb<t;iGg5_B{7<lD<IvC9L3mANuSmh-;7&yfy`Y?%2@L>{c@?m0I$0*7(k3mde
z9s~aZ26f4X1q}8EEHWC5++sYd8N|3&GuU&p^ekZLk?&Z*V5#oIz{nuMxPZZggN0=Q
zgBari22&;$fqDi}mU;$OQwIJgOltZKj5*9Q@+ME1%=Kj$K5((?3o!aHNUMWRB$3ec
zVGyjaVpL<Ddzd+BPD6u+AU8wM?1lynA#R4CSq%*u!rTl&GaDK-M7SA(W;8Tth;lOo
zPH$+?5PQRr#yYK`K|_26qY$SUgV+=!CWb4lVp3OF#iWCoOk`L%f|*QYS$HBC{p460
zIPWvcc|<Vs^DrKlXW?P=(`ZoRVH7LiVHD%zVHD%%VPxiI7MrESC^%DzQG|nsQB0VJ
zQA~t~QB0JFk(rTEaEd((D-WZX1P`N_Bo8CA5~J7zB}Ty}B}V-x96XHQ<?rw?nyZ1%
zXVGZj=3x}GU}O|yWMpLKXBC^p&nh^xgMpQiQHYhBL2UYVPQhv0IYoFF8O1ml8O1mm
z8O6958O6968BKUtKq9=1pk!^r#K<Trz{n_P!NSJRz<5mFfPvABlZRQtgn`kegOP=Y
zml@_hF)<!SF>xM7=F?1KGfp#!O+U>fHtjT%*wk+fVpF~`2u}V9cDp<eBeM+;0}rE^
zA`hd#5=#aTFEax_52Kzu0}taO`3N3HCyfSO9!3|?QBXXLVnUEmVE)Mh3K+4O>g-}O
zlo$o4Ljp)bl7~@@g9j2=GCYi8vOJ7pay*PC@+=%YjQ$EN3%EexG6Q5P10N5gi31A@
zH=`I6H=`IcHzV@|Ucp(atRg(zj3#U#3FbTe4BU)j9Ndh|o}9egjI7GcVm#c8V!Ygp
zLVP+5ViOLq3pO2Kmp@|7${=Us!NJeNcuD>M52HE97eS2%b{<CNH7sINc^Ji}@Gy!^
z=3$hd^hHouzku<Jpc#LRfP;Px!ybMv{yzf8`5hR8`5!R;|Nnu10mJ`leid;oc^d~2
z7X}SRDUM<(ejf%i{yU=C{CAlCr|UN`-eHoF*SN!EE}t?(nuFhkiJ4V{k#jPGe9mMB
z1~Hz=4E!>TYWzQ#t@%3`{_%fd?g1GZ!ymwwDVOquiNAwIP;7!aqhM1lgS^9gCI(TS
zNeoR43@rK_40jk$m?*I*^Dr<lGAOYK@-PSss4$4%R$)-Q&8W=4sKOv}J444^pM&9+
z3WMS;h!Cp;14!hi3WMTJh=}-26$bI^Dh!I(q5SJA4B}T+7!<EU`B%3vh+kG=P`nJ~
zUshodzo^2XcoE9KsKOwAUWGyNJd}T4g+ctR3WMTVDF3VqgZOC`2F245KGX##RTvac
zLPW$*sxXM3P+?F!0p*|QVH7{E!k~B@!e`|HyZM+3gW54h6$bHRDh%RBR2bBbfH+5P
zFo+*gVNg5-RSWUo0Tl+t0}v7M11b#S`&1Yd_d)slR2anfs4yt*f%5mLFo^F~VNl%7
z2o5w5TYRSqgW^sof2RtA_;wWr#qCi3b`=KkZ7K|k+o1eyDh%RVR2USuK>1r#7{oWJ
zFeq+<@;9k4h;L9~P}~6F3vXDW#h}6<vYv-QNSTL$MTLQZhe6mug+Y9s3WMT0h$0YM
ze60$D;#vqFq@+QGL41u01M_JOkiXZcFo>^KVNhI+P|%^mAihe4L2(sC2*g%e$+*Uf
zL4`qaB}5Elj)e+?_zD#U#T5`C5L<kC4uj%y2p^=RK!rhknF@pAGKdg}ExuHRL2)UB
z4^mR0!XUm#g+Xx<L<qzdkGsOC7zg1)<7}Y{gW5una~HNSi_ceKP@E5u7N0M|B0f)r
zL2(|04>Hj}g+Y9d3WMSth!BV^K2wE3aVCThO*hk37!;>NM8v0WVGy6D!k{<}%Acmf
zAU;KfL2(L{KShN>e3A--;v@)PWKshoDDh8FVNjd^5fY!E!XUz;VhoK5sH<637}Qun
zu4YwX5NA_iP-6pe*i;xq*k>?8m5Q^gFo<)gFsN~W<Tz9q#5q+M)Hp#LP89}mE)@nf
zE)a)Hg+ZKKg+YxQ#Nk$95ah|xXHsEM;{ow`R2W2f5k~T=Fo^ScFsSi?<oHw=#Q8lK
z)c8Rheia6B0Tl){0T2h2%LP>!)C55sK@|pZAr%HSArMDMg+W|cg+Wai!~roF8B&;-
z#X)5OD-VN^S(lz6i#dzKPeT@dhZrUX8zu%BCWb$Z40jkA_AoNcVPvRbWQbv8uwi77
zVFdNN?=UdzVPKfUz)-_r#A3)2!=Nw6lET0oz{SBJ&bY>MVgLiPWB>z;IFAN{fbcyo
z)enLK43<KmK?6%c1{VR)V4{NngC##`K**Ah!9sw+k{2`)VadZ_Ai!YB4H^Kn<YLee
zV6fx_jk8*EFenHxSh9mg<Sp44Bm@{NSwTGkOBT@Br6n_HqQa7ifkS}7k`dJGXJlkZ
z{2<7{EUi$&$jHMKBqPJ{fPurBK}j(nfQf-&0S7}oGXui`<|&Na@-kBx|2N7jPGS7-
zsl>o|LzrO#qeB4`0|U2Qd;v29!-FY|Jo0K_HQFFG3_DmpF+X5rVA#OKz;J<yfkA<p
zf#C!53SE6hmKluP@&+>)|9b{3U}j)Y&}R70#KOQJz{<doz{<ejz{bFEfNcgNzr5)T
z#{cdH3JeEy%$c9CGwfjzo^XIAe*+8XrZ12gRx=p?`wAp{3A@O`z_5Xpf#Cux1A_wF
zLI$P{s{At;IRtHIFvhzuFiW~*FuoCG6<}awWZ=zU3>09Pz`*c<%g}+5;fw%(03)Nk
zLjdD{TY2XI#{ZH+8*~{MZ*a(O2w-H9cLR%ig2WkCurXM0D=uJkWnenP$sfYVAny~x
z_+LthaSCVr1SSTC2O*3c^8O)=|HTDGRxmNF;TQN|!pOXapFf0=Q9dYy@xL7N5+()(
z5&Z?sA&d<1{45L;88>io`17+cOjcmvk)Nu-pd&v+fq|=@gJBjU1H)_;1_AlGDhzsp
zEE=r*5)6#;vn&`m<qahmSQPmMEEwVzGcqtNIl{oN!|?whQwx*)Mv#WhAY!WugNghO
z5Nj8RwHL(N4<ZhNh{JD~dE}2OFmNgwa!4@fe_&8y&{5=PkzwLr!oVtj>I8#;{FxIB
zJo4vU7zE@mxG?a@Ujn)B3W&JY!XO}j17zsz9tIx$C5$!<?Ba`U7=#%%XfSZ_GqA8T
z1Sm4RVPmLKWZ1$cJdJ~a;ff-|5;ozPHJ~nm5+eg>h?7BhP6V6q90>+6o+rT|48!v$
za0@RKU|=v%7LMa!5MIo|z#_pQyo7^6cs2(Eg9n4~QUmOGnE`_^HoV+`K^Plep}`=G
zj#p|h2&3aw4GhAoG#G?eSuhB%GC<(f1`NX3@EQXK;WZiz!fPxTgu!eO-+)1QEe^a+
zgFzS_uh(D@M#mdW*u*!00)|0&lLnjcCJ6>G-tvQ0c#8xB7;lqc5QgFHENsHtB^bbX
z=M`4roe~USyjy}n7>4&eU=`jY!2rhluCNO4lVAYj11DI84@fY8@u5Ae!iOXnK$u~Q
zrtneFFgAnm2?s{ulOC+XCnXq!PZ}@?pSEEYJ}toj!VFuq7))4&&kHaJpI2aI5YZOC
z!~yEfGk9n-{9qBjEWp4}qs{PwMfj=!gYfkYEaKM%7#IQ=gl|e9@U0t+!nY(C!1(qL
zM&Uab7=-UgfSPG8|Nj5~zd)6xMOB!MgMr0ImBm1nMMRb5hYHIb6_x`kEK5{aI#gJ4
zR9FI3SWHw{Bve@bfR2n5{;R>N6rQZZ%D}-OJc)xrcrphAg9WQnY_bVh2$W78Se25J
zT|iurOj`022BnH*5k>|9u*&RY6IP}6WCK<P0S4ju3Jk&vI2eQ%T7ZfzrJ7_DMx_nO
zE{sZ>lYg)<NH7R5^I#BO&cVRY!J;%FIfDgc>#6_-;nf_VGEixH@(E^8K3Ku5v?#d)
z#1!73!NAbNth6e*fSI9#L3lF<gYXsw2H~w748q$u7=*WTFbMD9U=ZHvz#zPfgF$#V
z2ZQh)4+i1A91Ozy3>bv>b3mf&AP0l+AqxiK!yF94M<f_P@g;nWgF*N>2ZQhl4MyRU
z0t~{ZI2eRab1(>>;b0Ix%fY~)!mP9}S%I0MfkF6!1cUHJ0Y*@i311Fi6u!d2Abiz;
zLHHU6gYfkV2H_hV48k`#7=&*rFbLn?!3d6&1AK<&y^Kr5g1y8T876QrFywIx2k<Z`
zF>o9aQ}&WpU=Wv9U=Wg4U|?_&3HDN8WB^TCC@=^Y@G!6{FbJzEFo>%vFbJtCFfbG_
zCV6QwG6*nnFfb@E2wxCkVB}>0&7FGbGcp8lfM!621;9qv@CSRDFfv?#D4f8<z`)BO
za6pGa(UP%178JA)?Me(BJq${g6CN-ytYHwg;9+3U5Hzxy$f&>|J_&+_Ci5^TSx$Mt
zz#sxq;K6KYHI;FVyP@SY#sgdoIszbVN)JH0oh(EQEvGYvFftf3LIoullo%L4xPy2M
z6Bw1OX1IU~IR+g@L(7?rR|FY+zzT%}Bp8GXOu*(VUtlm`V0gkN%wPaI2u8usY8K-Y
z24SlP21Bdaj6RHpmU9?=6c}<K8U-X67!*{686+5#446Jhs9VkvU}WZDP+Gv0z`$@t
zSj0+!QE@I~2t%;tJVu5E4oV=0fK@9nZ4d%+lp7cg7+4HInuI4LFbE4IFo0-=9=#;X
z`HTz+3^h6+Wem4tjI0(gW-y8`%mArX`oIvtp!7hEgF)DVgF$J7DhGpr0tZ9TVn&7s
zDgq2j2`Uu~N*|Oh7zI9P<TNZ{WKd9KU@$)*Bc!0gpv0hH!LX=7hJnE<j*-DYii1IU
zf~W!mGY5lGfrti!l7WZ-gVF}!1O_DsFd>-0kWe7Nz+lcQ%FLv}pcKGw!Ju@3JAy%}
zfs=zlAVH?=GixFv!v!@42Fpc^3?I}O7!Ig0Fj(*~2pdQ+1P7=wFepfX`T$A`R3#Xa
z4yZCPOi%?22n$Fs2pFWKF@t$Z7gQt|l0K*~FdR?;3xJ|Upx{9^RQiFk1Ovl+VWkTo
znukI8fuaOMuo45q0YwRhASDKd1qu=j0S6Qq7$)>&G4n7eeUO)6ND@$BV0a)8HcqKP
zMuH(}f(!#gf(%4JK}v!l$w7*NK|l&3&>$+okhDOQfuTSYBJe>(f<Z|@w51dj3Bm~y
z48aW|3=9EaNnr&EhF}K~1_n?f0L8g5$algF3=@PQ@?hT!!+fu7ASl5QEXcqhASl5Q
zB*?(<fgj{P0S1N#{1EjH5)8o!{0s~RV6M^uZV85@2iyz{8@M3?1)L!Fb22a_a6$wQ
zs0A<yD{wF<O;F`vP-0L`U{X4uBETT*@PkSC0u(d+U{aa@iuDKb77R)WG834T1VB+<
z0E+S#OiBSF8Vte$0t~_velQ6uKykniCZz}bptJyr>kXi|PT&NkwI56Z8y+wTEoER9
zSnz;}8Pp?}U|?Wi2Bm2R9tNcbP{cAY3lxAQl|FzXl7X4w4>LIYHbB%a0J|QPI6yj~
zY2yGWRvDNDHv9k?s|<?NU_}Oo1)#`PWMF6jDFYb{mR7m|ic$t<fdde304PEkm<1dl
zTn12dGB7KBkObSLlmLoN24;Z(i1Y;!usZ|}oB&xR>;UG0ox{Tb_6P&Bzz49LQUfR|
z8JL9&zy^WRE6B;<>@NI<iBW=q;SCc=6cnEqK+y<t6WH&d)B#cpOB|p$WMCGU0C7S9
zC<Ymr8CDd40!Ar7C4fn3gE9vLBsP^2n3MvP1Q?VqD9&I~N&pk`GnkYL<bE(I8OUic
zC^g7hFeoWVO<+>GAkM*{v_M#aL0Eu;L8(DVgF(qbNPt1<fM5cHQUI9XPhe0=;QPU(
zq`;@apj5zX!Js6-6~Ul%fSrRu=>yXbCWZyfN|wtOurc&7ft|Ae6c-&#0uvg*0R+ya
zIXTd5*q{W;BT5Vm1xk=W0Vi7}aI#fSP&&aRv}_NPzy@&mfkHE&K#_p~5}e8b@)8We
z@(c_H@)8U|@(c_LauN&-5+zCkAex6ksX!K#!etp45@f+<D}geml7ZA4h`SDmgK~s8
z1H%S!h%_jtDQys50+t3@#!$hc^g#$BSs*0A5IjK$bYu*u^brPUM<G~tRN5dY!4Pmk
zkbz;r0akEvAt1pJkRZsw@Bkct$`1Sz49r)+CMyZ>NiZlH@a0M?gNik!1YQY-qy}CF
zh5%lORSaAb3;_yU3=AK@dX+Y?OE4r|U}s=hzz$Jh0E*xVpa^CF6|<lSHc%2^5Z>^E
z37lI&ITn=Z1VE9S0E%1&P~>g^MQ($z0)z4gAq@s0Aq@s$1px-(1wWXC4WQWJ2a^&5
zC|(0V@%n)?f<b8kI|l<O|1;#UDp@XPU=|R7B)SGrw1V;w#E~CB@yEa{@Bk8336N}n
zDBGZ^SII$X3o8Ry5|(-&fJ)i`MFxfoV1t!G(FuxH0Z^`Nv=9QtCMXX<><IwHB?B`k
zpD7i{o&mWjf?eRj4REM00L3ICUlc&{n?M5CV5JA3sAOOkxBzh?$ZZgVK*K4ZoCPU)
zlnjJCYM@SRfatscl0Co$Eg+N?_$3$w`D5iE@%I4~Z6Ke69SCw5$gj|1_W?9(Hh{}~
zr3vg348j|1G{70-0%rgdq{8LkU{F%vNMKTWzz(Wz*=H~*ePElxq!hq1gGp%u^A9Ga
z0%p*8PD~aI!U7#k0tY65#-nC12yB?Z04g>?mUXa!3kguw!6Ct*bbuqK31kbXJP|NB
z$Op}D7uY2j3_q|l{9y%421qaj7qBxhI7l!k6|i5>0+mG!>@DC{f|3J^1Or2Xrjh}O
z=3!7uV3uG|YG8gK2hz&8gI9dT4qi}NKfuYsC~N>KI5;>MgarZ^l`gOgFbD?(Fv>p&
zV3c8SVKlT{$+&}2V1WgwwE=eK2}Y2^lpHu+7?mtn-e44HfXIQu{RJa~0k}b=bO4m#
ze=rJfkYEsg09MJt1j>0L2?30XD;Xu27z02iG6pb;uf)V4w;335Fe+Uz<Y0g}(13$M
zS->EIQAl5aK{-G_f>B5>f>B99CxS5`K%0TVJV#Gh%Ys2j%Ys3vLCu0yNkD~zLHU7<
z2dF)xd_Y=*K}cGFL5V>+fkA14R04z21@Q!i00D6Z2J;wZAu$aG^$VgGI2dNI3iHq4
z7GgWW_?bz;h=IX!6(fU#5d(vO5x60vbifc)@)$BOY%m08Xi$g*I~c<2{s{&W3`rXd
z7#JEr5eunC1Qg1Zg!IA6l@91jFa$r)XJ7zTfuPY)P*txFE;B*Z<^x?&%SVra;eswi
z{ReFc28JsoN*6#h4};PMEl`1?#lWyY3#<TC)+H%uF))141oM>&)Fc=JCa5tmBsB0a
z^Drngs2DH^sf0ip#}{NI7y>@XFfbgr!3|1$pc*fM7ZfcZ%Qr}a%$8<gSRf5H3sl(!
zPmqR{n@S&~Bp3n&q!}0<IB<d@Xo92!gTMk6eue}#5EoPyi#&j^3&cR>w-^IMf*9B+
z<pZJy48fud3>!oZ7=%R~IK@|i%}_qTZ@>`D&%m&O-++NZf{mGjS$F~mgYX9dX5j=5
z2Bi!74NOWC^aU7%1tge-7f68G7tF#263j{qK&O^`&;&JQ)HX0FeNg6LP&y!^08T8*
z3t-XxKq`SjzCeOmhv5yAq2+2u)_R67kS0ij1ViuwLk0#&g|7U-z<?pxkb&WXfdPZF
zAp@vo7hGTf&Rrq}49w!I8JIx<2G*qy(*+8ALj`??ACSsnf}R9J@CH2wh6V`+r44#K
z%nT9?0s<fkq*r-@mH|Vs76U_rmH|VM76ZcrP>d-s3tW%@Nh<}Yfw~aP3^l@_JgWRa
z8PpvR0tYOpQKP^tumIu)Py<MT8I%V>kv0JoR|?DwcUVB$KrLkk1#l4ylDq(F|0pmE
z8~|GZYPKphNUf;@sbrL37GF&mgOX5zb_Nsk1#o#Myx|6uQh}xbgVG0$4NOW6AVL8Y
z{sF22%t{|rK#dL+3kKy23M-g|<Up+oaRmlQOp1X@K`{XaB>}Mn2Big}ux>?xkN~ri
z0I0c=AZWp$^no{mLAc?7pwb3r0cL@O0H(w>j0_Fh3`f{Nu2wprCBdNdK&u2&27+sH
zEqG17KoivP*JNOrkO6M5fSc)>;K&4p#sdurh9m|}28Ih7;6w>Y-x}cbtvo@)Lr7?i
zjgY_x18|@}P?2B|W{?pD*$T=atP)`10}3Gf6->lH;z|K>pu$&9r5Vh70II_NYcQ0+
zqawIK9GrwewjU6aU<i01#=x)v(wG7zk_BRj7E6GF7z4wH86bx%O#ro1*Dwh;NH8dG
z5IrHnaE5{Tjv&|)1|bOsMFk;uO-KzEASl5gQ1Ay-M<^8tzTpNH!XJ1AE<6C`Z>0iI
zWAlulK*9w<P(ljO2DL7=V696{Q0r1t0Ng|nPWZtj3`)obKbVv*fZ|a>#ezX;gTe$R
zB?nMMUI0ZTxQhvj$O2GAeh^Jy5N<%~DSQwF#Xl$(FYrb%C?#-nfO`|5*0|7G24>LU
zq6Mgu1I6J1tq@2Y3P>;r8{}|+J=Xxr5{PaBsCZ%kWp_}sP3ZtA))<&U{SHu8M6>~v
z3N+p@fjkasAV6w;P{&c}feJMGKurKh13}q9<%YQU+8g4a;4lEiUVt1Axc{vLYEvpb
z5YK_Q3RHSCFoQ~WP~0s5m0}<dKw=i9g{1TV6j=<+3|rViegGvZP$MEi0@RxZM;!|^
zMG1o2P7FW55eZ6DAa$VJ%)_8`0NN6P^m>#6KoQ5l%-{iT2q+ow1TZNr00k$wZO@g!
zq~yQ_YTI*yS{j@)n3M%rXD|t|fO-Wipq@E1s1{`EVEW9Yz{9{`xsH*+fro)XfCo~E
zP2dI<P~0skU<WfuFgPf1GcYhfQgHznsI|-m&K0266*!M^f%BMB0GAHGy5+hT;I_jB
zHVFo$1WpTUkSR(GtP%`L3akkbo&u=dF@YCWNI8I-FcWwM3_8F%6?ixpl_r3^0~&5C
z2w+q)-~zRQ1Hi-kkXFZf#vP0d&3a(78$j+|!2JXq`br<TBp4WOFbX_S05u>$g&M;P
zMo_^g+yH84tp5RRpKyVB983%kB*CVD+$$0QZ*{B>U=&Bg%sdPX8!QbiH!!}i5fDfK
zwa=6$fc&+ARR!D#1o=nApaLYJJb}f4fk8%q8PqClVPG_15Mp^^2eL?c0<!^w5VH@s
z$_43QSi+$Efysb@;fu8}lK}%u13xJBEnt*j5Ei%tZjmV&usvW@TENP|#2~|%WVMlz
zVF3#ymntt{767$ilol{?FbIRj%Vgx0EH|ByXAqGGSq4f*tP%=f13_89M}Z;30wkey
zfN=tYk^|!e28KKGN>-bF7}PDdC@6@dVfifz3LL^)4={*t!^HC24lr=ABru3?$Hem6
z6Bsyzc7TlCslX_XhUIrEFmed*I=~>l8xza#h8nvkfk7M%%kN2G;1J%Mz#zU46U*-d
zN$yWz5I=y4<qv=)4<;~(AHu})hd`2tA1I3-d7um`JwVmI3j-+eC{JLJU}C-#pk#Hl
zLCL_JnNeKHj={WJfPwLVlK2S-7GC^-LHr~pmOuG`fkXII0)zNzOe}vI6hdc27!57Y
zG72y-h=3c$3?2-IR_7Qk7z{1XGbS)I$bdT(;8J4>E66><6DpY1Eze(2X5nFAZeS1w
zoffr(QQ7Lk0Y>qQ2rPf`03(C&B?kua%Lpug*@1yU_=*FA_*Dd!zX}q(wt!LmIwqFC
zzJQTK_(lSQ_)SbKe=~tWK>St$13H$!1q#mD4$R`WAy{Zh4x^#v9mWOP3^8DDf~qdz
z1w9ZpLk5HJga*(FTT0A~5gJO&OcD$MO5BVLJsb>*T#Pj#hDw}_IT?mZ9E=eR4od8d
z42!D`mDm`M1Uo3PGBU8H1}m{JG6Xm<2>UoN2zxj%2)j5i2s=112-`R?2wONX2%9*7
z#*H16gc%u*Mj0vzG3N9cDhV?3L@6l={9y=C;%8)t;b2hYW8{c6RN`ffm=~<X!^mLZ
zz#y#Sz#y#Qz#y#Rz#y#Pz#uH+z#uH)z#uH*z@T`At*4zaf-8XeKLf)F4hDyR3=Bs&
z7##jGFzn%AF!;m3FlSl-^KS;wIJv_w28J~p3=TgT7?yA_IQ#%l$vS*zV3@(dVDOEB
zfoFOE^H&CthaJ8!Fm!M*IDBScXy9OQ_{6|a!@=P2k%6IvgTdef14GU90Ot1$3>h2@
z4(}KkQaBhK-ZFq3@9>6!A%cU!;WYzjfZgB~1H+r?0n9HM7+g3QgkH>W4`6=Iz+l0_
z;P8xr!Gwds;VA=y4hMt569$Hu8A{BLA8-XQKVo2z;b3rh$iN`N!65YD4Oam3eFo5y
zZG(FZ3}<FsV7|-1@Q0Owf%y&t!w(Jy!Q07J2@K4)7#QAgFgV;~V0gm8U~q$h!DeOv
z^K}M>8ypM{*BBVCa4<MrWnehN!QgNO5=@sF7!GhS7+hjtSTi$#`62_u77hlX3kI$M
z%;y;xR&X#loPz|?Sq6qV91IR;z=0%mx`R7_`4l9GPBJjGa4-m+n8F>ve4K%yf`h@~
z7&w3&jxsRha4<L=0SA!K;UgXa%!eSsbC7`{goDB100Ss^9QHFXcyKT{>;ngn!(Ijk
z8x97CJ>URR+|6)@JAio?ID8y-GBBucFbM4k;0|Ek&cGnS!QikB96k<P85npt7#y~M
zLr7@z3Z4MwO$-cw&dhb#$iVQ0gF$G64Nm~`dIp9U91ITYz@g)?mVx082ZO^JaOeoF
z=FtgYUIhu8mEg1^w8BCsfO$Cs!wwDxhh^Z9aaamTIZMD{qqvyi19t%PB1q6IWMG)W
z!639?15W_+d`PmH2M!vCxsYTt2OKy;v(NAZFwcSn%}j8j5t{MCEr5ACB*|n$f@T^6
zgAWIT!&Gq42u;b531FTK37ARXBqKDjfiHl00t15v2ZKXDI9we1AW5bd95O;Z4!i-(
z-QaK$>QaeQV(zTay};bT!0>~afq}Ul94roPko3|D4j7>p4bK4PW=OC!K~hU2186$P
zp#hRw>cIiyPzTOb4z=K*QLJH@!W+O`4GEblaB>l<^so(Jt^g+%hjMVhIFvz>ODQ;L
zgi1c71~3;x0;UL@T!ae0@CGm!fD?;DJ~&_;@*v427aTM~IW4jb35)`uaLEFv6`{-v
zd;!cE;FRK!4h|QGG)PiO1&54KN{nv+b221clE6ttC^3UCfH?u2P#oeJ7+5$M4#Y7q
z{9$5XV2%Z6C83xWz5wQENXSHi(~3}JfL#D{1URKQghN6m43btt!673Qa>PD>IT#Wy
zLEy9^6!^!tkU4;XVFeSzk4^@jB>~KSkd)#J4i_PxAAAAK-jGo70;d!q&k1q?%pTx$
z;@}Pr6$dv+N^u2;i;#<lLjbcgBvhQhDMiRpARvI*0h~@8?7_j}U<XMlw%~vfvPlRI
zV77(?ixoJf2wDDd3}ChZrxOQraIiR-fm4cuDL7z+Of>W^FdH*~R^c!(8-de`kfDiQ
z0J8x&r8wwAf<=$PP>ESr!_bgfharbUiCKGwp%Sy!14AWd%>WK1W{m(NC1&*sBPC|F
z14c^BsxOR`m{qoL7&0p}L>MbED=jcKWL9M8;R;|@0H+EEd2lc|$U)MDEI1&9WKM7e
zFiS&%K?<BMge0$U1%R5VpfXk*91MzL3@$DK%%b3MP!wVKz!AVK3=ReZAqIx;21?9=
z4x9`ZrYdPLK3Qa_!pNX7O-Y8aWuAZp2ZJIH!y67IX6^$fhRj?HJ`qaHoG&;oFmo_4
zoKRz6V7$W!%8CbWGcv4EWnf^u#Rw{DKCs?oWXMrrU|_t?$nZp&fr0TVxZ0X@nUUd&
z5(5L{MG@5tjOQ5{b|^A1FrH-u6;>ZuPct%9C@?TEo@8YBBhSFVcmh0c>u{VARCg2{
zV`R7^$H2h2T)>8dA>a@r!yMVbZUaV!KgB@~`@p6j*u%)MN1B0waW^BVcKE=$laZlD
zih+S~J0rs#Nd^YSZH%D8^Apz=Mus_{sr^li3@^kP7#KG&GTaekU|?K7LG}Y1<2pu$
zBO(k8jB6Pgb_g>tFs@-_SaYyjX!Qg&0me6S4gw4ej8hap@$oY-Fs@)^n8F8g6C*<h
zF9QSPGDe0P(9+JOQ$zz87cqj$V}m$Gh6Qt#7#G&4D>2TWpnrjJ9_XB61_s7Cj0_GO
z3=3y6GVEYyU|^ii7^C!&g>f1qXweS?;}k}QFRTm<jFT8MlmZziFfzP363CPxWXQ<M
zD8UxM$i@h&?G)J=6IcxyIT#sO0~k5M_9=2PdaxKWax=bQ4q)T~TcOCyXuxd9$j5kr
zNq|v;i-ChdNPvYqfKiZ<;RrXAkkAS)B}U;4E`~Fc7&N#RF?KLAoKa(7@VLXlt#m|9
zgh6SF+5uT5kJ}Oq!X6R~h7xKF4u(n|w<H*pR;Wra2v-CcD0zTZQgBEx7~W7}P%%*Q
zxGuq<l%XQQu*gD%f#HQR1B1s^&|m{-uzriSK!OB=&}9h*;Rp$aMH<Qs3^$Y*7(6aY
zFeqIB4c{No5^#}V5IQfxAZ#PSu!u*Afnkp#1B1s|2?nJtiV_R~Es6{bG7=0zrzIGK
zMI;y&JyBp_s8L{G@Hi>Kpj4tD!C>g3!0^FP$>W3sgVGOq35Llh<QW*Y$TKi_cqR+4
zkzfd@k!N7YkYHf8O$Ien8B{cq9>_5;cpQ;nP`V)}!63YXM@Gp5v;xIKf?*Md90S7w
zSq27=0}>2MGh`(g3^QaIdgmy4>;oAuBf+3_LPo|=$pf^iB|?J1P(y}+K}E@9w*-UI
z4rvL7fDUPJk5dS=8b(5b!SIC?!yh>%kL?l+N)=L|FrA{I<gpE8wWI_?zzRw5FpCgq
zeGS-lNd^Yc<f6wWknIu@42v>AGj!q%3?3UK7?hrfOE4I25ob6eqvWw3WCmzxW`!67
z!xbG?p>+}rN@qkR7#7VDWnefV!oc9M7BnUg3bP3!3=DgO85lg)fI?MRf?-jMFayH|
zAqEDI)u4zKl3*~b5Mp4Nt>m#vf<bAHpajF>96<)qjyeX9l@g#qOoqt<3=B*785lfP
zNH7TVOE660XJDAY$H3sRT!KMq0w2hkx=B5}3=AI2Bp8%hcqJGXh43;kH1IGmcq|3^
zo=1W~$%Ch1zLLix2?nJcZV83}8*T;$4G9LJI0**uh((M9Ls6BI$3l?jK@(CLTnr2<
z5)4A~B^ZQdBp4RG;bdTF;bdU&m?y!YRKqF3;NZi_!0@_3$zzTLgVG%i2?mEX91ILc
z7Akqngd`{do{EJ*><kPZ(?LFG2c;)=1_l!e2BB#Z48l4R3`&346!?@prbsX-Edh-S
zl(2d5DtSzjU{Lx1>Odc0E#Oh|m;f<Mm?uO+*yF9W@(UIN1_u@fh9wdV%zv#xE6kKi
zSQ@y6J$P+E{dpw~76Wc!4_O;w(8{tq3NgYSx;9EXKvNkLm}hVad)V3t=SVOpxiEWh
z348e3fc-AR#bC2m*dx|P=?aqsgVGwN4V+3IJQ57T9iY()rUXu5k6Ig09$_%yO!~pd
zz~I3LawH=tMKYe?Q1ajhtzwg45U%kNR`LK1PDMz7+D!r?5)7(>jBji}gSt-?>=+)f
zGM}|kI=~>oU^s(;;emj#$6XuY5(x$+9|o6HhCLkoj12#Ag6{#Hpa1{=&lAgV)XL!z
zKLb;sB9mt-<5eG{#$pCWhQ%-B7#LRYF*H;%3otAaU|?9}#}HclpMjA<P{4sf$+a>?
zosmgh;Ss+AgA}6z15<-3ivoiIPZ5Lt@xu%SK_8eI9{Dq<6fsX=XzF8UxW>=m-q|3-
zXuzQOiobzDgrk8$YYCqNL%<V%2BwN<+RO(SgswO+Fl<rdaA1%ZaA4q(W^!PVUf{qW
zF9G6!S^^xhAUOpPm&JjBp#-c{1H@%@U|^VG0FpHTaoHRg7<|C879cLW0|UbzuwDlc
zm&1X9AwwUe*aO7nbYNg`0CNLCTrQ}s5g-n?0|UbyJ&@7_2L@J`8~zMVC!?7an3I_}
zSQwr&2QWlE;%9K@3}8@XsxZo6QeX%_!O!4W>A;Ziil0HHf>~d^kb!}zkDcK{1A_)L
zO9KOF+=e5Ov4NrRgg*m&1q*Wlg9t+agCs)$gJM8su)ZKel6J!@eg^kS28Iug3<m$3
zng2SPNmMd0GVlv92q-aCad<NxV9-6nKY>L=(tv^CLTI1{AA@A&Jx0b2{)!Aq4veY{
z{~Z_w<qH_a0}Pmxd8!!xgSPMnJ<?}Tsc_K{;1pnVIK|H(=&5!2$N&HTCHmMIp765>
zR7fT%JoqobFquK1ij9dOi-AFap_oOWik*oeTYy36(E~=!0>%P{0tSXm28IHM2@J;k
z48H3@YqCr$7&tdDBtGJ2X)I>SXMW7^N{)eH8y`bsGYcDN?XcP-z5oWrgiiuYAu1J|
zoE!?Qi!SgpbQCjig3csiY<c0x(9z8BpGANn>QN(uuVe!QX9Hu}BYp<iY6eDzq*we5
zEtM>r7#LOrBr3@<sFZO#FftY}Fic<!s^Vp0$he}(uz}G~vWi)OL4bKiG=l-7K?OJW
z17?T+5C5|}FgZvTF|i0R3;ch^koZKNN3saCjgghffWbkih>1x&!0G>=K6U{H6J{1>
z0fxd0{0wcy4D1gWgkCwYiTWO3;4Wa4Pbgqy=1gGJU%|(~$j4Q{An#wmz-Y|LkXFE8
z|45&Oft^vLz<@#ckpY8n`T<6vO9z<69Re5x1QZyABLbK>3fLJU)u%1uV-Tof=46Oe
zU{Go+j%Q<>8>sulaRD>W2S&yO2H_|N289#y0t`V64C$aP-3$s0T1*TL4BAXg4Gc02
z4Gbbo4Geq=jC=wt{0uChENv;G#=s)aEWpC0s8Z!xsK~(lfLU5zfkmEQ0VH1wRVL23
zj*0yPGgCbS<JwE&83HUKY61-G0xW`y6nMl~0+<El6<Ca!7~&LICLhsfP^n^KVn`5R
z5W2L1nc<89zXA($n?Hj}8S8(B*bhv}OjYa*4DkmT7#o;XnOPiI9G>tqs5BM{WL;ol
z5nvExQeaVHXL4Y06|7)oPGDguU{ow(J0Q&Bz+$LU!T!$>H1OyuP{F|5z`~!v^8dZO
ze*z1W$OHoh{sa~l4hIndl>^LTu^-qB1*(`Iim-iP)?jA-z?`8{#lpl8Z@{3<!ot9!
z&%)fmA|=h-z@o~`+`yuAivI$;aO?tR#sUU?(CSJ~#tY06@dgZf%uEWb{0DfH`2`pp
z`59RG8Tpt589uN~R^nq&DP#Z75HG;2`-Fc23#S09k_z7k7M2GrhEL>06c||;SQ#A{
z1X&KSGEQI-I3mE{%*@0Pv4N%G7(ath1uIMa1O}l41`Ods6>QAx0t~J^MGUL~EJaWF
zS$K*V*aR4qJ~10`ny|7qOkieQz-+?C#v#Cvc!ZyUy@=HTw4_|%i2#Ejn*#&mD>uO>
z2bcs{6_}I@1QHmGszAD#5*Q5Gt5_8nSREJ?t3WqFI4}sFSioS+#>ybT%GAKXG=YIZ
zfGPY6KLZa}07K>peg<|fRtE+{fhx8H29^I0C$PFPGcz(MFggenv9Nt$QDJ?cz#zz>
zz#z)zz$ne`z^Kj1;lL=sCcwb>fT8peKZ|4~2g3(8L8Sw1=4_k{9~cyi*bNw%KQK75
zuotl?FfeXl5ImB=pw8ZKfrWvAU5%YVfK7#mDS$!XO8`R{2Tu_L#|Fk=c?NbS_5cP2
z21W;FLzN1)Gz%qmt^j63_n8bw99ayQT_r1d84B1Hl=wa{uqiMpJ>oZD5so!rWLUst
zP{H<p5tA_623B{TA_jH`CZ+(EkO&3__7?$+f=sD1gm@1yDKMzW-WH2*VDu8KU}jpt
zZOO^Ruz*{EoB08gD8~XuMsEiu24;Q-cE<Q322M5x2X-z|-VF=_j~ZAQc^Nqz*cp!`
zvO2J{1Te5VusieeaxiRQW^!O>uz$|)z-}qY>%eYW!OmU)N<XF*oa_qh0#6j!o%xyA
z83Nd+J>i#-EMoo-Vlz0fOLID~GYBwnIIxTG7cj{mabRbX=XPM{VpU+|cVK6eXK-Mb
z0SRz=NLI2jY+wR8iuHrE_#+1vh6N02N8~p!GhASlzY@UC#Q1?ppN%PiU5xPplRR4h
zyO{zz`vw+6wuk=%7#KgW3dcTRWlUhuXJWd*&B<864ocM=54h#!A8^a@Gq9VnGVt&`
zU=w66lxI@lZkA_YDq>>z&k(>c;S@iEY84AJLsGvh(*=gfl2xq#8Il<oSRXK1GZnEI
zFetFGPW2IGF<_X){+}V0fq`9&F@P<;ih&(;U<$jTKoQdgHWmXm)&l~}1x&62MJ((J
z48q3@n8Xt&urn|)iA6tPQRFFF@55Ta;-FH+%6@=d2xO{=$_GZ_1OW#A13Y{T57?!d
z4)8EFFex$c2QV9{R4_X#vJ|iyl(DiN;1OY3zz|%<$<B~nz`%HbM~vwJ4`TzX7~29K
zfg=Kp&g`sA3=T|;2@C?9RxJ7qoDHn33=i1lGaFdBBp3u36&s89vv4%9O0ypTB}3K*
zRzYrg2KEM4CIc4!23B(^?gKo6><x@c{~11j9K)}}&VGPLn!SNl9z@G?Hn4(YtAUkG
zp1pxp1|-1AXu!*QfJa{b0FR(N!vP*{XC_vL*bPkl4_JgenAt(4k07%G2j2k!{sLA}
zX9fm_C<g|u6Z{T>j18>PtP2>lSXmb^XtT05uyQY8&}Lv*z@X2-+Q9msGeo6`<^TT;
zT#Or7q__=u)vA~hSQ!-<#6ZQ)6aEH9(S#2y3<kW61+1b>3cP}B6BtFgL8VUtlL)5(
zgJKbD1A`JP*9T@Vp$c|31|BUA76ooqW>y9^xkm!roC~;xjwrB*G$^nz8nBpiaBv7P
z7_t|!gUcC40R}-12L?t39^oerjBEkCpz|L%7<d^b@G?7afQuInP<~|)Ix&Gkgk6Cf
zQn;`M@UjIkFb42SvV%(%PH?Frz$VBtfm@gzR5%y032>>fKTu#$<zO*jV+`PxVGCg7
z3E*W4;9`2fz%YT2af1+>120no1DgY{Ah!Yo;{pbWBL(crpO^y})VbL{FoXzIaIiHb
zunJxY;8o$|2;gP-z~ITm#>wHpE690CRhUhHiO+#on!|xtnoWU8jP(E~!vto<3Qh-J
z0ZsvCQ1EeY;AC=Ol3;USVkuw|WeebCdcZEsp&)4`Si#UBqEyBGfQh?7gmD53e}jmi
zK#@v6vjHRj0%itRo(cwz1q}QL*acYvK<;Duz{Kys8!pOLz`*ao+sv%M$bW#{OrHAy
zJEx*#WgQ#81FxhOE4u@)J}a98uYf))lLN1`JgWn*nIJQRkRj{C{|d}34!rWr4!kmK
z1`PZPk|4uXz_m_;tQZdi2XlceLjw~}gR1z13k)m)vP=SuVfqXL6-*AYOc&VgnHbU!
zFtHm7R<X`}q4Zy(fraq^k8sokW`+Yi0!2*^**54ov=uY33JUQXFta)|RkQw|z{tqR
zprEAJz+lYGklMh&lptcp%#gN#$x@(;p@B)Gt+|0yUeJMw!JC1ZAv!?XB#oir0|U<i
zF|G@o^85l!T>K17|NrMmt1&RK3NT5s3NZ0EC<^i`Ffq!rDlnDFFe@-gvqG>8s{)fe
zvjP)0NJf?|fPr6ui5sllRhsDoqY$WB+MvkBF2KappeW7Mpvb1csd!CafJt(L0FxRM
zlK_)}KZC#nNiG2<d1e77P64I@PO-QE0YjBCW(6je37pA-MXXHB3<gY~M$ZE!;V1(J
z`6mWU@|+4x>5u$bnyOhGm~{9U444d6x|kL)h_EVfS$8opIWXxnu{bbsi7`7cF+2d(
zRuaqx+?)YSTn^j}4P5dp0ZbnJ0t~YJ4J=};4Dt%B|35G&{bvvm;A~)0)8Km`DWW=o
zNs@g66K4aHz=;Q9Ob=98CNR1RRWLIp2rv{du?h$<F|Zg2R505oFfs5keBf6sVpd>a
zF)$V8VE~`MAt0bw#SB`@#gM?nwSZqhe*+Jr0s~6`Lx4aL6AP0wEAs(H8=(r;2@K{e
ztPBZ)ibbFeWd{V9C-6&N2w-MP5M-Pnr0~Q)f!Uaifzd!f=?T98BZ~tQsL@oxk{}?=
za)8fDpn|o5IlhR2m4%^!nVs<ik9foarmzZDCJu%K2F?Oztw;PHEcpwV1tW?W*qIp$
zn58%inB$5V*jX70nC00Em^tJ*3z)gh*%_iQFmM<!ik;fPYQp;B{{aSl2F?U#3H}CF
zd3|Pv22nZb#0F9Mqy|wQ>Es4c>68Xh`B(;NNiog_W_|`~CiVt(76xhIm<i0<$M_xC
z7!?>86~xt8m=tV4JYmiT4jX|A1_w6g0118vHZge?2R0uuP6xIad6uSXCI>btP6sv@
z1{Q|62cXS;+y)#1&2Jd_FEDXxF>p3;h%q;CFg{=sWKLjUd%(o!z{Yk!fZu^lpPzww
zFJFU%80Q8y#s^Gd3=fzDPY5uueUKDBF+r6*K!VeOSwKxeOpGZ&Mf!vSGvfj_EheS~
zY=TS*4D1Woq(Dq|@FqUS39MpF2P6cKIfyYaurgm@=G?%{xIx^6g_UK4xa^Y&3_c7(
z6)YPVG+9{=urWC>Fdkr&e{z70iLpUUnT2bD9LED@rT|8^2dw-D*qFE-xL68o`46zL
zs#P%uF!LW^bGG1QXZXM@#rlESzled8<p3LlJ}1)wHg<W|56oO*%pX7}6frzt5RSXR
zAa?2jvlz<(HZkS^2L1=k`uqY6ydeS=jEoN!Fg9G^XJ{{GU=&Ss4B`-AV0a<Gpd}(A
zz@P$J5iiInz@Q?;BfucYEWn^F$RWT``iPYwv{;yJftaG2oC1T20E+@cDmz1Hu@Jig
zgJPPV0)q+@g91YkCxc3npa3(&1IDyR{tQe-0t+0~j`UyP6bQJ$C}1xj4l3;h#0A-T
z(%A)^CD;@gSUyNQF$8~LHee8AyTB&@&48bQIe|q`U;+cf0TxA8hWCG@_zy4({a0Wx
zW@M^ZZ_k{-YQ|I{D!|}+hM&QC0;9-*1x#!P`oTB&8Js%TGcX@u&~oqGATHuqz|Ho6
zNmRgrfnfqeSP9er=gbqp&1b;`Y3D2a46XgnO8;M6V03L2W)Ku$$b7=c;8@9?z+lu|
zDRMQRVFBahMNAA~#SCo142%p4kJtqmjM+gYkm4iG2dv^u3XDe0m7=l*3=RwdE0`FX
zD?24Q1Q-Mbl2<YbFa!xPG*=3`7P2ZZxC$|XHntWsHdhKWf;PG;E@`^Jq^!UI%1`<R
zj=CTG9hmtUnE(I(Eb@VYnQ;OqLk%a}0!D@jOxmIx0?bk@0u0KalMB<HFfxP|GbJ!7
zD#-;fu^w<!d%{0KL?mDVqZrEqMy3KDQPv4e%o{}10vH<@SsS>7ls<?kc~q_!VN_rc
zf3d+tTCqVuUzwpnR!B*uB0-NSL0wAUfLH5;zk!?BBLQYs15a_z1T&#m28s*^bQuHW
z*bNwzK;3dq1!nmt3e3Dx@(Roh2RMZ)92glkGcY7D^9V5Ve_-I{abRYAz$C@;fJvDN
zbXLJL!2?Y490!<K6qg7EFv$xvFxBX9U}#{{<|ts{KfvfEe_{e-KA!;>zW{?bCj*oG
zg%6B6&MI;YJP8Jj35@(7*gzc))(KuhUmh?@H7F>nurN6=BtGG1V69-0V-R3)_hmLv
z<P=~xC}H_;z##u$fJud+fl=BafI*%yfI)-bfoU#70)xy81}13%1|}&U0R}BWjs{LG
z0hR_%4JL*LPDw!l7T3^X(9vItNqP#LniCimSkzhnJ1}uw;L!1BxWHk^Ucs86tIxo&
zfKgD&o`Hpb0TT<y0viSaR+0Y!49p3790pAM3QW@639S4DEDWp)tl~ip?EDO@W`g_*
zLL3bYJPMrr1)NMQ3`~lP7!EKg3xbmnGbjmx4kJ@~!Vc=fa%!z$xWJ^nf+2xZsv&_>
zaf!kNCQ*qGO!D#utbPmy3?dg8nAtA~i0~#bx)<>?a4IkwsuVFOFo^OffVNt*D=-N1
zDKLm~C@`4wFo2Sb0<*TLMgp^xiU5NalY{_+wxB`*v#^W+gTf=`1ZFAr0(N0`Mp5C0
z2TTl~YM2!mgi;>x2=XXsFfCx_d?3kqfI*Ps00T<`lY&6i(Gr#kj7$?4)c80Y7`O{~
zoEX?EI2A;N7#1)y7%-@D2^cUq2vo4MHGu9K<v+kAC0~Dl`M-*k$^m9A0fqz2GJ*$~
zr8N#POG_MJW@%tjTA^@&nPmZ!;*y2{W_g1H%p&{^%tsk66!JGPi}EBe^E5DXDlqXk
zFf$2q8ZZbm8-OYd-ADWjn0Y2J^A|AxzsJwO&M5PPflG?z1CyEv!v}6I2S#~$2Sz?d
z0Y**+4lz*%4#g!54Gi)e2N*!@Awzx!{y<g%J-H_vm>g7CnEx|OV_Cqg&crl9TJW5L
zFe4*_67!1!7JYZl4Lp{z_5sYC8+h~|v25VsR(ip*fr*uYQCegJkF@^<M%ncj7<oR(
z7zq`FwsAYoOEutQ;3#JBXJkm=GZ3iYkk}$9pTLlKMxH^in4_P;kl}`cfNY3r5f=xW
z03*W#B~V>%ti;Wvz?dLV#QUF%;e)K;#{z*6l_F+Nwg*y*Pxu`eM0p(;*e0+kG4m~8
zFk>p>dJw^wz$(UFz{W5^+MtM^b2FpR{{RL7jsQ@O6yUnINbpPogCZxd0E1vt0z<fJ
z5f3Nx0meXqB5r<e2S&lK3JeYcMa;Ym?1ulJ)E6)qsupofFlI3j6cJd!V5CyVIDtWd
zf%^l4DCY+TOV0ls9~ev+nAt8EF@9h$;o;^CU=TZzz%I`4fkA}#0|TQ2g8=V(295^|
zTHFi|7&MtVA22Zf2Mt@PGVnfN5Ipw4gi*o7keQ8d0~5&G3@iqq&OVa>y8y=n2Kgrq
zjO<GP87?p|d|;GfUBJMYpku<t(6@j=g@a`S1JeQqEe_TN3=HLsjtu`Fd{$tH6ewcm
z{NKQ+%Ei#Y$f3Yw#MZ~qz@Wv!P{5?f&2@o6>EUP4r~yX<qY!AAfg{0GG2w#(i=#jh
z7h3~^(ZjFo0u0Ox7!;rWPhc<*sNnoB%d~)jDS(CX0h0kk;)e!y0Tu<&{cwite0%~-
zN&-a!az_83{5RltDdOY=og=7VF2s6}kyU^}kYRx%n*f6lhl3Hb07HmC1q&zR0Y>#F
z{1=QE9vF%93rI3=Fku$3P~u>lz@W%ebbSfa1_rSw43bI$!3Ac*><T7q4GfyBtP>av
zDp*+TSQyQO7%niFR<N=PFi1aI5H0^<gDgM81{RSH1~$eA98CFKOb1vQ9vCy($1n;o
zBqs4OxK?t`*vMkQ%D}*;C0ioErX^D#z@R0aBfy{~l_9{OBAFt<Ajm4fpe2!@z@R1`
zvq36ErAYGs{|iit$NUu-w8SC|7*s?<3>X*;n8m~$xD}7}D==t@1Q;-A3HvlKXbE{J
zFlY$6G%yGXH!z5^H!x@kI2bUfFjyEcR0}dN6$vu1G%#o}*%UCSFq;@K2q-r&YO*mH
z2&po$3os}y@=H)*eGsqoNI!r<#2|n{&{+VqTVH@dP*8wDnOQ`DLG=-%0Jk9b0R{p6
z1}0IS2~q}+_*o1XME+0URCvU!z#uBQft`tgn@xa;@dF<Nv!xOPLjzNgJcDZ`hs$hc
z0d7a0A_j2>hA_1P7KTR?xL6*ruo@^Ssuet7Vsv0+ao`gA@_}9Lf^q>9n}alygQg-=
zMZPa*LA>|^1BMWxA~s1T21zCXD@94+1s2Q?EL|!X*cdlhFbOaSF$pjTegd^HzzrP1
z0tRkFnF<C*2FC)^0)_%^29uTS1q`OEivQo|Vz{6P8cAev;8qf->e;|pz|1s3iP3<8
z@q;4M0%b!%1`z=UNtOZz6O{sn1Y@-WN(Bt88$iV|=LB;@o(cvAMuP&8FAtc_SzIdv
z5}Cn$U?Zh6mJP}R|HZq582%q<Vi#agkdo@y!+1bh?8yWM!=l0u0i0n%7E)4-35=`?
z42A^{za=oJyK4$q2)uD%6JQbV;B{bA{?9N$DYA%}m6<_-QIvTB6Vm}kW&sA#ZyOky
z9)P^Z7@<0eg@q}B!DSK)Gm`*lAjxzF3u}UO=_!5&o=KqYgYG$g1&cKIoeT^c1Oyly
zgev}vKaz9(f1r)sfLV+uf!RT_g5iGvn}B$O3jYK~1_QwgiOmmO8UC;6pTMW~U%-LE
zRjA^>a04TAfF;9?nd}=F8Pb}97zz@;Fb6P;2{|xIJQ841`oy5XASkWCAk3t|;L2Jd
z1KMezz~Hh;;{SgEPVq+%7?li*6d2S>7(k1R?G=jz3>btZ12`BCFlaF_81QQU=MZ4v
zb`VheFY|#x%U$w8vYSu^gP?($l)M2Cb3-WC12rZE&`>9n0h2j{IKu-q#UjuyKn8{f
z>V_&6GGa|if=nBj3{@(aCon1taVanfR&;l<DyV{tVVJ<cG=WKyA%THSo<p7C)B#x`
zt_Lg(9~jhF1Qd7~6qrPq6>Ov*9pF(sCvU(Y&0xT&#v<duz_S3<*wy&YGC`2PL6Jd>
z-GM1Yph8Rnw7hWvbJ$7-1_AZ}h7gq^W+q7k=D<h%3=GAG&M*jaGdk$=GYB%Ofi_8p
zsT4_zfo7Tv^cBVaCvXTZc3@;!pw7_1ARx`ac<GcpgK7l}3o`>_!+(Yej0_hTMA!nD
z6<;_SFsSh{Y|u26EMawEP-0^eU~m_x5Ma5$pva=)AZ`5rzw`kHMS%)=PM80zF8>sm
zL|GSb>OJ9~z$eu7fJu#oX@fn-0%=g+qd<tEKudtFej(EXRz?O!6ZZfAFEH{?;FDvz
zz^=~1puj9tY0}Hmz@W%h{C*)*?;<TFxd3*-M;91`#2zpxd|^&t;B(*;U~}LT;dkIO
zVl8GZ<WTyc7yz1GQ(@(D;4@)o7rVg7Xuu=La=})VC4k3-g_XI1f$;z<Qv##%|Az${
z0!4CtAW!iW>Gv@ia5EGz3UL@PD~WL(U~m=SU}e3)C~?AoLGY6SgO-4V0)vClBG&&3
z3`+lv8#Eal7&TZK44And@P`RhFiZabz$L?Sfyr2)f<b{nWg`0nCe{X4foB5DCbA67
z0?evQ_$Dw3$WCBVI}u;Nq^(j{z{Ivdm_LAtk#&Kve-RslWB`)|=LJFiNBjXy49o=#
ziUJB7I6!PE$p9uxHU_o;CLMOR047QH048bX044!u_X(U3rU*j=1G4}JR{)a<gCz3?
zHl_e3O^|tv{ucTmnjK8?h)4!737rrS7GZT@<ZlpVP;Raa?PUBQBFGoOC@QdknT>%_
zSYQGJtAd(xz!w8nS(XK2Y78t2Jp2WW3aZSk35@dc35-l4(gh4cr!I)HK44Hi#lL|;
ziG_=S(Lkk$*?5W?gLDC-I<r6lqmlp<D3~5Ph`0)Hu&@L$N<1-OU@2f^S72Z)U^Hj>
zFHpc}CQu=!z##u<0s{}D0JFI?1LFclHU%!03#^i27g!lCFp6*(FbG{Zz^l!`u>dqd
z&cgLTj6Xp{mLY&ajYZ-DD}R6lFGB&h$ln5Po&<@~Py7r*98yvjc;p@>NN@!(Ny%?u
z;AhYj;CjFmF3-?h$<iS1$j8uJxt^8v1Cx<Z#eW7K#REMH7?s&88eA1Y4I5#h4Qeh7
z|N7V!awQlFm;@^3Ffl8zF$Op@>M<}C6bK}3;1guKz`*uFQ-J;TX4VTVED3@lVhRi%
z6<nb6dqYY%{xdKNFbeV?(31SGz#zzZfR$ANG!ns+AT0mLfst2Fp6LN2-vmyr3rq|u
z90DHZ&6TVPnhXVuV(cF@1zrd+Fd0ZQ3NQ$07%*@curMevh)FjnFbXh;i3M;eJmO<u
zXJg<>JjTz^TFj9AM~U@C0ViVvXmPt@hM)oi!#oBh!50e5pffq<Gl+`|FfimZh)W7E
zFsx?~XA)pw_|GKBF2EqzD8Rtr&m=Caz#yXVK%7~CfuWv3h)sY&fKh-!L}x=DXcgCc
z0dZLY1_paUaUqbrptv;1G(mAO&><_#;xYmZf-C}zYyzN}ZEd|rjG!(gle`og1Ctor
z1$DVE2blR2Sfr)+C+PAoU}NB%pd)|7fQ6kkftkO7L55#}Ra>8*AwgCO)U9H!VA{aU
z$jBgn;Q|A@{QnCKYFrMC3=ddDm>#h3UtkoJdO3jsbS~=!8Tq6DCVBn~j10^PrZRsH
zXo|2u;A9Y)!M{O(OP*tcfQ~%R1_5r?4JG^=1Q<941au!UZV=#KAiyPkWP$+y1_4Hn
z1p?Af6a<A%G%zSLFf=f*d|;Pm5nzxP*dV~o;lRzmLBL;{d4qr$!v+E720=Auo(&u<
z4FXIG+ye3!?8KNCFfbJ`NHHG}V7|b^BET-loWRTin$lsHXS^T)s=b(mFC;KZDL63d
zGs_$hVCUZ;z#Gm~B+bBdfSLb*0HYcMdjJF10Rchz4ZIBX%#0g&^_BPzFf*x5U@Bk;
zRVk8Y7IR?G=Vv$|z%9jpKtTT#{{{gzMg>0oC-NHva^(3p2-tuK8Ckvsto$1U{s)N3
zY!DDj*&rYwGl5C}g#8AA8m0xj@+=z!{?7x2$NyLm+f`nEgTVj)svr>_X_gHF(gGU<
zq!l&@fI~}OXM;eGw8jDfX@dfA7)dj15RjJMARsRW(sh`Tfk}-6bQ*_#fVP+hXs()#
z|A8I@{{&qb4JM`wddv;nYD^jq>|77@7%ng{^Q&`wV3F2IV3RO7z#_!dyMp5bi?D?N
zgK$QI4oicYQU+syjzow6gOGslW>x_P4?#xIL0&>awIH65@WDl_0t`Z8wqTxkD43GS
z1yho(U`lE(n3CQKrew~7DOuGm%o`Y$!io(tK|{rloCO#dH~2CMFbFgYFfb^uWfov?
zVPy;}F3?~QU{GXca$pp;31Co6aaf=sQo+E+tDrBh|3HI_PXJV07&9!m&LY6X&!G9A
ziS>bo{v%cfO(tyyiv=2-44PaYG&lt`wN&IjXlOlh70?tq=Afv>qcXvobpx~ZBVh(j
zDSrh`xfdTaxCAt185uMkTq`*krW|DyVB-IvA*+9b|A7XNy!-==IUox`)7k{EK1i_-
zNU@K+-UE&Q^Fae>3=Iro6B>B=88n3$R{Ui#U}8vM(vr<^(9n`e5zx?(PH@l=loenR
z=V(yZl8P~4P?L;s&|rC>%v7Mk<e;G?5n{j~B3{76kieo=B+0<coWP(Z=3~GhE&4!1
zOT<NhK}*;{fI&;h1~hPCA;6#|U?RZ4HX%@+bwVIB%LHbvNBSQ$<dZ&Vu!yKQFi0sk
z2r(uEi7^@Q2wg}}RAb`!z|0U(#Qq?V`-3p!2Mu}I2Z207oEMnb9t0{MP-I|Ya^RJh
z{-D7obgF=XwSZOV&4obC0!0T_QOO1d{U`h%G?*kD3>b_m7-SD<h<q^+QjunQpdoZ)
zg1V`IB11x!;;LeMKK>0Fk}8r63cO4kH0&iAL^fz}GpM{{Spe#YvdA)hU^5n~_<x{U
zu%Ut1L#RSbtU!Z-p;QsHmWS~{IO_ujm7p&I8lo%*7&*Y_>Lgs?XAsg5>k?*a;1PPF
zAgm@JFoA)~L6z}>n1D1Bx5@tlEd_#{0^%$N;*1O;ECx(sA`T25f)(P@2I5Mtm1}OX
z3NQ&&oVqH+=)lO&puu3KQY59o#JGW(eM32;1Cz9j0)vGBgRBCB%Odgr{|f{d6&R$2
z9eAWAE~rZi1~4eOcgEaeQD6i$2PGZE_#cQVOG+1r2{8%qiZBH5Dhe|(2nsPRU^G;z
zU~pg*VRGPiuV5BtbP(jfAjZ$~L5Tl?7`KWH*9KAk17Zv;7Z_O%h{+2a5Mz~+Z{XK|
z#OT1wq{hI`z!WM_AtcUtfsJVbliCHg0>%)PA_*Z`0l}6>{45N`QVik;gawlXctwRK
zi19aYv5GMjFtBV8vzHKK+#tpx&%Qy7NkD2EBSS;Ib%g-?1~CxUmtfi;rp+>;f`5aU
zpu7-hV&;K>Jj(_#ZV@2?VXY*-4XjKTSmlK_h_Pv>=xq>_(%&Gaox-<4Oh8|NL6u#I
zL70Don39ap1~HHt27Mu}1Q9kBW}yqL{0Sl~AaNE4M%^dO4Ltq=70j|5#CYUoH;8e|
z3nr*D2?&A;z5ESgI!qfhISp9(1DLd!76^lE=Q3etkli4rmc$ppp&0O`Ku?jQcz!L1
z1Cu<n0~5D6ivyE@{Q(A176TTsCm$FXFEH>0FoAraF3ViNs>oAReTR30n7nKN6T3cx
zYycCFxU7RH{{}H336>3F(##vgK!G7I!LUJ$y@63%MXrHSO1^=Saf6sOJ3H$JF`fiQ
zd5Hu@E+zpnB?%@42A&0CEE|~R1riw9^_c|{7<t465<qPqA<($J7?T4N_XN->F78DV
z4F4xE@+}Z!3Xm6NHDKUhAjZKzLClm@K!jUBfFE?fhyxe@1Tk)XF|i3^(d-{Ym>R?w
zve=mx2r^&b<`7^sVXt7GAST2-K}?ZZf|o()--pf+l?oPS76l2W1~D;~1~EDQ1~K;v
zb_T`;EG!LT@<I(_Me_U&Vg}M|4Ps2^8Q22E#Dp$z3Tqq?WLdz(I6+Wc;)4)_0kbBv
zxB;_!3HyIWPzza9l)*tvls`cX)Fu!WU=S1KcM#(cU|@3)V{1?sml9wQH8>z9%5NYB
zYIKNN1c-_9D~O2;3owX^91xS{HvnUK{s&Cls*m^u#F-w5Y56luP#5jrAjWh-Oog9O
zK%8-bxXBYnrUE8I35LD^RvrUp{tL{!{0(CN7s`t@i0R4mG>C;TZ{TE@4I1p>7Z5N4
zZTprN5)hD=5D^fN5?{cmUnFyZpPfHIfKh1C26lZ0CIJB!ZUzBMrXnc?27UnnF6IOE
zB8(0U(#JmV@+$}^NsB88Xi14H2naF<Fsh1kUEo)jVr1au-(b$q@aZkz26G+(0eNNt
z0Vd`H6%qmry!;o`_|*j1KQJ;}5EPM3U}Q?*2ieafD)4}tQ9!^-kOAZx0Re$PQ9%I#
zc_sk?8xSEUF0g=!{{XMHy!-(*A$b7-0d5dsD=Lt{!!ID9#9+^$&%m6(6Uci&jbA{(
zQC?U;fC)tWe<j5LF^55zX#xW)0|!F_qx2&IM(s!Z0jm500!cDVAo&f<4Dw7Hm^tK`
zKuL`WoYVxsK4xZ{0P;B4Qhs>`0fGMoEDTQk0s^cc7l?seH(!E9KtN7FKma7o#kqi!
zUqB#KT2MehT3A3pUR*$cM_x)mAP1y=8oPiBUjZAt10T}|7Jda5R<;CYegT31D|siV
z3GrW06_aUT;4EO{pP=R{CS$<PKS51MT492kgvtjN_5gLp4=n5j%1Rmf6V#+#Ca6h!
zOi+_HnV=?ZF+ok*W`dfu!vr;Hp9yLb0Rjxt5)A6nk_XhJr4Fb`OCL~^mN}p%CVN1Q
ze}bB+l)(fw(E<UGE&lusYKm$ODhf>e4Ql_Bv^gab7+4lC>pv2mpvEK1T42Shz{lU9
z#u5Umk~c7@$vry2%Gsc%e}g|kjYnQSK`ln!KS7N^ef<AFue5xEnv`P!BY%RLo;-ho
zS`LW#-w&>sCoqVdNZ@6jz$+rNfsr{tRYdv#1M>w1Eh(J~0veJUAJ)rC7wpuKP$}3c
zD^;*lM7)8C@d2}{B!>cn;xa$b;qx*I45|{G3Jgk*`UKR)I2W++JM5B{=5*M_{a}O1
zBW{Kdr9vzVgrpchY>?*sutAXVL#ZfR0kaA}(}n~l2XzjHo$;V`sP8|hGAVyxzreuH
zP{hEw;UIGZtL6sw1uUY%2@L!JJ}lx51`HvqivNQqmSmC+sPb=^%cLUAV8Fw4K-FHD
zLF9lcE7OBh`U30=*i<#;85XGWFW_cU_%HZ~laWD<k)f2mU>kdasDPjvH)8;!7^sKM
zkgO^$m>|mdfK5>51CJ7D#!E}3NkCQKedY%?Z_WeUEEBlJWF~N13skTsNLjM|XKY|#
z4&-NWVBjg>;#<JY*TBtdpeE1#fPsU50=KbN0rLb-jR0l_4pj!>38IV}7$mtjFjxvy
z@Pa0dxm5*UJm6(B5Mgw<!yX{UK7otHfPv=$180Gl*rNh&QC<TENl^m^&;*8{ftbM~
zejWn`5rzhC=Vy!z><SE^G3<U8CGHmqte~Y^6PSb<Ht>U%Kyw!`IH^=HGaL|N3}9gu
z;9*l>P-SJiASQO~1Gf^x3jq#Sp$b;k07kJVAGn1<oumUxMOY6oSU%zB`M@pk<N$*h
zy8ye)5e6P9Mh0osC;Sr_#Mv(}h^QDasJ>vlaGTLUOzhDF9%1$X1|#+g*7Kmy7d!TV
zNBqA*B!fMNIHv%Ew2lIUh=Blu{u9Oo77qCj2`o&!30&MCxcCK_W%vzv{`-TL-^ncC
z<~QI`V41+cb|9ADfJaiFpTU4fn>&G#j{&p*OU{z1NT`5`!GS|W2(+bk1CIa?U&2Aw
z0BMCsf}klNDF#Lcrh<d&9FheG85wvaB^($S_4Sz?)(LS3@JKLx*u^2RLx@R%M}k9u
zfwSNsh$R5(gC_7Y3NVO^U*G{rimHH@K=Mdv95^T@b%94|MUw&#%LZ;nhC^a92Y3{h
zFd1-*T7U|G-TM3u+#A&lI6p9h7|IVoDYJoFM1KK$1Glt%K?8S;I70yge*^db|IFG6
z%nvx^nH#wOFV%m>Sir5vc|nrDfE$!AkMIaEFeEUDR5Wn&H`wwj=I|A8X~{Nh;L?(*
z0gXym2rx)XDfDVd7Jv#3g<dW33;_mdu?x0Zq6q>F(jo_JwS*%C7^H<Z*lG!a3KoF{
zw%SY{4{W4e9Bkzs9BgGoY#bPv1Z=ff4GI`o1*8<82r?+KIWSAfJ8&>Duu5?zun2N$
z@8K|DQ&TWVU=C@hWM)ukVAo&7_ko*9xj^55LHf}KZcc&s3<@lQ{t32P2KosMA`A%(
z`b+o>7?>m(3>Zw97+ee(TEOefIT>UG7(ktV6Bf|IVNj>vM4Z7vfI%Pwd^9oW;9_>r
z+^r=C_$Xsx@X^Ntpz&TyX3zn}mXZu60t}XHpu>$#WI)FtOD8$7Gk>sG=480QsQ#!i
zftB$>w<M!NpXn2RrUG@vpdSa=SOj)47VvN~d=mL0z#uB@(8thV<6^`tz*4};V8G)c
z#3I0XKrPsbO_G%%;aA5KeijuaR!JEJ22&wsb_WKY2fPd)xJ;GUI2;(19`Q3UiRpgm
zVc5VZ;v>K)u;hcP2@A{L02YP~7gz+&3OO8LVi4$(7Ts_`<AII>lO;QYfdZ2WD`*m0
z>k(f-7sCMt*9uv7#sv%|{tN;|f~?F2tZFCv6*QEBJ{a(^Fz~Y*IEW`SFoX*gF$*(Y
zP~q92r{r3BfSb{PLGVd~9%q3X&jmS#4~){142&W?2N;+>=n9BGU{EM<*}!MW&){Us
z#5RE$v<&fpb^rs9fi7q@lyCzB{{{vYtpr8|7VZTMjQaA71{3%fFfcPJJX9)hY3LJm
zs%2+hz`*dJM^gI&zalFGBZDB50~_ZBeyvCR2N>m#J>X|zbYNf%s1-hu@RacZzd{MC
z00Zj-e#Qw5QSuB<GZ`i@M9ySjn4mR*L4th(Xrh`sfkB=<fk9T^Kx+acd%RE)1E-7w
z69<EWgt%k@Bf|nl4u$KAJQb@L92p8kem!7fc)%#ZsKCM!P$#6MFoA8t1i>!}e8M~j
z4k!sYDhO)1M+V##=2^hN_`pf^5&s8GrT+{Y7=qY~SOp|OvjUtf0SrnCjs}c|>_sdN
z3@i`6gs2v=u&_EX2%MO}EXXFPCdNKNlSyE|VAuy1Q5FFP#h@<?*CSM$SXhJ|7+jiI
z*n}6bfUYd+xG=%AiGjs|f&an;#_*L43;`k^7+4J$`4yPil^s|N7?>0oG#MEb7@Qdy
z4uFmT4cISo^20<X1{a18tSbL?KCm)8;8XZ7@PN->@<ao>gD|tCbOI}9!W8BQBHI5|
z1Q^%@j0K(Q4zNAY<q2?Qyuc#Cynu<_fC03Wm3adL^9Mu5146tT7}y$^bU!g~U@&>a
z%%I@Ta)Fua0B9J7LHh;s1_ma99OecMVTJ-h30Vb!5TObd&={B25q<$qi6;kmm<-rC
z6F`ee%vo4KrC9)oEy&`)z-Y$6^npW79JCN?1Cxq4%Z3Mx20tu?#2FlZ2(p4FNthZK
zRD>ED*q9bDsIUq#unFEU_@N=r!0=FnDS$z^A;4IWt-)15=mV4G6Mg}KMn(Y!bym<Y
z+yO1d4+6rVQMd#~5w-%xoM)^ILKW-{4;dL*86Pl+J=(ym#K0urX~bS6t;ou(09uH}
z$=1NgD8OLCF5U2eMf^#_H<k+wE=4R1oEJcYPAV+Y44_>Af-DyfF()tyum}i=voBy^
zVE8F+QNWNaP{blA#E|e@@Pq@SCIh<zBg+N`-3EpN5%vu(O43{c3=9g4YV0xw5}XHI
zm=7?CuqiMLzhdBFIl#*-z@x^Za>0YAfrUYUgJXgjgM+I$QvfrULW?;2ffgnQF`fk?
z3<V}^2U?gCxYUF>92kTJ6`0r*%$?a8F0fBvU@s73IUvXx(5(1^U4TLDzeE6ol1kGD
zR>lHW>0<)s?N8Vl1S%vL7#}ck6_^XME3m6MunRCU2<Wq3U{!q7UocsOVS<tVBNhWe
zCXEeD2N+DGB$yo-#7;Gsnn;N;7BDMH{4d}VTzr6ubAl<005eMgqyCH5g2@6}Vk`?x
z1(^>t2}&Jc;9p=W#LmFW_n}77eda1AUIrni0Aq%P`^*!juo!T1FJR|i(5ocQp}@vb
zz`<P5AR@tFq`Jrt)P`oWFJh1=XkgP`;>S=g<<C&By@XG}P{3b+L4{f30;AZ838wr3
z#;p7T^#Upq%m-MQ3OE=O7}y2s83Y)F8#XY>a|qNkibw=V@e9<mfXvmpz#qV<`-HVY
zn4#d6{QnK6Tsq858%!k?HkdN`u`wzztE$8;U=m<iz@+s^enFf5GsXj^YD@waOb1Nm
znI=q*5n(!D%J^WaJVSwrxb&$8CdLF4S&oKADUJjaJqFeU6Mg{;Hckgqu~Q8UVhjaL
zqD%(-%mqwROa)9DOw0`&%>2?E1x#E8CRz*(1x%6*1tvTROlHlMoEt<K512B4Xk$HK
z%A~-oC&ty##v8yW^Jsy!JnMrdCwZw0%+ibrGsUG67^TD#80EztH1W!dU0~)B7X$Yo
zBp?Iz!dwqnB_$rP3Ns0Cavm_1mbkzz#?!#TpujK6Xu!bqfLW3ufrZ~eQd96hXpG*3
zfsM_8TjawB9{vwa^Tl`=nAsNaFf<4=C@_n$J1{a_2xDd7(=K2UXl4{(;1_7-S7l-N
zz|0~bFUBAs&!S+)c0iJ8!8x`7R`w0Xj0#NlVhsNk%s4p=7#S591i2X4*c3pioku~Q
zpP^YrYXY-^kVXM>0Sl-r+rTK!bAgFL!BC8wL6T9yP>d^pML1&vi-dpygBS;cBxq2b
zJ%L+Tqrpr<#eqRgLP1hEV}l{f0ZFYSeg|%WBMMyN%m&;{2V_MU66Dzrm~uFnN%JVU
zi3k|Ti@jg~^@SLuWj2^eD>#^mSzK^sHIU=DU?#%RV5a|wUxAsMT|t47K~(FB;|Ffl
zQ}P?QSthUv3oMXlxxm75Ku(+|!AwMFgFJJB8N&uSAua(15vC3DOb_JP7RZZp2r!7a
z7|1gVFo=3wFk>r_7iNCI!0N!oynvY@Kwiw}f*HdDEn^ALS||PsW<@4q3@i!^{0;03
ztO4xI3~c)Dofl*|`5PGI`9H8~^Bc(b%L^T7HWV{?z{-EY%!~N|mzsl!0Rz8-h?c}7
z2NC}UMut}oBB1t_hP;G>h_?QJ0S6Hqc@YN@9(e@^5pI294hIo06=n$skRFh_|6U-4
z|9wGf{%c9II*7=#IEe6wF*`8oKjL!`5!7U1br4~9Fcv!nkrHG6$jr>Z%I6^B$IbAc
zp@5ZX0;^QN0V98cF{6HkXo3j4*pm;Oi~<aDCjyN514NwUMFK>4<Rt>Y&f3A-V9YIG
zCiH}XL;AmgwfKSr2L1*nc`=3tCguQc4h9|03EJ|H5*T#kPdqSY6k~f}!1#exjP-+;
z@QVx55)K<cBUy$*Ngp^_8$j#&O*k)jNsC_ak`^%VmKHSdmKHMbmKHYfmKGE6784in
zW&|}J4Q5D78qDyJVq_>0VDOM;WT+5e@Rng@s44K4YAEn#31VU?@YZ5wDDYNhW?*Dc
ze8gPf4OxBmgtfq1%A>$rwBrCPe}Q*Cj{pOIgUSD7d6NbcYpnnS19trf`VA)1tN|wc
z4JIO5AM_wiME(X77X1Ty4JQBh=zq{@FtOHOpwnQIEw0c2(%&fG&|uP||3It3q*^Lq
z0)sqzgNd#F2h9nL>>$&N)D1*FfYgDb2TJ^vH)t^V|DRXCfSDnlozXx_LZyL`-9drH
zKtWo<KtVzQv@Ab?1+=`J!$Cn<V*{gvjsSxgTLHJQhJgZ$f`Yt~f`YJ&$ARrqCI_~&
zHONafJ8<it(r=I#Vrx*4X2gy~89&G~J&<SHa6+6*fkD*ZfjpA{gQ&>^d1=N23Lq@X
zD4-zDF2Eq_!k{3^_&{D<LV$twgM#)8Mg;}_1G4h`6Igip1r+{2mNyVk2w`5prKSK%
zt_mVr{0SyduYswJ@&+IQS$+c%J$VrWP=YZ4CzuX?2b2H*4>2S#h&4>$<7Y787D{4R
z#xX&U!GTLlwt_)eTIPeXx^#hq5HrIvB~FF_5zyt4QVb?~k{JxkBsdtBaSNEJi6<m5
zFfc3=Wi4Q00*#QzEMO23HDF?1@Rdj5tA<F30)w>}XhKIzH~_Se#V3J5OVC4sK~2CV
zfPuw9T%3)8QH#mJfkB(Wroe=yfti27S5cM&9EvZT1wae-6rKogVA0|Jzd@XRfdr?4
zq3$Do0~06q3I^^COo9yzrpcgTiVGS7O#Bnhhze^IFbKVwAfeWv5x^8KP{GCZcLEcq
zff2(51NRCBE=B`!1_uUB2aN-)5<&+UI2Bl#E*Qv&GZ;xQI54<WFvv0m@bL#2Dr-nf
zUJ&C8Fw~b8`(VhUS)hKvKwpSqK`E>LBl!SBK@}l}4}44?3=D-pT@1ztJUkmpt(-bR
z*MS6>Nvcg?P!R`p90Lrc#S<9h#S<9V<>eC?n8X_r7<diD&5Ibs0vJU&8u%GMFi1QK
zST6Euf+V8?gA#+|1a@zs3JHk`%NYY0m<m|g9T<ch6!;h}7>LUzFoXz6NJubV;1f9Z
zf!CaYmGJ{Nr-2j$185})hX9w_1)&QJph<GI1<V4B{0TCAQZoZMI0K}a5@e*r5@eVT
zRIprNU|3Kg`rm<x`+zu0gMhRQXi6_ZhDS;wK}P=oQ-Tb;t55}lc!3n-0!DjgA@&2(
z><kwenF9pnK24Y|_@sbWof*_LoWRKRff3ZQH)D`KvSGUE6Ml{cDMf)#0t{yCMZyQB
zgEp9eHi$VeFcvVFFbFqHU}p*t(qa)lAg#$D-5{kZ%-{f8+Ahd6LBLR)sn3CdMPP=C
zFqZ&>HiPg1X;G#ECZ-3{q6`8Ix{vrTOb-{TU}32b05$&DSQ8i-C$KOXh_MJT3G*<h
zsuc(nFiNsrkP#A8P-VR!BM90UcY%S~fk};3VgozF1X+;=17@ZRj9P4h3XGb}EDDS)
z2@FgD3=9E+VjK$?1Xu)SvV!+5G6hUh6689-09s0Cp#WM?>R7}iB)oy2VF9C*zQ9ba
z6Z{LLSqj*t6a*ObnPd(~vvVyF7H3YFt>3_IAjrs&z{2rCnrnl+G;_mjLH`6nwFT@S
zm^}n5WTX#Bb0xeCV`fk(k#dk>5U^q{s4<ge=rdptXE0z;Y?4u6U=ffE5vX92VZ6Y^
zoWR1h;k$_xlk5RegGc%-3#1w385tWS)RXuwNbnt)$<Oedk#m8x)+zo8()y?P8>G3l
z9_b(WuJ?%f!!!N~(t45t8$=b|XU<~cW#DI;AT6)2AZf$*U?u+qX+{yI3*uTydI_97
z3X(h%q(Sox;!^q>#I;lSCP)kF9}pL1Iv_63KSA11or$@D3AAH{L4bjOf;5*r(*bcF
z8IW--4`y0(O^_B~x+u>iz|8(&CTP8mlz+oU{b#Hbq}7-TnB?m}%uHY|V2~GJkYg0H
zH{jtfU}Dr)@l%izWG`T15_m2zTfij2|6%4NDV7P+@&Xg28CWjN;hZp6`w@QuBhv*Y
zeFlaJ(p5474ALAM=JE?Xw-;lAG^u!a1QyAk_`u32$@GDhpJ5gg%K=82Ck(UX^&hY*
z%Zn69OX^EV6i9QMNJuahaLPa0Aj->MAZ;kdyg-tPVU~&n;{j1F2Wequ2WbJR35@&+
z`s$Lb3sm?RW-%p5^E1qvsb#?IARr<jz@Yz%-$9yz@xBw6g0wV?g0ut=sP#09QGtQ|
z0T-w_Bw!#5qNEa}1(Xt)#h3-Sm>>AcI4DR<X(&jG7zjvdJ!wu*S3IJxz#z>KASKNr
zASKO_AjQzcC@=OwibI;mL0VcufI(V8fPu9@id{ikno~hqnnOTZnoU4jT3A3@T983n
z9MrS)*dQ(Hb72<S18IHs7Yx!<`42Sx_hE2gm1km*)|D4wkPcy1;L^GvbO6-9WZ>t2
zAfztzp@5P9fzbc|{|n_=9ti2kbASkj2SPIPJP(Ba&lP6~U<Jt=$uodd<$)+0kjnqD
zAm;!7dD1KogdoiS|1)?W=rUi>VJR@uN@6Zxl)J&8!DYZGufKqSkF$Y^`2x2Zlg<Qo
zE{C=9`VMQEB@6;s#h4EmF&cn2R_F?7JYZu_&=Ss=per3RL6<W?S4`l7F3SX6X^#oI
z(moS(r2{7DO2<sll}?zTE1fbymve)zwA2P&Y3U8R(lQ%##bh_=GEdOeXJv3$t0Uzw
zL07b40Vn?iU48xrT}AnX2HpR2wYW7NxNuC+<!{iH6>w$vC9J`~B==|oD`$f)Xuw(*
zG+?d!n|DK;ynceNjl6t<F1Si0OejmsC+JEk7BKQJxaBIQGl89N!7cs-T}^rZ1l|Aj
z`~nQTpkdPk2Y8u3@M_6gIOwnmoR?-4I4{L7aK7{rGec;x3}*wgqLSPOT{Q+C1r|<&
z^UMZ9+zRLA*%Z#R3veo&muFWv&jVT$uJx=>;5=`Eu0B7b!g*bW32#{+aPumhm*!VE
zufoZ&;Vol>uD}z8^GpuhObL373cX^21+4P_8FZPH4Y&dr#U5=CVhv#BIMBn~z^e9v
z^8$02Km|Md-wpiy47!Z!?2H8>3=_mOH*h{+5ffg(z~sOn!RWxi&!EeoU%**#o`t7C
zNB%^?d0j#I51`#Y0XpUk0StN@I2u^_H?WDaU0~J!#C+hqG1CEkVU`b!u7VZPf)7L(
z8`uS94+w(Cua#7q4j8C0FijBVpTO?PsgS`kfk#Yc0#B$w1*<gU0~Y=R=N-8dYV?aB
zgVsF8S^}&FT>2kaHb}C72CVrvfc8u?3$rUQuw39)5`2*WDxFyy7?=bk#F+z_L|8t6
z2C@r;H5eKU1UMc@GAA&I%NQ{5eUKDnOJHDhW6*lUU%(^%=)rl81rng`C;}XyaqJJ=
zplwj+83m*SnGF~?5*QfbSw;B|Fqp70G$=4JKM)XMn83npz#uMQz`(zOlS}mx{{tQ+
z{udKiSsw6!>ab@4k{kyZM0g(X2>(}L0J)E21A~Z;0)xPd27VI`K}Lpr)kpjnco`KK
z7(OsE3uG#bGbKo<Rd64;p!$ekfmf8lfI*d&V}TUIhDnMQYyu48+y)FHCJ79T3^H67
zE^tmLQ+>qmz$*+ooGW0m6zc&-6%I}YM#cqFg6s+m>>EI*XD~7_G8Hh0vM-QgTEM8z
z#=d|tT&04Io8tkKnLq{S2WHg^`~iGQoG%)<RCt&sFtA*ZVgW7mXVB(mf50GWA;1tQ
z&md65tH8#{P|oha$kA|7+{S>9vw&CNSOTjF_kU&sNwG&8_=PzQ7?Rm5SeZbbCDmj6
z3;3jY5Aexz7hEip7u%5e-<x%VIKu;8{sKP8X!>9N0zS}adI2A7G<^f39M6Q`3=LeM
z5|qE-BA)<*0<SR}Xars15wie;D7%9xbHPPr2?j<6-hzva4h+VeG7z>9Ljs=!ivR;h
z!9_5W2f>tqGg%8n6d4#3_*fnYE3Ie%(fmp)6cYF(3>+BP3oaV2U|>q%V+r6_T*9z`
zSI$9zkH6s}6F&oAtJ(+d4b1!ueE*H)6&Uzr)E<EMuJI}AFW_Y0)0R(Q;EU1!z`?+0
zt-pXnfmI!(@{$$<>j6%+2P^`NAnyPFwfZj@Kk)K#8p!j1;02W(;1Tu$2I&V3e5?k%
z%m;Y*6?oaD85MY?nH6{$1YXMu3%u44VEMqyxZi;D122aGuVQGiA7~s<agiSbukr-e
z1SWO{UJ+J>2Cf1{QAPm`#sn7m`U9Ly>IYZ?7&J>57I3l_FmnWWh_O6iQfe)>mlyr-
zz{aydk*UCdMS+>8K$XFPK^!#XIDwgq*?<AG0+49}n>G`V0E4suXb@k3K}14;f&T!T
zin;^y2Nnj06=KW+jG+P*EKDp1n3xO<<(Ve1vhoWsGVnLB@bX?@VOYQ?#niwc&C$Rh
z&)mS^BdyTDAi>kXz#PEA&%o#<#n`|gEx^Di&%(gy%iX{rEz-as&&t5)E5*>jAR*Df
zz?;Cp-N2w&!upU&{(l35qR^8MTH^md)G0f4>N7J3u<#sE=DEPm-@q=<@Q0tRft{y;
zlhc4t`iX#${1pREb|wXV{s|27JOv#5AJ`eSgc&}tYY8!YVAmI9_`uGhzk=ZbyQ~!B
z19qu~2keSV6h5%YD<rT-fD7UY3^Feo*rf#;*yVW|L|C+5Fb1$|zhHJ?XJ}v-7A$09
znjoqaT0GB$QGh`)NsobDq~HLv{1XNyS^0VcHX-o_0cMsDBB0=QVCK8P&9A_0z}(Nk
zufWVGcVhuFzW}o?cLN7^f;!&@W<~>MDINo6X+Z;KW$6AO1!j2x1!hsH1_fqj24;B)
z2IfEF6Bw91K*v8^VB*@qB<p{G*O9$~m9>CDo}plpF#iWWDINu8`AZ7S|7-Xe*#7@t
z!OsA`Bb%S|0uw(2C%+;K3rH<Q@G*GH87R>~u%pZe24-mv2E=|dg(r*?a;4Y`jK$bK
zgz;ZslH+Djk$$p(iQhqifqwy$t|C(r9|OArlN_4@lN5^rZ1)$l0BBT>iG}$CqrAWe
z#tI$*2IJ1p{{>hWKCI_fVAMLo|G}Fvz)*-;kbxn<kV)a33NwR)p8g^~g-9li2BroU
zNtOl{h7U3l3>z*;bzV^64~S&c_`n#z!2LkQvxtp>S%8UQE+g9qMxGB0W&#!L3IXg3
z7{oayn26LQ=xN>HcZd{v#Gs-!fpG&vXhS6@8;<~^AYTHLIA|(>;S9$I25qO#00xlB
z;SH7SY!U$spp6}@OdCM$cX{>z241ZT3;_(%Dgg}g%mEBC;tc@|Au1K@tULw=f)^4P
zG}#Rj7))4MSrQn8PF>i-YQP}(sDObXfKfT%p8zv|Llgt=g#fDx7M2DE6BZDuo5If!
z!P&rU|B9cff%*Uc|1R<z4a_qb7O>0wVBnNudB80$@_~b&!B>XKfrC?lOH4F?gSkLo
zo<o5ngP%bF5<Tu}1q>IMI2SN6e_#|hXkg@55Rl~zFpztcz{Gfgk)?rAdlAzHej&jF
zj4TrvwN@}4VANhBw1Hn<e*vQ(e*+^EcL9sE$OJ|$L6!y<wgMJGW`zt<76nEr`2~!+
zDtZYz{01zHngNUl7-a+-%;X<zU}j)qFz5dusH6IbzhI9r%Yu6$t;`I93;|pW3(TaL
z7?>C)Fi1?8z#v@Wki<WML51M~(hj@@Oic0|3z$HMvdHr+U}8~P(G<WU&$59@nV&)A
z|2y!8?*ALWe!CA(hSB^CQg7uyGziH^3n(yxcRUI_Y6zDV5a7|j!0>=sm3xD!^pgin
z`~p0T910@xM+z8Z`3#sD8W_bH5*T<cFmqiHWO87Z5m4Zf=P_Uw;Wyv`Rf)m{i^B4G
z85kI985kMLg&A2G7$z_Z)=w-jWMD{@5n&QxVCaw&bUYJb%)qd>;+i0*jRF$~0|N_#
zfU|V40|NttlS!Z=1H<b~2L22^SB4x07Dfg&P<5sT8hBD;VPIrX1I<yXv4L3ZAc6x#
zfOZn8@qk#o42%q{7EIy{TS6H3__HxGsDWml)kHvYq98&HM1Z>XYM@$7O%lWfRd8z3
zAQq@LQ<Dd=6hMR$h)@O*Dj-4?L}-Hu9T1@lBJ@CnA&4*m5vCx*5kxqF2xk!C!obMD
z@rO|@3B*YO5vd>|4Me1ah<Xrl0z{ky5obZfIS_FkM1bxwSGx#eT>=r8LBtghaTP>d
z0}<Cj#0?N}6GYqs5w}6a9T0IBMBD=r_d&!121W*P9ZzO)T^<H;Jst*eeI5p;H5E*Z
z3`{4KnHU+wC-N|ef8k*ekC@9WzK4f_fq{jEkwJVP4}<uA9tNfx4IniKc^Jfx@GyuU
z<zWy%#={_foQFaD1P_DwNgf9AQ#=gfr+FB}&+ssapXFf?KgYu$ex8Rx`~nXH(;YvM
zZbcpjaU~uGab+F`aTOj0aaA4$aWx(WadjRBaSa{@aZMfuaV;JO@fIEi@m3xN@ira?
z@pc{t@eUpa@lGBF@h%<)@opXl@g5!q@m?MV@je~~@qQi#@d-Q(%rzlQ4y>x`42%q)
zrStL?Qj3c6ix`qiQxbzqlao`6iy87uOBC|c6mnB@^NT7OO7pVw^2_ry7#^l&=A<g*
z<(DX=<(KBAm@^2tN-}(ta4arPEh=G1EGkN@RLCq=$W1ILNKIkL%qvUG$xKm5EJ`oU
zP0cGYWDp7sXJ8X#xD=9^o0?x*!jO_$mYJNw@QuAFH8G`<A+aD+AuTa8r?e<lAt|vq
z)tJH2FTW&6nSou1LD0pXflY`($g_z-BOqCoL8-)dKEnrw+|1&{oXqsR)D(rpl$4^s
z49P{Q#rdU0jSS4k7<hddzA%<lFl6RsmSiU8WL71XWai5;vb<;b$)Ay5T%u5rpP5&Z
zTEvi2lv$Qqq)?nuT2hjkm#&cVo#6vZa7k&BPi9h4Vo@bSa(-S(YDI|y<8RKC)Z&t&
z{L0i6hK$6bl=8%)RE6S_#N_Nu24-Ex%;L)2r2L#m3>Cqp1qJy<CHok<+%j`g{qjrP
zb}?@E%*jbjPs|A}Nh~pEJQ<Ro@0*xc8IYP<R2;!jACOv<n^{sK#>fy8mY7qTI*WmY
zm63ZRLwbHuN@iZ-CWaKB#L~Rv3>GF<HKvu$i3KI4MX4#SWwuOAdJIBtqD*Y!3@N?^
z#X$wh;tbqf49u~Ntl|vu1(_wu88ev}n9nircrXb#-eOYrEVg9g`NJR`+{nlx&cNu+
zl+2Kqn46lil#$<-nMp9`6%$VkgRx^l<{1WCr^Mn53=V0fdCApGyr&q29ZxYaR5Bh+
zFUl;bR7lQ9P0lWMW&XsFn!-?;SCpEZpPrXlm73zu<gSpMpYoc4=_~`E7E@kuWpPPr
zZYguKYeh+FQC?z>F(a!Jvryu71{ODFr~HD{B3)(%W=7Eh4<;5B7FG*}?2N>`l$=xp
z2D#!3Of|tJiA5!)1s@nU78K>D7bWH@B<Gh_Gx1DiGzdwp2w~z|%ebJlC@nELm7$<0
z{~3#D(E$d-;*!Kl27XBf2C4i_j6(jK8I<zUwHebG$`dn76izTGlw@)+aXw^X?q%@u
z%P(=tW&F$FT$++tR1%t(lb@K9nU}81w81gCur#wMHH9H9^#oH=T2X$kLWwT}%S%Sy
zPDYVL69$%IMixVcwxZOu)S}e9WLHL^VqQjeDF*gktgJnZ?mn5hnP(Y<0~8rETr!Ij
zlX4^(54buzhvp^c7Zs%@mq;_PNihierm<x?=H%ojC!S|wUCyfLSX|4@Zo(jvxt*2e
z4HE}5OIUDfQCX@C8_Okzg5-?Eyu8$$DAtL|MVSR9`9%!H%NQBsnOrMVOB61%GO99f
zEG|e*&P>ZpO;O0nV^LN}%V6SI$j}g(TH={okdx}nBAKeqd?PQ}CAFX=!?hwgH8n+=
zfq64Szkix@eqM1&Vl@kcK)@^(CO=lz90sNs<{5tZB|e$Ssd>eL48k6YYy!awY{IVc
zY@3twa|;qnGLv#r6&l!B7+BfunVpML6LXVT-F;Jw((@S}2B((z=Q$>qWR|4{6y=L?
z7^bBr>M*hDG4lUlU}QeTu-7@Kw74X-C^)k!bv{dyXI^nhQR!|LmN|^fwd@RK9J0w`
zj6%*k8B9HkT}0T~i<smy`PkT)dl>e5rxxX<=6L2Nrl*!O8@Z*HSTg9Rrc^L7*$3oj
zI<qi!`sEkp2B(&k%w)dknO9tzmX?{EnVMJPQo_h<!QktWUtAKxz;v6jt2i_-u`Dq&
zM~<24J0tUFW-rgY(BgM&fzJ7Pd8yuvJVzNAWEli<x)=mPGFTPz5|=S9NK^<2iBRzJ
z3{j9{Qp(Jk%EF_|!uEs1Q6aHd;UXvR2?pjPOzy!2iOCZg9KAA2oFf_ZQ;X6$7&r|$
z8HE{mFR(Xc=A;HE=NF_dW@YB!D%35`Oi5KpjN>X$C@IQJPftC_!mY@t5t_G$nN^k{
z->)nuGcUW6g^MwrIUpoI-zSlQ*~K~3#nFIyOJ=b`qC#;=X_7+Dd`>P-cBUtcZN8bs
zxrrso8FCB^CY*wfUfcnG`6aG-WehSYuNjj4OH2IIf{Gcr_OlrICRXfX>@N;VO-#;6
zO_|NX!t24rP{QJ$QIwyT%*Z_1rL-U?GdZy&^*NibUt(@*6hpUjeqLH;dTCJ?YrSt~
zadBo|x*P)wYZL>^88*%+24~;QiquUEQLYuK$)z?7JU<y3<}&b3V=!>b%<*MmE@0+g
z$;85v$;D&Kz>>-+<Pplj|Br>4;RvgJW^$%1D{D(=URHi)UTVr59>MHj76paO5Ecdv
zCg$TTY}sranv878Tn@z<iA4+?@kv>!$tC<;91DFD3!F;R(o&23wHSDAGjp;r$+@v{
zaX#a)a>~rJ=U|)1#D0RE|12YeLs()_=58j&bBqcFsoyvl%@`OZn3)4OWK!=ku}gCl
z1e8>Sr4|*>W?)##$ncZLF+WWq=>`J}Gb3{~3#&atfO}D5L53PrZfHSDVoB;HR>5FL
zMkX;vh5!~GDMs$CjEpmwol;X6iZ!^D6w(41927G16pR@h6pBjoCUNqMFtJ(}=jXg)
zVtvTMXvNC+jDvX=<9grJ+~k5vm&~Hn*^JDL&l!9&lZ%}vv8(&#uVoW)yUW6tz{xDY
z#>l{}pPHh;z`;GAi$#IK-!H$!(}0zcsgK#pH?d+jhe)O)tAj#maq2O~hWPm6%Dm)~
zj5G%SVhv4(a5l!+^2B0=6eUImMs}u3R>lRKUg?>|B^Ou|ofC6%f>M`rB^UdpmZuhZ
zv2!#r8D=CFn=`v6rKaY!Ffl4Juw;RX<b+~{)QXJ69uCf>O!B#j%-rn9m>7DQ3>?$a
z;@D&>m$9<evh%HCWlLjb?qOu%U=u2t&aAAEd6<FW7jv9KNxnkjK^E?FOsrEF_>~w~
z62pt~^U_16FtT^DxD-?>q;xVRDx~EXDdf&&VpU>T<X@1Q=kBABU!<^s$v8qGc^Z>`
zY2FTIG0qMK=BG^hi6v6Z3_{K=++r@x++5a7Dyc=e?EDg}jLOdW-n>d>sjHY+cd#4e
z<tyxFchF5vEJ$Z$QRZj#5VS5yP3~r3li_BHWn%4MW<1Ei@QFdN_#y*iCX;aKAJz(m
z^8BJ~hEg96X9ZVhXGebJ)Vw@C{nV88EX@2N{H%h`Jq#Qh1eN{szB5Y}>$6E_I&ktf
zGcxUFRt!je$1335!@yU?!&b}8Je7&Rk(rUnlYv8(k;#jV!IkYmNq)XUZem`gLQ+nC
zpa6p>E87%CW({5zRrZT1`KiTu>Lm&piDjt@{}_uD+>0_(6mkyo1TiG$DP#)qs3~L$
z^DtVlaQHE@mN2kgVGbxtEi6sF!pwM)iMfn{iJgIA5sPNA!har-lKl)?3c1e&4D!=T
z%y|XEW-};cmP}+(a4o*UsE}EFnpveJ<01pwc78{N#JrS+4B{oB+-%1gm<&Z(ma*`h
zWZ)0tV`uPSG%F~|Ji{Q8(#p=-&c7iiKR-J)MWM7nA*oz|@jL@Vn9x>+`1tgk{G`O3
z_;^8~5QXH#oSZ}!mTnI9)RZs=mR1)2Fa|b(oE!Ws&J3(of&vPM1q3n}I2?+SGcqHX
z8RxMpB<86xu(u0{CMGg?mSiNByk=nxXG|z4$}h`IsTE=o<Wg2hOkw3MVPG_52=omI
zR!A1%W}M8-_=A<LnUP^H1A`iaVDS%r{&XSM5QXxL)V!O_rkTYGZ<*y8tXLQdG>SD9
zGK=-gL>-b!i!0?>#Y^Y&Hs)mJr6v|Bq|M-BG-c%2%)mH}>1tkno^D!BeqxD2No9d5
zV`Xt_i9&fs<{}os#58_oh0GX6;evdAwsnk54;hse$|iF1Z)4<O3S)98&o9l1VPyEv
zyg(s0u_80KG*=<z5<9~wR-rsAW~L@4<<#P@EP|=)nHZ`V6;ktNF)C%|1v8o?=BAo3
zK1wWB$ShGvN=;A9WAG17WnyY$VUTC!Dr4j`W>WJHwijj*=V0b$6ex}1QC3KG6%kTU
z2i@rHQ<9&bQ_aN{$KaThT2ju-)SQu8oT^Y#o*%&&S<K)V;K{+vX2QUHn}MN(MIkY#
zje-3uFJm4P+i3>oZHx*@sqRc}Y57ID_6!aMMXALTm;{T>#rao@urT~%VA{v1q+fiN
zmF1;?V6hcHvmuK?ab}f}I13X8gD$H=Y3e@)1%;e@Yz*=o0%`rsZFvgDMhZ!pC0>l`
zdHIrTMyV-QpBWe)v#`A8WP8DxprOf-l3H+|u{kffQX#o0HE|Jxa%mn56Vnqmh75+{
z#Jv2HjMSpvjO_Orn9A9l6;eu5w{jF0rIuypmlm_L3#DYTG6yhBVMxm_Do-p*QRrh;
z$jo`n%#g*DoLEwlnp@DwV4jzsXTqr95q_SXCz+SEmYFe*naz@gF@cH2pP73;d$3=a
zPiCHxBr7Ke%Mu0#GX_?71`&p8Mw68MR14OWqN3E|g8X@$qD9*5EYDd%SB&T9G0b6M
zs$yZuW@3`zRV>Nh#*|S|qL7zbeu#y6A6r5(LqTFu$#+JE&5VlqX%iXPZn3eXGAJkJ
zF)(uZh_i2DQc@^O=Vef15YKEDV$@`0)L>wK!Na1-z}3Ra(8$R!iIKUHvmr&HJhLQ2
zAyJ%(Z3-hp7xO2k<c!43JUxcgisYQq;>@yCT?QWJYDU%+F~!V0HJ-+#N`*v)l*}|c
zF{Kg(9R>znc7a4|9_A^G3};z`@{^NGiz1j=nOO`{^GY<C4D(A%{s}7Pr=4J6iR3U&
z%`HvgVYtZ7IE9@>3bY@LNs57OKeJ_SW<{d}lQL^yQEG8%P6V?-qCzf%C_@%QKyhk8
zVo^CO^HC-Rh2klU0(l`U%=%(XVq9#pj3p_V#RWNumHmuD`mubhWulI`Ntt<N3<3<y
zj12CqPI>u7xf_{<6qMQc?Aa2HjdYVTOQe|D-PlAD#hIC3v2wdHiWSXb7D{du^;F2s
zEbbNHmt$vRXkj<VQ%Fshc2LMkEMCrJoSa|8%_f}4%g83p&FI3!I!lIYHm71{kr5Mf
zG7HyUcIC3vZM>}0dD-O|m}6NOtQnZ1c^SAtyI?lt=am%Y=P0Bkrsn=&7A=xuVE)0*
z9L&OK!oVWKp{$Tt#U!8`FCm+Ag^_s!2lG1?=A}$boy<<T`6a2n>_I7|MTt34tn3AB
z?9~j6%}gx944h{ec#D}Fa}%>uwHX+UxRjGC{TPK5X0mE2<YzN7rg5{EFtVF*G5%pw
zNKVXR=Ksdd$k4>ZI7iaSCABQ*A2YKw57T{aMnxX}BaDK~)0o&@WLZA*@t<X6VyIwX
z+Q-AzD<YG+k%7UBF(I``y;vcgpNDBC2h$D)`Qn`njI7?0{0xjN%)-o!Ke^ebGYja<
z=QK>!Ee;o9naE{Qte`QQiz%F!;S85*s)8wlyk-i6Ci5C@ki<4_{uBllh6+Z3bQU2+
zh0+&7j18>J{mjg194wU#jNjRVl5<K^QV&WQq^A~}aTX?LD3oR9=Nw{ZG?XkZO3chF
zDOO105lG(6D3s|TDVV9sz>&`Y8u^isX1t@$5Tj<><HjJMA<eD9kaxh1fk7!ngF#x@
zLL=$PDh7rNvLXyh-HbLG3=h=RblglB7#JDywwz#K&`=Lx5Y%L2VD`3Wn4%i?o`E5U
zvxkADM?-pr27{8v&l76G%qeOt8Vp)IOd1SHYko2?Okvbu5Wk?opw-Q)!Jy{wTZ2LT
zq6UK&7pDe;+Lb>V4C0qG7_>ThG#Jz}{%J6XU)EsI;t<ea2>$b*fnkOQgZLE<2Ca5s
z4F=OGp!_I)Rf9o`O<aRPO@~>7LHwEqgI24Q27}rW77YgR>lzGNKV>x-f@9bi83HsI
z#BXRYXelaaFsQ9z*I*F8sllM-sieW6_J>1*LHw2mgI1x627{Upmj;9QZ4CyknQ9sg
z!E?A78A3D|#P4V@XdTqhU{L$Oqro74SA#+8rIrSRnhT!>gZMoS1}#Bd4F<It{2C16
z_ca)_j_YYKD7_K5ULnlvpaJr}vc3j`8jqj`gZM)Y2I+PU25}t?2JuH44ATEK7{q-v
z7{niIFlZGSXfTN9XfTLB(O{7NsllMsBiLWbpur&iRD(gQ+E9Z*e1isq_%jU#=}(Z5
z5Pz=0pp{^x!Jza*aCs3(<qHi4>H8WCY63zh7{p&{Fla>@YcQx82n8^RztUiko(zf>
zq4+A0($^XcT6`uN4B{mk4B~Gz7^Lep7{nK7Fo?g^V37W$!61G{gF*bA27^|nsRo1i
z4-E$K_Zke+cQhE(RD?Ac#6M^-Xt|qdFo=Uf_M--a^dSuf@fr;V@lP5ITE^xY4B{&^
z7{otoFi5Y1I`)eO1EWkQy9R?AgNO!$_*V@E=?Tz~_y)03EkdM$N&Gt~DlDO<{m@{L
zz6*8OPYnjG04og!@go`x;=eQ)r1xqth`-Qa5dW>gpyg@}3Sv<W2Jt@{4ALhw7{o!L
z`B#HM%gRQBK^zo`|DcYk&|nb%ufd?DXRE;=J_qC;Mo8F*AJAYBXVhTO;<wXaP<tZ!
zf?1qNgF(7hgF%f&EPz3rS%X3Pv<8E?h6aN;C|c$0K?z38f<>HFgF$+>27`D?0E0N2
z27{Kqg9d|mhX#W<y9R^wa!`^J`@kU1p}`>i5frik4C0&`3|hI4pnwcu5a-fh&`NOv
z#hbVWgE+SagO;i@)CW8eN2>*hFJKVo)nL%dae>Aep9X{UQw;`jP`2RLV9<(o)nHKD
zBff)CTtI_C`Zg%k0~o{wH5h~nPH?eRum*`UG8nLGfO4-e3xly@of```TLe>_EF(h(
z6DSQcsu(LxkPkQIIKjmrz@TLY%2FW1FK93*oo41?VC`TLlmEcLqQSs0n@ejeTL6Rj
zjsOPnivbKuUhF&!tTUL|AzUpJt^fw{8vzXBmjW1+PIB=uu(}w6<Sqp;Xl>>VU=aTi
zz#x7(fI-QFkB5QH(g0-C<p2gPBf$U$H3@|P2JtHa3`)lZc^FvzK@0IfT&;~F0Sw|6
z0Sw|-0~nOtM0prkBX~fDUJYQ-GLQ&h5RV985Wg0{pmbD%2Q-u}o&e!%t(Oj95U&Ve
z5WgP4pyVRM!@&B^9HjAj0E5;&J!l9%&|uK|u2;bzzM+Ca{6PhSl9fIW18W25C~)zI
z0SsEf`T-2$7XlbS9O-3H?>!1&kUk#3ApRkMLHtnwgOZd1T+ibG1}$@g00uPy#Q+BJ
z#{mq|Qvw*2BoybjaAa^Z1TaYN0C``r+=fGgfdQn|kcWZQfJsPk|3Z!lAO%{sh5-y}
z3lvW<h(8Trke&q%?PmcD(z^o~)EJZk7{s3iFevdD@i4G{U=RcGp9e5#X&41CfW7`a
zfI+$;fI+W9iGv4Z;i3QrwFycS7{y-%Fi8IkU=W`Xz##rIfI&;%IDkQX1B4^JS%V>Z
zhY};h1p^)i4F;tv#ykwHKiH#`85uN~G#D5v7_>D_Dj3960~o~L1TZMMn(#2N9$*$z
zgYc#22Qa9u&<J1<e;dFceIS5AtwIyR(GoQUc}F{dLHu0+gOZ^sIF8f`bRYuK?Ewr*
zGxYqIa9jX8c3A*J^bb8oh7aJ-k^UOMp!Nb310Mnyl=#hf7+4FK#S9=Jua#~Vzz}U=
z$jER*ffwY_jsS)%0V75R2atmU7^Lq8FsKEX1Tcty3Sf}_8Ni^XVG7}B1)B#jsAZT>
zU=;rxz@SuO&cncZf<epz!k0c7z@V036~G|=C4fQtX#j(ofi;AqWo;3_pcY{}fl>Tx
z0E1GL1rGzO2eTNIFTD~J26h1q;@<)oqz?x$sBzdsI9igH8VqVb>?bgS3pp#x3I??c
z4mViDzgI9wcY~5Xs6hA;z#zRGWVK@l3n-&V|Ar>tp8*V7(jfO72w)KZ8Ni^FX$49%
z?4Y##D}X_|C4fOq!6|@29K^XFz@TOU;`|O^&|(HTydi)={C5C@Qo1z{1FHZFNY|eL
zu)X3B0vN<W?5EJI`8R+;i^V2@LCwKAfI<9k0E1Gf4G#nB1tu{N|6c%ubWs3<_<{fi
zaS;0=G->`1V37U>N}4VK4C4PmiNhA09mHHff{XzST5-0Jw5i6x7{DOC8R{<(`)UA#
zILKR!0Srpoc2I2soZ?IY3|gLcpfGfW@T8|}Fo;WNKnmmMh{9OO+8*peIoA*T3=0^v
zqU=Gj?yA5c&KkfVeGn91t`3Z#BVwgrg4|xg0AeczI)H)@oXgn*7_>?qKu&cFU=U{y
zV36J!0I`ZAfI<2!DE{3brJn$U600K*1FHk0nA-vdaZXUYI0i6?H&lQ*(rW`4)MmID
zFo|;oFi5`-U{E{Z_J9$@QJU=p_8KVcxdRxqt~h~w<{rQx&K<y@<me1B6U65UV9<&O
z1-3^3gE&tBgY;vN58NFX#d!l5w4^{Gx&X>k>UM$qfiHkTdJV`6AZ>gB3`&fykkSFf
z=Lh9=S4a$q^9L|U*Mdq1j}?NTOtTPFI(RfNi3<cUfV0~Sj|q(8f&mO#f^HxmKzY)Z
z8VpG{JV3XHX)uTjX)s9pYA_h?2xN>%6K0;n3c4*h&W(qGHGm;1n32JTO#^g*yka8D
z4H=<=<1)nz3?fmC3>$Q1SuTLiE!BDeY7QKU)?i>+0p`bZYcQyl#A-0GG=TZ{_(1KA
zcnt=Y2rxfZ2-HqY&|qLO0Q2vNYA~p^Bxx|PaDe&Ik{S$ZCMg;WEDu179kg!AfGYA-
z4F;ASU_P(B21D?abVi0H8Vno<WVB2bH5k+^G9jE;Weo<kJ6RA;tEvWrT0;(mvsNAC
zj64YEs-^~m+KGG!=dZQ~gIZ1@grlkls=|xG93dli4z@S$ilvMllZBWi7=$EJ{9G6q
zsu?vH1O)^b1R5ODnKc*~xcXQ$7_@(}XfTM?LIPB~l0$<*tWg78b!-3N)?g58)nEYC
z>DuM|pxf0mL|HpnSTz{5zX@qDDE2Yl^<ZXT6%o>4&@L6zU<jSc$k4zF+RV(L^+i&H
z!H{7#BO?o_!N(K8pj|AR!Kk>H(NT;!gH41(gF$<?yat2VQVnnuMEkI!27}mg4RGT`
z`?azLgV;(9aH~aISWSaLaW!K?HnRr@s|JIXwT1?RQo~wNdFBHgB0L%l+R0iP3}T?>
zDac{nIvNaOn;$TO8cEul^)wj7wu4d^;|eBietiuFv0WMr;*&HOw6paeFpBN{z#u+F
zgF*T^DA^uxU=*LG!Jr*%pur#pYEe$tV34`3!60^I0fYEV4F>IaLk$M!<BSXq8VnM1
z0vJHarQwtYgZMlR25o1f00yCR7nwnxov*<lb6A7H`8-&u_(BZ^EqhQ?xZ#2Yi+G#{
zgLD}vXs$A{sxW9UxGZ91P|#qI`KG}j2I_Sz)nL$0GSOgARA=hA2QqD$27~k?P<rsy
zU=Uxf!JzGD8o&@#!o<+Pt-;{3f{{U9gF*TjNCBu3y;6fgTgxnfA*h>)p#jvwURA*$
zy-I^Ypy8q?s7<w6gF#!&T!SI#GZRCDt_Fkn8Vv^NX&MX+p`M_A%UTTvZ6=EV21P$+
z<s%^5*J&`wRB14X#b_{yuh(FZxu?P4oW;!05Wp(FfrCja%2I<tiJ@pI6G-hQ4F;J*
z8Vq8k8VurFG#Iq4tTY(JKn>n)8VoY?G#JFHH5kOVYcOc5S!*ze)oCz@@6=$BSqDvV
zyEPcJm25N^#9A~M#P?`0$n<G2h=IB*`!pD|rEE1A#JV&XK&@n%G7Sc?UJVBELy%xo
zoxr?-1=KFrPP5ZsP@Tk_z#@K3gF$)|C`_hmFo+-5V9;i<4`5K730j<^!61G@gF&W3
zgF$GPF9XQkCp8$f1spUO#O7)+h@aMAkeQ*upt^wh28;Mv4F>548Vsfl3z;R@#LsIm
zXd5^NFo-R2V3fG1!65CV!63E_(o@vtan@iE19dyDYB0#uXfTMa`T*_*Y6rMzFo>;%
zboyk@KvU{14F+u+S5Qjb!3gT{$sEyO5ZiJB+}RVFp}}ih09uBTx{aCPtOf%k1Iq#~
zhL$;?rh4gxd(5DV4;6Tsxf$#k<k>VB*g?Hm{dt@q)+G%FeOX=*>#_!e{u}`i>xu@0
zzO)F4byb5wf0j6ibxngoUs76wft^8t7j!E%0|YQJfOaY{FlZct@YSF+X#IybL<mee
zD1a$A!SRC`%wAOQ>f^@9$Y>1GkjBWckD-i#k>RW0h11Lo-i+Q1pz~=#K`zb6$iSdi
zoKaj-RFas)pvS?WUYX0m@F6z7I3q8mf<Z5@OfNGpEuTRTG+(Y4ALVCi9PjBD;u_@V
z=o4>{W@4FQl$088WE2ltZV;aWS^$t5UsRe`l9`(tpIjPmkz|-?nqq8jXqlW>P*f69
zl$ckXlUS1K3R<J!YG~~27m&)$5E!4DSDKs8uoW@_tp}RnuV>(|Wbn5yO3iu95W<wk
z@IF4TEWWrTu_QA&-ozw6ok8+(e0-FlSuS|SCEhqilOe@3%O}&&m4#uCYgvGIMnFbL
ze6TSygK!oj0|OsJxM6&-QG5y`{}hJme9)v*YRWW*DmGOn{;3Sr@`<5LP4kn%^QCzu
z1~VC|__Y}Q<PGYX8$d)8h-d^6U{))LRVi=qkF5bjH1SPi;IC&c0JA|vE8k4001o~9
z|Jcfu3|yx&@c&~|;h)0b&i{|C4q}Ql|5S!ruygq8nfYfjIPupr*MjWB>Ja{aY*io|
z$#+MpRdH&`L<SX5xD~pV1!QDog%mTeFf#~&f{m9!&Y*;uzmp-0FO!+Sn<0(Qn2EoS
zA&p;y$xq%ugQ*lml!J&W5RoTu5WrFjBFaHT6<;3%zXnq(ND4_Me*jCil7VX%1AhRE
zB!4G^JAVL6F<&=`E5hH$;LWeWRD`J|A7mmiW{WdqF-&uIcTX(|O3cgN#>g$sz&1;W
zPm+OOf`N%kgux#)I~~Koz$DJV7sJ2?5oZ@+_`?ufnU@TjE6uD*1x?wcF!0JV@Z>P?
zD>5+hD=={J%P=tWS1@q!moRYg7cg*2GyGwA=b2Yhl$lqYnd|{t;^5E7uf)K>Q^mlq
z!ob3>%)rYk&rk?i=;4ybR260vUr<t9)ebU}iK~r)UzvfGUx|T-Uygx^zlni|zkz{|
zzm9>IzlMR6znp=czled8KbL`nJ%iyFvwLbuKw?p1ZfZ$t5oCrmkAYu-fsv~OJPXIK
z$iU4i%ODg~#InjgwFETvnVFwg&%iIwz`#`pvXL3&3Fa+q3~~%N;)`>Q4B}HV%i>GT
zOgz~5Wf>S)gBb*Ud0C5%T^vDEjyo7Rwt&s&oC4C!BA=+lz|Akqz|3FGz`<X}z{y|8
zz{Q)xAaC@Bfrm?hfxnCa%;p0La5Bp>psC}3#lX!W$G~62z`*~EftUXY0|#>-1Aj3C
z3x6I1JAWnv2UiM1d~!jhvCBOM4qgQYo+1WbM+V+U47^GVG_{vKh2a;ITWMahduoYe
zNl8&=QfWzQaTX-x!a$w}ha9U6!ztG?(3%6tnxS$AE-41CA_iU=27YM<RxWXd<e=2#
z{Gya(M&29-PB{jyg`i}^#4pdl$uG^o$Y0FB#-GQ)!Jo;%&XdCM8nm{eBsDy<B*QHy
zG5s(o<uLP=fl>|=H03M|E&;8-2v5u`(PUueX5{Dq#WXWl2S^bcND;q011o<s0~dcC
z0}p>C12=C818W5nUl9Y}DJFhd1{Qu91~zU92Hp-vz7huhPmE0b9t?c^Ees6&Ul`e)
z-BU|kUUP9YFtCd=a9MJ*8!&L1akEP>uo`nS2{Le4v2dk=Qvg>U$X*su3ger?5bvB{
znpg6WfrVLyfvbXnUycD3J?tEk42*oXc7BPu{*3HW44j7;xJ(&%#Tf*GfAGqu`!O)H
z$T08)FtA%Puu3va3P?@Ob}aEpELLFP3TEJyW#AHE<d<h)<d<XM;G54V82nbS+cz~A
zygcCo1HT#rJ1DzoFmUm!GYIl2GsHV5CTFBhVc_CaV&I#=z~{!m*TcZ8%)lzoVC`0v
zs>Q@4#K4uoz@)~&X~x7P%)lnW;ggt?lb^`JEW*I$!@w@az$ePUD#-9%%0D@|v>-7r
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

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/Win32/cudart.lib b/ext/cudart/lib/Win32/cudart.lib
new file mode 100644
index 0000000000000000000000000000000000000000..385e92bd4660ffe8771e5ba30803990d7668f4ab
GIT binary patch
literal 115072
zcmY$iNi0gvu;bEKKm~?oX2#|g#%2aasNx1tuCalUp(U7|z{SA8?8CtD<`V<MdjkfB
z4>=5s3UUy<=oSMb2peQEFoLjQ6a%AS6a&MbDllf$Z(smnhCd$|K$y{F69X78s9|6P
zVPhW#Mi4f-#=r=|c{vP>Ae>*tzzD*5?-&?CxZoQDBM29zFff8}VGaW$7(ZiREPTem
zSik_q6%3386%348GEh8&fl+G)1EZz}6fa_6)Lg{CxHtrY^?xuhg78uk21XEGe2jq+
zgbf}sFoJNo2m>Ps7oTEa1mOxU21XE8D_~#*;Swtb#u6(AhMyu}%&2yc0gTIg7#Km=
zRD*#Lgf-SMFoJN|0tQA9*05q=1mTQr42&S0sl~tu#w!>YGgmM$R(yfr?j#0A5T4e@
zzzD((hZq<^xLu8b5rii#V_*c~DKZR<Al$0MzzD)^D;O9-xc2}9BMA4~Fff8}vlas*
z2)C?ZU<BdrOAL%4+~dc<2*Qmf42)pBiGi_k69eOv84x^8fPoQ&`*$%gg78EO21XF>
zxxl~(!o6+`j37K&j)4)3XE88Np2fh}X9dMO7#RC@FfcZmLGd~U#-?=)jIGNcxJ`wD
z5rmtUF))H~iy8wX2u~GYU<Bhn2F9s<42%;@pm+-d<Af~?jI$0v@EipOMi8FP!oUc^
zGqM;ML3p+S10xtOV_=-UjDc}_85F-`V4VJrfwArs1lPMTFoJMJ0|O%n*B@bE1mOlJ
z21XDzTgAW#!saRrjOHo~48NHm_*WML0|@`FU|;~_FANO7zc4WFWq@GwSqzLIY-Pp3
zXl2E~@QV+O8O`(<z*t*?ff0mtyBHWjSf_)55rnn-7#KlVkAZ;^jQ=q(>iuJ2)a8I+
z9S#OY5Z0?<U<BcPPZ$_MIHiMu5scXw7*p677&D9@IBgLFBM7H*F))H~`X&ZO5Kfa|
zU<BcGH3miyPVHb|1Yx!k21YP`!@$V)hJlg&85E~6FtVpHFed!~V}}133=sT)f#LrH
z21b@25X=z8zzD)g1q_TJ%oxJJ2*Rvi7#KmA;T8iU2(wl&FoG~k83Q8-GrwYB1YyQY
z42&SmbdP}%gqhPA7(tjRf`Ji)IXxH{!FV47Bj-K_M*d?E%w@*F2*Sw?42&Smy^4Vm
zgaz#w7(tk83j-qv3%D>af-t`u10x9Y?O|X9VV+eCj3CUriGdM>`79V1L6}#Mff0l`
z(ij-Q_yz+b#|;KX9t{W<+{eHO!rXccj36v<fPoQ&cd0Qjg76YM21YR6#lW~^7X#y-
zHVED=!N3T@d-xa_L3r0J21XFxJ%ND{gjZi-U<BbcUJQ&Nyw;0>5ro&AU|<B{O<Nck
zL3pzs10x7;Jix#R!ka7@7(sa36b42R-p<Fs2*O)dFffAfRv89H5MFVOff0mPhA=RK
zu)+)mMi5ryVPFJdrFRUBAgq$YzzD+1Neql&{D6T``2ho?ViyFf++$z_VWlbtMlfbz
zU{qpYU@Uq7!Noxgj37MY5d$L#&+=ek1mT$>42)oWhJkVB83xAoc@W(7hJg`;I|LXQ
z!MKfqv7?QFamO+U-l@RA2*S&6F))JgiZBL75MJ<wff0nW<QN#icnSk!))WRt5jzML
zwP9ccVUaxyj37L52LmGrPtsvv1mR9521XF>Dq>&+;m!&MMlk-wz}WeTfl+1`1j{dB
zU<6_5EewnxEU}M)5rpLo7#KlV+=hV>gk|*@7(rNS4Fe+x%PTQ3g0Pqi10x7aZeU;p
zVQD=EMi5?D#J~u~?-&>tzGGlqlmfwG2N)PZSjvEb5rlJE7#Kk~w~T=igmeBeFoJOI
zCk93k&f#KU1mSER21XE8jbLB|;|C0kst*_#g`6NbyNiJlgqN;iU<Bc1CJc-qyg!P8
z5sV)&FzyGbKfu5!bbx_z85A$~VqgT}16d4=VEl=J@xUhrh96Q8{IiFF;b#v6<6IRm
zX819I0fZUnOk)6HhQBWu!1!Mp1H->G21eln5NsjCzzD*YIt+|pyorI)auWli#Ue0f
z_?yE3!i>UB3}9@!f`Ji)=h-nZg7GB=#(9?*80UY2;yeb%`FRYC&f6e3^ce#q2#396
zU<6^iV+@QS?68M{5riXC7#Kk~DvN;;gq@ri7(qCOiGdM}TNoH)S{NAZd>}aJ4g(_y
z2gfilg0R&#21XEe+Q+~M!q!_D7(v+CiGdM>W7!xOK{%d+ff0lQUobF&a8LpRBM1i;
zFff8}YzqS;2*<H8FoLkP83Q8-Cp0iHg0QO$10x6r-(g?`;gB!}Mi34!U|<B}Ck%|?
zPZ$_IOd!~083Q8-ue`y)2*RsE7#Kl#^Ew7b5Z<D}zzD+Yw=pn+@CFkGMljyNz_?)t
z1LH<32;SbuzzD)SBp4V$c<liOMi5?S#lQ%{-bD<IAiQ%P10x8}UB|!(!afZQj3Df%
z!oUc^UhfzfLD+8<10x8V*f21f*f22sdj`ggA-5R7I5dHQ5ro4s7#Kl#)fEOt5MCX`
zzzD+Yb}%r4@Ol#lMiAaQje!w_w+S&Yf^cFJ10xuJV_;1D#=z*f4~i`q7#%Gb7#-{&
zIJ$y?5rm`OFff8}<TD0F5cZwMzzD`{42-^P42<4CAlQ8s10x9A7%(t`u<JAiMi6$B
zVPFJdn@tRiAndk?ff0n=)fgB-*kc_7BM5t1Fff9!tq}tw2>YurFoN+821frK42-r1
zAUME>ff0=FF)#+)V_@_=0Kr}n42&Rb@5I0e!Vz%{j38`(fPoQ&BOWm@g0PGo10x7a
zSTQhyu<RNJMi7o~VqgT}xGn}p5O&dGU<Bd4WekiUyf2G^5rp@CU|<B{L?#AC5KdrV
zU<6^&Jq(N>Y<P`<5rmCG7#KlVd=~>F2$yVNU<Bb(H3mj7UckUu3TpexF))_NF)*qJ
zK=C04M)gAsjCCOpTzidy5rnI+F))H~Z43h=2v^52FoJMp1_L7)-(z5`yvM*Ow*rDC
z%@`O#xatZ6BM8@oFff8}RTu*!2-n<WU<6^~BMgkjM;I7B?}FejW(*7<{Cy4s0~o6?
zFnm{GVEAeT!QWOeFo3ZR1H(5R28J)&Ao%M#1_luR<ix-L!k;Y|7(n>b4h9Ag{&*rj
z-qSb0KPV*L#WmPD$TJ|sKPW!AG$pa9#Mmg_(9nP(KHe|X#|KjtLp`!Gh@udWP(SZ@
z7sn7shWPl*+=6(pQ7%Q9WvNB(sU=~lMa7x<c@8EFIK>gVf=csBGILWgwPBS&=yOjk
zaY-%9Oip#qFU>1~*@Y>JMMpqUenDzcNoH!Xg9XHiaBZkk2))i3`T51E5DQ_N(8Um{
z-BU}PGZORiQgd8Vi<4pMF+~wNoQqNuOHz?F85uyFhFu1s(>=AsC$YH1wWuh+$N{Pc
zT@0Z*AT>4H5mN&eVT2y{REX)pB}JKe=|~|Bwi6+WslzWZHx*qyObnsgC$TgyIm0<0
z6e)=%nPsWosYQ9IISwXJ-{6xcXi9uRNpTe+qY#P+n&(@ZQ<4cy2ZlzFD8k`DbfxHK
zWA!GIAa?Z#w}SE|#A=8pgba3_t`*J>s7{9HgNftR1u+<hR)i$Fevka(61UR4WHd`r
zgmLLXn2PWvOd~=Lp&MjRaB7KjVsb{RbADc0W;!g_VVA+s8Jv+=l$zq3nu}F87Fkpi
z+*3;&OG=6|lS)evr3%Pu3<*?y!ASbx;RMo$A%V~r3@iCySqnt~p$=ZC!PKD$Ak+n?
zmV_ndWTrq;HM~s3B8;L3qTDSfF})aO0o);QQG^b-<#0Jr%wmcnboeIb<m4y&Cgvrk
zr>4LI2U8SX2Q20xDnUGS6#<zg$r%oYW{~U)QHKyisCFw#g_mD2HbNGn&#|Z|vC;un
zTBD00RD;#Ir<MfdB<7{UeS;~A&;ha$EDsA_6aj=fh@HNf1-Xd@1*s_zEk@9q4W}eR
zzk6y4s%D?mveX>76Y)qR%m6tJ)evMyW6B_OLL3On+n|^Nr3q9Kgi4SdV0F-T1u`F@
z3Z%jjlyKl4Kovn%2~U3k`I&hosYNK7uu5X+hoom{aD(h}Pc4CqAyoUO=DMerc;=<$
z!~KaOf}%3Hpc0WhQ*&WlbT#n>B`L*d3K3%Hs*PM6;Hd&^CR6}Z9mEWD#RyS!9U=M9
zL<fx-U$F7WqBwLwjl`x6A%(8j$OUGyF|-1P*oP{PQy0Ww99j{Q==$A?@^i8I5>*_h
zE{MTKC_aU2MM$FSH*$e1azJ-7stg{T5aV%bM@XZa0roHUz{Zfmrx#%ZIDdmv2eJVO
zd2~~ZT#(f{7{iKeun|}!@#}}$gU1kr3Ure~@`EdLlk#&AMLpOJD8jh(Kum?#5hxlF
za_G82@r%_?Gzr}L5N0F79ibT^i*ABrab;dInnw|0SXDzBWvE^RYe7h$>w_jNuqw2Y
z2}25>UZ@Sw5*ShzARB;?M>ho&7U1-S%?(&2@#{y}gBsch8xShcO)_$UH~~GAB1CcM
zfEbBY8$t?GFLL-`<SGnF{Q9BxpyeuLLl7!3O+pK1^c;>wnvfX?+Ys@9RE~m!6rl#)
zG+2fPD|0|CurcNE>V{Z?#|VT1baO!7hU9&0?!YEXzyyR<h(JLz2B8GStm4!Xc&o@a
zH5bN3R|6?cV4XyWLWCH)YEaVy+P#M;g$iJ*gP4I-uoS137`Y%s(RDz=3*NQ|I~XB`
zRW-!pShOG{(DlLcD^lcw-374;B#J`^#7K|=XgnaaA*4|B1{9^HrIsXTK#WFmC8h*!
zeGs#8X-3GRnBbUFmRX#N+`dE-K~Wi$n3oP3!h`pLkt+}ElKAx(Bj-E}10b>p6Wmiv
zpqV8lr6{!+-i5^`jzw2+W>qSzQ4ZGv6GW(Y%FIg%Nv$X;ElP!Z4_yqaYEasS)=o(3
zp`uuIKnqWJzC+T6EQLcaT6YVUCs7Q+q6T4FXkHSMU!iSQ3_*l?_tX+-z&Pe)rsw6R
z=9T!TrGZKcsJHPdz-CTRYFcVhYF;vOyg;o$kwWMN`7XG$C@nEL6*-7NxeSLCLN6%N
zAzD!k2kFHjg{0R9-c3Yw#oW;ak<|yMmbm*sMo(a!WOpAlL1gtosp*-;C8<SDrD<uY
zMgB=ysmX}(ZXaB-$R_wE7NBT`#flFW31oetdAVphp=rV02dfmS-Xgs24$Z?Qk8DbC
zY6-H-eG?1dU2AacfWi%z0%UX0JPIvKq1{J!^l(5(Bb$NYWr#9(VB(fXm=cbZGGIjx
zx)?&Wdr@LRMrLxcJ3N*>a}(1MB{DvFe5OD`3|_im8iS+&(;P(11*I0}mlh?%$H-s?
zVON1^5=?(^Y6(WnLcNYd38q=Ti3KpV#TY)rki^svjy>EaV3Ec&1Ew7`WCk9KLmyRw
z1rT0^nC1qTCSm9R_bT9ZGt6N8DltvQFcz&|fF*9U*noQwQ#ry87h@MgLwMl`OYNAV
zxO5c5Ygtr15OFkJprPl?qSWLPV;5-A3UxYIFIHJJ6F@FSH33@Kfla_Fi!cEe{$RDR
zA{iFA7|9X0Dujt3H3lGC!IPZGp@%ApO9v#BK!qf#Nf2=~U0A~ht{1B;nh7A6;tV~o
zi!o#oCLo8N0a2lcT@}Jau%9tZLP`>t23VlXWgEK~8elKR;K71j8qEzTB@eRw=n`o9
z(8?QRotRQ+dSU4fOR)+K7f7*<CXd4uL<`6zGdDF4G_wy$L-2rr*@sglZj*h%#U!*W
zgI32VZiJUK2sMOELoal(n}@85kcr^F0IV5}-8i@sLS`Z6nXrW)Bs>smP)xG~Wis^Q
z096o&dXxx5=zs{L>cN`Xp-#2LDv7Ee<VK9F4%3fS5}_Zd9I(X5ys+>ms0d-6i?Iu)
zIf$%;RSs1*_B;;r4t7~o6VUTHOfR}PsxHht4%3GzgQ^pj8PPH~Ogj!~>}Fuk(1>c$
z5@s4sg*eTHBy?z|h7KJ<q6<<sq33%uw9*;bYKU3z42{n;WJLtr2FcO*41=p6U=k!d
z!-lZ1`Vyf8)hwsf^i0G;Dq|N*xB#j;*Sr+i;vbOtP%f$(SdI!yEh<T^fHv__A`{Zj
zM3+Z31(D{_)xnY&ZWX8|`6d>i7=e^Au}Gon1?K`3-AEq6Dv8h^l2MeJnBrQISpo|(
zR1t(qP;r-Env|33mR|&IRYI-7E`wbsXigZ`(MQ$?6G!NRxFfhSFFB(qKMyo21sx;B
zDuJ#KwCXD}H?suRR)lCm7Dd+)oLb_8sRLOQT?c3l8`2sZXlTG~LSBDkf}CR^D$rKw
zpy<YwL)aZ$Qk0sQ3t0&V4@opJ?5e{vOEOSK43LdNkwn+;l3H9+lwXNz9g-lrdWh>l
zMg|mR<`-p_RKlD6=yswgKsN`pL<D94G)F-6qe<Y=2N}-Ar5P@Z#RM!tg?%*x+(}>^
za3euQ01hd1+mKT^G$BBAqDkP<2eB5HX1FZ634x`lMQHH~7s9F*ZW6+KU=46_bX|@m
zC5g!yzNxv85hB>IJH&rjB=PHqScA_HgbIX7u4SotC6Gi3OT%bFSk;0OFgQ+Or3jKH
z6gf2AL8;04MJXtn5JFhhLL3cErC?hi8sOqsbs^jUYY!r6MU}*_A7TwYLl7#^OhPIJ
zKq&(303<Oq)oAG%t^-XRO&2(Up+p>91Wl!DPGUiEYD!3EE@D|3*h%OT2z`(hR>m&y
z;Ug3QOm&cE8hp|Uye`ievN8iaPlKcbJl|&Qg1lIzIJE>SfT<2LkB2mU4OWa0#nb`G
zQb^OpU>yii96BJ8iB%gy3Po>nL8Y+^ECwK}3Ltz;RS@?=3nG|OxFDu_h-;xqAEq8I
zh(kTZnb<VJWe_?cMNN2OW(hbcpjAbv;y86d%!OqUG$Rp`==vQ~Qk)ZWa*`60v*8I0
zq8VKVk4~uZ(B?OWc7!y-3~1XPW5q2f$KjGg=mxdMU@c^LaA63dsz<bRVd(^<0aX;C
z1JZ(YPRw&mPEIW@4oF2>Ziq_`UAJpqVp2{jNGrq;Sb+=Ck4+Zc1eeTWG$Wwt7GeZe
zX@nV&#0s(>J~)degiS3ZX~WA8@cJi^83=K7UB)gTd041ItU!oiR}If_pa@6S0++z9
z58?{6j0LhDE`diMBq8F`43|Zi014)xRM6}wv~`argsv93qCnAsCV{RGG3jdP;**(|
znpotUSP`C?Qj!5r-w>M#D8yneO0NNK2wW6h2Xc=B6gdzb$fD>vu=g_{`Y`3tbz}A=
zP;AB7OM#n@zTO`ti+~0@&~^);^mQPn1gDnZH3hpox=)Y`Gt5{+EVlp^(pdBc7zH4y
zffl9^_kp?-=(1Q$fRwzj9t(IS25OlD3Jq{q3_}gVw1A@gw9K5;BG0_clFY;$P{$VJ
zU{Ivskiyg(T#{G>@36yk!3D9Y&o6-W?-9x&VhGjnuyCpjaQ1X6E%t=BVR1-d(F@lJ
z^AubwiVQ-hXF)P(Qx&L%?va?6k^^7mfK>uTpMODW9=J+}YBYluJ)Q;0*rZVOg2vQR
zbD<g$`p|_@^neWYg=;d04$(txLzO_$=bV#YoQjZ#W+2akWK0PpeYpksMJ28kC8<Su
zi8;Qhx%owvu+-*>Lk^)ERUgP#;K>E(Ko=}-2&*D!BHE-U0h6()M%V!DHlR8RR_)=G
zMCeBimEhFe#Da|cB1C#Z2{aUGgc-q^>3NAcFektj6+@~&c)ydNDk4pU)QLnHi%^O%
z8{Bq<rVw0iC8UNZ(-4+}$|*cXA`~LbMT<JPLvchciaf#;yfG7BW`t;7<BJ@aLgLLu
z_z2{6LasolM%aKaxRBgUgfe2yM7RRvX8Z;t)FMm=_i<r6bYQ6yLl9Gaa6w{GaVqM*
zVUP=8TCvF^OhGLiKy@h&<A_p-Fc)S!qzny8EiBC}N(HUUL#&M<pafwShShisB~~rM
zbjT1DbZwtMWN{lT_;JbM)eTGTph&=C08AQT1~jjtIssZe;*vw?Ml_xwj)zT&fp>nx
zss@6JaGM8p7GC4f)evPGI3S?)IlB9h41_7eZ6?geVVSArc%6w=A;MfpWI@+(LIM+3
z`Qwm6=!M1;R?WEN5V}G64zm6eVlB*}=)OTQ9zzkrJpbh6(t^ai<VxSf3ddy7mUgF{
z{N(K7fYc)JrtpHIe9#C$ei6I?Crt+#HX(*aVe^ngTZyU_yWIi#C8>F!w!L#sDQK-K
zWNH+ex{z(csSvxlkkEq~iYU8~O~j%EVHS9?03`Lm(h`~wnp((~c)$D<&~o;G#G=Gp
z#A<TTA~+oKI86yoEx~IFiaeSrjwvY!>)_)pVE1E6Vd{kpfq=Y%p%+aGO)o+g)Jen)
z103==O+oP^s8|Mj0bvS?JenzvDWFaH#i=E@{DCZmrWdla1f&tCKcKo%<Z+sU;!b3L
zKutlBM>EASB?UA#2yzTYY@kS>>4V9kxDakPR#_Y-ptugh1Qb~`6F|eZ8JRgL;Aq3@
z17}QWG&4|DxTltY4MWY7D25;_K{LxSCB-$jprjJ)6j)mUY#xRTnoj4O{5*K)2&@Ax
zf~FE=wp(Uiif0}~1-vE)6$02KvFHcYs+9$(_JOn_iKFRqhoo~vK?imtiYTUzp!|Gr
z?!eTADub!hH6=Y2Y10D8YoKunxG0(qsM}pq3sUn^QuC5Q2k2mg3uuWKx&r*>U~@d0
zRY*$E%yLXgL3IywkP94e*d)>P2c_obm!;x10*5@BDbOYc$knhO9@qhB;%K@&^NLFn
zLA7QHVnY#F8@dE;eTcdlB_ALefT{w`B*^hGD7g?JgjFr1>jZ5bgB=Ue02fEo<yw)N
z3=IX8kU<ki(}hh3k{CiYWOx$1D9Smp0K7E|>Ne~$_;kX(04f|YwZo;+&G0OSSPeQH
z3B__W2|W7XW+SXd(hQeHHvv2n4)!(pTnSiSgt#4xB!2x6Yw#I@P(i??G9&Q3Fv2&e
zjsf*4K(j#vO@UYlQi{hYgd%kFLJLwrr)ohG2G%?d2`c>Rh&C1C5LiYeU^GH8y7{ho
zDUbvOuQ?z_p^D?y1u+>VB_g!KB@z0;xfqlm5sghmYXFuU2r5FD2U+XoT9KRq+7$|M
zJJdtI`6=+tLPRJ-m<ez2JC-G8=71(JT`Kbub2F2JeN%G-Qj5U-E6m;$LDdKw;2y-*
zF2x81T#B%phtWR7W*$~WSj>a9`S8RMb|qNMf+T!+xWU5!NgPR6D)=}rr%K3PTgc%_
zpygqudC3StgnH+a3h*>%0O&Zt;*!j~bRQ$|)EjJC2Co8yIbc^I(x!8MK_z@r3s>h1
zQxQ({uuid|*@>YBr)e1Hc7X~mG}AEDAWVbi7OY;xC5K-(Ji~(=g3SoH0(5gQJdH2`
zLkgc>hy}1D4{-vr0SI|?Q!oMw;Q|aPe0mW!U^f6Ek1z!sXQ2f-`HAouK{O$(Y9U5J
z3tuD+aB(zUkp69Q0k|^*J6{5RA_v$2+)D77g*e;+k7;O%@R?_bSkr~+DySryek_F~
z+=s9_9c&gMg@nyT@(3Z5(UcN4+t3BI$BxCdP$g()f$CH&iV<OeoJ@#OOq}`19wfpB
zH08wE0rD_(P8S@5I9v}^hQ&<O@c=w^89s$*=7M_vpgDEOI#O_F3^v#ab|emYG*iH{
z>j)!29b%B7D4ircYVeyDoC;l#hY~R$^AR>8t3fjj<^$057H<Ec$fB75b~#J|Zogqu
zfzKplH-pMpaCoEGg{%VIq>9vJuv#o(0IN121`<$+%Uqam;BLTfDpqA^W`be>WA+&`
zLyA2@2q{K0A9ETWVL0|NK%#Y!U=t!gqNGzienHWJW)s#hg9SEf*-BU`n%S7XhZ#(4
zXkk@Pv@Iz9Mx=a<kb>EQq8`JR)MQNmAmSgP7c>20Scpp-QFdawmIxcMYeKUR(wG4s
z(1|s_fHqBlPVa<EqUlGL#~#BtRiK#!aS7-UQMg_3_`@QHrrS3)7p4`bGq5T^m;+rU
z1{!tsP0bA{%FKn0kYSg>&<Pzx2YDEF_AureL2$u|p#<G5(D5@+hrs(*XlCJ5f-nng
z7brAA1ub}`GUD7`Tyj`+gQ_K5y3yp&bi1S`m8QGomjo1L<{?fk16z$Lh0q&X3_Di`
zI#md3Hei*&rY|V9Br!7&)<!^RLx^M7m6MuS3?Jq})&`eA=mUELVjw~#YTq5JEQSeS
zvyqK}&eK9Iz$T3_1Cln~a!QLc+yg>gz+1h8TznnFi!zapz9y^+VIpY80DN_TYhFoF
zC3vMi!dIy!kZT3d<nZc-^tE8)a9E5-C_tD4aWP17YFc7xP6=pSDL+347NvNk5oSQP
z(LmSDK?4<C46ACWgD|xqB+&JNn(YDk`8iPApwk`@+c4$u>V{f^+X#dLggKzX4PrO6
ziGU)2MIFQtbj5H{gbrxPg9^kD<inCdzC{RPsK*!)0F~xYvoPc^bR!Q)zzaU8ZVWjL
z-5~S9n>x_7qDo-s1DT9fAF2d~K4>uo4NRyr5rP=%k>*a2LIp__p#zf8L8k|#=7K^T
zH3OiEqw4~#xy7anRUDxU>TuTz(6Zl<eDHdC(AX|?i83q)6QK;lOvu7mP(~nNDt?6+
z=0e;GE~HY6U}1yeKqNT~-4M%QDqw9YsCG<Agnm%92MHxm_`vMN6ouTx0^7&rmRRDH
znU@IJ?Fumrp91i0Ef{)1X9>XfH{j3?Qv)^uvHuCD{kW8X^}}2cmRJPdMu^Sfa5)qm
zpmA@I3@G7X(}g0Bq7%B{4SWnSHk~N)C_15Q!oc%g*mR=Eqv!-(^H2i5CkJ%<4)_`!
zwBRkxOGYR_(F?s50pwZG=1FW8qbmXH2kpS{%}*)K0Z+pqYeSO(s}3kF&H!!YgWQQx
zT9gQO4Z4MRR6$J1FTgYeJ&FSGEAlJzFDS{(EiHy@aRaSnbuLXwWFY4rSz|-!J+dnp
z85lmjVPG(L&%luLfq_9zfsx_XB1VQR14f1@Lq>+GKMV{F`iu-8{xC3XGGSz>S-{BP
zW6a2K&4`g9Cy$Y#DxZ<zT^=LDw*p3nlp;okoI*y1XN8Om3<Zn~6$Ok8GFprbGqe~P
zG&C6*7HKjvge+!c_@U3pV6v2v;n-qEhDQdB3?k)>45x}28MrDK84A=G8LUbe8AN_E
zFx*pPWauepWY92WWLTrY$grS{k-<uXkzrc~BZF2ZBg2YJMusmHj0{QLj0}C#7#R*V
zFfypMGcqij#K<5sg^@w0m62gZ8zaMkUPcC+entkZW=4iJEsPA8x)~Y#dKei@8W|Zj
zH8L{Hn8L^)FpZI6S3e_z#Y9Gi3q6bsZoP~Qa+4VuW=&>fu<B!E*wM$xVAjOQu&#-b
zVOc99gGw7C!?I>Z2DKJO27#%J41H4>8B8WHGHjW^$Z%j5BZI;mMh2GYj0{;b7#R#^
zGcqij&B#zTosr?)bVi0#b&L!y^^6P+6^sl=>KPfF8W<T?nK3e`m@_gk{bpe3`o+Ld
z@tc9+%Wnn-hP{jov&<P8tgILr_<k`k=$SDxNN6)Mbm=lObm%ZL^l39PFz7Kd{L^D(
z;Lv4c;Lu@YsL^9&c(RX?p(BNnfh~oR!6<`~VNn_*16L{|!=`jb28lFA2DNlXhK^K5
zh7vYLhBs`C4A0mZ8PeDp8Ga-&GGzQ`V0iGKf#C-W_`*<zf+R+U5JpCZFRb7TLK!Mp
z85zo07#UtMGcsIaWMsI<#K@4w%*YVI#K_>m$;hyelab*VKO=(~7b8PMG9$w(Zbk+>
zK}LoxT#O7Z0*nl9{EQ5H_!t>h@h~!M;$>v8;A3Ra<7H$><6vaC!NJI&!NbU~Pmqy8
zkDHO<fB++d+Ac;0yCsYayOuCAwC!PJkl4-0z_*8yVb(52h6%eF8Lq5mWbj(U$l$e>
zk>SJ|Mush$7#Z|7Gcp|5$jD%^iIHK-Hbw@%?Tid7wlFftY-MD)wt|r%WF;fR3<X98
z9z{lmcS?*5DJqN%Ny>~250n`hx)d21?x`>`R4FksFeouHJSbvh2r6b|cr=5N!DAL9
zL&!`<hBGr68RoS!GQ8<xWDw|JWN7PPWLUO?kwIZ6Bg3ubj0|Bb7#Y4SU}TWXVq}<-
z#mHbM!pLAF%E+)sgppy#L`DXkNsJ6kos0}cU5pGBos0~hIvE*u$uKf3k!NJsBF)IK
zPlA!bK#q~YMx2pBPnMBkjT9q;k~|}Wix?xr21!N+J!wXUqJ@kM?-nvLq%2}&I3UKz
zU?9cF(2~Q*P?pQc@Gpmv;ZrUn16K|s15Y+1Lxd_L!vj@D1}7m#hOTTzhBZqW8BCTj
zGDPiXWO%Tjk>P+4Bg27Zj0|4O85yz;Ffx2Pz{nu=gMp#vCj*1ZTt<coKNuLM&0%DC
z@t1)i?H>cf0bxc484E@R9ZN=rO_q!di!2x!a{e+fI0-W{tT1I{u$#xoaA_VR!>9R-
z40-bz8MZkyGCT`qWOx_G$Z*V#kztPmBST6gBSTgcBZHF@BLh<mBST9JBZH3}Bg35_
zMuwPRMuu%xj12pn7#X%$Gcq_iGcvHnGBR+)GcvpgWMoJPVq_=?WMpWGWn^HBV`MP1
zW@KncU}TVSWn{P$%*YTH!pKk%&dBg2oRPuAgOOpG3nRmgm5dA_s~8#9ZDwT9*uu!L
zZ9OA{$p%J-9UB-KtTr+-^lfKkkl4Y<a9}MXgVj1lh9Yl9hIu;~8P?5ZWN7eVWKi*A
zWO(Pr$gs+fk-^4<k>S}t28LT9j0_2(j0_oJj0{&+F){?LW@Om0j*-D+JtM=kt&9vp
z+ZY*|5*Zo3B{DMXb7W+&aAah#b6{ksh-PGX6UE5zERvC7nlB>*n=d274{t_>Rql)o
z1~!Zg(_9%DWZW1THrX&TEOKLHP;+NwSm(jWVByKgU}Ve4pyJQSu*08`;eah8gHHe>
z!@U4Th6A3A3=v+83{Lip3~>>R3<vBP86HJ2GT6y5GFVA4GOUqhWN3<KWax@xWYBV9
zWGLIq$dI*<k>SH$Mh2!tMh1oiMut72j11Qd85u&17#VhnGcs%_VPsG%Wn@@T%E%yB
z#>fz$&d6{`osl7=j*;P7EhEFVYDR{bT1JMLYDR{PN=Alzm5dB4<QN&uBpDg5R53Dy
z)G#uHRWUN$t6^j~V$8^}>oWs`*%t<eIo}x=RK7DX7=2}6Sn-X4LFXF-!?rIB4C}r!
zFgSf;V6gbiz_8;J1H*}r3=BTZ3=E76ObkmImoqM7oWnSmaWUfp#wCo47#A|mXPn2l
zf)SStJ0lmP8UqJoHbW{y3PT!0Is*p-7lSY(4<j$5KVvIH8$$;}4?`Ej1cu2B6B#Bk
z^fUA^v@`TFbTc$CG%_?ZG%+k@Si&%cVJgFPhS?0u8D=spWth*fh+zT4LWX$^a~Y;F
z%wbr;FpFUs!yg7FMiE9n##;<`7;ZDPFuq~<#PEWlow17X8N)Qjw+x>dUNO95c*;=8
z_?Y1(Lp9@bhN+CN8J;k(FzjbIz;Kk|1jBKLgA9imjxZczIL7dc;WvW{gE~VGV=to)
zgBF7ngEWH#gCs*PLjgkxLq0<>LmopRLn%WM11Ezl0~><^13N=2V;dtM124mDMn6Vw
z22BQ0#vFzuhGd3J27X2%Mgc}a#w-SPMk7W|##F`(#$3h%MioX`#!|*|##lx<#u&zE
zMny&qMlD7u#yUnTMia&~#&pI^#w^AZMoY$Q#vI0C#u7#!Mt8<!MlZ%B#zaPMMqkD}
z#(c&?#v(?2MqNfdMpZ^NMpH&J#sJ1ZMrp<%Mj1wPMhnI=#tKGx#so$M#(2g!MkPjN
zMr}p|MnlG0Mjgf)#%4xi#wNx{#wf;4h8Bhy3>6IJ4Al(v47ChZ40Q}O43!MJ40;Uu
z3^y2VGW=xt%kYEY3&S^tuMFQA_!$Hl1Q^5^#2JJbL>NRFgc(jUoMKR7P-W;~>}2d>
z>}J$vP-M_xP-ci{FkqO>IE8U0<8;PJj1w4VFwSC}$k@-=#~8~H$B@8~$Y9K1&)~q|
z&EUge&EU@vz+l5*&fv@7$6&!=!f>A9BEuzy`wR~m9x*&%xWHh@V9Q{~;L6~}V9DUg
z;Kg9Y;LH%r5W?WXaF^j8gDHbMg9n2dgCj#ALlA=#gAqeGLo`DSLj=QVhO-Rk7|t++
zGDI>&F@!O2GjcL|GKw*ZGfFZ_F!C^5XL!%>f#D+qD}xM!Ji{u6)eLeB{}}!=Ff+0+
zUS+t(u$N&UgEgZKV=!X~<3@%}3|kmBGq^IkF@`dRG1@aaFgh|iF>Ytr!LXHK8-p#Q
z9pi3>Jq+QD5sW(-b}=|Jx-ed5xWeGUxRPN#!&-(74C@%yFk~>)Gd40dFqSbeFfuZ-
zGO{s_=9kg@GMZnA&o9gj@tC*8f;)VK@05*)bab)yIdOIb!DbWcY{CW)P=_ACS}~+h
zMlIm7xI5jrhYzs!wP7aW9s$5TssQiUgI$hmxCA_AfU9c^y_pwlNP{&(WC(P;p^Ata
z2!MGQHSCe>!cYK<0c>he;sJ{Sl-R%`j~*vjl%T{67I~ET!6FZjB_uh#aRnNDh3&hA
zEZIgm*Aym&V}mVZxCYq_#ATA0a`-nM6TA}xqyXxFd^eSVr|%J#Bk4lEg#(8I)ZN11
zv2%n<+}A5Z2D;HNOGeTOzDyY!xsV;5pb=Aa1yJ8X6(9zrKmiP~0!0OA(K?zUd<$F=
zwz+`L5(iH#fv&4YbqT5*mh+em37wq|HUaNp!iL10bq?Fj3L2^hADaPAi)c{-whKcg
z<m_71puwRM>5@&f@WC(@zJnCELTC)59ZQZwJ!s|v>GlvbRiJZO!Bd&WNY@9TsR17=
z3v(xU;W35+*p((QRiFudR7I#4BH)t4mJq-?QQc^Qe8eg!$PEemgTM*GC@w;r6poQ<
z5mH#(3YNt0R7<=`79@*ux-a_S{6rkx4XbQW%s~$^%wwdX=^mwA1|6vki&A(7fh2p-
zN&(a`!&C@M^@PoYBzk=6u%vmMe!`dJi8;!hK!Udf%i|ATL~RHQ7K|)miBN;bEXZlR
zu+>qJ3KGpIR3$i$RDsTULW9vCa^3`L>VlYqQud=IfAAUnm<RbGr30`E0%z$#W?CT=
z8sOvRATz;ejsevf_*Pq>TMC*vMp+GnMFHwzS6CE)w`o9Teb56L<Q{NkhQ3Myi!tB@
zB?Q+VVLzc75;~yVhL};tVg<$tXV}!hPWA##xMGn9&k%#Qnd9{_Wa9#!Q_kQnh9(`X
zr|w}`4_$QyTG)UssKGmEKpSSzHDaD|heZW(5rFR?K2RBgI|7J1#4Z^1KyxH_f|vcc
zr<R0)wg}~e54uOlf|mqC8e*s+gCv32-HMWJz$&0w9gAMvC*y)O;yP&;vOF2JEC6eO
zNFdyTn$EB(fh>E$sSYBI=_TZlL@D-B3r0|`0XO21&OSp5SLj+%NFfSWi?=ZjTHJ#g
zkRTCAU5VllurT=gU=-KGg|YYyBnRruVVaNTBvgw^^FW8_!B;DyHON4d>!8IqIEq53
zG;%qI>fX}4WGsmrMGewbZjep%h#<zeQ4TfHU`Rt2QlTaX#HDYLScKM9D1iXJHxOAG
z`5HB3=YSS(BHcNNECsH`k<CDj2P{|pL0pR#7KmCLk6EcD$h|gH6H-ec1t^;JFk$EX
z(me3Bhe&RR$w3Y*M-3U69O}tjsG7mW4|yvKQ4De|D#|bNOUy-DQ~~Nlf|loiWP(eI
zKzqZ{-3M7p6arh&gJL2mePY{F392g-i%Y;3qSgwae4JU33(of7eCd-~mYRdsfg^a(
z5sD+AjU<#iF;NwOZ$x)QT)K)y7Tlyok7;NPiRHFX6ceDzASoZ#fP^2)L|7@xiB!0i
zL#-jgU?i2`;Q%A#4jAZI56JbfxIzq6*JD3S1<7$xMHt)FF_oYmf`UaJbzc$MPz|_k
z0NQT>QUzPPk4p`-%78bjixJxkh}J^D4p0>UT04%zJj4cI911|~Onf^B2(RgfsDSRp
z#J;5wMG0<)K+OOzKLqCy@E%Oe7((n0gl`H29Z`=}A#{H@HcL_W$l*CT2XdATYHkFj
zH)tyhQv%<rd2j;4+Q>qd0Y@on(Fd{-sZj({0V*m%=@6}+#G(?kwE&+=SSllAB1|1V
z^D0u4QG*tB2M$^^f%ZV+4i1nkny2AbqgDK1U&FS#VYm~QVmw)tptE7kM@0TcvKD%N
z84i14*_NOkhzv|nDI#0ImEzt>ibXMctp^KGEJ~5Gs1auJ2SpkdP4LW$TMIO|!rhO{
zN!U+XfH)X(3^F245M?gPmLrU0h+7}RIoSM)t`C+5NV5&53!hz}%!%uiDUwdRLi0N;
zG2(MEObtHwA)TLut-M8&M(XsT4BLT=Ktz(K<U9&AKOzjp=SzetJiQ<^N8$?+$SF@)
zif4!fmTn!`aO6rEpL20-r$h5QA}<m!3|axheFQ2#;H#{`ZF5i-Ll_5Fh{cCkR3Vod
zm~|T#4Tus0t8!>*LBLZ`RruTrs!P$2twRe#kP`3!9@;5x_?6*4femUNWE>N+-w(S{
zA<(n%u*iaHLZlskXexqI@oz~3r!?XYY9nTY9OBRqG<QHGa3%H3<YE`lOdo9C0oGr^
zR`NsD8WOJ-bHW2leT;HdJfs_r!*;~r0^&w_G~Z?>7o*J4V7CwEOHlU{-1kHqv%#!q
zGLwrjG$HSZ!E^>pIcO{r>l7Y10c0i@lY09(c<2LWI^_67OxqCy8!(lqBNU+e1iYUa
zEvP}_;Cu!eF~{yfs1nHV1xiSPWMGK{i@69lp}NHr<-C8$03T|JhN=SIwm?%v;F<<(
z*H<6{4swYF;_e3&k3nya0Jnsp+q^(mSfJ>}ymJB}4XJLN^YaT*LEBNvQXv(cg9%FM
zjzg7iX--Kdbd(7-Ipfd($?Mq621O8PkOnPsAm+d%A=<IogvZqoDc1^TtVY9S37HL%
zM|C=6cPRAUH$<4igu%l`NE?|z^&~_NHF-e9psG>A9V!DJ|3&pSk_^OU*rY+#DrnCk
zWPlNMMFGSB6ctc|P}*G(WuOSa=4R-cAheK$=s_#EP@DD;C6Fm!G<T)uI;NCm7N>&u
zEF%SKYA)<H0h9~?-Ry_0#|@Rj+J}V7LB<SWr3p5JAu6zMrbKZaD4;=;g^*cCwCI3L
z`GBNx44^~Z11U~Gu>zh%1C3=ub2UaNf$W1QhdCdsouK9_9w&jM@jD4LlLpy0jOyK@
z)U?!+<P5B7D>XL&SsH7?O3ek|euNSxsI&jRSd<i_=O^&xXBaE0AWcRi$eoI?l~brg
zLD-Z)ZZ^ZA4x9^(QHChtW`N`%zQnEo6r+#~PCy<KoY-9eHw3H*Y8`5Bg@y)PCDcP$
z9Ssi_e6nDx&_>%}zJ?kAR)WtpP<8m+0+B;2Bfy@)bw?!FR<tq+ssStoaS(cr246x6
zS{#5{&qI6!xeyPm8@s_EjbLd4hC_UV(ldeCfKv*yxJxdm1Sc72@FDHp1y>|s&mt>;
z7>zA`f!&PO@rF1EECcZkM&3&<sD!5@tho*@3pNF5uP?%Vs7jy~VTlyDI*2DgXU?IN
zHc+=fPRhjU6OaiIX{c+k1V5S@sB`ctgt`Z{Rt5(>C^2Al2}lCB8(^`C&5KYusAep|
zgscGSdfcj@PRHUsMDH1kzhIJ3SK!eORsnSe9%WE>V6h4!gHf{;r<Q;UbaV}1VX&Q;
zsSzQE!#!XH5c@C^dNH00bs_d)l*eE#U^$3=*cCwR!^n}Kt12<->f+QAuz8r}089pA
z6SmNT*n?&y%H$=eI|;u24ddz}q-=(+1OJL=;*StUSOM2V)I~02=tB%2qQ)|&#VB{6
zV7G~gyHx^GQ?ngQe6UX;L)&G@EgZB}6#>{Uazr=>rhtfx84;R-O7luGb3qrbU|k0U
zTGI+%Pls9u!i6E-XOs*LlFKhm%1L$0FM{^>aLR-G3h1(7i8+}m5S?g202zeGoG`(b
z8StvbmOb!mfL@%22slE@v04GXtP?Z~jeJKll9}l8cnrb3<{rZw6eYNgLO;PD-5g|j
zh$$%b2xM&@zCm_uDsUSF-avqs+`!=i>9!$qEjCwxHG`DE)(WC^Hz7{J+RKATAx>*Y
zZPua7;&eZ94#sLZvI2-HsD&}aCe%awaTx?X+8wl=g;=9NYbQ|K6WA<_FEfG|h(jqP
z-(!gZ(3#{piRr}<-Pjet;|9MpP9u=6XTTOoNYXfsz_QE`5)5Doh&I%637iD+^nfAS
zkrhBp!4|nVml8q^L9E$?n1RJ5khx1}{Nq`#0x=P%YKZx$?F5Jx&{QILq!4S`gUdn<
zK<O5ebh`jdaVGeJVMN&j5eH|3<cw5otApVxu-ttOk;Au67p?-gZbUSoF82z}OUlek
zfv!hFEvXPE`$0-8v_?Nd8al6nntqX`VP_g5LL?k%(IcupaBN_#LBLik;!z2WNt7`H
ze9AFuMEr^o#)Eo%;Jzqqj1H9ikOd)Q=Rx=`&O~g!L)M6`5ekwA?TmvisDt*3z=;|r
z1&v8iKLUEH8%P6G6dZ$SD)AT+l8-i)3CjN<?dV(Tz+&L)3VB&3s3nS!fx6irzEc7r
z1$7-%3KoKpM28{=D(~Ua_%_Xf%yt1yqQNIlK#2@f6td?CMI2+h5nL8!77H4<U`t>V
zEbw_9RLSD}(xPNgtJD`fu?0>p@Hm4SfTjj9Kn%AXW;m!v12zZR$|hhEc-bT@-q0<B
z#tGWSHw-J$=F8ynpw=;Ja3OmfZBh(X3fl%Zn7QB$YLJFHk|u;GYNUb1QC$H&P#)x4
z>>JsjHX*jK!3042hz%eYl7RMVVM{&WJ!xRqp|}GqjLR9IZD_Fg19t;p_W33jpzKvb
z_!o1Y7K<E;UWBjlZAOFH408@5Ic1h4XTS>xknb^-AZ<XyX$~a8LC*k1GX_g~!{Tb}
z$qoBPGng}QCN}Jw%MjY|Bt$$L%E0;|`@3L0I7mScszI?xBIZY7{)K3U28cgOp$Ki!
zqm+E`;tQPeFt?0B>;%maW8Ex<kcKR;01wqcW=CMj3T!aG4Ppp0kX!wT;s<PiduoYO
zWdLlS6pGoH%^wsKUGN{53!a(>tpY-sv_UZe-uOWgg-$S`1|VpGj8Oo5&j)zy2}Kv&
z3-F>7<~{KI6zV1~6rGS3C#+ilp6bD{8ydA(H+CTz23=YNnutQAD^MK6H*+BrV>S;_
z<Ol^H^42XBjaY*Z%Z?U!x(2xqxlaHqPQiO5P`7A-ECM&nAyqxhk4QqG-Y>j+23HQv
zASmk5w_?E+gF8VeN+G+fV37j04I+fF4HoOzB%zHz=o!mMDj*WjG!GU>4hLuep%xeL
z(idrw4cO(-1~8;hfvdvN90P59g82}{hO{uC7J>yp({wNo!v#>>3lfEmV1Zl!;-gsy
zGZ5Q`DX<pEUMHkn1q~z6`UbT02@NHv40@h|$|Cg<ARD7VwqWdeg82(W0@`PQIs&m$
z2@=-OG8gJ8yc?h()}n2Ff(U}^9qa~TNI~2K_ZwpE4OaaaTb#fa!geFUq8r{qfp2R<
zQ3lC7Fh9aHqi$t_X#i(Xv`tJn<RB>r))EIT!Ub(lf^A%aY69;qLTp)riDEr{7?chW
z+mxV6QAU@cVyH<Hu{8-QjZ&Y&+Ar|^IH-zHHrK$Uz?&?PHX@;jgPS(6_)9H;mf~18
zA3=3N6+luNF4tgHgtFlXn`uy8=w5>gLu`a{Kx)7pCs;;+yBsqFKs63%NEhV>Wq6|y
zT!~=23m5D{s9w~~L?|+#?G})d7PQtA!&q>U3F>%bmxUII@TL^{)*%$DFcjl77gXqB
zwGgsG3ab>T9fGn&2-$9=CCC_FgiJnz%!F<WLemIcZj47CVk#HBI03tU*i<GqCD6sc
zs8*ovPC?%I1GfOa<p&`G?(xHmUr_vGZu5bwMys^JX$dL@3J-XJ1~LYm5)df`RKS4J
z4vJN1YCtQ0v8#c_JZ@89DzKYDVDk>#gP=VgP!FMc2DSqS;UTz1uyzJGG(ZM`eTCs3
zOl2798#09h3Q5GWZX&cHS%tJc2gOgY41&j8L{`D02$A;Tia@LBVU-g&-YZg*u_%N0
zG2p?3MG;cQ04=9M@d6g*@GOE&F*J|B-HGV{$RISl-vD(O`o<STq<}gciA9OI@ZLW`
z9SF-|H4Y?%(CvW5Ah9;U)MGavlu6(lYT#jrvXur|6!l_wxC|`GV0RNt7P||O_Qar;
zQAiR<4Rz>112{Ml$q;h}5AHUEBCOq5G=s4F0AU9590_VFK~V$ETgWj9S>cOPq(Our
zjVolO$kh#Y2O-rtI2Aza7DDpySOH~DXy*+aC|EKPitDk+Bj-uve2zsaB0r)jgyuz@
z&W6gvosHrqP<e>HjRl?(K$770Guj3gTndo3uAnP{jH*C3t)R=nwyU6sgK7YzjVf?C
z=u`?~@&q+e;n<vlq#ZQXf~*@ke?az~pac*^2s6n+H<n<Y_=ZxaKviMiegbzCL>1<M
zCc07RJv3CWqwGmRY&Jo*1!aI9-E>&{8&_u<Il~d!T7qmT%v>y^mf&nda61XIVc<R^
z%tXjW5>#ni!<C>i6|s2)qz5DdPTimZ8T7dVs3fF&2=zHg3^tPi4|<RwqN56H*FctE
zqYh=jk`<~PytNLO#<nE{<X*^b4{-Yjy7C+9E{FumHV~+K(Ebi&4WJDmNKyzb=FqMW
zq=3b~=>wz@hdlar4?IdCISI5|0-*>LhM*2EJWwIlz=R=MV96CC2dO;3n^6$vKm=hM
zI<Sc2HVGmFa~5P10(AQZ$Q+meWZ($2OadVai#UiHs0wJk02Kp|F2Ov2BnGh+RRUBc
zfL8EB218&&2oOyua!}3C@(ZE>6lAFGLEeaga5L&C0eFEfLK1au4OF)xwq1Z#p=`K-
zih!I99i@aOOX$ETT8kel3fVjX%XO$aAad9@Rv_61YMnqv=-~l~V>1PkCP?N3g(G-K
z4Q(3*hC-MF(QE)UYOq=jlE4^$hk6+_N)6dA0kZ~qCj`8u3{s6OffmhJc0Rycfw;Ft
zKy6Ges6?9ghBPv;Y=uBp4NlL{DR9VYQqYQ46cymq4O+{JAqsIjx)dn%!N!6Yt|M!L
z%Rmx8x=pCkP{U#AAH4M1$OWzj>R4#O2J<V_Cm1$E#j)FqEQ#G#s0!?MLPTNRD2PiS
zn->s%H+F$ojmQb$4GCaDh?QtEpb08iZ38nBBnH+2F9N`Ug0y=9r%@0$LR*$F^RNga
zCsS<O5D-2B$1t97fjAVl1Oj3uSPbGuR0(*jf){urEP;!Ibt1|!u)k3yp~j*FBU}Z<
zr|@zet{t*(06Bx9>^FegiV|!fGa=f*vQTSrD1q7wt1ZCxf?^TPMvxHLG&Ju+gBQCf
zR0E2Kp&GzaP?uqohdK+z(TM&BifduQU?VXcLLeYunxXcg7z`1E*MF(G;D!3g0RtAm
zuooc;^&r9*U@3^XNXe@hzQ`Y%uD}8ibCF6Qgeb&ZbSa3rNM#*tF+ajoh?%Hf0*gUR
zM3sP;2d{Y0m*7JtzOXKvLap3ECy^B-78R#rPHMo{zB`sBX6AtELYK<C#N5o}U{EEL
zTI7_IpPUWP@o?2dEzt-0nrIz};R;y1U}{BKmXB^a&IS1(g;<v2gM}fBH9*Y>Sd|SQ
ze1fg62i=>HnV6GVl?rd0!ld8}@4;q4m+J?Y<QIUJ4}!$7F180rfK~;8C(B{wH(UVH
z-GC-okSONTdYAz)8E}gap#yz6Jy>~WdR}4<tTO`da1?`+9z1#>Lvc7%p(arLN})>y
z3EB)_bqq`Qkc9!D*%jmk^I&tp>v54}(A)!&Mp*%m@D~<IY}%0*zQgKIh>MVAAUdIC
zCPW(hP#QKlY?>ic1h5DMyA{%mM&t=p+rSz?lCTvN@RSL$60N-r5ky_+jtEkOI2N}d
z=L|GUkfk6xVFeY$KJZeOf|AmrRM2X5OwG`x%pgg^+Cg)3u&NoG@$iI%p$L+nP{I#m
z$vPr1KqF{HnfXPTC6%ZN07(MkS`-tJR-mJ5Lz2Lv4Q1H{#9Lq?h*FdUfwflw(Sj@m
z(TN%nSQc17H6qqKL-e882pPSH#uCPYb3~BgR0lB=HD`kc*1@9@Xz2ki4%Gy0vP0Hv
zyH+G;B<7{3LR<}Xk#Bwq_ykapLtx4vOUe-<;3SB$m>fk8Wi1rM473#(&;WtUVbg&K
zL|Cbhv0NNvD`LD6lDFZl7=#3LToaapkR?DPmN0SjW#J&x!QqE7--TMb<52?*b!a~d
zpF*UP9ltWTk@X<=!EPyv_Y3v$i4XAz_4AH*aSU-};L_IzUl0o?49(1p%`J@042<AH
zV1@yhR8TN9hcXlrxR6cOOUcP$;L?XFgDN6qnyH})RAmB}4<j?frXcNPF-8Uk4hAq_
z)JsWCDos}j2J;vg7~B{b7<ynFDDA)?;G~zCl30?cVgwap5Mf|oxWvG~@C+)z%)r3l
zz+i9ys?H25%pk<Tz`(+YPzMrsU{E-~#K6EH&cF%cG6<l1Q=LIrfSrMX0c0ph1s?+g
z!>33g-^}Eq{Nnty5(SMQO$8rMKW~sEI_80D1R21<z{0@5z|J7Rz`(!?W}#cfz~GRa
zpIe}pner);k@5e3n57_nAd^AvWMY8&%E*C%0qpV&m<ZUPAZIeeL`*<xKsw=SOc5d=
zaa9lj#URre80?@t5XHn0!@xknU0C=NBdMv!$kY@m^)P``&prkQ28g>Eu%@0AkT;Mp
zQtB~=34>D4Di{Y!gHjL3T-u}xVq#eq9P;1{?CBfe9~2Vr;u`E6<QWj+A4Gc2GqSKi
z3Oh*7yG0=E@Z>yGXfT0OG$`l6_#he-cF;6x0^)-(C<R{wF_17w9d*N)m~d5MU|^tb
zx-^5Aoe5kF44_==!w4$bw7`DlWQfOgjTuJvCpAZyB9+d_HiL3CBLfcuw!7#sEG4-V
zH-jZ51yuhUfYTG)R$RBQVK{(PUz=G%lQNq9hTyUmVLz^m-7p+LdI-R(F*FzGfa(`S
zxWlHdkS~qHu$*My<A`&8aIFIOJ%-(&eIzCf7}itO?`&B7j&#=@hUFyt-57h!YlCZ3
z48MbV>Y#h<49%$FZ!_$6>oI`ZFBo=1XMsT08yjI-Pfee5Vum_&(J5$j5F^k@k8wPq
z&V^|=bd4uyXqa-lO>yLPbp{3oZcMvz1vlw_#uM8-2zwFp&{WOirZ`GiH3kL-UXbme
zfCUftBkl17iNPBF;O050Y0Ml)JqD`8`Os~}J{n4~8}P+9Ke`*>yHqi(B|W}zq%%;R
zB7kl$mVK~PZ~>k=MG)o!(8gJ4-iA&rfO_^AmXjLu_(EM6*=}gwhD>Q<SW9xK<7>YN
zVX+s~i>KUHGdv+Jg2h&9hO{}3vJ}*y7R72e>f8d>=%#A8i@{uhwxgN~;f}-apxRp;
zZYy}S6>ZNp73{_n=Mt!PL-QA8!-9ha73ywSw-v3msLQ~>Ac<->G=D+urcS#BM_mGH
ztxMst9W(}v%>ksAE#~ksBGldjXz)fFZa<!#^B9p&stfRyZZa?zxS(&%$FP><TxMp7
zy~U`>z`!7j-CpqiZ7SG|r;i|qVKe#`aVpr4qa^|A5zC|4kFq|J8hH&*yG;SbW>^Oa
zwzQENIUQf=u83wk+VKkD)*N+8cYLl;!tV<BLNv<LfH{s*&zymQL79LnAoIjj3Jn}-
z5!9+x!S4?6<~l<v^xn*Iv@Wd~7#LJ>xdB=ap`L_6dA#5oJyFBz7Sv_LRB!>F(n%e~
z1)vFe)Y1t{5kY#njHfN2fnq<}+Gi}5lUf(y8#~iPvm498YK*`q)qZ?+p%$|J;4@4h
zYbLOGoAfZpQx|Gux0eoep$>-4sHu%A<7IeKyDp0Tv`OuzI8r-k99$2{e)!2Vl&3Kq
zC9VPk1A{)Yji4b(1IpXi_(n?%knMx-J)lNiZ-%2?tHHp)V2IUL><OCG9BhWCg=2(n
zFTvzYvh8^Cu`#mkgc^3FmmoOOF=)))1kGlYLx`{xUnKh)M_UHegEK|8o0vu==|0EN
zdH{`0nPIaX#rxDK!|;s^nxnb^d$ShH06eL2fX@vUc-;VL)EZHtq%p^l20;_=miXNO
zYtm99Byi+G(1f-XUROXGv{;-#a+);9F{)t2z`$UQ!wpy(v{(`+sp$e=i^>L@O9(V)
zNwyzPd2EYpKT*{?$+qJeQ?o<1op4i@<TQY<CbGw{n^2)dvd{6fs~k{mC#E4yvhU6D
z<U&X6_7e&MlHGtW2Atq-fSl_FTW1WJxN)FH&cjnLIpeS$z7`sr14#Ejo_g5@%>~fX
z#~*gC9Y!;ks<ykL*^WA}i=|0IRomSVwu83XVw}xK1;67c|3Rb5?x?n7JN*yC0o2U>
z9;o(1Ho}89^gwnHQX};7jc$3O+K=Y|LyTY`Jr&?+k$_soUa0OsUO|p^XpQ7Jz+<;J
zhTTrcXE0)ToMgN4<a{3tyPXq}mnCCZPI{>0N&UVUwqqP4iQxcJeUGm#?1y1Lc+Wp*
zQ!#AQ4OL<v-$;@_h8ti@xiP#>df4NrcR{l%0T}jzwpHcl=V0sblWsGf7Dph4%>ihK
zc~ZgWc-neFnD)a?JjFJEO}gLl)b+s_c7u0%qZ~*|x$p7KYJ_0A0KBgUwqXZ$<S7+g
zfg|UG`aPi-u7KA1*bY_2a0;nqfEk|D5QgRw&@oNEskxy2@KkAcnd0d4s4y@vgrnLG
zI~SI6|Kcg}BT((c*j9pJImziCUx^!uVLSax+$an;(5J+W#;}*FB`%&)CkDf2T9i8Y
z)^^9Dxd3Hr5=N3EIe+7+=i=ZtgHK3BIl>sjVv^H3zT6!Tvl+at47#_98huGTxjO-i
zouKWQu)T&<@G*{>9kh-<5yf`IUQfzx#h12{P;5mzNgBgyQqvZEBMsV$BxME$hGZ0*
z!5buLUT37B*a<n55?hmvRDa?dA4$bxCn8m0Yc!E+JH8R3G<>#0H}hdxctCPq#<vD3
z9g7<vR#T&gjL+r_6q`|Z%wi;NlKqUYZ=MOa8M=KFG8_g!femu*HP#Li$?mYg(L%Fl
zU|`51;0{`>`ZU2&n}T+lWy9P9I%J(X`5njT0BGJh2iZ2r$|ow+A^2vxb5U#rpPz&!
zk&~Lk@%4f8Fl?k=-ZI6JvJ@E@81j+r1?_;LN^IimZ4@Beh?a1%L@UYp2wy!}2)7%{
z6#y7T390dm&*mazn~@I%z*=~aY%`7+2CbDYMza}tbPG$OCOy1yw1z-C%u3MgMsIUd
z!+w10IZ9#nqhG{8)3`1}*y@{D0I4HzPb82W*Eq%$Kx66UIBkZWHh`s(K(hUK;=2N2
zKWuFSiub9JzwxaQuSD1%oLYixwQphp&JF;nA%HK%RiU`R-3M}WF1A9IR9o@wL#amC
z3ZA(|_BmDT#?cl4ttqL&V>cw#Q6rb*TZdYU>;l;AEukPFxtzmSd)L8TfPU!-MnOZm
zy?9zi^+@(oFQwu0X#<9huzOpm;8Pr_477W*5yM_ccBV#&f-h$^Vc3guOdE!$NzT=H
zMlza_?FJ9spk8i+VL8cZ3tw5<g2#49+mssneemt+YejMa_%0sk{XCTW8(#`<L$?)v
z0}yTPZAZ2j<&GgL*o&jh0NNqk!N38zFA{X}R%u=`{1zh&Ye`Mp_~Nz`$+yVYBw<)e
za+=1s!mA6(R@ANs{30d{2axJ(e5?Mtk?coVVFKG$1iI>oIz0j$wFYRWzX#J5$QLP5
z90K^pa(a>NM!TyD!(x)-9$(9>55s2g`bI2`6Ov;b$J%btp2dD7TcPuNnAdG#c${Px
z;D~L|O4A9LE`W4KsGjEVt@4~m$Q8&JhEX0KIQqk&ebbY0xda+LII|$hsnHzAyr%^N
z1H)t@TmjxwON|~Ij?@7v3#MSYgSuq_j+zJ5Tb&BG8#Ln#Iz1HQ);5Y$0=_Z*Y3TN&
zAEZdR?KsjQXk2DGy6q_U&S6+ha_Ym^W14|sH|XXu$V>|8QW+|poPcMfU?x@<fKDx>
zp8Xa$b{2uoteb^lKXim2zT_0`c0P;<A+?OQz)?%sFfcI8ChQu#K|`ur@QqZ?L3ayi
zR2XNZkZd!avS=>4&5-*-sAo5h@)&d`(>!#$K`Y>pZ%Cv#{>||8^yXu+9W=Fq)9a*{
z26+6w5R2{5yS5;gJW}p=Jh8q2x9wPqAyQKuzV`Sc+;$_b2>{(eNpT3^TM@Jvw<}-=
z@KePN_{KSwU~vQVVlwK)0*<m6w6A_CirqMG@}xKp@U3H5hU$i#{Jd0bOA1KNclcJv
zEJw8ye3T6~OG!=f_~Lm5ik%p@ol+jgIO=@R+L)DSb{Cfv<yT@Go+dez@%1=YVY3xn
zuu@~}5Z^k})hITDmp~z!SfG0<L5(hK5l*uI@ws9RK39Nl@uQwAaI8TC?KE7A=?Ykj
zhPokv#|`UnyMemlfTPa?TJ^gg)eZQs=A}3{;>#BsFkC{-)oS?00ybjUjFvaxu|bt}
zRXAEcpkDYU>@I<&OscxW5=RZ_!N9<<8Pgqjx+B4<CD7|wsS!SwIQk`^)6};R;Vz`W
zqN1ztwU@SHxC+)qp>D|FYdLPia08;VLS<LrNxwTVTmiYK3sk+qT>-iV7fV$~YO4ZY
zXly6O9aI_Dw!qPoaA06y*h!2lklOV|R2cikH^#7w827+i_|$L>zBt;A%{9;_K0K{Z
zC64gbI(sl&0lA_CbR7^zbw_eL$O1>})0u&RVK17^=+}@#E=>aE9ME+#u&d5#>!y7~
zy9p6PSQ0Ji;e=x>!jXZ2VLt&k!OD9ohY}ta9U#(0)D0tibHoQxTm)*s!mgaBJiXwv
z_Yk_hpyUd^Wtnn&@vYfBjBamGem>$daVpr2Bj1A75FSCX8&=a(H}#p}vHvJm`>C7O
z@QueFL$Tj8uec;JuOu_EB$YbjGI;t+$8p(=wDEx|r^Dc=(?PSBCs5pgXk%eq>V}aB
zNp9cZn5zNJ8J@)93WA&DNiLc3&Dxy8?Fwkin;LZkzOjVUI9xz*K{Hju;S6q9P%#|v
zjoh6@aRKDUb8G`Sq^3c9EvIu>?1ZetqDrjeDF@D@*o-_eLfujr-)giA=x%^bkKlCz
z$>EP<1tMsj>qT@IK&MFXI)LPKkFVc*8HWqtbrGniM}>3C@RdQA2)O}UHXu0^@XeK8
zA>;z&9v(INy?93Rt`c$!qIX9Hm*9(+Yv?Y4_Ux#eI`O&SIt~}WQzunY2EO$iH&9#v
zY8ty`=B0S%IfG|&s4-TCuY|gZVLSK$(Sp>xl+?WB%v9{nbW%$weC5L}d@jJ#Tqo5H
z_-3+iV{-%KOr;d8g9{{=4fyKFJJ@UwsVtz*Tpm7u-^H*QG<ci`y0e>F{>D)bfmTx8
zL$MutRVm_%Qmg?_a;)R28}FmppPOHnN^mh1=`oL|m-Yb71)w`wkpqAl{S<sH!iOmK
zhZf}IC#GO4@JJ4I9PKjD`9+Vg*h$3}A&wCl(24wyQEbjkE_MOkhXLF21zT8(HQA9I
z>-hF(Kf&e>LmIgQPcQW;7I#<@<qT5O1HKyQ8M-UnePC{Y?1sV`A*8whUmM^#ZWnmw
zCZ?xSXOtIT8{h@H3s6p$rbZh8-web{blYKB0e)ft>aGK7lo0r4T3-=#PXO$sVJfUM
z#@9A^jmsreK3^B#-5GDt-4I-wgb_iI^98VNZ6dkk!nYIUExKF4`!->&p;B8BN8JHh
zkMR!Ee%Q`Qm?NmNG6&z9tM@QBfChCPL5nT17Eq*zJB}Gs&^pf#$aaDo=%6D{shJD#
z?Rxr%W;<jLBQ?fv@a=s0glsFUM!*`>q}B!a<|;lT+lsjPk}9bRUrYQ8%wEsjg8ZTq
zw1bSP5!U$f^;hh+!&jA4qr}HITks8Te?hWyPJVH!Z)&bbVqQv4Dz<<pHNNrL{2j?=
z(2N*pSsB!3EP+n4%{W%6fbP%ufoe0t$JDSFN2?FCcjhOOz5WHMdEiw{P%oQN!)_ca
zhCuhC{X(-F;c0U!)a3Zuc)wvbLx#Pb^YaT*ixNvR%Tgh;GY%$Lh9F5U!|{y({vqH3
z-_o3tOz3uaYP9(9t*ZD-z%7ve7`7mxW)Ap=>IzVO>Q<VUOqDVoUs?MfyS)%kV+(qc
z(*eGEje(H|vU3@d67eKIlEWHD%L&x$X2fQzYlSn`z$V$h`1&?XIBdop+$8%O#~dhV
zzZx?(+aXqCOWq{=9N&3dtT4NM6G6>HV;8I)Nm6}_ul2%)ZX={$V1#8DpLCz%NL}&_
z3=Ax&_F`);kZvE2aWl}Ge0Eg(puVI=368HF%z<Vr_=Gj8lo$9~D4bYqg(P5XR+E~V
z@RgHXs5XOUr~>lyb0Ej#P^GVlZ(N8QkL^(ZV;LSL)&KZ<dOWBu0M$>_N!d8Yq(LXf
z@S@u3o0ylFo=UB;csxB!J~VqX3vv?+3Q|*`S&ItoLVP)kAJulqWmZ&4Vff-#0B&n)
zu477BW-*mU`taE)h-9aGYKdoFT0V8s6pnco&{-)$NOpoUF!V%YYQ!m?lq`&9D>e6N
z;48I6(Cl>upGpH8E5YJvl4~Y>CnShswLK&se1;%sUJcsQ!j`y6ExYj58e(Yf0Im6g
z+zdnOT0<O*&3G^6AU*tXq;=3vB?&a!A;T%4s*5HufTu*2#Oe}QI;2W0;OS{gq1g^v
z>qejWm&Rf<b>kmj?@9*EcF=VYAy|u8YUVasWLt|;(^5;4GjKPPNVXYAOBl4ySPqxX
zxSL2M=Qn)4J9#Ag!8eeA3L1EHQ{z5Le5;%l@Y!DMK%IUMj<Gb*8P7^c_9quq8o4-7
zV?PYO@K#2*5!^rv$p=$Z*>8{UM0XW@w#OHgq!eRy0?8>3UmsT$!wukmm@$?CM3U{r
zw+CGftG$qHhRt%4b2*+-40Uw7K@}P_%BkXS95pIvm5v5ZyCEf<F%^1Y_*QRg;<q0f
z0azSCdhFu~1udMefF^q^(Lizvz%jxC8o$#<w;!J6u~<yH&+)Wlba2>A#n{K;Z_tdd
zE<W3-8TWWXKo5r-s2B72$~%2@+acCst7u4$cYJ5;8=%^2?1F77j&vJw<S|e`)ezlA
zND{-+Wg|If;VD~<u-XbqT3D<m-N!guZ=i8ZV|2SgH+WJdobmMyO|aQYy|BjNUr=k+
z6sOJ93vYZrH^XK>BtKypA}2MK;p>-}quWe9TXFOP6&M&86j5!Z%KQVqHj)LZec%=f
zzKV*}5XLvdYl+)#NLXWQq)|0DTcNoC+%Cn|1tQs2d}-Pmi>;8{gw1M_LmWrl3~H0u
zpxTURlTxMMg|8Q6i^FC}A%?ALB-P*edO>#hY=;ItHEIrgAz+Wg4UnXcEdodl0eorB
z0n_$i@Uh5L+1-n;$M1;CW@yx7DaJ|8ZTMD%I^ne+8u?fpL2~HhsYRV}xd9saRGA0G
z(H;ife(Hj1Ke)|8>$1ib(@rYJIKK9`8>-E)>I_>JBRQqvt4rOn+6(nGmg0rv6ozB&
z2DEF`1GnAKB#y-aRQ0_lRu@1MI5qMYo|SoC=yp@HY{RiXMVEnr!5h21&?v{^X_7-6
z-+a3d9^0Xjj>QQir#d|T_r>l4Xrxo6RKroKg8E{9sJ26F#Wqbxa;W25BNTvSYjJ7`
zXapIHM@bE3eC1gnx{Xv!U--(iAguOMFJ<BLb1=Hykl4jmX;C$HLs0ECc5%Sg387}}
zhN9aDiCt`iv?Ti!U+jiqwHFe**es`}pTp7ZhQuzmpeEVRrg(bS{;2k1T}nx^Kk<}M
z5vcY-VwNf;6u!28Bo<pC@ruoAYWg<{)n-VnVw*T8IaV!j^lEJx7#O1AwxX<o0_}xM
z&CM^W3`#95%`8gIP0cI8zTt^v*WlX=7lYF^!3Bv$#i`W2*9+fmzOgWu_$Mcq79{2+
zS2~s@X6As_w768}CFW)(2m7Yx2Ba1_<>V)4V;yQDIb`sij2DOD9^b?Y$7Ilwey|IQ
z15%5?Yw8P%@{?1Gi}Q=9<0eZSJtH3m28MW&-Gn%l3R`7FYHq^Ub4|eQHs_qu;*!)N
z?8%vAH{clI2d&OY#O8*8{E}4A*<d+PXMis_!j{cRb%`0CHhvP!B>}0a*^VW6FY_YV
zUOa8wWVpSMEv(4PC5oxC5)fZ4odUPLC_gPTC$-2kFS8^wF(<Psl{&Q-j<^TS?xdpI
z9bA%FRN_F5)-IkpGY!+$`~qy2l3X_7t25JKwg#2vm1O3ox~G<er4|)u=I3FX+#xl6
z;p<Oiz-$gqErD((qC&3?U)wqp!$!#dP%PGx9>#d)?Xr;V%`Z*LNp;IF!tG_!?Z(kY
z0F8WSW3wB)KAbAP##3(PAlV$2n3I_T@iEq-gVc0|@63u^xV@R_d5Jl&{i*OBqQz8f
zjpExymq(O4sMkKl*EY*1&Mjp|SQ{Rs#ty!=Spl&w!5uK9=MOx2vk>l{lA_eaT+k(H
zi8(n*iPUNr;@itygwt-^o+mXf@XgE=quF0ll9-$UI(`s59Y~En6TZ2r5`4Df4gjjg
zekrOOoKn*>^PCe4N=l2UbfOiGRt9LbS{ZJ;A-=~la7}XT<7wZOquNjSz*mw(9^V*l
z1wPxU=6`%Uc`DId0J$EBDzzexei!I`j4EulBDz*oh;w|QUX9E4fTGO&qRf&?nzyZM
zP+fp$s}0F%9ZxH$7S&eQycDYDay;=}hs$QFrEz?{sCrb}k-KnIiD`VRTpDoO4e>j+
zjx)(+48HoU5yJ)0SO@QA!)86HX%1ig)`ZV?YK8!w+0kaaZYVRN&b|YD=Qp$vZ~-JB
zuuV~u8W;F_eytd;fb{&Z6t|?OKpeX+Kqr{AVYe6JX)KnL>SugC`*sYw;e|XkY{oH?
z0a`oRfzxK39w$B2am;pr&Ti>MwcoQClI=6|(y<L&ksRiDeBOoAX6pGI-zk~hsP+ez
zrWRqn0FY!q<EdMFu-FOlEmhi5cyd=Ss?DH{gYf-a)F|EY)oy*b?S^<Bn**qt%KOn=
zP??vUQIwwt8X(0I@Fd4Lo>V>or_B(rW3irOpPS>b-;#lWVIr#ikPD6=d7K8P;^Mo3
zY7&tyfrJY+derz%XP%7e8qh^T;3KoJHuXr35qvGJDL8C~`Wwr}A5zmJzMbq-VYY{4
z6s0DnxK<=*B<7{327^a*py|RlKZPnMwBb83VH&zSGO<n?kRI}Qdhydy?Q~BqaZXIm
zNOjK7OUq2hHiS>I?fBYNGcauT$;{0x!B)+ZY%ji(6K0~?8%$qc&%&^sioV9vu9=Ny
zFH(t5jkzftV^yFTu{kiCL-Ud{^HM@mE5Ji!SPFVl^EJK}>|D65#i>R9Nm;4MCC~#w
zs4)YL&*piUHbW16$Ck87_A{Q=)O>6<gAQBAW--Zm3g39x0+`L=?mqB?Td86zzCE)G
z;kG7b!p{<=$y^P-`H@9LxB^<2VcEV*YW(A?%N7&k5^BxU;7Es{wM9#aa|iA~;Q|10
Cj-oXH

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/Win32/cudart_static.lib b/ext/cudart/lib/Win32/cudart_static.lib
new file mode 100644
index 0000000000000000000000000000000000000000..b28c233b93739792cfc271ed1f75813de757eb48
GIT binary patch
literal 2203672
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%0AHU0och6&2GIFA53mTf2|DmHVrU~Dci4cn<2Dd~
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
Op~{S)G)%bx0~Y`^>?!jA

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/x64/OpenCL.lib b/ext/cudart/lib/x64/OpenCL.lib
new file mode 100644
index 0000000000000000000000000000000000000000..20ed60d9f2e07df188ab496f61c21f3f5e96862d
GIT binary patch
literal 28824
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

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/x64/cuda.lib b/ext/cudart/lib/x64/cuda.lib
new file mode 100644
index 0000000000000000000000000000000000000000..f146412d42b563d1962a708d3f628c1852692f69
GIT binary patch
literal 136538
zcmY$iNi0gvu;bEKKm~?oX2#|g#ujFVsNx1tuCa-+u@RV^z{SA8GL?am=MV!U-wOst
z0XYW7HV+8)oWZ~d!ZwQ-7(v+f4Fe+xJIrEW1YxIJ42&S`?8d+d!uAIk7(v)Zhk+4<
zJ@zm#g0QCs10x7KzG7emVOuT+Mi6$2VPFJdw;~2c5O$fxzzD*w0t}2G?DmX-5ro}i
z7#Km=MTLP8gk3ur7{T}t1EcF721dJc5G*dozzD`|42<F+{DFZ{`~w4{*ft23h+<#_
z<3kLL5{DQVCG{X!$&G;#gyk(57{Pc61Ec&B21dC!C_cr&D0hm1QThl3EBs+#1Yzk2
z21XE;na98g#(E5lGI|V*!WK}xh=Eaf5d))01r)zvU=(@5z$jP-#g7;m1s^dm3I#y%
zAqGaFLkx^!4iGGQg@F--MfeyPLHNoh21XFRI)i}`gs=56FoN(^6$VBS7L8$G1mSBu
z42&Q=S%HBOgs0~*FoN*3DGZDtJe`4o5rn6yF))Jgj2#S&AUrFHff0n~_AxMm@izv>
zx!)KVXPZFr5(dWEOBfheNI-EL1LKM|2F6J{Ab7<u21XEGnZv*c!Vj|;7(w`v9|I!@
zKfJ@h2*OkS7#P8L2Lt2O9Sn>!e?aiOBnCz>KEuE`?+gRud?zU0#lSd!7X#x04Je+*
zz_?%<1LHzA2wpvbff0m{moYGc@RmOej3B%<g@F-_FEB7}y}-b@%>jy6FfeXg!N9m(
z1d3Z27`L}DFz$4K;x!D6JJ&EU?vjDx76!&$ApC)Wan}b1#=Sovc>fj#Mi4%rz`zK?
zyAv1~L3pnW10xuBFfi`zU|>8j0fG<tFffAg4hF_UI~W)bYe4XkCk%`rd^CW85rkKN
zVPFK|^-K(mV4TCixITx0aqS8SUMIo82*zCujO)4>7}wu|;LSb^j9|QtfpPOT2F6P>
zAo%hv21XFR;=;fP!p9#lFoN(&H3mj7p1{C(asmV6g$fA1xQ~GmgfD3@FoN*85C%pN
zK0k+n5ri*rFffAfDFy~c5I*h0zzD`W7#L6QU|>9>1;J;_7#P9$5d-7dM+}UCJP;g|
zz`zK?{zn)XK{#L@10x6r)-W)F@f!xlz&8wx0Y(sfKZb!3gdfaeU<6|$2F3?Q42%z%
zAo%_<21XF>^k85F;cgiQMlfz+VC-&TVC=a7!F>`8j3C@=#lQ&0%NQ7YmoYGQu7TjL
zMGTB!ti-_BrNqG4{Rx75;ush~_~t4GMi9Ow#J~u~bqtKRK==&<<E=LgjJM+;_&Og0
zBN*2)FkT1YHw=u|-!L%Vw1MCW^B5RGcp@7EBMA3(FffAgCkDp8PYjIxaZr4MfwBJt
z1LFh}2%cEPzzD)2bqtIk9CU$!5rl)S7#P8L83SYRG6u#F0VsaNz!>s~fiY|s1c&P|
zFoJNz1O`SB4qw8+2*QyS42&Qg8pOZ|#>W^KLys{qhS@=IBohN82uDaTFh)o)FbV$v
zV@88D3}9?1!N3T@dOsK#L0JC=10xuxFfi(;FfbanKyckU21XDz_F-TIVaq2Bj38|I
zgMkr*Eg2XXLD-^;ff0mFOc)qJ*mMB{BM6&GF))Jh3<gHC84Qf(0uXGnhJg`;O;s2e
zLD;;Dff0l)I2af~SZ@LYBM2L~F))I#@jeDd5Vne7U<6^KGzLa6zQMp~bc2D>vH*fr
zm>3wrIFEr*C69qoX%hr1PhwyMV>t#!WjO{$l{*kzyN!VngjEkPFoLjl4Fe+xs|GMI
zg0MCh10x7)O<`aJVf7^pj3BI`z`zK?Y9<VfAgnQuff0l?#TXbtSZy5xBM7T&Fff9!
z<|GD25Y`f6U<6@ZCk93^UdO<wyN-cT`x6A~Tw-7Z<2VLJoj3+YJsAkDGh$!_;g%N+
zj3C@x#lQ%{4gVMzLAbGnff0n8m>3wrxP^hS355SKFgAhIh%hiVfN&cFV?!GQWAiTv
zZpmX{1mSuO21YQR$G})WkAaCL1Bx#(FtJ=>VB)TT;uj1|+%FiIcw!)!cMAg(2n+6D
zU;<%oE(RtL=5=CV0%86F1||^Zxxl~#!hDk$m_S${h=B==PcbkFoMK=Sbbw&~dkjoq
z%)-FL&%(gOrvSmMb_`4)%qGXc1jZ8>nAj#TFmX+RVAeGZOd!mj$G`-}4;Yx(A22X+
z_&_kH9s?5?FJoZhT*kn}B?G}6yBL^2nC%Y(6WbpK#vA9rn2B)*0|a|9Ffn>DFnX~;
zu#X%ABMAEzF))I#PX_}d82@5m^!dfW=)DbseIGC|g0Qy-10x7~6)-S@@ht{MuUia^
zKej;dPZb765dIUuzzD_%7#RN?U|{^!1jU~i7=L|YVEm^9#giBq|4m|Ge0BkXpW87o
zg7D8742&TBi;IB~g#Vf`FoN+a2FAau7#M%2LGcX+#@{y>82@uXaSa3G{~89y=bIq-
zg$e^B2yangU<Bhn2F5LY42-)^K=2+j21YPm#=y8|83W_t2~hlxf${J^2F4?K5WFve
zff0<)F);2s$H2JX4uTK-U|<B{gJ}$mV0?{%@!&NE#_ew)ct;ciBN(4zVBB$vfpJX~
z6dz+?Tyu<pajgjiZ*X8>1miUfj2qT4Fm9BB;7k7)7(w`Q76T&)pYUK{1mi6Xj3>4*
zFkW~7!54iP7(w{l9tK7bKCi{V2*Rhb7#P9$1_R@%8w`wRra<snCI&_jejUcZ2*w8(
z7+)V?VEmK?#kUw3Kiy(r{MZA<KNuK4{$ODIunB@c$}lj3@EbD*MlfE)!1!hn1LGGX
zD4xT>_+<_Q<JS)m{4Ifj5rn^AVPFK|A5IL6ApBw$10x8(<YHh1;|2!CmmvIwf$`-R
z2FAAnP+Z5r__mIL@v|Qk?_*&6ypMtL-3<tS@5R6f#)lXf-ydRN{9pmW->xt)g7Ehs
z2FC9}3`|0LV9fZGi2;I(7#N>|@G}O+r_UG|pG81$)DZ?o5LV1!U<6@V4hBXLmU_X!
z2*L_I42&SGc!_}#gk_5u7{T}%1EcIS21cnW2!3>cff0ls8!#|}@f-%m$8#7Mt#?7N
zBO3!F2upD=FoLk;GzLZxK6-$G5rmI(FffAfF%1SrFrLQ1cx)O2<HkM+-gJk75rjAX
zU|<B{O&JV~Al#b3zzD*AehiFYe2Rh5?-T>0)ddJ{y~Mx>!cW*37{R!Sf$>Qb1CvM+
z6yITB61l^`Xzc>Qwp9#_AnaJhzzD+aQVfh>{DXn99fZ3W7~8uT7&|hc_!<La$2A7V
zwpC!v#H7Xm!BZHRn5Hl=F*8AN1p^Z^2!CQ=V*bRy`2PzSGchDFK=367CWcE4j8PE~
z9Qlrc5rpsfFffAf-8&47AbjTv10x9Ei(p^`;oBz|7(w{nJqAV)zMI0p2*Syy7#Kk~
z{s03b2p6AVU<Bbr5e7yOF8jv72*Qai42&RL{)mAQgexK#7(uvd0Rtll7br0>f^ek+
z10xu3V_>Y@#=uxu1;IrL42&RL_=15Eglq0GFoJNc2LmGrm+CPvg7FLn#?l!Kj2STy
zoU(+05rkt}7#Kmg`U?Xi2$$zDFoJN&4hBXLPUT}@1mWZ)21XFBILE*U!Z892j9~nY
zfidPA17p$)2#yb8U<BcUNeql2T*$`22*R;x42&S0TEoBy#@`qiQ@=4V#@>P8v;qc3
zFn+<nnD&B!F@GBrdoeKPdoeI(2SISo0R~18&OXDy2*NpT42&S0b&G)!gwyXaFoJN#
zDF#Lm&h%hl1mU;<21XFh)ni};<82I#x!V{R<1RsPo*e@t7$0F^%saxsm<h#M0St^F
zoMOVjm}0`fB(w&Cg}WG-z*vfbNmz=3u_g<Gs~Z>?K{&yHff0nu*ccc=IAIY3BM6t(
zF))I#^A-k15VrSVU<6_JYYdDaT+PS82*Oo*42&QgJ%@o2gcH9oFoJMW9s?r?rzbEl
zg772{21XE`c!z-zgs0zNU<Bcn4;UChc;N>IMi5>U!oUc|hZq<a9b#Zytp&lW4lpo+
z@T^k|j37Kmf`Ji?CowS2nZ&?2!vTU9mN77b@G1`mMi5pIVPFK|qDu^nAYAOnzzD)6
zb_|Rl{3?fm5sdFKFuuCS!1(qP1iwpSU<Bc>Tnvn0T*binwTgjprW_P^Ffh*SU|^iw
z2F0Hk7$<*XU|hZiimezJms>F~F3p1AWoH-|LD(*Wff0n4{9#}O;l*YQj9|QofpPI7
z21XA*2zJn6U<BbQNeql&e2sx|$~6YYB@Ga~^bP|f2ruDdU<Bc1Q4EYA9BshB2*Un;
z42&RrBZh$ygy)JdFwPZ;kN5Nq@DB=!cX17N4)P2L@ehj6D@!g-No0tR_Y3v$!IWpH
zhbVwZhj@hgdB?jrhBz|B$7kji#3z?}=4F;JKq;7*OHpQ7YLR<tNmy!8ab|uVLvksG
z5L|6)S!Qyodn(8f7dRV3);Yg44@C(?07IQ$Vs0wPI+#gdK8C8$(##ZORbW0=Rq<s;
z=n6qX7;1gcOa${$RXOM97L=BxIwuw+CS~SimQ=zG#*{(T8IoU;nB$w83)cV_z^)GD
z!sJp&Xu_0&#86ecr<Md1<rkzDm1L$C!;MB2#n9ncQc{$eR9b=($Ou6U^&zPhC8b5F
zhAuvtd8vs-zKIp#nJFb1$kyRff@)SkQD$ypQKfT9MNn!<VkS6Efg>410=K@L)Wl+h
z!;v*YWC-X41tBb0F*JiDap@0EEpf|9Oh*JVLN{EBkY14an3lt|gJf};;GS9%T#|?s
zV+h;fQn>U6r4}RQOoT>=I9^>KCt*4mtPv!Is@FZW#I+(d*)c6GGcU8GGPty$AioGD
zzhjeznc-Yg;arpo@gjnaAq%oLxfHGd#Koe<m;ptNF}$R6E~#)VDM?HQC0+y@$pn|w
z;*z3#P_}k1seo}X<w5p>t$->4@ljME>~Kj1vyo(jEAx^wit_U^t3V0axugPF07+dy
zX>o>gX;D!sxYTqmsX!LMt`6i5u)C0yg2a$j=NF(Fir`~a1=0>N60Q&=grwFzwFFX5
zK|&qDMN$)-T7qIL5+6yGJDMsaKB_8MR&*|@aEE0~R29f+4el-!L6~~SqN2n~c-lke
zVNn6{dU7d}B9H)zI<WVPlZ!G7O7e>splVSCajOTJhD{4d97UJ03#yCZe5|TK+M&k6
z6oQ1%)S@~Pt{znwpB|8z*tLOVP;`Pyt%Ag&;#8FC3mmT4q|o&S<Rs>SG7n4xgpZ;M
znloWB0OP{c_+}R5CKeQ=rhtur2PRfw?0Vc&OMFtxQgaxROHp;fC2;Bs#`HRd5g2N)
zn+Ee2x+7rXFkN78x~G=-rsn1sRR*ONmSz^E=BDPAfNC^6k}&-k?!#&jF{<Dursg{4
z<m4xV!Vktomjk7n<WgU#G>C_;A|SH_T$;nwK=@cyfwUtG11kgxp{w;x%u7s91+^_<
zX2L{}RJs+Vg3_OFYA%?CCId1SY!gTl#6gmGPc8AxOUsA&8pgqt2k8PE0aXIxqpEUD
zNhwM#E)Gh}ONTneJ+%Zy5Vv}eX)x1~wSdHtbOjWprlpo7XE+vD=0W2LRS1{b_=1w+
zDu@?RG(g0WbUCJ!WrEvtps<Fpkz~Ps1NjQ6#p;`yiz$px4=90S(^L#^6$IpG=9Pdu
zJBU_raw#@Zm_1Or;M5W<I#5K>bRc^M<S?i~sKPKkpfCaD5Rd#~P&*2Ri%ktE_Q0_U
z&Q~B^AQ2>$pyUV=hQth<hok}|3)T%$g5aX50aps3ULVv02;~?u1ayL&2zE5cE_BTx
zNlg8)+TS-d7pe&&f~GPkH9fPqBo$N%Lsh~>aHs@X2X_lhF-Q<ieP~`0hS^ABNUD<y
zKy69i)Lak)RXo0+Bn6ZNAd(OsstU)Fd`C#YCKptKIhgVw*MXf3RRZE;RRysCO({eW
zL%j>KtuF9<0&%HhNxlon79^v<d`wf~%Zwlvpecn2VyO2(w$%gERu42=!F)_pu-OVy
zip^FR<PZjPP|X7gA=?V$V^syQ0OnVyQivdidW2tHO7hYD3KBxI732Z55P_<KSb$_J
zNGU`R!&XGRx|HOj$16w(%~mY&3RMNM0LfO6Qivd`tsclB4CY|UBijm60^(y;1+f5T
zD^w{&5JNq}uO66w1qp#{K{5*D0kjZ?s)AU6rW7KGYO4{#P9yZtH3FLtGX%mz*Nu^K
z!OF1P6q=WqlbN0eYo{a^R2sP;#L!KK%OHCiNdrh2pB{)C5Uxiy4<d)E+ZYiN#^@no
zj1m$M9=dLfkN_*gu&Fq;#Ki(qYCxDs=70r2{sOxi&cmVtVl0X>h!C1uLo<X`hGxiV
z1!TIR8H!~PE`|xH9)s({YM(J^*wQyO7o^JA2;DwoBNY1}Tr~T@f)KOe-a`^YQ*DGC
zmLLwMJc^Y@E*2m@R#j-0LX<)TG1Mc6tC0(4$b!T`7Qwv$6To5;X81xC<FFe!jE!6{
zLm4E7W;Zwh(PIOu4q^+EL&1t6qA=IGmF6V}r<OS7<R@nbXCxMY8t<55XsUxV5{pt(
zf+0gjP}N9c$f}Xsk_^eEAjK#`$ZAoVst~m(LTGB86O%Jio%8e3GSi_ZgT`@?1kuz(
zT<Dvci>?P<0$CrZlbWAWnga_L1Rtg<Ah9ShH#oHf8XPEGbTyd_$)zv_nebSHiKHRP
zreVmIA<33u$cCg=1f?Py02P3_z$dXZ58O3{GEl|ci@?(t5IHahQy$jsLMVcWpsMsv
zEy@FrLO_&3x!BY|dSA(<$O<81*i^e#FrX@Rt$>FCvI(vg5HrvfLqt(ccFqS)RwR~W
zmZd`73DbosLqI3Qc%0fH(ge)#EzK#(gpXZ9JcZ#9WJRdvfjS?c>;(@exBzx_5I4b`
z3{wmdh3W7GCw-s%MDPFvf`cjVl30=ms*vDnzyjFSf#VWkG)N^<Y$7Dw5=)#i^Ad}|
zoff#k2vJniL-TTw-3jHQssRnpmgXgwK&B8OHX(~)sCLiEPf7$2s)6lyPc4Cp;7|!I
zolzBo1ToY@^Jj7?+!as}m`b0_ylnVLAQA^t9%O!UDMAT|kF3fuB?T15poEc`mkr}#
zQ328jF$k&%B!H&QEfZW8f^2h4Ndfb)r~qk%n*>q>5<pf5nxV`|1<xUYjDmBK)xbs#
zAqK&CFct1T(3xT=10fEdkYPwJb@xH=u&4kz3q=t~0HF>(0s!h7yZaz<v8e&+1sR4=
z1`<K2^i3>qDosmEE%HywN=*h0qPY8@i{VraG74lkng)<CK0T1y9=k?}971<!UM?0F
zVu~Vkz(yr7yoFT)p${=UfuR$J6hbdr06;1sEFOeN;MWHVJzQEras+ilic363KolU%
z!3a%=GeIWckV5DMwbPK&k8ffDWTXkC8J8SPcQ{h&Wk@bX;lk9o7`s@)(=KR29fglo
z6)0bzXhV!+f`k!yFS!(zk8B!T6)4Ej6oQ1Xs`bx<SCuFx!^M$xfqa!&l$u;(?1G{T
zQyiwty(qCDBQv=eWHu}@2c;J0mlh?1nu2(xVP@dai&Yp|4<ZX7*$C2wMFLr$Z(;#V
z11w%pgpk#O6C1i}G(lwbFr~q%B}nNG<S1-1*mQzg&WJfKX!3$-Mw7&=A2G;_Y(3lr
zm^3kFfKnGE!C^QAY79sPUX!5BeymOb%MsKKvI2)AKn8%M@tOgiJHi#75J|%NLAKy<
z1lS0WJPuQWON-JHlT%$Xb5rv`i?d*94=G47l@Mzd$X*P0VHgKeg>0fzYC2>=kFkp-
zgpDlgng?pmf?^EBLY9H$^sv;TlGF-F-2@L=$oM^q6tZ4K=0s5faXb!5Wc|L01z0qq
zi{jA%3IvF4XqrG0$ojz99E)9;;z+s-4M2q@c!3loM34ortAi#4B!wuogP{Su;D?!r
z5I`{zE)4Ps*o#PdL1Nfd!>a;xEpQ1GeIWl~sU#rIN0or-L#hT04Pc1}mhM5VPed((
zMIL5~i?It9S*W8iOhwU!NLNU<g3ZGsgQ63qW`Np-B8H+GoHSroz~dE76h#M2F-C;}
z@+zbrMV7*<7o$vvx)WwLhCETGfD#M=gFs5~n+0B^086$Q?t#eSHvv?(<1_#)NmxI~
zow&RLG6E!z-xP4+j?)<sSt3jTS%k|WU_(F(aG8TqoMUkhrW&G616hsfHVgwn%8<=8
z1eFKK<sFg$c6G3Pfl!EA-WkHnF{lTT1W-(bs{^?S;&g;kkQjE=@L~;J3tR$4AIN{G
z#Trx}rUXnMa(QQnQ8Fc$;+ID^1xpcyFanDty8htOBpf*pVGM3H=%!&9g}QtQsWc~~
zlAy`Zwk19zVM>TK3zRAlzQ%AN)HskTTqYuy#+W7{%MxJ%$RfOkfE1vcgHrt<bfXC4
z(*x;iW7i0gL)VQ~fg!Y_N#NH9F&md=h%CAZ?mn>W18-%*G7p9nZoQtliQwf{m|7t+
zFrAR0MfhkU3KvxkY?Ljz6ru>mM^y!ymVqqz0?#r-l%fdYRu77KnCZw`K;rmxftFEY
zS`=S~SWk_R1uddwK(+)dfMGgD4u_k7CWE09x=anl4oHB&XC>ffLDho%hwLPXa*!y7
z>2CQ&xrw0hLAV)E5e$`3vwibZK%)|H<;cPqdfYN|N>Yo^wIGRN=zxR<k_se$V94Rn
z4PKq<l$i*sB;oFaXhulk)9aj*m|K7x;7FPwa+takD;)DOi}Op0^1&;g5cZ--VCaJl
ztHISn1TfS&<rk%-7CGnVfY(;TRU-?d>H$rCLgF3n5hNj8YC&lP7UBryAW=*m;DnB>
z7%YIH4ia{-1;@yaL6gDIiJY{M?SXg;oT@PNU`aWkSr<e)#MA-Z-2w?ykYca^raIJ|
z0#XPO!B7eD7j~Cm$l=h9NT^6YhiFDf;nNFAr`R<^<S=!kBvoXsC=wX@kP{)2E@WYt
z9{3Cts7(x+MaB?<sf8*572M#Im0XH0f~FFbU{O`VMPMpj%Tn`7;FS|H4@E^#YI1%N
zXygX00?Nap0#e~7mm(>H2w_nho>`Is$=oRF5yJTNKupE15h918JFqkrJe3J{7leZ%
zkG$~)YACW0idxs4#De0~l#opD=0vcG$U-P;VO2QPOc)oN8c>;nsthCoQyE-Rl$w|u
zo|st@mY7qT3SO;(DTY%uBuJ7=F|<G=(DW5$mZV}>gDi+!J;Xe?MM#<;GH5zs{xLIQ
zfa^gL!>Jl#7#1xM2{e6hS0G!1EQnh@#5}k~NSYurs5+ezOOi8uQ*-@6l_eysk%Vxm
zg_s1h1EB#Tj;aeO1%Q$VOcR<gK0Odqv1^3Lq3MSE8N7rE5l?91cy&PxhFglN6(WhI
zACU^M`qRt=B#ciF#8kMIDCR-r&~(Ec1u+}06HOeiE{MT6v_d3N^&`bLcyls(qQUef
ziVld8F#E7b!EA%B*hXyM0Id=S^RTFZnTn(dB7~|Iv;r75g$hxM5W%4m<Q?#$xa5LL
zxMGkXZuJnGv1x+Hpy~vz)J1g@LIj6Oko7R*;fg_mxYa{!#-<4(gQ^p>J{#3d2oW4A
zLDs{JhbsmN;#Lo_8Ji}E4607hl4(>oAw+Pf1X&L=9<CT9h+93xW^9@uGN?KoOY%KX
z-GmUqp%P?0%y_tBkRWdL5Sy`Sg2<riG;%?85sZ&j706<k!BB-DAzW%9_F-y(h@<K<
zMso*@k5v`OQkbz&g&-kZY9aPvYJi9%=>n}kwm=FGBtBME5CgylBa}h}(bOB7p&1Jk
zz^)Er2Haq%Vu&c34r3!UlVJkb)j`aFn+#P95k=Es<boa+a1k6TA;!QBhbe~$W9WhU
z3be8hvh*9YfEnT$TxuaEAz1)510s&03+g*$8(>1X)Iv-`vH_|AA`a69sm0*k3KT9j
zHJ~<sKv8CX5#%5ZWc4UgsCvPtTcBw|7Q?9;;#gR%iKGQ0fuRr9OM$ox)X_!h5u*x2
z%s?_6tQ#VVVX|`xXl*Ur01y|O8i;NrGo4GIYi&_g!}=F6l`uY5RiGjPO(94KRV}2i
z1XBj#VNrqVK(I215UN__J{8PNWHFqoA%<bm0+B$~2Wkw1yJd*BYGP&yL<EOQh%qqp
z;RZm2QT2e=G&m;~fKEbzTYw^nTRp@)m^H|nAToG#BDW4fD=eTcz>F~zQ^EW0z#DKO
zX$-3*s;#bhDNwWFzC#kir556Tn9mRzAmXUHJc}U~Wafc34?rA-EQV7x#4wm8NLnBg
zsQN%hMnGZ-y2~135t=YQJrGl2)}d;I$l=wE6k}+5%Mg2busI5{bp<KbFtlT{J+vSt
z5quyKC}Fy!7Nq8-q~;|<P6LA2f?EZuKX9spSPKgf0?J@!hGZ0_CZ@PnBxiv3r$bx<
ziT_mah-GpqAr&x_AbK5BQk)ZWa*`60v*8I8Sq!IYRM#VEfk>d~10N0p+Gq{#B*FX)
zIWq<>j86~5RO}idaxmTC^Kw8(<b)(9ffsnA3Bc5W4v0xD@yW~uAJT=)Ls9`ca{{3P
z&O=p!x_t+7b_%i>l4`VlJ>Uai(8N$xqwnZ}=|C4p(gix`1H7#Xd4mwdRRnZ_N5x<*
z2k>bC@FQLzsRdOI)lSEPOvIUH5bKbHU}^)3^3yVNQj0(<-ZK+(ARDi+2%@VGE=dF*
zdIVDn;bW@G2aOdW6y+DdXR#p5Wt|iA9Fvn%i;DwN!8_QoiNZ{U$blL(Mghp@5nvaG
z>2fZqaLofHJ&+9$yC9*6A&R8KC9@ct7EEE79>@p*$O=e%Gr6D=%)yk0tc?e^F`<ee
zBA6;6tzl%95D^?IA=wT?IYby$kFg8baWJ(|E;cm~x1lP8h+$I=aUZH`h!{@Q5a(gh
z0+E2}^UMVmA+8lAsYQ9<1LpF<Bi>krVR}$i!<Tfyr^WHh6EFobIfFFMg~K#7bud$*
zZC6xHpv60ogSpVeVY*Pg8=RV(Sdful1e&15B?HqLoSB}Nm;*BwuCo{tJIST^<%u!{
z5@7_4f+&KS2X2Z&;}p|P_+*JN0b*5hDIQ}WN?>N8#R=R&n9+ieLg)pZ65^g(;#3*n
z?CDfm><OArf|pE4q8K``sfUZfRC^XAgX&Gte3nOIUJAG(#S}wQ?O%|Z2ksOgD@PYZ
zQV+@=skz9CQAChbf(!v2G=k&|R3ThyL9O}ZQqO{96y+dMBpuE<`NgSd#-oYBREMNi
z_=ER5!Moz<A{Z*6Q4E=uhG>QfVW@RaErG3ea!D-)oeKmv9$gBb-muKnay<Is(%8%h
zfgDMRMLV(#Oebi*6yhg%fM5t=s)hL<GT#c(4->;wjqY<~UFdQ!-Jpb9RFq#7Tv7z-
z6rl;As{<c|np_G~1?Ixk_$Mcq79{2+SNbMaI3|NO*n&5h7YC#kfj6)g6y<|j6X0bN
z#H+<-dO&_jYF<fZVh-2>(3)3<<WgiKu_(Z14qjJ+#(%&gC}?IAsR^5Xn9jmw2|kq=
zCOeiTX6As}L@t$iiMg4{!M>@v0jWjcz(ICAUUe9z`X*MuUE!Ql3OdFJUq~Y>!DbdD
z*r2LF>w%Et3r!NHAH2d1o?(!AC@LINQXpHo{U9r%zzR_XQPd+8gBq-$o%|s8fOTP$
zLecA(k^*T@qS=Kch@u`Lj$s!zDHOdByNXjwFztc~qNs-))B#eA%`T`GgcJ_F!Ko$S
zvkBl~f-n{#g`yW~V@M_VAPI0dA`79Y1r<d3`CuQxEkF@NQ4KW)ZBPN(1{5iLdQq)J
zGZ-p~qTe&GxFiu&%7FJPgY85X!lf2eXF^wnA}I%n;?jX!2B2GmkVDZOS^(Yl4ptB4
zVNn5TL_wVcQ3er0Q42YB0Jbn0%EO`pq7`ZyL>WW~MJ?!rQ&=ShRf{Zyq83dZjEkZM
zv@0ETPzmg5bYT=dL8-a<WvM7>1L_nkGAKF`nG%uMp<1y?q3A^v9vFJDNulV4dL5K5
zVG)5Wgre3tCm($DC^#G-929wwA#Ry@DV}){NvQkLg;Df?Mx`<`b5g)&f>gp>fhmEm
z&o#H8q!LXFLJUQ<Gl~_UgB3t~rC?U!kVP@UF(n0bY6Y5ga3K`6Fi}L22Mq~K39R}s
zViBefA%UXLF(n1utcR>pLvtd!42n)PNl^0&)SZ9@3@&MWW(21~Cmx`FMl%C0jbaAO
z2cUi#HuuBDQFMWghDl*{JBB1~{cwjNyBnq-E{USw9a2Lg*C!yyBlh8d6E(<TDe2%d
z>QVV9W`T+-Y?&42nu^q9Y|<EJK*p%y5m=F$3>CppiLF>cvJIOwHZ!2rJ0fYKnt>sW
zVFqU6Mlu0Y5<@>~?#1d3TuLy^0;ecMHiAbxl8bOD!EP2t0zx+lLjj68pnQQb76KWU
z0i`rpG!s&WVkYK*55ho<5{o#+M4OK#b|9m7@X?cEgkunjQOw8cSy(XQ4H38^6!S2>
z2vbKyXkaQO(rkq1;3)z<Bw%JEl%koPnvCgoY{3V&fmjVh*n{afytZH}N3p{tHK{b+
zCBGz~C=-0*Ke(Vo6@;k|EruOw1Mi?=2w|#)-@1WN3l+kq7IL3Paw)Q6h!{*Y*ntoe
z5Q<=l4?`SH7uYCl+R!CX^g()M;1i0`@;+#G4s=*DSQteQvJ6IQ#x9AXA7Uryv}CZ^
z&?rU|MbQC0796A;n}sl=5OOfx&~Z^vyUaH=H>4;NabFBLuwjB|>QhT#vRJ2oFeOp-
z2jkO^RT8EjY%<83ph^NfnFJc$#U_fO1JokG)PW?5qQfyI1+mN(WFah>VM?IrL)C-`
zaA+jrlEz~Oq9DR*20|Le3{cAk)iQ)as5$tQz{~=rR>-!Wpw!~jqB7772c{UNYEX)U
z%)dc56M+Sg)WM4p&|EC!9u_3opj2?CgqQ&1Aj$hCf@U*)Q*%KKRB`aWeAr|PL<N!%
zF13)JEqL<FH?aVr0V0m13%qL-;w}giNe;AQ20Vodkw<Wm)PQ!zAgMuc(bRxSmPF7Y
zcJ4)qd8Ijt&?RfWsktC6SY>gUfVlC(ttcNcv4CzAR%J+Lx>kTD{zCG>Q{|xXNB9(l
zZ)z?sNhJM{i7}89u$q8d8p#Yu84oUv!GVM91RQcO-QY{0ic?DhK-Y^Emt^Lp`xt@O
zB0%P#LCG77985R3gh6x#oby5FqeE}Cg7-vl%HuEv6q8674WQY9B8$TWP!hv!0*Wlm
z1ju>?3=d!x#-|68GhpjZP|btLq3TBQ4on-0Aa3;#^RQ`x$e`*(@it5oiXd+F5c9BU
zg2=#hLMvRPat2huLAcn|Ky-u47q~)*7?Nsmx`vnmR*A&NstRHNno@`$lKO!B{2Wll
z9s<1r1c{HP3MGud#)8zMh@$C0i9fgw6j3xCAk&b_KbQp&A(&cds|0k-Q(9ta4(JXU
zkV5eEFLZX-B^5;mrV}(5lAoUgask9h6h}dX(9|N=L?BzBd^A<i;W<dj4pIgafT@GH
z8FYq1YA#3~?pP!tRJD+4T@<xQLNK+U+7?vYg9=WNTJ-dRDvnndBx!&{1e~-`v_d42
z^n)zJRjh-}z^4Gs9NdLF+$7ve(9D9k33}QEB0f-s(eywJ$Iyc+4ATQ@v=!wiLmMuj
zb|3iCL%0A;om)<6afW+9s0;Xnl^_>i$8gXdE>LxVQwpXRzWEk(@NQ;aI&_I5R$;gv
zaNQ57^4#)^pzedMMuSx6*k$z<P=TSDnX$Qrv4xo-s<;7^Yiwd{VgzO<aQQGXFdX7x
zWO%{H$RH=c$l%e&$S}i`kztVyBf}e8Muu4qj10G&7#ZB085s`PGcxGdFf#1%U}Vtn
zWMp{d$jHED%g7Mp#K=(O#>g<sg^@wPm673@8zV!EJ0pXN3nN2^D<i`nS4M_&c8m;i
z;*1P!;*1O*#2Fd3i7_%nNiZ@Tl3--elVoIYQ(|PWkY{9ABG1SWC&$QeN{*4?h%_U^
z9|cB+2x&%!c`}R)dNPa*7Q&1Si-Z{&Dnu9=UWhO<lnF92JQ8GN2oPdqI3&c#;2_4x
za7C1nflq{yVbc{xh8b5G8Tzg<GN@c-WQY-EWZ=2R$e=Kpks)t7Bg2$wj0_CZ85z{3
zF*59!!N`y_i;<ykE+fOYxr_`Zvl$td%w}YeSi#89wt|si$0SCEUn>|Ha#k`jWIbeL
z@O#9_a0f(BWn|bfm674cOh$&Jd5jEa<}orj&1YoTHJ_0|V*w+>v;~X|Yzr9~Cah*;
zC_B!`@MjAnL&{c0h6`I68637TGOXCf$RM(vk)dTfBZI?EMus&z85v}DF*3C5Vr2NR
zi;>~SUPgv3`xzM&4lpt#>}F(;*~`e#v6qoy!U0AGpF@lcI}R~2XdGr_cyff1A>b$@
z!<W^J3{2}88FJP$GOSq3$RM$fk)dlHBg3urj0`@T85y>1W@MOgiIL&fWkv><D~t>e
zjx#c-on&N~aFUUs;sPVXzKe_u8kZOuLe4QV%sJ1<z;S_*f#DP*gU@M3h8?FF8MMwY
zGL)TVWO#Izk%1?Wks%?7k>Q9xBg4D^MuwU|Mus<mj0{Erj0`dN85w3hU}P|Qz{tS#
zkdfioeMSb4PDTcqZbpWdZbpU+J&X(zeT)oNy^IXYdKnqkbTTq5>SAP2>SAR0)Xm5c
z*TcxL>Lw$D&@D!Wx?7A4Z*DO%#NB3O;JePqP<Ne?;mvhM2Ai9V4D%*1GO$f#Wa#K)
zWcbv_$Pm}h$Z(>ck-=mFBSX<dMuxf&MurPPj0{%6j10?y85smZ7#SXgFf!~4V`R_?
zXJnWV!N{;AoROg-l93@Ol#$_BC?kVi7$XByBqM`F1S7)_VJ3z(28;|6hKvk9^cWd#
z=rb~;=rc037&0=ft7ByFF=k|VV#&zx!;q1I!IF`o%Yu=?#DtMyfhi+{lo=z#3^PUs
z0dq!%H71M<DyEDKUFM7o92SfW6Z9Av+zc2Q_8BuWL|8F0q!}?X+%RHfD6nK?U{YaZ
z$Wvit*rdeBFiDw_K~9;G;f@L;!?s#Rh6AdM3^m$}3<0W)3|!ib3{$ii8J4IsGAL*;
zGMK0_GR)IpWDwJ2WLT%h$e^Ll$S_HhkwHj{k-<rqkzt)KBf}?cMutl|j0|x)j0`e*
zj0{F~j0`VY7#XUX85#aHFfz0>GBPkVF*39?F*5vXVq_3$U}R`(U}X5!%*c?}!pNXe
z&&V*Zo{=Ggg^A%33ll>HHxt7PZYG8p9wvq@yi5!`1eqAPxS1H7c$pXq_?Z|k@Gvn<
z;$vb65@2FDCBVesAjrgUkDrNwg`bH*fscv7j+Kc)j*W?70vi*<6fP!)HLOewdF)IK
z57?O)d^ngG^f;LqmT@vM$Z#<+?BZZz_`}A;aP9^p!wyC!1}{b?1~xB7200%_h9X}^
zh7KP_hF?C64BNaJ86NmDGI)41G8A|*GTicFWZ3e9kwN7rBSXL+Mur1_7#W&=F*1Dm
z#mJ!akC9>0KSqWN&lnl(o-;Dc_{qq?^^1|g>@Oq3s=tg3X}=j6Zv19s;P}tTQ1hRW
zVbgO)29+0#3@Td~8Tz&`GMw1W$Y8dIkzv^$MurK885#Z^W@N}a!pM-YkCEZrK1K$+
z{frDh4lpvL9b{y<c94<b&2~nHs2z+9r*<$hM6F?DIJSn7!DKBXgTn?!hBX@)8KgEc
zGW@&5$dGlJk-_5xBg2*xj0_JhFf#aDWMtTLj*&s@JR?KaDMp4Hrx+QgoMB{OI?Koq
z_L`C5z-vZ^tWS&#w>~j4^n7Gw`0<gEVbcdj2APkH3}$Z_85X@^WH9=|$S~&%Bg2QU
zj0_3i7#Xg7XJl~t!N@S{1tSC3OGbu<my8TwUNSNWyk%sld&|h+_nDDl-)BaK8}Aqy
zyxuc19D2{lVDW*G;mS8ghM@0^40=LL3`|cM8H%1VGCX_A$Pn?2k>N-bBSVHFBLjyl
zBf|?RMur{*Mutm@j0{Dxj113Y85ydi7#R*cVq`FQ%*Zh3F(bn+Yeoh(M@9w?DMp5A
zl8g)ojxsWE9A{+EIL62@?HD6N-$q7;JDV68er#l9$k@clkkHD=;OEE4aLSL7;er(-
z!=+Y62DT@R3{6iM8InYp819HLF}PSWGE~_zGE_M-GDx*EGW=*~Waw&VWXR}XWVqJB
z$grx7kwJ}#iD3#869W@76GH_v6T>HFCWbHn85xoom>4cGFfl|#F*3Z1WMuHU!^m*w
zE+fO0JB$nw_ZS&Y+-79BcaM=F<t`(`sbofm1M!RuCyE&vL=qVpzLhaDv?MYzJSt~o
zh^Sy>SWv~tpj5!f;84lPu&t7jp{kIPA)$zo;YA@M!@U|t29H`s2E9^7h8d-d3^5su
z3`<fN8Cqf(8NO6AGUSvqGVCZ}WZ+9>WJpS8WH?vB$RH5I$nY(Ok>N!WBSTO;Bg3Qu
zMh3P*MuxOlMuwVHMuu;xj0|^T85s)F7#UuqF*0n+XJqioXJiP<W@I>!!^m(Zn~}jS
zhmqk{79+#GbVi0#8H@}bnT!kpaf}Rlxr_|kav2#e#W6D2<uNiG0b!6_79)d63M0cB
zAtr_{VI~GCVJ3#G8b*eOYDNZw1V#q7GDe0)35*PNWsD44oEaHB>=_xZxid2GRWmZ^
zRWUNmiDqQ@lE}!Am&C}Bkj}{9F^Q4k&O}Cr8`BvX9;{?!_^^<XA!HFF!=Xit3|gxh
z84j#sWH>d8kwIb(Bg3RQj0_Gl7#YeIGBS9qVq_2jrKKW92ESrP2D=hQhMZT74EJ6!
zGJJZ=$dL4ok%8+gBSY0!Mh3Z=j0_z!85!CpGctUd%*e22IU|GBaz=)%rHl+`mN7C!
z*fBEvS;EL*wwRG&(PBmhKMzI*9S25+q$!LH*QPKsG%R6cxU-azfo};TL)0=x27_ou
z20wpBhL{_S3?g$G8K$x@FfcMOF&HoyG8i!!Gw3krGMF*wG3YZ`Gng`%Fvu}TGsrN=
zGRQM1FeoxCW?aNLhjBWiCWAVIHiH(!G{#wsvl&$x)EJZ*R2a0GW-w|nOl6$OsKoG`
z;U&WhhNleA7+x{FV|c^xnc*A5cZQD)pBTO{d}a8-@RQ*K!+VCe41XB@G5lrt#qgWq
zKf^tS(+p=B&M@3(ILUB|;T*#yhDQvK87?q9V7SU~i{UoIHHPa9HyCa*++n!OaE0MA
z!xM&!3=bLBGj3&Ez{tbE#vs73jgg(fmPv|1go&HMiHU<@A>(#Neg;7XP6jRpVJ2|~
zVFnQf2?j|9AqG(fF$Pg4M<!kdJ_c3>14au*OGa}>Q$|BZV@4B3BStgEwT$Z+y_hC4
zOl6qF(9bZLVG6?phMf$%7<M!4Vc5a2m*FtO5r(4-`xy2!9Ar4oaDd?$!y$&_jK>(K
zFnTgcFui7c!uW>qBjXoFMkW@fcZ?Sp`I!WnE-_wVlw^`(ddv8d@jN3Z(__XLjGq`k
zGk#_K#wgA7kMR-Xe?|r-b|wy{zl=W_e>47J{Kd$`#LUFX#K!c4@jK%U#`laL7;iJ)
zWxT_v!=%e}kx`H7IpYJyhl~PDLQIz#pD|u#yvF#7@h0OfMscR=jABfDOivkkneH*(
zXMD}Tz<8d4hmn_&gOQVwnURH&m645+oso%=i;<g=k#P;<21XW!y^K2;cQNi{+|9U$
zaW=yuh9wM(8Rjs|Wmw9vjA0(b0)~YQ^BFcVY-ZTPu$5sO!v=<p4BHuGnPix}7;G8L
znJk!`nOv9x7y=m_8SEJx80;A2m^7H27)+VWn1UFb8C03v7~C1unADkkm|PfK8G;!?
z7(yAs7{VDM7$O-onG~25nUt99nH-qhnOvFdn5>!Hm^_$ln5>vAnLHRg8N3;M8049>
zm{gdQnW7j<7~&Zd7!w)G87dem8A=(-7^)bO7?T-O7*{Z^VqDF*lChehhQW`~pD~6Z
zmLZNIo*{uDks*m8hB1~gjxm`bg&~z8jUk;On<0QPkTHlchas0CgCUGDoH2qilOc;C
zk0FvViZPlopP_)EkRg~cgfWz{h@qHa3F9)x<%~-iqZt|)(it-t8yT7yIvH{q^BB7r
zx*2*H@)-*ldl~u|+8DAKa~RthIvAQ6G8wZNTNqjyY8g@)(-`X*>KV)#tQag9Y#1yV
z)-bGPSjXVaq|3OTVL8JJhLsGf7*;c!VLZWjit!xdNygKRXBnq4%wm|qFr8s0gD-<W
zgCE0O#(9kM88<R+Vw}J@k#Q2^WJV`OXGR}JU&cnpCdOvQ7Djz01Exa8BF0L_D#ljE
zHbz4xBc@KqF2-)g9>#LU3dT~#GR9)Y62^AM4#sN68b)I#6Q)|mI>uhcKE`^+21YAJ
zYepAFS4KNVdqxjNPevO?TShlVcSZ+BM@BD3Z^pxnM;MPX>NDyw?ql4~c!2RB;~_>q
zMt(*GMioXyMkPiaMpZ^NMs-GQMh!+yMlD8VMo~rqMnOg)MhQkSMqx&IMoC6FMsY@2
zMkz*VMj1vC#(qXFCLShkrV|XC8MiQwmPn%|(rAe^S|Sae5{a21KHk$ez&|J?-o-W8
zImk00#6KuLuPnJVC6OUM-Y?Y02U8xtcM&{OXAHZW9yU^jA{vjh4H_x|I{i4cIJqdZ
zpd`Nt-7FMI49#ex!(am;Vi-!%M~J~{QA|g*8bu1jG|12}`c>*EJ_Ze3g72wE7sYwC
zyK_keWUDdUCGc~pF-4G_1XqT9IID9>1-hRRLTI{OQcDt(GmtI8y`>Y|#!;9Taqg#u
zNPuVfpqBxnYH=<tDoV{OL3RN+0zmT%Xo8@La>ul^%skMsA*iN6wv3>PL3U1~ih-v*
zL3;_Xx&<=%hI0>bKz;!h*CIsGf;OPEI0Kt{gfN;00&|~`9pE@Z60}DfGbDpy`^S+&
z0d#*N+U{#)*~+}+jH3KJ(7tDwunXwY1b9k=M+&Mi)`QOx*G?dN6|506l2L^b>qz0^
z;PHL<wL&Pa!+LNvSR?H0XV}g)ROiD)LAe^~#vBy0G1P!h*(YEQSPh1!F^$Rx-#|~u
zFo-I`#(}pA;deYp2|j~B8{|;0n89TphDw~qf~MYJH)x@l241=W3ly{%$8#z@C}I((
z^rHkGLKtg;L`b7M7IBjRs(J8qit0SDa-0bg%S|{~^N%H56q{=ivS^OAM88Z2?nq>}
zBQ6+2aXMHSx65(mBuliLZcuDOlS6kdzC36NlMF+?2nZ>aSi;f=?mUXA1f2a)oQPox
zSP7;}A@`-g?Sjo!;&l*I5kbR1c@Mv%Kq~MUgOTNMnTDYdm!UYarX}v236a7XTlllB
zB|;jz33zw=Lt8Z%>wXcT0KP;7^#~1k%t7Sxa|=qr=jJ3PW#%9^Bp?e1+*1)v5x59q
zaV4r@sJq)S<ec+Mks3B|({L=AfXgE{bAn3?K&!pbJP6yu16q>+Uv`9Hy-#Uo3Z_Qr
z$_z{ilwHMe#{?jsEP`PL#;$yXz9P_tza^mah%j_Pw`v=@_+;j#CKmZ7R)lA!lpq?R
za6>||`T!(~lAOU23tqK_eVJ@PQD$ypQ6;1$8eEcCl8WYggaY(6ju59{$YWZMtfUwt
z4WY^6*ItsCnTOMX!Ko#vZC!L1!W3ZI5uA!;wJ>VrfJy`CvKdr~ko*$xAtPw+f(fHo
zR+L$mTI8Nu0y}I6W)gVs2&9h&HwG*Q&DK~2kxd3G#(DNO_!K%+Ga!3eu!)6d!VV)x
zaUDbhTr$3(q__&3b}SOu&b5OTRKBUX`9+oRIt6;(3fyMs9v3uKIL=8SxTFPiF*Ru2
z6-L1TmGA}Mm<;z7NEEaf46Aa`Ri}vS>R}FsYQfeMflA@(W}!%f>N>bHh`2l$W<ApN
zs)&XSvLJGr!ML#)?M_=H2cXG77I+~n#U_nv6Al%qiNziL9%8&^K+c9sLG~xCy#z@`
z{z>5bjS<cSMH#l6YY{5IRXYyd7;@;LfT+K*n~+-K3Od;Wr7{7n?FR`$kGp`oB((&x
zSPXIw8j^585n|aFTo|-Bg21AG!n<ZsHYcMSjbr;PXv-C7Unrz-0PjJ-&<T=<?eak+
zDX5cS#Q?T#UPLIyX)bJgAch%;1<)8$pe6%o86#G2Kv&b^l1natY&b^uJ>sYWRO_7J
z$K!)c1dWP8PJKYpkE#f<IRZry>J~;=^9R*7$gXQtZKxX>z)b|~`>LQ)#U(}gm8ix-
zD<_Z-P$j^%5h6{15;-Up;8g_LErUZ5ESB+@15<*-l#0}3q5>1tzC;aB9H9<U2=zXi
zuPRcL(Y%k_O<;wDosKV);Bg<OHYBT{Cu*Ri36Q5?83&KKh%AIh5!t(hF<cZ1KFt$7
zl+pJ@BDOc;$V`}_fzX1}ALzEg0+47sU>b1P07}u|E#N4=hHoE77Y%|RRDvP{i!&Uq
zf=T0W1Ja=&sDX?m0dMx<RDn`eg9>*<DnZ?NfocLm71nkcxa>hugDu@66ku(wp&5cB
z7$C=opt=qshSo>{c@DX%z!B<56$Wk<&}xIA0vv8e)GoM9z`xHPRCXhu%z=`wK$76$
zGo%xA@hQM|Xbsd1$oZLwJ~uc{pmN}2dN9ldm737KkSKD{ZYa_&Su|;kgI3VwL48PE
zx*;dhpe6!{7?wnknOy7w8vcj1I$^_TsM?{bFz+cvaTY`se83N<QSRs$Hlmw?P=I>(
zA~?V^lZ&yAVPccS?qQh2;2ky`T``!680w+pff!+gOCd(Nl9^l#Qw!>nqmP}VTa2Uz
zn^DAH%nEM)!)!+CbbyM3%;aKJY3zZA=pew%fd>O*n+L3pf^>IrNWz=S2>HBB#K@dy
zK{Adb5b+)X35rnok&duL1wDQd+)RON+d$Zfb}}PQ3FJ_Rl&5f|5Uz7RXgDkpbUYuV
zASWabKD!SxwnIoMYCJ&fb1y;~`$Gt!_U0hspqdlZFGsTmCXCH=tX_Z!x>lf>0~5w=
z4w_76UN-2Isl*b{vV+Xrg81Z8AA}f6NJE6(GIJ0EdQhbxF?6NQ`MCu-sYru=Ahl@Y
zQ3xS)-RKQrQ0)lWkqz2N2=_EX7&My;+NcdnXJDDK%wmLFK_Z~O7>Z_)0BSVBlz~N2
z0}CdFvV#o6I22jz27qE4Lmx;GIT&EJ`6lKirl%t6IhZ(jMg_wZuqZZT(8SPUg1F7h
z=wT1ygTo2g8E`=izk_5zzC>4z<}^^V4P(zDNDz_$AX~qX;u%c}i)o-(2Jf6k-d2ug
z0$dHD9pUb&C6Iy(eK#7afu4D3`N$r1Pb~onp}7te9N=Av$Vx$i;6@T?RR((P20EKI
zzqkZl9*eo|=!4f#t+2)gx|J|-EJh)!8Dve68U~c!!6T4JyW^390`FM`sOrE=g}~_v
zBk6#4U1BC#kSLat0wfF>>%tOv2uaLM{YcIMDFY=ejD!f2z!<@WPW2EKC?G>13URm)
z)a$@%HAn)N)zJOU$i65_O-n6F&Hx80a?}MNOJIaHIE#UNkIg0wNkq%VH#Ha9mPWRV
zz!3$$sktCeVfYr@{6RJ+xd1U(1Q`o3azT@a-V26Z6fIpR7gR!(Lxz2k<{n_Chvp^b
zWTxk#7QSG8a2afdB1>XBtlr24n=XhekOrS2t}sUTBlONOG(SQ`F%3pYU_^6rK_#A}
z_c788Tsc?<w`thCY>dUrU@>fp!RDj+4=jewPREjbM|8C%`Hq+Y0aAz~j2%nz(L)&|
zgw+g?N3c4&B;Nzm9UfqJ;}XYe0YnSLr5I@vbPXSNT@Vcz$;SmVctAp!W<W);c@1=z
zB$^jMLfE_p7sqM=<eEK*OEJ6#(u!RdL<2Ujp@%s9Hb+e7!h;o$6t?sQG7_t^Ja9M*
zbbBM39UviWp#>Mmv;bKOo3lXj*mdD{7J3?o-^YpRTzE|3k;36DPzJ%G3x~777l9zv
zSkOC3u!R;#DOenv#UM#+X%|BbbXTIG8L|T*B4Cqo2xC|X(SjEKa6zngg6<bYHy$L0
z)n2#+R+~YxSnP%h<FMTraV-{PjL*f$1$w<8rn8_DIBbVpRg4sAAfJOw!xqO7ISWiX
zp!Yjs7y}W<VYLNTe}hD^dK=TzP@kbY2P%x!R;=Cy3u3hs!>bSvq1y-%#cCnQI~d9_
z!#1-Z7qN&Iy>W~piP1(zkp*32m0FgXgRl}^8Zvkklv-GtS(KWanpc9<<U?1BbJaa$
zB?PEbQks_xI^zprA9#%fXr3`AKPeH(9jM|cQ4f<sK1l?glwgveb$LOlX_yv;q*h>x
zgN#B`3KDWb9vgvp0w#<!{DP2hODu89%u6gnYOI3Y6PgD;&m87R_|*U;-&g>-NC15E
z0hW6wFw7@(Qw8Qk4BTmOt?(-iu$d0OK>_R}lyxS^CSfYWZ!=sy)N&Mq!E-jCwe`p=
z=V5|qu?rJMqyv~pCOo=fB4r2>$SQEGy&!0(4OtG6BcPI?J`G0q33d}1(sgIB5QRzM
zxycNs6f(;Q8`*^q-a;=^B1#o%xdYjW0b0+I2)+9cZV31eI3yXY8d0zFL(_{QiA_6V
z8XX?^5C<V7@M}XZ7%+6gF6l&d74lV`=(ZwX0E)6C4Qe*BJkl;Jtg_e~j$`r?q90Wf
zt9I077Eo<qK~RQ*?WaNW6?zo_(FPU83_!#kqiE(JB(S*+IY*#rM3%y#)fwqVQPk){
zyQ33Jte~mDh!+fbTy7{q45>rH2&5DHg}|V?jNo0x7#_h9L7?eY=q1hAoaR{!2_4W4
zMyN(2$zaonx=<71C9oJa#aIh1h#q7qtXi>bWrFHN$Y9e5S&RYk9qM%!sQ$#M4x6E%
zMH1jSCbU!t7ssV3EHS4v6{*<>@d8L2REB^?%&dg07kgm@S7By?#kpX6%}nsxYi5GS
zUa%xq?Vy9(z{X>G7)gqdRxDN{>&D?{xDrfHBT3=68|*XmAVb!TVRva!nm>3ACt7<M
z)KY{<K#N3#sc<czD|}KR8&<$KqQR4AX;E5GY8t43D=JDvH2Xki2BoHfG7gG3{2Dhj
zH^9ZwodB1><pOL9h`!hj<_$=z3DZqMscBdo1obdvN(LTS5Hmm_0g(V7@P}#vLJ~RM
zAT*)}6~rQ^{Gyc9BIo=Zq@BxfJ#LvfC8<T&?Lu9?kI<4|l$(f{;f9NYTD*Cg#rY*g
z`ADP92x)L{2cLbA#S1>5{*+T@BBE7@W&~J)b53F|;zC+974WM)QG*YZnjm3|7U&2G
zq)~B*naEO@fsQI`jMG>w;fv6U-B>Jf30g3XGcG~9DR9LlNDig4h5OA7TU>${X;e7k
zic63*{<wsz07n&;xI|TeEiU0IFyoTIwcW5dM=UBr%a;fV^a&Sa8PK{UczlK<E!sy2
zCT5lp>PUd9Cmd=Z#dC5gc;?O+b|3*7ACxxWLg0Bz_#p(?g^@Hsy$w|d;UP)G3MQyL
zR>M&Qk@P~Ar=TA#fG{Zle5e3|k1?<TzIz*bkN}tsaUSGkZ3r7;9emp<=-2?TN`$*n
zj|zZFf)5FRu(4kR4O#mJ8uLWHQ5saVV&1xqym16<Ca6IR-MkLtLzlk5xS&<L@U8za
zK}bmo<3YCj!+7BNU!;xxaB*<=5!T`b&m2O62eFMGoevK(<PH5`^N<AKia^UgupD3x
zRu9^wpO~DH3O#%PE{5!P_?CT`ELNW&?>0&<bpfr=gU2c8#A6fz_}*f4l@LdRb%WC+
zXm%f_8!iAkM;ERHb>A@5Je1{jP%+rlJ$w-uTpZF~0i|`sSRu?(m}<Bzc<~5+StL(j
zYKIJ&;5GmvkIxA3AP+9bgCwzQ1~s)%x6xyofuRPAQJ@kVw)_uj0(cr4=2dv?AQnWx
zq@cb=Y<b5JKuZ`1l?aD`_ql^NSi*E;Bn+?;EC~a;2_Ecf#8!5QF$g}Y8xZ1fCxAD*
zLkxji4K)PLhlT={t?dwvm?;!vJ3Cw<^1ft*Be17u_*zzEO;E?dq5+<k!BrA2Nu-31
zV>dgpThQ_lbbt@1*=VU8(*jUB#-$r1ht+P3<cnznh7wGJFcLUqe>p7lU@;3$^jJa}
zSF*>o(LA{nTGPSW50IGzkke7Op2G(*!BU`-5p`QR$RMyN#)fj33}`Dk5*x9J97z!A
z8gwL4$i{Ib0kkdSNHWM3BW$xck~DawFlc=qeBc*J61+hii4R>b1otp#i$-E@Dl#8s
zJ2;Y7_(pJKF~k;dBvD+Ozmb%HHh3dj3gSZ(4!9(Oc?z_;2(AvX#o9f!1hUB+W+Xxi
z)-=T_gKQ15Hqe%CY?_KwOK@ocH+3=fz<Uk2rI1a;x@jAx6_j_N+qGdrupQa(aDfRx
z4MpFaom>hYl!7!48K6997D3}eOaLoK-h>U+10KPH>40pDL*;>nf?+K-uptmdaA8=>
z9Z3#F2(`(BntkDAEM!wE$YP>4RVSC?+)kZb3R)BmYQQ389jFjwYK;M+1k~k3Qv&Kz
zBDPJ#m7%tKL1uyGi_p$uf~$tK`#_~H=;{L><mMgHW@$*IAa$fb1tu~VrT{d-12zb4
zmohdn$O?euQjERIU<sIsXa>RLV3CHQ8HYajG&0COSTzfYM}P3Z7}$lNAjP(=8KenZ
zH(=<%5CuCBY#5@_K-Y!5eL1-lv~vw<<1$15a{Ur$X(`Ao)GH~VH+o@iQ$|Rj?z{vU
z0oq&vTJetkx@E+sWP}+=Sp>Ab2+0tz45)jIE)LBO@LCP&rb%S&7|O7i1zHS@W;|q(
zKbjz@+5xR$#uNrEyT%lS?h`|D4rEyfvP#4R97q&2Ljl=R3=JDpX~c#ys5ENWgQoXE
zVGpwqvVj<;6g+(elS17z3{`?CCBYRElnZhfOdB{hAjKR=7?hmAyMLhuph<%^gJDR+
z!XK+%m?VZyJX?Wbc2}e(qXq{?Xn~p*P*1@<glFR~lEGk);d30U^v0GPvAP3O1CsIJ
zsd8|+2Z~ORvtdaTt67M|id7o2$Q2Y{xTG<58zOlfGAD!xFZ9i|kePCj=@^L@(~k(n
zSe$}xGAuxdFc+p2!&Fcz18>!Z`Uunl%uhkNy&17R7pevp))@A}Brt42+H(sFC?p|x
zg8+*hv<d-5Ga?pIC#Ye%5b|hsI5@MS$fBkngcMrMj;0aATafKkF#91qcx4E3GID{4
z5n5Qc(n5n6ktDHcgO-~Z?m?8E*mU7a#Gs^!yjd3N1duSeyN$F>7P}O5gDk2fWOxwe
zj!^g167Z&2B!!@I47wc_Dhh3|BZiP+!5fr{u>}^c1=RA!)B)Mz3eykap+pa4d#a%U
ztPKL|g2J>w<uNz8LM?{K!-oX0Xh-Z@g|s`6Oh!mSwzMM5L>s#Rr$V$nuIS!?Sq*O%
zL*{_sgZ>D^F;pUk5?~hLQi7Bhacoz`v<B2+fsSUOYRA1r6=4XtK?idUytv1)EfrZ?
zQEGZ-aY<?sOfN%nDP*e)ti*+n0iX)QYbTHf(Du{hQp}B~U@=g+397mw+ps{&3z9*B
z58rGGR^?xing^~Lk(Gf2LEE4b^HOp^U2W)gRJaf%oFJtMLvksEfw`R&rwsB&Qk;rl
z2?%03c=ISsEr<haIYXpD<vOVI0(T8e0M!&oISN+<;ks5}2w>9%7lZ8Z1TT2R*aiw0
z0B!aJ84FPi;z0u~GcOyy=@X(F-p@td=n0WTG<HBGHDpc`)KrCBZU?*P4fXzA@P<zC
z<#~`za|k9Z&_HH^n!#W`%wsS?&{j3j)+?|i)E<yx6mfJ-pzuag3*tgN3^NtBK@;H^
z*zh7u1(=Vj3C@Fu5uPoWV3QGH17ab00nSBoIY<oTQi#JrJh+9R3L3K63T!Nh3kiJK
z^o%d~#ywaBB<7{3qUZ$$7{+EwxKVIftlKDI${<-1eFG&-7PL<i;&7x*lVC}Zmylu}
z#06KAprJuTSqjR{IJQW_O@Xi7f{VZ^B8bf(qhTU&?}G#py;+DtNFfGFLEs?-P)`-&
zJBT!B`y<#2lna*Oa^O*Fa9koq9w><-CkqfCCAWYCP&YV&tw0E4Zf%4s0L3>_^n>((
zgpkHmpaYWxJO<JTQGyciAYo8T4$TUX5T+HNAw~EFt;jnPA>o5%lOos~;Dn0lXbfRc
zt%bBD5u!I0)LsFnA#fr_jw_HOk=zZg0U<5{Z9N2Q2XFp^i$V7fqVwVD1*{qpyRel=
z2vgv@1d+7E#ZZkv7KZFOKp2Cn5@~n`(u_5Bfg2Cq35d=|HUO#wVoGrpl2XuIGa47{
zF>GQ;Ng2Lp5Y^e>t$#>bAr_`UBP_X~64h)l57kuAZa%mHAP%xOpnOz2K|A`8b%6IN
z!NL(FiRlQ?mOdmEkS%1$W<W&HtcD9>xEQo$3`IMJm7raCa1|g9ve{5Rs<%Mf=8$zj
zc5Y#cpcw>F2C*M0qCuvitAr>*iX70EIAjYT9>x?wGYFy#Vj8NIDB%J!9ij-yO3-#U
zxCI~%I7wiNAX^Dn1~CoEN{|e?N{Av<D-n4Iu~iP19^fKq2H^-;kaBdD7*?WWG7tyV
zmv9l(gar~tO%q5w(Do}sGe|%|*hpp~2_P8>5rsPz&P6j7wA~D0E{KO_GF%AFY>+sL
z=}-X-^No#=&4+H$!XkuWK6rB$szTJT2KmXz#R6FgWIq<B2!`R{-C5vN05t{EXk>?D
zI2$T}W-gkO!CbTeL2@p-V<CJrBT*d+;=v6BFMWe`P!UZH6k((m2Z}g+yI685YDX8+
z1;boWg`o<|N-D@452#TF+Z>i$3Kw&SYzxB>fhHpG?kbS0@)J|ATq+Hk6$fqhLedUd
zItYquuwKx1E))*52Ly2dNERdj?o1(s5Zk<9217S^C6~f?J>lKjg`^I&>NFX2S`l~$
z6_!n1B&bCm(1SY!ZUJ;J6{w;`mW1!M0y_XY3x;0-E_>icL9K!s1|IbTO~8RRY$cb%
zxbT>O38XO~Br}oNWgs?WWd&Nx58C`h76o|^Dhz7VAvHW<yR1O-bD4=bP{$PIr)B1(
z7D2XNC6~e!1()O(FeH~k#)V;{7w};U=yodt@~}J!*++o1kqTrmcy%0-7@A^~ol^+)
zD8i^(5Hm7x<p?2MN+H<@;y@(Th!!hU3TfXH!gM4-H1m;V%0MMKrZJF`6I?MvBryh;
zu?eHv124UxO2IQppu`DVbqIGWqCkTvh4PWTkJ#M=*M$&5wHG<P!4)G5Vkn1hae?-3
zA#MPz#YF6S!lwn<nP|GuV+tf)0vh^3*a6$Xlw1lIgRKrg6~J%;Mlgbgw^24K!OTS3
zhy)K1Br#NzVG9@_wu5=73eYkxL>;mqnsUS@Be>;AYZy=!L#B<O@quzkHOwzKRiGLK
zn%V)6F~aSHi(o2*?X-c}0a6MT!>JfK){)htM>$;1%ml?LVDn*{hcGOL?4Q9djOHZx
zt{QOL1`-?LNP@VPqj&*X2ZkTulE|Jw62xT(nm3SjAlU)m$Ac&_;6l)%02Fj^G4#zg
z$)(Vi1Spe(cQ(L9K*<s+0^f=Qw*@YOummoIX$Lkb_*S0eQe<i9+Ai>3B(O|SY8tYw
zNE>%x(jccp2KyK=g}@s;FohxU2dSt*`Vk(*+?s==8)=gavM6{92eJTU^9GU#sI7w7
zwt*}GZiZqv7t+Q=Y}LTf29|<s(!h{|HH6_|0*X(xU_uBPfqI3I;6N5c4klD_V=U&P
zgf&7rx*;fG4O*0gv~>pN4bT!d#HJZ!QIxO-DMJlw@bnP!78xYHknqG3)*wybcmM||
zcv}pHHn0?GSi`j;hc$ssFv+EeX+?OtMhHPCD;bcLL5><@NG?U$?2=pxDjsn+;PA*o
ziky1L#hj39IYT@`{k-E{977x#Ai{bnIXU_YAYf=_W^8U@Y++^y;vujBlxboKV<m8<
zv@tVm4c1QPVq{?8V1NL<l+>isbd_KTkAcB~fq|h1#(~lf3<6GinJI}Si7G}=AqEi!
z28J^X3=9vT0?Z5`y#@!M>dc_R3_J`B4F8bSfy5mc6b>*kFo1712l2TOo>FHJ7GP&!
zV7LGhXJBC9W?*1YKPKdxnOu}#oS#;rpb@00;N$7%4V6csKz4!L0m2LnEDQ_`%nSky
z3=FJb7Qzw+28ZPQ+ycGK6!l}L8UFtVsRJ1V(gC7DZewDA`ozeAfdTB=444SmZy-CE
zVIn3VH6WdEHKqs=khnaEfMSs83=9@f9*AOM2w-4fAm?^gYNZk*6H91%0i_Zqa4Ols
zz`y`;D+2?zRFVR6Iub@oCB`seP%2ph<3MQ#1_N+-g6_2k2~jKdiHTELa5&?*>K4f%
z#N{m`3lpSJgXFC{1VRl@-ZBM+1_*=lCMa)#*f8wC-~h{8CNMFOx+^dalm@8-#Tqq3
zmza>1VPIgOR%$dchX$)c0v7`~f2Op7$}MTIA6Xcn8|2`d|B!Mv$#G~3D<0A8l4D?C
zU}V6s3shSoS%+W}mtss|2?otJC2*=ivJE`N2;Z}au!iLF-xNn!s)EZzTsES4ljKk}
zF~uH(k_@178Ez}Iibe7s={8wlw+WOUSrPFEu?fvv2z!Z(JrgtRc1bZXFt8!)f;GAk
z#*-dvM%ZmqU|?WiN7zKYRDvVElo>!R1$ca+*oPLFB*&Z?j-02#z`($X;z!8p9h9@c
zC<t48r3)8|y^!s=NLG>TM^hZBQw`j-K@L}p0cs>`5lkY}sWJA{BhJ9UzytOn;yQAK
z*$gE6&IFG=yfAwpIS(lZkYNv=e8-1s4_cx`_>Rbs!($Uax=qH&o+8;M95sOi0|SEq
z%qA+7B=}OhAeudBfk)N!AcU|Byww~LUZkf7e6^@B+#ZZ=>_}E3n8c+EQyeK>k%56h
z1ZE>-2`p%86uLtmVG9|4#8Ene+9jee8$n|uh~4){)*+Zg`VZcFL~U__`YmEewjpnD
zLfApN@9?Ecab)|T8|Nvq3s0VwK(Y&ZAOVt92quxCh^N+;M6wCAfdPKj0m2fb;)FQ+
z@U^m}knDpDyCYdddd|ktJ^;1nq>*fb9MM3DO{O?(0<}bBkZc04d_y|^fg(F$onN$8
zxjF*_gDkS0;K?)C>;!o27gC&2Hy6mk>_s}Zf+9cSDNp1v?Lw;x5H=H;GI6wfK&^5G
zxNW7y8P1p)oK(9^@swSPSnNXc8p(OV6i;eVg4u`TkPw95NKY;J{HYAH7wrHNO6<c|
zMynv(hZ%(=hbg|2Oclv4+LkYBNH$Tkd@;e38`R-;BF!cuMH_-idCt=S+vS3CbPRF<
zMyg$=IBHfE1_lOAEOx<90zp`WWIb{I!<P%Ru-HjyZpRmQ+6eo=J!8<4a3l{QF^TgV
zd=M6`9s-S8>R_>}7|8}Q$`d@Xr;BPE>e(+eiakAqohUn^kgOxQT*23x&_~z@TXhfL
zKSYV0h?yAFwzMV#1A_swooHvgfY;?y6r=cTHpF8yc&`X$Hsk2c>M$@c7!k4=EsG+;
zp153NhNEw$&A`B5jL&Y!(k{yUjUx}~F)%Qg5Vo6ApW|rLfkx0w@z@StABPBLq!6Gy
z#LWoUi{@pLbF>+b@oaqt1_pDic7v8spdQqP<aLtmH^&j?povin;_OEY0)%Ub3w?ZJ
zik6rz08N8KcVr?(G!m0YTXEzv&<KbX!dCDG7FaP#Vf}<7ra?0o*2p$u?EXZADCxB#
zzWUw<ZY$y-HKc$<ViFmqI7$yt`^grIU9@gL*<rC0EwPfEU+{&eJ;FYkx1Sua*hOLb
z#1ngtsJ2n9{e*AC-3ewV^jJQMasiIK2bzI(hTDTUv4|48@U_ugFzv#Y2}n+r_-1`w
zG3`Xl1PI>}m(NXbj8KR&Ffh2mZF9{_K`KGWD7o;&nLFGTtQn2u@WYp@JuvM;$!Mg8
z9=`P9iDDPdY(}#G@TCtgxShDVDJ1(4Pu=Q`Y#Yk)hzMIqPb>I(?moC|q%arYo3-(U
z+lj9$hVU_Q`3_%8$q&OuT!Blft@!4({gG@X)cvETy#cuG#pwKzY%h+~3+jIb60jF7
zNs*jS&2Y@PXfZG_1mUq8v+GB)uW`&%=rS-c1QWEGQh(zcgAT!MJ9@{Ds^J}q-(EB?
zlN{bST3eu=b{ICB@pk)2wjIZqzaawyLpV{kqj{g?kjJ-<D+0p>I68f#+lnK9fz}~K
z!fnOf=_56q@zwQFsP^G1u1WVJj+6!Jg+(LTiLaYUsz3475iwZo#N}C1?Zp?qu@HMv
z4@rhBy`rdHimw)q!)7OZyCbr-B>NOctppmch=<w=8m~t^^BG|a8Eq;Y?QhU{MFO&o
z80Se-Vk^ELVIq>PptGtevBwloNsxqU58@nbBnuHtBHM0w;x8H1KBObI5w?&XfB5<|
zDX2C=j_*dY48bJQcX-lDDym&*CxatwBHf4hT1#oDwjwW4ft@;zWHo|GoPY6^cj>4$
zgHNRconi&wLXEHtsX!pkUVL-d8L0Mx&q_zKiu8H}$H*{f#a1S&UC`r>ki3J$q}*p&
zsJ8imj(DfYXE@rrpfx$!sCJ<oA5W2;IL1ssE7Ee%>~!{YDlPV;Z1e=*3cp-5`w++8
zQ{qE29PJKJi#89{M(DOnLl>XSywt=Z-^7aW%#@N0q(p<nq&)rPquLHSogc}3(#suu
zqbUWLcA+(u5n)W6&+ye$g~+x+PizI92!`xElI_E>x&ySvy9miX#BBrc`wI|OAvu6Z
zU*f4jim}=X+q{TmDamCVzH+<-pRJU}DV`Fj6o<W_8yzU|E53GX8E!i%^(l^00n{5Q
z$6+hzcsZm5gv2B=E#XPQ6<F;A?d%0_^+gI`1d}*h@vT;<#A_>B5K}c3S0UMq^=b};
zH%Sj?JS~K3RC}q>LckHLpf#8^NVdW54?*${5|g;N#J4J|7K>e!#vr~Lr4C{r`aLKV
z#2dcViS=OHzz1^Bc&AGP!X|3$3&Am>1zKy?h+z{g<Esf_8}h9)l*AW~)kvVdHO&ay
zz$d^UC3Pewaj70(x@bYz1Gygp$#gPWP&j-9+Be#YZWHJvB8(;fh~Om7Z}>)-+i=<l
zIlBO17a2aqQ%1I<+lyfx!e%0UiO04Mgl$Nt`XEOmskY%;sn!Xx4SGEbWY`UKx*hlm
zMd)Gj2>VD6S92WwDbQB^E_`-Fj^%)#p+Sio@U^JA!EV5LSrd}A2qxum+yk+-G!Jx`
zJ5|Q5@Qpb1BHIQz)(<&3k=%~KR}1#R?E)S3LXEK$e06+3vTcw9{W1~@QYrHto)O0h
z$oApbltywo!PD}dh-@F8tpOz4i6d8nMmZ*7+DY;J9ljcCGT1((o5v`MJ$$37Q_yWf
zYhI8Vium^BPlehAU-v@MS`>UM^rvCigyt=h^S23(+6i>3%5<o0pi?E0BZ}0p!<VaP
zK<z-g2M*aflKq5l<;hI!_Ce10MR*L!ej;lC9Bp0D{=Qjw?4&gQ%y6{YK&#?s<F}Xc
zmJJTOK`q8P*zHF1E+W7w59PTyZG@Z;jIfLJmJPlXH4kbpY*i7YA>|Lbbr8u?1e0>V
z&WG9wIy(*9g@y>b$nYzkS+NCBd%?5uxI9XFe#J4002<v~h|5OGb1WWP7r||X&B){O
zEFz?di&cE}$YO}C$k#_Aj3>E7!dE*kL9r>gq$o2l9mxVDCXv3v5tg8FprvrTkS@KX
zk-wI~><TE#PljIgg5((_CUO44m+zND>;jGOV_wxsf&cK?xdO#b)T<YfJcq<2(w}%r
z@|7rdq8uwri7)ZAN>`!Sh`75H$vV=@7(8<st5NL(-N6MJPXXOmhZL4%l%;s)6xLwc
z3OccoVmtBe9$JfPCv+qLz8D7iK3Al`Mlgv>O=dVs0|N#IhIIs7fGr3}wI5%fbv=sx
zpqr1-1Ds^r@bn=!px6evy^Lb}@Z{BvDE5I?IDjs$qS!_}ErLzxHi9nYLbs6g+=?em
zH>2AKy}A-Pqf#>tx1iexz4Ve2`|z!j*^00aacn&(L_sH%LoO;tcn`@DMCMH#Aq!f~
zybYJlh+9D^u^C5+58AW59bq$Sr3SxV8OdUjQ<Djf90MAw-+^RvPJSNBa1z2!;=&f+
z$j443d%$P;BgGsU^$Lzy1g)9fg|G?r#%Y9iknASXXE?^KK&KM!Mz*iGq$s}<$#^6t
zaW>&AyZ2z&1j-gjRv<BnvkhN9+>5XcJoScX62LC%M6wQvNx9AYaM}#I+ZNP3L9z~s
zNu<p<Mtnd!y7!~m46BW);$uAa9>8HQRs4%1?Sj@o9YnGh&voY%<Q#k}unwWxj#~0j
zrOd^bn+~JePKEhie11KGY8zUPqDnmDDCI#TVMnpp4olnAu-gJh+O}a}U^s?mH=af}
zRpQ(nN9)^)fq~&TA-5m}3i#?Gibk^Wt>ij^>JnH(oGKxJuT(#YYA>QmPIH@2q1p_&
z#}ZV5(cI?K7&b$juvD=b-+aXxRGT5!&mh%Uq_=#`ag^quv+mC#+g6fVl$V%;t!qn_
zb~HYBoFmR1R0(}^9Hk!U0)g}R+yTq!)CmnduDC#qE2t6{_~ykgB3uD#%%r5Jq7-eU
z_bG6UCxK2cxP)RCD2r2O7ryzk%P4jQ<>!}B!9E;$475J<3c@~EnN5`xgm2XIDyE%O
zNiX<XN7oQ`dgc|EB<7W5CYDgtJH)rz={i>1ur9J9Ii=#;b#Mc#y=aqkB-@B@4bn}7
zjflDz?S4F@<~Hee;~8bRh0Siz`Nr6mu8?dqzLiI}ao9|SHWnWL-oa)ouBAFu_3vFA
zHdF3jd}A#45VraxmgXg+Y+fPVe>mFopuJZ2(QTr5E*)Q6`2oT<<RM+^l)HG=Ej&cA
z7dEhq)mqX+7e_AzH0S#W#a`&}E>>$1B?WO~ANca<V{Eokr=G#%*C!~pLfhpu_v=$^
zwo=EhI9h_BH6hOswt^ZdZkc&0o_Wrcj=JKD)90u*f){8Nq~@ih<|SvMHULRYN%->X
z3!JuMHqJ=37hi4u62o4|bpaIaTEtThzQV9Eq!M*WCN=%{8r3$?z)fCaQcfy`{=?JS
zeS@$Oy0r~)Q6F+QmSkVz=ske;@xMj3GdI6171xwI>18gS+30u3wt_Z$VfQG>cH*nA
z-y`e{Ey&4Fq%a=wq|*=RHc?(*<Cqf#ok;W%VOwT$u?y%dY}n#3*s+z!iHGDc#n-<6
zgkiTKb?wG6^8}hd{ETk5B|fW3&NFyw(Jv@AyZgZGg{;~_4s4Qb#gkLN;;_{-H!&Th
zt4MMT<2%Rf8;Y$|J0A{DJMcSB8!@sG$v!p5k&i$Z75+f67nXJ4J65Q;YXslS#ZUaM
z2%y3_UpT@Zbn??LqHL$Q$Bw5L`5UVXsCD`izV*w02-%G0ZBp|#zH^@cqSzf=nuL-3
zC_hUb-<a1w6#K#JZDB4z8B8SE&v;_`KOQ?N&*}JD%nXd6d+NZ)vScO~hvvan-NL*~
zQ3;NxN5TlU*E6>uzo-Oukuqdo97Q(bsWX_c*a)AbK(>_RlGGSS{U`*wg%e_HUS<ih
z6{MyeeB;n85E}}TopbVwQ+-o&JreU$awx0?aimqy&LviueW1~N(2@u$*oSW>iw(&>
zD)|maOA54xhaF~{e?e*<c&;4NdnCsmp7t>ZvVB;+N3v}=>UGfBXq;GWLo3WlPXG9J
zGI4=z#2geP*;jaSHaC(T&iVNTsYQt;nPsVvQEudHN3zfGt*7O|XRB{%PDv)^ch2FP
zPv^yFKSrfNYIx&YxyOfOvwKk{O6QSedvLVCKqnROquGP8@r2~~#J4j;0LeDc1e;rF
zUNUmxA=PL2#)|~8*o6^gr27uXcnWB(pb(Ocm>Gjqzu^l<VGNsGD`*vtB3SIAJRI@W
zwxSp|Qf?o<ks2|GeVKXLjwvZFi6x21K}mWF!O>Cy?G_S8w+XFUAUTcT81n+%Dk*_%
zms=)<trdK!Q4-xIN_~YVk4eGpa?Z~!$VsJa)*4?4ERC=UV@Wf~@r0vh1+Ax$L9+)f
z@JLU8c+!L{+%7B&B1yLiPfC{q+XR}>OGzn8EiMMluOVkEQbQ15c_EKxS5RtkYEc<w
zt#f>*!YUx_E6XgV&>kG^WHAN?21U3%pnWcsgdV=NLrN&NP+tGzJ3UYt(=Lpno#d2(
zBfW#p)>J{U&#fpwHy}ShhjKsS>+P%Jwv%GN;@e-VhGH+MbwyE%!P90`$FPawG7FDw
z8Ys5;CgvrkQ#dDvFE?nS*oJYn1IcA1zExOSn0BEBB&m4;Un@r&#WpmHNcI=L@=*t7
z6BW*L!<W-^VfMH}_Fm_M&y@kqnNmKUfbYg3J(#`dl^W@xh^M8ak8BG@kwt3Cz*m17
zVAzCFP?7F49Hla-Won3QA9_JWx=lDnKtcQ8jF4?YOY)?KAilEK7-kP>y<Kv0YB5El
z*!XHt6J(npO)HFR)JgRjzB>&}aoC3zm?Xy<zOzfsknIFDeG*GD^Yh$`67x!P5{oiR
zP`2QaY%{(c<mOmy4uBt54QfG9Ubf)#y9JU9AU3(>7eUW@z=&v){f@7{V~J$5XI@%9
zMXd)s{T(Ybdnipw`0}MS%q~zV;|NMhl=uqY4Kg;!Hi1`Sf$qk@GJQ&NoZ+hhZSmQP
z7O<q23i##=?9lARI4qN7U*faP9@#e7;s@l2B-u86C9DHB+b9f6e6_D5vVDljL5lo`
zZ%o?>W*=l?5LBd5v)zPa9tL#cnlsF1-^2oB?~$4^@wKU4kn8}@VN>36!qJie^)Fqq
z+D3)e6Q1(Z4Q3~(D@%nIHolQPcVxS;3>lFeb2!>+p!KsJ$aX<m^jL~dQf<Vy0>cy2
z#t>@uA@HSBFJ!x^(`v*sC+UrD8&&p%;9FPZgKQ&BN*a8t$b2zvr$So77oUE}HiCAc
zP~Ho`6QBO*woxTM@r{cFAlnGK@FN7Jfk=7{jH8|a?LP^G+f|gBmRgdWLDMok2&-+B
zm*M!*XE4l8aFZUC{jo(Lsbw9$eq0Dn8&SHdB*!DZ9z`hJ&eWXLMAU(DlKqBbgb;KB
zX&AyD(AsWrJ0IL-gmj>gn;NA156=iqILuzE<aZN1GXW7Wo4`xukUd0dIO1DJ5(%><
zxd5e$O|l($d=iCZhmi|KKEcyQibk;oqxc{>72qrRV=(Qaw6}n##Tkp$HY$`>cvhpu
zq1YLkmza~8o=4#rJigK~9=m;%hAN&CBmt+5l%KAPZ%jTB#a=WIQZ<z(q1%MvF>2=W
zWF*^+X_m`VP;8-XE>Fd@3oW`x4L^LfbsARND9`2i#>&!B><mavEuy4!#y8@TfngIB
z;toeW4La2!6T5vF!AWuq;wdw;Fzm$0a3tq%d?iUXihXEFlVqFl)pt4QHeq;-)NsV-
zuUsVCsE|tV^g8m;ZK61R;A<P_BimMz??_2r!`E*sK(mM9l!2pd2U^!%h-nw)X#>ZI
z5omU=2-QBC)icFt_Rum6OEB%CX&9EG+UG%0I>gb!0<AMHL$ikpc^OYiEXQUWTC|Z`
zO5vORslZ_$MiD}CNsKRVSEAX9=0TF}!Z#~Yg=rT}(`7Z1eJ(UCA8XL;p=B7>V%kO1
zFswthkFxR+Pu{Lavxl~My8)YRXwgQ^yxoYyKHBE(CNx{oJV@2N-Hd4$P19uys(m!8
zb6U~tp>4Ws!)6;=v{5r%w&Spmw&}71%~muIQZ-$6V%kO1blHVup9iIN4xaL|8_gct
zrpq2|wxLBEHPdA;4*O`EF8k1IMe`t4(`7%VT{KOX6Hx7=Sv@`x%^upO%SqU5LyI<Q
zrpw7V?4xbEoPuU6ng^+xE~jGJMbmUS4aq)A#|!bT|C)|w4;9iSj!^~BI+PjMY{N(-
zq^3-K{+o$rBSxf=oJ#PGsLevMjS4p5SfwD&z`!sYW>ax$iHo5b^3Ve5KEkutY!0eD
z7|DawxWc!qcrF&ZFcJspzQZwk4cb*a57kDr0)%A0;Tf}@k6{xP(g%*YOwc}n1<3Xp
zQJO;Vjae^5w~6vJg2P{+Re_7J+D3&`f+r6wMz@pFbb=#agHE_ug2gV{rj(_qHX0jI
zRF>dNDa+7pqG?K5j@35Wrj!-vcG57Vti)m$6;cY0+8Z<{unN^i3*>}CYFUY|&R&gX
z4@NQ}xema$B4Q0T+c1&|$^OH$f@Uq6jcAF4bl>3_tzU;}7e*o>*>5<?FHpN=J+gfi
zmL>RBPj5iA2P27)>L+~dl8spG!bl(_#~Qx%0-I26L`xtf`wdUKWHW|M7|DZlpW#T4
zpndmSknN+a1i_QTwxZaAkvK^95x&`*ZJ2gpBo0zz3|}8(JBod1NrQBs;hDAHfo>B<
z(je7e_{!m(5Zf{fauW**Qd7ViOfa`#kZdEKw&X4>He%U`L3)_t=y8D7%k0Ktr+aFN
zPik3e4kh)e8ICbg&`F?su-geat}rOIur#wMH8(Y{gtFDj_|C-Ki`@mm1&Kw)sfaD0
z$N@llsN*T+_Cf5=Pbtkwbx$n;9gPLr_DYd`_*yXgQSEcj$xli|iC)ruhoejdtqnPV
z%{H`xf#iIHqa6qu#W{#-pHF^bN@iZVZ+;5OaV;d<h^Hhvglc1OX;E5GY8rC%k!l;h
z*gK4BTS#gJnq?%%9=_E|N04j-1tmqk!qbaAie?Y`VO*q!Aikd7F)Vh`?i97-Xtuc}
zmN;eRB^IG9v?o2zaFpVpaibGRHiqV*A3#rPNSfm)xr`YY7*2w1@=s1KElA8uu5>I*
z%*+9u!r@YxmzbNG9PFE#8<1M$l#`#Fjht{u_N_UNdeWSMf#DRY8+;Qh9Fsu@RDx|S
z4oEEmpB7nAln*+bAs=OFE6MJ#z)|ivFfcHjCe0mKFTo-;Zt(38KZC<P&N-#UC8<Ry
z)hWsL;s^)Ooup?m><!2-Nd?_AmIIEG;LIwDN@9E`tDhsnZma=Ma!SCr1M)m>S3m=w
z(lEf+JG%h39eg8IaB2y~HsL9=FQV9lSrL(%s_>mGbP2^Sl**OlxWi}9WfXfdDJr$_
z*>eTOo-&H;!8bZ^6=DzMFn?Uz4M`3`d_ARWxNM}T#KGss>&P~OcI08(Qc1cW@w91g
zKx{0^Ps_|nE%MCEEXhpFp|D)Tx8Cz6ihaQ)iA5*}o|Ei1eC5Y2G`sRCI<W!Yoi4Y*
zHU(#<=OyOAPN|2V8DC8KxCp-UrSA~7o8oa2d^=(8LhLUoN=?jlOi6K0%*jbgq_CBQ
z@7{%b*zKd-k2qQapq|)$WIIbr5|cAPr-Bw&Qh4$+j<E#Le&7c<ZN%^>$$17}kK!Sc
zy-tZGV2}D!lyC6u5qpHyHY)fK$H+No=I=3fJIg4XkHgWr0Ns}O1ec8%9woJ%fp5I@
zDYC7p>6v-Xi3KI4MHIDI@$DaYhQmG#Pm-QqarBu$^VH9A*-Bx2;_HvRz-=dnXGxAx
zJf+Y}BztjR$V;+~cuJvHIBmr6D9N#kujYP@Y%j$pSL3^X@(qSfpk7r#QD#2+A$_EV
zE526HTO?blG7^qwOz$10U6hVl;<4>Ll5MVeDby%)@Z|mvSZ$*`ZQ?6eKO)(Qs~bXU
zTESPYe!^iN6?}=Otoe*;D>NP{JyQ|i4eMWU+DHYT;+Vq(-RAifx4o3sAvpS7pqm)K
z;j<OP!=$Dsd}Zr*G@DB(yLAJ{m@4Q7s2><MVR(%6S_4Nr3v@HZPgMIb4s;|n6!G=c
ze_^qUa^K<WXZ=RC5nB~Sa%ke~XZ^u$ABHDM4plrU<}Z?+p2d(tCo?advN0tb^9!I^
z;(yrfqu7u5))o9mvNNzWmBQH*e0@0vCeWRI!Qh@b*d~hog|A*@M6wOn&=tvP1y8xn
zgu^}zPm-Q1@T5>?WLqoqk~50(^U#LNNVgA93T44=ABHDM4OufBttwpx1_o9nJ3|Xn
z5=&AcIgxtzT;n^xnvEFSDfU0Ud1-be7lbEfmVmGKqpS?V)6(L=W*f!+!&j4VqS+Xh
zm{Xcc;Tl4GH3=7X`zZG#o>1k+VJB*nj?`R(ul>q{(?$%Bl3qgKDUo=w*=uG(S$f4&
zBJp9j55torhb^Ai<i}wr?P5~^r;QjMB|SEA^b0_1j0BPGEy^rO#gaKm4p}_4s1OeO
zsNhQ+H4JFfP8gT1s1ZtX$l@Ed6TxjKhG$6*VLUM^iq&4!3`(+ncw$rxhkY2HBsp~P
zjpU2tvXzE0DuLTh49}7r!g$8GBq8>e7Nz+oWu+#UP+|2fp7LD^%{Hox7vdT7l}5AA
zJ+%aO$+t^tG0Ih^B&Q&Jtu7h3y+NsIpn<ibqC^T;mf`Rv=qx8$WZOX96`I;62evIF
zwE|ayAvq-R_50*eZNrjaNX`v7MqNO&TMDSQ;Ylu}+KTT62t}N>hGnLfqbF2SZN@hq
ztAt^5NNNRWVh!C=lH(NLsGTy*)}Yih%F7#ka}z2^HepFRB>M_qN>xR&3zX#{mq8&n
zT}h5PJgrDIthQ0So*K_wvpQBA(WYNW4pDsjwKULdL@(B;8J?P`b~)u2rKA=)=jWg<
zO(oezJmIN@YNK0bPDyGJdIVB6Jhjnm%t=hAX!RGq8c+w#uKc3hM9Nl2;p>&_qS^*p
zZJd``oL^FuPua=o`1;6tXm)}(AyFw7@y+t;W3v~$7sx3yk)rs-=UW4uwmRn|=AtaB
zAvw+BtDy|B*$dn1g<QCjZY!Qvu@RE3pavBc%5prtDr2m+QFa<XzW$8~4*MuA%kkN1
ziqlSG%3={u9chNuPV^#{nq|5<RvRe|SA2D(1)7bttRpQ^?V>{+X@zPdl}cB9;c1O#
zBQ5Jl8#KFUTSwZW+D4Z;(hki|dexEk*zBcw9qEA6R@&B)j@ay_N*#%BX3Ys=YerFO
zVv1`;az<iadMado7COU*UeHpthIR(q9$K7Qgliar<Z>O)xRnc<Z9$k9C{fjSt{C=#
zE>c3SC`t7lzW%ry*tT$YANW0~l-PvtHeGj!O`v(mijvf#yu=);?kvDD)1$}0z~Dj1
IW{go*0FQ*2xc~qF

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/x64/cudadevrt.lib b/ext/cudart/lib/x64/cudadevrt.lib
new file mode 100644
index 0000000000000000000000000000000000000000..d933b7fbdd650777540d5ca6cf62a5785700e851
GIT binary patch
literal 1010596
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
Wr>5to=9NI?bMsS5b5i3oQy2ge=|uJb

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/x64/cudart.lib b/ext/cudart/lib/x64/cudart.lib
new file mode 100644
index 0000000000000000000000000000000000000000..b023e8d3116164aa1dada4cb60eee025c748cd06
GIT binary patch
literal 107594
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
Z&c#Hy0$W#_)Y!+jzGewgZom;3TmX7&gFOHM

literal 0
HcmV?d00001

diff --git a/ext/cudart/lib/x64/cudart_static.lib b/ext/cudart/lib/x64/cudart_static.lib
new file mode 100644
index 0000000000000000000000000000000000000000..d975c98869fddb1a48fa7a8f5aa393501e9cc655
GIT binary patch
literal 2766918
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%0AYbl_zy7w+y}vZk_qy?u>atuKv*DCScSm7
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%0D<ZNchc<+u!H#SIc3Z$D3$ilm
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%0Ack^sB>sqX<jneP?)0%
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

literal 0
HcmV?d00001

diff --git a/src/encoder/nvidia_encoder.cpp b/src/encoder/nvidia_encoder.cpp
index 0951a0d7..45abd910 100644
--- a/src/encoder/nvidia_encoder.cpp
+++ b/src/encoder/nvidia_encoder.cpp
@@ -1,5 +1,7 @@
 #include "nvidia_encoder.hpp"
 
+#include <cuda.h>
+
 #if defined(__unix__)
     #include <dlfcn.h>
 #endif
@@ -8,6 +10,8 @@ typedef NVENCSTATUS(NVENCAPI* NvEncodeAPICreateInstance_Type)(NV_ENCODE_API_FUNC
 
 bool NvidiaEncoder::create(lava::device_ptr device, const lava::renderer& renderer, const glm::uvec2& size, uint32_t input_buffers)
 {
+    cuInit(0);
+
     if (!this->load_library())
     {
         return false;
-- 
GitLab