From 87df11de38795ad420fcd480ee33e6ff07ad8d86 Mon Sep 17 00:00:00 2001 From: Kanghwan Jang <861393+karljang@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:28:36 -0700 Subject: [PATCH 1/2] Update license Signed-off-by: Kanghwan Jang <861393+karljang@users.noreply.github.com> --- cpp/kernels/fmha_v2/conftest.py | 21 ++++++---- cpp/kernels/fmha_v2/setup.py | 21 ++++++---- cpp/kernels/fmha_v2/src/convert.cu | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/alibi_params.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/fragment.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/gemm.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/gmem_tile_o.h | 21 ++++++---- .../fmha_v2/src/fmha/gmem_tile_o_packed.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/gmem_tile_ps.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv.h | 21 ++++++---- .../fmha_v2/src/fmha/gmem_tile_qkv_packed.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/arrive_wait.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/compute_tile.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/fragment.h | 21 ++++++---- .../src/fmha/hopper/gmem_tile_o_packed.h | 21 ++++++---- .../src/fmha/hopper/gmem_tile_qkv_packed.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/gmma_descriptor.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/kernel_traits.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/smem_tile.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/smem_tile_o.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/tma_descriptor.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/tma_types.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_gmma.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_hgmma.h | 21 ++++++---- .../src/fmha/hopper/utils_hgmma_bf16.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_igmma.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_qgmma.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_tma.h | 21 ++++++---- .../fmha_v2/src/fmha/hopper/utils_warpgroup.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/kernel_traits.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/mask.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/numeric_types.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/paged_kv_cache.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/smem_tile.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/smem_tile_o.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/smem_tile_qkv.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/smem_tile_v.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/softmax.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/traits.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/utils.h | 21 ++++++---- .../src/fmha/warpspec/circular_buffer.h | 21 ++++++---- .../fmha_v2/src/fmha/warpspec/compute.h | 21 ++++++---- cpp/kernels/fmha_v2/src/fmha/warpspec/dma.h | 21 ++++++---- .../fmha_v2/src/fmha/warpspec/epilogue.h | 21 ++++++---- .../fmha_v2/src/fmha/warpspec/kernel_traits.h | 21 ++++++---- .../fmha_v2/src/fused_multihead_attention.cpp | 21 ++++++---- .../fmha_v2/src/fused_multihead_attention.h | 21 ++++++---- ...sed_multihead_attention_demo_bert_params.h | 21 ++++++---- .../src/fused_multihead_attention_kernel.h | 21 ++++++---- .../fused_multihead_attention_kernel_1xN.h | 21 ++++++---- ...multihead_attention_kernel_1xN_multi_cta.h | 21 ++++++---- ...ed_multihead_attention_kernel_1xN_noloop.h | 21 ++++++---- .../fused_multihead_attention_kernel_2x2.h | 21 ++++++---- ...ed_multihead_attention_kernel_4x1_hopper.h | 21 ++++++---- ...ihead_attention_kernel_4x1_hopper_noloop.h | 21 ++++++---- ...ed_multihead_attention_kernel_4xN_hopper.h | 21 ++++++---- ...ihead_attention_kernel_4xN_hopper_noloop.h | 21 ++++++---- .../src/fused_multihead_attention_utils.h | 21 ++++++---- .../src/fused_multihead_cross_attention.cpp | 21 ++++++---- .../src/fused_multihead_cross_attention.h | 21 ++++++---- ...sed_multihead_cross_attention_kernel_1xN.h | 21 ++++++---- ...tihead_cross_attention_kernel_1xN_noloop.h | 21 ++++++---- .../fused_multihead_flash_attention_kernel.h | 21 ++++++---- ..._multihead_flash_attention_kernel_noloop.h | 21 ++++++---- ...head_flash_attention_kernel_noloop_tiled.h | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_bf16.cu | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_fp16.cu | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_fp32.cu | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_fp8.cu | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_impl.h | 21 ++++++---- cpp/kernels/fmha_v2/src/softmax_int8.cu | 21 ++++++---- cpp/kernels/fmha_v2/test/conftest.py | 21 ++++++---- cpp/kernels/fmha_v2/test/fmha/filter_rules.py | 21 ++++++---- .../fmha_v2/test/fmha/test_fmha_exe.py | 21 ++++++---- .../fmha_v2/test/fmha/test_fmhca_exe.py | 21 ++++++---- cpp/kernels/fmha_v2/test/fmha/test_meta.py | 21 ++++++---- cpp/kernels/fmha_v2/test/fmha/utils.py | 21 ++++++---- .../fmha_v2/test/train_ops/test_train_ops.py | 21 ++++++---- .../test/unit/arch/test_fmha_v1_nl_sm70.cu | 21 ++++++---- .../unit/arch/test_fmha_v2_flash_nl_sm80.cu | 21 ++++++---- cpp/kernels/fmha_v2/test/unit/test_bar.cu | 21 ++++++---- cpp/kernels/fmha_v2/test/unit/test_foo.cu | 21 ++++++---- .../fmha_v2/train_ops/apex_mha_api.cpp | 21 ++++++---- .../fmha_v2/train_ops/apex_mha_kernels.cu | 21 ++++++---- .../fmha_v2/train_ops/bert_mha_train_api.cpp | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/fmha_bmark.py | 21 ++++++---- .../fmha_v2/train_ops/fmha_noloop_reduce.cu | 21 ++++++---- .../fmha_v2/train_ops/fmha_unit_test.py | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/fp8_mha_api.cpp | 21 ++++++---- ...sed_multihead_attention_dgrad_kernel_1xN.h | 21 ++++++---- ...ltihead_attention_dgrad_kernel_1xN_flash.h | 21 ++++++---- ...tihead_attention_dgrad_kernel_1xN_noloop.h | 21 ++++++---- ...tihead_attention_dgrad_kernel_1xN_reload.h | 21 ++++++---- ...attention_dgrad_kernel_1xN_reload_noloop.h | 21 ++++++---- ...d_attention_flash_attention_fprop_kernel.h | 21 ++++++---- .../fused_multihead_attention_fprop.h | 21 ++++++---- .../fused_multihead_attention_fprop_kernel.h | 21 ++++++---- ...sed_multihead_attention_fprop_kernel_1xN.h | 21 ++++++---- ...tihead_attention_fprop_kernel_1xN_reload.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/gmem_tile_d.h | 21 ++++++---- .../fmha_v2/train_ops/hopper/fmha_dgrad.h | 21 ++++++---- .../hopper/fmha_dgrad_fp8_512_sm90.cu | 21 ++++++---- .../train_ops/hopper/fmha_dgrad_kernel_4x1.h | 21 ++++++---- .../fmha_v2/train_ops/hopper/fmha_fprop.h | 21 ++++++---- .../hopper/fmha_fprop_fp8_512_sm90.cu | 21 ++++++---- .../train_ops/hopper/fmha_fprop_kernel_4x1.h | 21 ++++++---- .../fmha_v2/train_ops/hopper/kernel_traits.h | 21 ++++++---- .../fmha_dgrad_v2_fp16_128_64_kernel.sm80.cu | 21 ++++++---- .../fmha_dgrad_v2_fp16_256_64_kernel.sm80.cu | 21 ++++++---- .../fmha_dgrad_v2_fp16_384_64_kernel.sm80.cu | 21 ++++++---- .../fmha_dgrad_v2_fp16_512_64_kernel.sm80.cu | 21 ++++++---- .../fmha_fprop_v2_fp16_128_64_kernel.sm80.cu | 21 ++++++---- .../fmha_fprop_v2_fp16_256_64_kernel.sm80.cu | 21 ++++++---- .../fmha_fprop_v2_fp16_384_64_kernel.sm80.cu | 21 ++++++---- .../fmha_fprop_v2_fp16_512_64_kernel.sm80.cu | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/my_utils.py | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/philox.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/smem_tile_d.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/smem_tile_dq.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/static_switch.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/te_mha.py | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/test.cpp | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/test.h | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/test_bmm.cpp | 21 ++++++---- cpp/kernels/fmha_v2/train_ops/train_setup.py | 21 ++++++---- cpp/kernels/xqa/RefChecker.cuh | 21 ++++++---- cpp/kernels/xqa/barriers.cuh | 21 ++++++---- cpp/kernels/xqa/cuda_hint.cuh | 21 ++++++---- cpp/kernels/xqa/defines.h | 21 ++++++---- cpp/kernels/xqa/gen_cpp_header.py | 42 ++++++++++++------- cpp/kernels/xqa/gen_cubins.py | 21 ++++++---- cpp/kernels/xqa/gmma.cuh | 21 ++++++---- cpp/kernels/xqa/gmma_impl.cuh | 21 ++++++---- cpp/kernels/xqa/ldgsts.cuh | 21 ++++++---- cpp/kernels/xqa/mha.cu | 21 ++++++---- cpp/kernels/xqa/mha.h | 21 ++++++---- cpp/kernels/xqa/mhaUtils.cuh | 21 ++++++---- cpp/kernels/xqa/mha_sm90.cu | 21 ++++++---- cpp/kernels/xqa/mha_stdheaders.cuh | 21 ++++++---- cpp/kernels/xqa/mla_sm120.cu | 21 ++++++---- cpp/kernels/xqa/mma.cuh | 21 ++++++---- cpp/kernels/xqa/nvrtc/test_nvrtc.cpp | 21 ++++++---- cpp/kernels/xqa/platform.h | 21 ++++++---- cpp/kernels/xqa/ref.py | 21 ++++++---- cpp/kernels/xqa/specDec.h | 21 ++++++---- cpp/kernels/xqa/test/refAttention.cpp | 21 ++++++---- cpp/kernels/xqa/test/refAttention.h | 21 ++++++---- cpp/kernels/xqa/test/test.cpp | 21 ++++++---- cpp/kernels/xqa/tma.h | 21 ++++++---- cpp/kernels/xqa/utils.cuh | 21 ++++++---- cpp/kernels/xqa/utils.h | 21 ++++++---- cpp/tensorrt_llm/batch_manager/CMakeLists.txt | 22 ++++++---- cpp/tensorrt_llm/executor/CMakeLists.txt | 22 ++++++---- .../nixl_utils/CMakeLists.txt | 20 +++++---- ..._visitor_allreduce_tma_warpspecialized.hpp | 21 ++++++---- .../nvrtcWrapper/src/nvrtcWrapper.cpp | 21 ++++++---- cpp/tests/e2e_tests/CMakeLists.txt | 22 ++++++---- .../e2e_tests/batch_manager/CMakeLists.txt | 22 ++++++---- .../batch_manager/guidedDecoderTest.cpp | 21 ++++++---- .../trtGptModelRealDecoderTest.cpp | 21 ++++++---- .../batch_manager/trtGptModelTest.cpp | 21 ++++++---- cpp/tests/e2e_tests/executor/CMakeLists.txt | 22 ++++++---- cpp/tests/e2e_tests/executor/disaggExecutor.h | 21 ++++++---- .../e2e_tests/executor/disaggExecutorTest.cpp | 21 ++++++---- cpp/tests/e2e_tests/executor/encDecTest.cpp | 21 ++++++---- .../e2e_tests/executor/executorMockTest.cpp | 21 ++++++---- cpp/tests/e2e_tests/executor/executorTest.cpp | 21 ++++++---- cpp/tests/e2e_tests/executor/executorTest.h | 21 ++++++---- cpp/tests/unit_tests/CMakeLists.txt | 22 ++++++---- .../unit_tests/batch_manager/CMakeLists.txt | 22 ++++++---- .../batch_manager/capacitySchedulerTest.cpp | 21 ++++++---- .../batch_manager/contextProgressTest.cu | 21 ++++++---- .../batch_manager/evictionPolicyTest.cpp | 21 ++++++---- .../batch_manager/kvCacheManagerTest.cpp | 21 ++++++---- .../batch_manager/kvCacheUtilsTest.cpp | 21 ++++++---- .../batch_manager/llmRequestTest.cpp | 21 ++++++---- .../batch_manager/microBatchSchedulerTest.cpp | 21 ++++++---- .../batch_manager/peftCacheManagerTest.cpp | 21 ++++++---- .../batch_manager/staticThreadPoolTest.cpp | 21 ++++++---- cpp/tests/unit_tests/common/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/executor/CMakeLists.txt | 22 ++++++---- .../unit_tests/executor/agentCommTest.cpp | 21 ++++++---- .../executor/decodingConfigTest.cpp | 21 ++++++---- .../executor/dynamicBatchTunerTest.cpp | 21 ++++++---- .../executor/executorConfigTest.cpp | 21 ++++++---- .../unit_tests/executor/intervalSetTest.cpp | 21 ++++++---- .../unit_tests/executor/kvCacheConfigTest.cpp | 21 ++++++---- .../unit_tests/executor/loraConfigTest.cpp | 21 ++++++---- cpp/tests/unit_tests/executor/requestTest.cpp | 21 ++++++---- .../unit_tests/executor/requestWithIdTest.cpp | 21 ++++++---- .../unit_tests/executor/responseTest.cpp | 21 ++++++---- .../executor/samplingConfigTest.cpp | 21 ++++++---- .../executor/serializeUtilsTest.cpp | 21 ++++++---- cpp/tests/unit_tests/executor/tensorTest.cpp | 21 ++++++---- .../unit_tests/executor/transferAgentTest.cpp | 19 +++++---- cpp/tests/unit_tests/executor/ucxCommTest.cpp | 21 ++++++---- cpp/tests/unit_tests/kernels/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/layers/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/multi_gpu/CMakeLists.txt | 22 ++++++---- .../multi_gpu/cacheTransceiverTest.cpp | 21 ++++++---- .../multi_gpu/kernels/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/runtime/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/thop/CMakeLists.txt | 22 ++++++---- cpp/tests/unit_tests/utils/CMakeLists.txt | 22 ++++++---- cpp/tests/utils/common.cpp | 21 ++++++---- cpp/tests/utils/common.h | 21 ++++++---- 206 files changed, 2689 insertions(+), 1671 deletions(-) diff --git a/cpp/kernels/fmha_v2/conftest.py b/cpp/kernels/fmha_v2/conftest.py index 5ca148f1295..e7635193996 100644 --- a/cpp/kernels/fmha_v2/conftest.py +++ b/cpp/kernels/fmha_v2/conftest.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import subprocess diff --git a/cpp/kernels/fmha_v2/setup.py b/cpp/kernels/fmha_v2/setup.py index c1774e389e9..b6f73543562 100644 --- a/cpp/kernels/fmha_v2/setup.py +++ b/cpp/kernels/fmha_v2/setup.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2020-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2020-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import os import subprocess diff --git a/cpp/kernels/fmha_v2/src/convert.cu b/cpp/kernels/fmha_v2/src/convert.cu index 402dc3cd2a2..3fabce851e3 100644 --- a/cpp/kernels/fmha_v2/src/convert.cu +++ b/cpp/kernels/fmha_v2/src/convert.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/fmha/alibi_params.h b/cpp/kernels/fmha_v2/src/fmha/alibi_params.h index a086fd61e1c..f3cb6925f96 100644 --- a/cpp/kernels/fmha_v2/src/fmha/alibi_params.h +++ b/cpp/kernels/fmha_v2/src/fmha/alibi_params.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/fragment.h b/cpp/kernels/fmha_v2/src/fmha/fragment.h index 10772c31563..c68e24462b6 100644 --- a/cpp/kernels/fmha_v2/src/fmha/fragment.h +++ b/cpp/kernels/fmha_v2/src/fmha/fragment.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gemm.h b/cpp/kernels/fmha_v2/src/fmha/gemm.h index 01d65fda47d..aa0d41f150a 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gemm.h +++ b/cpp/kernels/fmha_v2/src/fmha/gemm.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o.h b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o.h index 114b8fe72b2..eec3785f18b 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o.h +++ b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o_packed.h b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o_packed.h index 1bd5020ffb1..6282a961a66 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o_packed.h +++ b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_o_packed.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_ps.h b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_ps.h index d93d262bb81..9946257068f 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_ps.h +++ b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_ps.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv.h b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv.h index 73d640cd9cb..ba3d5bc9c1e 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv.h +++ b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv_packed.h b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv_packed.h index 172131a22fd..34b5ccfd36e 100644 --- a/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv_packed.h +++ b/cpp/kernels/fmha_v2/src/fmha/gmem_tile_qkv_packed.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/arrive_wait.h b/cpp/kernels/fmha_v2/src/fmha/hopper/arrive_wait.h index 1c4a4591469..a9f3497dcbe 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/arrive_wait.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/arrive_wait.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/compute_tile.h b/cpp/kernels/fmha_v2/src/fmha/hopper/compute_tile.h index fbd62eb58b2..8582f9ede62 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/compute_tile.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/compute_tile.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/fragment.h b/cpp/kernels/fmha_v2/src/fmha/hopper/fragment.h index a6433856f56..f40c1d159c7 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/fragment.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/fragment.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_o_packed.h b/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_o_packed.h index 24ca38f08d4..a9ebfd4e915 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_o_packed.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_o_packed.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_qkv_packed.h b/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_qkv_packed.h index 37589621d4e..a44e7a04396 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_qkv_packed.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/gmem_tile_qkv_packed.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/gmma_descriptor.h b/cpp/kernels/fmha_v2/src/fmha/hopper/gmma_descriptor.h index 7e8c88e6558..200572d67aa 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/gmma_descriptor.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/gmma_descriptor.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/kernel_traits.h b/cpp/kernels/fmha_v2/src/fmha/hopper/kernel_traits.h index 44eae6e2397..ece561a6d21 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/kernel_traits.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/kernel_traits.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile.h b/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile.h index 92750510aba..28ae7205594 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile_o.h b/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile_o.h index 15214816dec..6d0767f8490 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile_o.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/smem_tile_o.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/tma_descriptor.h b/cpp/kernels/fmha_v2/src/fmha/hopper/tma_descriptor.h index cb1ce06512f..d85c4d6e2df 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/tma_descriptor.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/tma_descriptor.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/tma_types.h b/cpp/kernels/fmha_v2/src/fmha/hopper/tma_types.h index a94b5c07b44..1874abd599f 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/tma_types.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/tma_types.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_gmma.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_gmma.h index e537efb86a1..6c7d980324d 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_gmma.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_gmma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma.h index 9948d7c0951..036c17997f6 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma_bf16.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma_bf16.h index 627d5c316bd..925fc9dc3ca 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma_bf16.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_hgmma_bf16.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_igmma.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_igmma.h index b1bdfadb9cd..a098cfcb2e3 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_igmma.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_igmma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_qgmma.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_qgmma.h index 17fce16448a..0dd861ea780 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_qgmma.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_qgmma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_tma.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_tma.h index 841ab388773..a7112639a36 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_tma.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_tma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_warpgroup.h b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_warpgroup.h index bb6f53af0e0..037863aa6d0 100644 --- a/cpp/kernels/fmha_v2/src/fmha/hopper/utils_warpgroup.h +++ b/cpp/kernels/fmha_v2/src/fmha/hopper/utils_warpgroup.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/kernel_traits.h b/cpp/kernels/fmha_v2/src/fmha/kernel_traits.h index 065ce36869c..3391cf3d28e 100644 --- a/cpp/kernels/fmha_v2/src/fmha/kernel_traits.h +++ b/cpp/kernels/fmha_v2/src/fmha/kernel_traits.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/mask.h b/cpp/kernels/fmha_v2/src/fmha/mask.h index f55ff0dfe32..fc490286a8b 100644 --- a/cpp/kernels/fmha_v2/src/fmha/mask.h +++ b/cpp/kernels/fmha_v2/src/fmha/mask.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/numeric_types.h b/cpp/kernels/fmha_v2/src/fmha/numeric_types.h index 9dd9e5ab634..a5d059e90a0 100644 --- a/cpp/kernels/fmha_v2/src/fmha/numeric_types.h +++ b/cpp/kernels/fmha_v2/src/fmha/numeric_types.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/fmha/paged_kv_cache.h b/cpp/kernels/fmha_v2/src/fmha/paged_kv_cache.h index 1d12b9dd8e6..5309fdf99fc 100644 --- a/cpp/kernels/fmha_v2/src/fmha/paged_kv_cache.h +++ b/cpp/kernels/fmha_v2/src/fmha/paged_kv_cache.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/smem_tile.h b/cpp/kernels/fmha_v2/src/fmha/smem_tile.h index 799752a9345..b476ab2e1f8 100644 --- a/cpp/kernels/fmha_v2/src/fmha/smem_tile.h +++ b/cpp/kernels/fmha_v2/src/fmha/smem_tile.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/smem_tile_o.h b/cpp/kernels/fmha_v2/src/fmha/smem_tile_o.h index 8088382d22e..29806a5e772 100644 --- a/cpp/kernels/fmha_v2/src/fmha/smem_tile_o.h +++ b/cpp/kernels/fmha_v2/src/fmha/smem_tile_o.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/smem_tile_qkv.h b/cpp/kernels/fmha_v2/src/fmha/smem_tile_qkv.h index 89317c2ac51..d8b0daaccd0 100644 --- a/cpp/kernels/fmha_v2/src/fmha/smem_tile_qkv.h +++ b/cpp/kernels/fmha_v2/src/fmha/smem_tile_qkv.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/smem_tile_v.h b/cpp/kernels/fmha_v2/src/fmha/smem_tile_v.h index ea765ee093f..e2bab63d6f8 100644 --- a/cpp/kernels/fmha_v2/src/fmha/smem_tile_v.h +++ b/cpp/kernels/fmha_v2/src/fmha/smem_tile_v.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/softmax.h b/cpp/kernels/fmha_v2/src/fmha/softmax.h index b3569c48f48..11e6a6cf9c4 100644 --- a/cpp/kernels/fmha_v2/src/fmha/softmax.h +++ b/cpp/kernels/fmha_v2/src/fmha/softmax.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/traits.h b/cpp/kernels/fmha_v2/src/fmha/traits.h index fcb28306cc4..e9163dc5d2d 100644 --- a/cpp/kernels/fmha_v2/src/fmha/traits.h +++ b/cpp/kernels/fmha_v2/src/fmha/traits.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/utils.h b/cpp/kernels/fmha_v2/src/fmha/utils.h index e216f0c8082..1dd73304801 100644 --- a/cpp/kernels/fmha_v2/src/fmha/utils.h +++ b/cpp/kernels/fmha_v2/src/fmha/utils.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/warpspec/circular_buffer.h b/cpp/kernels/fmha_v2/src/fmha/warpspec/circular_buffer.h index 515a9633784..ff86434f0e0 100644 --- a/cpp/kernels/fmha_v2/src/fmha/warpspec/circular_buffer.h +++ b/cpp/kernels/fmha_v2/src/fmha/warpspec/circular_buffer.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/fmha/warpspec/compute.h b/cpp/kernels/fmha_v2/src/fmha/warpspec/compute.h index eed6f852da3..d1e7825407c 100644 --- a/cpp/kernels/fmha_v2/src/fmha/warpspec/compute.h +++ b/cpp/kernels/fmha_v2/src/fmha/warpspec/compute.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/warpspec/dma.h b/cpp/kernels/fmha_v2/src/fmha/warpspec/dma.h index 1a8853a03ec..c1ebf5a7bba 100644 --- a/cpp/kernels/fmha_v2/src/fmha/warpspec/dma.h +++ b/cpp/kernels/fmha_v2/src/fmha/warpspec/dma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/warpspec/epilogue.h b/cpp/kernels/fmha_v2/src/fmha/warpspec/epilogue.h index d76f02021a8..fb01ac122f3 100644 --- a/cpp/kernels/fmha_v2/src/fmha/warpspec/epilogue.h +++ b/cpp/kernels/fmha_v2/src/fmha/warpspec/epilogue.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fmha/warpspec/kernel_traits.h b/cpp/kernels/fmha_v2/src/fmha/warpspec/kernel_traits.h index fab7ff3116f..164adc61bf7 100644 --- a/cpp/kernels/fmha_v2/src/fmha/warpspec/kernel_traits.h +++ b/cpp/kernels/fmha_v2/src/fmha/warpspec/kernel_traits.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention.cpp b/cpp/kernels/fmha_v2/src/fused_multihead_attention.cpp index 521de8f21ce..6e9bf44c0dc 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention.cpp +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention.h index 4b6cfaae4a9..953ac3a05c5 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_demo_bert_params.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_demo_bert_params.h index bacb4938cf2..49d39383dba 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_demo_bert_params.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_demo_bert_params.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel.h index 7cde1d4034e..9b5103164d6 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN.h index 372b3657ecf..043689fb499 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_multi_cta.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_multi_cta.h index 2e89e027fe5..aab307a4eb1 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_multi_cta.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_multi_cta.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_noloop.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_noloop.h index 9cf0977be14..a1e38c61c35 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_noloop.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_1xN_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_2x2.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_2x2.h index 7e9227f4297..4099f8ee18e 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_2x2.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_2x2.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper.h index 3469e4be030..3e846f9b30a 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper_noloop.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper_noloop.h index 93b2d4caef6..39cd3bf61cd 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper_noloop.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4x1_hopper_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper.h index c514f3d9864..138fde9094f 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper_noloop.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper_noloop.h index c0a67784903..b30259def5d 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper_noloop.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_kernel_4xN_hopper_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_attention_utils.h b/cpp/kernels/fmha_v2/src/fused_multihead_attention_utils.h index cd23452eaf7..16953f4abf3 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_attention_utils.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_attention_utils.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.cpp b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.cpp index 6e37fc6ab43..05348595156 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.cpp +++ b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.h b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.h index 6747f1c6000..fdf7c4e5d52 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN.h b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN.h index c52cbbbb16c..ed3e7539c18 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN_noloop.h b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN_noloop.h index 8ecc4b773a4..ce808dd7ee2 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN_noloop.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_cross_attention_kernel_1xN_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel.h b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel.h index 16f14a246e4..c414a7ece6d 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop.h b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop.h index 261bf0484c5..467d614c1d0 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop_tiled.h b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop_tiled.h index 77bae24465b..55ba07ed8c3 100644 --- a/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop_tiled.h +++ b/cpp/kernels/fmha_v2/src/fused_multihead_flash_attention_kernel_noloop_tiled.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/src/softmax_bf16.cu b/cpp/kernels/fmha_v2/src/softmax_bf16.cu index 79b681b5023..c8939c910c6 100644 --- a/cpp/kernels/fmha_v2/src/softmax_bf16.cu +++ b/cpp/kernels/fmha_v2/src/softmax_bf16.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "softmax_impl.h" diff --git a/cpp/kernels/fmha_v2/src/softmax_fp16.cu b/cpp/kernels/fmha_v2/src/softmax_fp16.cu index 9df37605a2e..196707560f4 100644 --- a/cpp/kernels/fmha_v2/src/softmax_fp16.cu +++ b/cpp/kernels/fmha_v2/src/softmax_fp16.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "softmax_impl.h" diff --git a/cpp/kernels/fmha_v2/src/softmax_fp32.cu b/cpp/kernels/fmha_v2/src/softmax_fp32.cu index 12bcd8624d9..9841e8ecc27 100644 --- a/cpp/kernels/fmha_v2/src/softmax_fp32.cu +++ b/cpp/kernels/fmha_v2/src/softmax_fp32.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "softmax_impl.h" diff --git a/cpp/kernels/fmha_v2/src/softmax_fp8.cu b/cpp/kernels/fmha_v2/src/softmax_fp8.cu index 26c2f5e88d7..c8fea48fd26 100644 --- a/cpp/kernels/fmha_v2/src/softmax_fp8.cu +++ b/cpp/kernels/fmha_v2/src/softmax_fp8.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "softmax_impl.h" diff --git a/cpp/kernels/fmha_v2/src/softmax_impl.h b/cpp/kernels/fmha_v2/src/softmax_impl.h index c26a18384ac..b8ed58a5dc4 100644 --- a/cpp/kernels/fmha_v2/src/softmax_impl.h +++ b/cpp/kernels/fmha_v2/src/softmax_impl.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/src/softmax_int8.cu b/cpp/kernels/fmha_v2/src/softmax_int8.cu index 28701de9789..03ce9290315 100644 --- a/cpp/kernels/fmha_v2/src/softmax_int8.cu +++ b/cpp/kernels/fmha_v2/src/softmax_int8.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "softmax_impl.h" diff --git a/cpp/kernels/fmha_v2/test/conftest.py b/cpp/kernels/fmha_v2/test/conftest.py index a0bd41f2bb6..2aa46e95972 100644 --- a/cpp/kernels/fmha_v2/test/conftest.py +++ b/cpp/kernels/fmha_v2/test/conftest.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import subprocess diff --git a/cpp/kernels/fmha_v2/test/fmha/filter_rules.py b/cpp/kernels/fmha_v2/test/fmha/filter_rules.py index f57d88226ed..571c09cf469 100644 --- a/cpp/kernels/fmha_v2/test/fmha/filter_rules.py +++ b/cpp/kernels/fmha_v2/test/fmha/filter_rules.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import os diff --git a/cpp/kernels/fmha_v2/test/fmha/test_fmha_exe.py b/cpp/kernels/fmha_v2/test/fmha/test_fmha_exe.py index f0ed87151c0..f61d3c688a0 100644 --- a/cpp/kernels/fmha_v2/test/fmha/test_fmha_exe.py +++ b/cpp/kernels/fmha_v2/test/fmha/test_fmha_exe.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import pytest from filter_rules import * diff --git a/cpp/kernels/fmha_v2/test/fmha/test_fmhca_exe.py b/cpp/kernels/fmha_v2/test/fmha/test_fmhca_exe.py index 209df28a5e5..180e1b8d9c9 100644 --- a/cpp/kernels/fmha_v2/test/fmha/test_fmhca_exe.py +++ b/cpp/kernels/fmha_v2/test/fmha/test_fmhca_exe.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import pytest from filter_rules import * diff --git a/cpp/kernels/fmha_v2/test/fmha/test_meta.py b/cpp/kernels/fmha_v2/test/fmha/test_meta.py index 02d3f01aa6d..642ae77faf4 100644 --- a/cpp/kernels/fmha_v2/test/fmha/test_meta.py +++ b/cpp/kernels/fmha_v2/test/fmha/test_meta.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. # # test of tests diff --git a/cpp/kernels/fmha_v2/test/fmha/utils.py b/cpp/kernels/fmha_v2/test/fmha/utils.py index 18f304cbe99..83a2b6247f0 100644 --- a/cpp/kernels/fmha_v2/test/fmha/utils.py +++ b/cpp/kernels/fmha_v2/test/fmha/utils.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import copy import functools diff --git a/cpp/kernels/fmha_v2/test/train_ops/test_train_ops.py b/cpp/kernels/fmha_v2/test/train_ops/test_train_ops.py index 6bb70417aec..7beff18658f 100644 --- a/cpp/kernels/fmha_v2/test/train_ops/test_train_ops.py +++ b/cpp/kernels/fmha_v2/test/train_ops/test_train_ops.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import pytest from fmha.filter_rules import * diff --git a/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v1_nl_sm70.cu b/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v1_nl_sm70.cu index 6eaa315b88b..894a9893a28 100644 --- a/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v1_nl_sm70.cu +++ b/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v1_nl_sm70.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_kernel_1xN_noloop.h" diff --git a/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v2_flash_nl_sm80.cu b/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v2_flash_nl_sm80.cu index 190832162a0..48cc2ac6c19 100644 --- a/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v2_flash_nl_sm80.cu +++ b/cpp/kernels/fmha_v2/test/unit/arch/test_fmha_v2_flash_nl_sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_flash_attention_kernel_noloop.h" diff --git a/cpp/kernels/fmha_v2/test/unit/test_bar.cu b/cpp/kernels/fmha_v2/test/unit/test_bar.cu index 6df364d0471..27349ad341a 100644 --- a/cpp/kernels/fmha_v2/test/unit/test_bar.cu +++ b/cpp/kernels/fmha_v2/test/unit/test_bar.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "gtest/gtest.h" diff --git a/cpp/kernels/fmha_v2/test/unit/test_foo.cu b/cpp/kernels/fmha_v2/test/unit/test_foo.cu index 1024186239b..fc658e5abe1 100644 --- a/cpp/kernels/fmha_v2/test/unit/test_foo.cu +++ b/cpp/kernels/fmha_v2/test/unit/test_foo.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "gtest/gtest.h" diff --git a/cpp/kernels/fmha_v2/train_ops/apex_mha_api.cpp b/cpp/kernels/fmha_v2/train_ops/apex_mha_api.cpp index 699fa485e3e..32b54c46977 100644 --- a/cpp/kernels/fmha_v2/train_ops/apex_mha_api.cpp +++ b/cpp/kernels/fmha_v2/train_ops/apex_mha_api.cpp @@ -1,11 +1,16 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ diff --git a/cpp/kernels/fmha_v2/train_ops/apex_mha_kernels.cu b/cpp/kernels/fmha_v2/train_ops/apex_mha_kernels.cu index 0005ceb4061..2cfc8f004dc 100644 --- a/cpp/kernels/fmha_v2/train_ops/apex_mha_kernels.cu +++ b/cpp/kernels/fmha_v2/train_ops/apex_mha_kernels.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "dropout.cuh" diff --git a/cpp/kernels/fmha_v2/train_ops/bert_mha_train_api.cpp b/cpp/kernels/fmha_v2/train_ops/bert_mha_train_api.cpp index 0c2214e6875..2d81ab41e20 100644 --- a/cpp/kernels/fmha_v2/train_ops/bert_mha_train_api.cpp +++ b/cpp/kernels/fmha_v2/train_ops/bert_mha_train_api.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/fmha_bmark.py b/cpp/kernels/fmha_v2/train_ops/fmha_bmark.py index cd3aeea740e..eab3caad8e0 100644 --- a/cpp/kernels/fmha_v2/train_ops/fmha_bmark.py +++ b/cpp/kernels/fmha_v2/train_ops/fmha_bmark.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 1000-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. # #from IPython.core.display import display, HTML #display(HTML("")) diff --git a/cpp/kernels/fmha_v2/train_ops/fmha_noloop_reduce.cu b/cpp/kernels/fmha_v2/train_ops/fmha_noloop_reduce.cu index c9757245c37..677887641c1 100644 --- a/cpp/kernels/fmha_v2/train_ops/fmha_noloop_reduce.cu +++ b/cpp/kernels/fmha_v2/train_ops/fmha_noloop_reduce.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_fprop.h" diff --git a/cpp/kernels/fmha_v2/train_ops/fmha_unit_test.py b/cpp/kernels/fmha_v2/train_ops/fmha_unit_test.py index 42e9baed5cc..3ab34b4ba84 100755 --- a/cpp/kernels/fmha_v2/train_ops/fmha_unit_test.py +++ b/cpp/kernels/fmha_v2/train_ops/fmha_unit_test.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. # # testing fixed sequence length diff --git a/cpp/kernels/fmha_v2/train_ops/fp8_mha_api.cpp b/cpp/kernels/fmha_v2/train_ops/fp8_mha_api.cpp index bac4dd4d217..7e6d857d742 100644 --- a/cpp/kernels/fmha_v2/train_ops/fp8_mha_api.cpp +++ b/cpp/kernels/fmha_v2/train_ops/fp8_mha_api.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN.h index fd0f9ea76e3..0902f9fd306 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_flash.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_flash.h index 64816548093..7943c978113 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_flash.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_flash.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_noloop.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_noloop.h index 4a3af7c8e03..2696fc9b330 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_noloop.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload.h index f735ea920ed..775af03df1d 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload_noloop.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload_noloop.h index 2039e654c85..1d3b1f3a07c 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload_noloop.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_dgrad_kernel_1xN_reload_noloop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_flash_attention_fprop_kernel.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_flash_attention_fprop_kernel.h index bcad573f73e..88e8b80000c 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_flash_attention_fprop_kernel.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_flash_attention_fprop_kernel.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop.h index 47cd5c8aa9f..46bc7a1fab9 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel.h index 546ea5863f6..63146e62205 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN.h index 21abf277a7c..6cdc983960c 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN_reload.h b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN_reload.h index 7c742d5bc00..4043b03e381 100644 --- a/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN_reload.h +++ b/cpp/kernels/fmha_v2/train_ops/fused_multihead_attention_fprop_kernel_1xN_reload.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/gmem_tile_d.h b/cpp/kernels/fmha_v2/train_ops/gmem_tile_d.h index f0ac72331cf..7ed93840aac 100644 --- a/cpp/kernels/fmha_v2/train_ops/gmem_tile_d.h +++ b/cpp/kernels/fmha_v2/train_ops/gmem_tile_d.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad.h b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad.h index a1e6e8afe81..de632494d60 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad.h +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_fp8_512_sm90.cu b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_fp8_512_sm90.cu index 84b750b5875..e3c7dd84661 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_fp8_512_sm90.cu +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_fp8_512_sm90.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_kernel_4x1.h b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_kernel_4x1.h index d3536c6962e..0f4527e4e1e 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_kernel_4x1.h +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_dgrad_kernel_4x1.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop.h b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop.h index f7da294e269..2d960355b0b 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop.h +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_fp8_512_sm90.cu b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_fp8_512_sm90.cu index 39f91877665..c0319375819 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_fp8_512_sm90.cu +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_fp8_512_sm90.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_kernel_4x1.h b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_kernel_4x1.h index 6e3d8aefe04..e96d837bb1b 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_kernel_4x1.h +++ b/cpp/kernels/fmha_v2/train_ops/hopper/fmha_fprop_kernel_4x1.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/hopper/kernel_traits.h b/cpp/kernels/fmha_v2/train_ops/hopper/kernel_traits.h index 3e86a7835d5..53c29d9e255 100644 --- a/cpp/kernels/fmha_v2/train_ops/hopper/kernel_traits.h +++ b/cpp/kernels/fmha_v2/train_ops/hopper/kernel_traits.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_128_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_128_64_kernel.sm80.cu index 35ce342e1bd..789a53d1d74 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_128_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_128_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_dgrad_kernel_1xN_reload.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_256_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_256_64_kernel.sm80.cu index e8a2c2d476e..bc696069267 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_256_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_256_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_dgrad_kernel_1xN_reload.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_384_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_384_64_kernel.sm80.cu index 2476e67d6da..488cd2c3fbf 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_384_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_384_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_dgrad_kernel_1xN_reload.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_512_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_512_64_kernel.sm80.cu index fe46ca48407..b4750fc104c 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_512_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_dgrad_v2_fp16_512_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_dgrad_kernel_1xN_reload.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_128_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_128_64_kernel.sm80.cu index 667fb9c1344..bdbcc1fd262 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_128_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_128_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_fprop.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_256_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_256_64_kernel.sm80.cu index da3703894a3..0195087d09d 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_256_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_256_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_fprop.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_384_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_384_64_kernel.sm80.cu index 0049c6ec551..2521b5dc17e 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_384_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_384_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_fprop.h" diff --git a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_512_64_kernel.sm80.cu b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_512_64_kernel.sm80.cu index 1cbf28f5954..2a5cdeb681f 100644 --- a/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_512_64_kernel.sm80.cu +++ b/cpp/kernels/fmha_v2/train_ops/kernels/fmha_fprop_v2_fp16_512_64_kernel.sm80.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "fused_multihead_attention_fprop.h" diff --git a/cpp/kernels/fmha_v2/train_ops/my_utils.py b/cpp/kernels/fmha_v2/train_ops/my_utils.py index 10835ce4da7..9cad0b8a545 100644 --- a/cpp/kernels/fmha_v2/train_ops/my_utils.py +++ b/cpp/kernels/fmha_v2/train_ops/my_utils.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import math diff --git a/cpp/kernels/fmha_v2/train_ops/philox.h b/cpp/kernels/fmha_v2/train_ops/philox.h index d0bc871cf5b..06255fb44dc 100644 --- a/cpp/kernels/fmha_v2/train_ops/philox.h +++ b/cpp/kernels/fmha_v2/train_ops/philox.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2021-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2021-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/smem_tile_d.h b/cpp/kernels/fmha_v2/train_ops/smem_tile_d.h index 8cab61cc0f3..cc02275773d 100644 --- a/cpp/kernels/fmha_v2/train_ops/smem_tile_d.h +++ b/cpp/kernels/fmha_v2/train_ops/smem_tile_d.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/smem_tile_dq.h b/cpp/kernels/fmha_v2/train_ops/smem_tile_dq.h index ae63e1527d9..6ebe5b3afc6 100644 --- a/cpp/kernels/fmha_v2/train_ops/smem_tile_dq.h +++ b/cpp/kernels/fmha_v2/train_ops/smem_tile_dq.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2011-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2011-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/static_switch.h b/cpp/kernels/fmha_v2/train_ops/static_switch.h index e16f3221edb..230cee0e66e 100644 --- a/cpp/kernels/fmha_v2/train_ops/static_switch.h +++ b/cpp/kernels/fmha_v2/train_ops/static_switch.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ // Inspired by https://github.com/NVIDIA/DALI/blob/main/include/dali/core/static_switch.h diff --git a/cpp/kernels/fmha_v2/train_ops/te_mha.py b/cpp/kernels/fmha_v2/train_ops/te_mha.py index 2eb0e1ddde7..6e2a371bbbe 100644 --- a/cpp/kernels/fmha_v2/train_ops/te_mha.py +++ b/cpp/kernels/fmha_v2/train_ops/te_mha.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. from typing import Any, Dict, Tuple, Union diff --git a/cpp/kernels/fmha_v2/train_ops/test.cpp b/cpp/kernels/fmha_v2/train_ops/test.cpp index 59f42cb04e8..e8dc0098544 100644 --- a/cpp/kernels/fmha_v2/train_ops/test.cpp +++ b/cpp/kernels/fmha_v2/train_ops/test.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/test.h b/cpp/kernels/fmha_v2/train_ops/test.h index ee62d5b97fc..dee0b36275b 100644 --- a/cpp/kernels/fmha_v2/train_ops/test.h +++ b/cpp/kernels/fmha_v2/train_ops/test.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/fmha_v2/train_ops/test_bmm.cpp b/cpp/kernels/fmha_v2/train_ops/test_bmm.cpp index 7c4da8aaed2..cc1715bec94 100644 --- a/cpp/kernels/fmha_v2/train_ops/test_bmm.cpp +++ b/cpp/kernels/fmha_v2/train_ops/test_bmm.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/fmha_v2/train_ops/train_setup.py b/cpp/kernels/fmha_v2/train_ops/train_setup.py index 917b8442b98..9669b294cb3 100755 --- a/cpp/kernels/fmha_v2/train_ops/train_setup.py +++ b/cpp/kernels/fmha_v2/train_ops/train_setup.py @@ -1,12 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import os import sys diff --git a/cpp/kernels/xqa/RefChecker.cuh b/cpp/kernels/xqa/RefChecker.cuh index 5e82dc34239..96631ab1b5d 100644 --- a/cpp/kernels/xqa/RefChecker.cuh +++ b/cpp/kernels/xqa/RefChecker.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/barriers.cuh b/cpp/kernels/xqa/barriers.cuh index d21ba7e8674..f43983ac868 100644 --- a/cpp/kernels/xqa/barriers.cuh +++ b/cpp/kernels/xqa/barriers.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/cuda_hint.cuh b/cpp/kernels/xqa/cuda_hint.cuh index d71b199c292..5350ea9ce12 100644 --- a/cpp/kernels/xqa/cuda_hint.cuh +++ b/cpp/kernels/xqa/cuda_hint.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/defines.h b/cpp/kernels/xqa/defines.h index 0126ca2e74d..efc5c4ec652 100644 --- a/cpp/kernels/xqa/defines.h +++ b/cpp/kernels/xqa/defines.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/gen_cpp_header.py b/cpp/kernels/xqa/gen_cpp_header.py index 2990dcd6343..51417bc96a4 100755 --- a/cpp/kernels/xqa/gen_cpp_header.py +++ b/cpp/kernels/xqa/gen_cpp_header.py @@ -1,13 +1,18 @@ #!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import argparse import os @@ -105,15 +110,20 @@ def is_header(entry: Entry): all_entries = map(get_entry_from_input_fname, all_files) TEMPLATE_PROLOGUE = '''/* - * SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + * + * 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 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/gen_cubins.py b/cpp/kernels/xqa/gen_cubins.py index b520779dab3..2a284f834ad 100755 --- a/cpp/kernels/xqa/gen_cubins.py +++ b/cpp/kernels/xqa/gen_cubins.py @@ -1,13 +1,18 @@ #!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. # NOTE: this file is for cubin generation, should not in final code release. diff --git a/cpp/kernels/xqa/gmma.cuh b/cpp/kernels/xqa/gmma.cuh index f5148d8b9b4..f5f29c73e77 100644 --- a/cpp/kernels/xqa/gmma.cuh +++ b/cpp/kernels/xqa/gmma.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/gmma_impl.cuh b/cpp/kernels/xqa/gmma_impl.cuh index 96bc721ca36..596586eebfd 100644 --- a/cpp/kernels/xqa/gmma_impl.cuh +++ b/cpp/kernels/xqa/gmma_impl.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/ldgsts.cuh b/cpp/kernels/xqa/ldgsts.cuh index 052894dd663..702cb8191db 100644 --- a/cpp/kernels/xqa/ldgsts.cuh +++ b/cpp/kernels/xqa/ldgsts.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/mha.cu b/cpp/kernels/xqa/mha.cu index 04d988065b5..89eb935cf3a 100644 --- a/cpp/kernels/xqa/mha.cu +++ b/cpp/kernels/xqa/mha.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "cuda_hint.cuh" diff --git a/cpp/kernels/xqa/mha.h b/cpp/kernels/xqa/mha.h index e4bb03ce678..a40a5e6c0d0 100644 --- a/cpp/kernels/xqa/mha.h +++ b/cpp/kernels/xqa/mha.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/mhaUtils.cuh b/cpp/kernels/xqa/mhaUtils.cuh index 09da2b8d10b..96b54b92f81 100644 --- a/cpp/kernels/xqa/mhaUtils.cuh +++ b/cpp/kernels/xqa/mhaUtils.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/mha_sm90.cu b/cpp/kernels/xqa/mha_sm90.cu index 5b14f37aea0..bfcedc75cf1 100644 --- a/cpp/kernels/xqa/mha_sm90.cu +++ b/cpp/kernels/xqa/mha_sm90.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "cuda_hint.cuh" diff --git a/cpp/kernels/xqa/mha_stdheaders.cuh b/cpp/kernels/xqa/mha_stdheaders.cuh index 9ab96da3325..5d22d2e018b 100644 --- a/cpp/kernels/xqa/mha_stdheaders.cuh +++ b/cpp/kernels/xqa/mha_stdheaders.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/mla_sm120.cu b/cpp/kernels/xqa/mla_sm120.cu index 7f92e21dbe7..84ee4f7ccba 100644 --- a/cpp/kernels/xqa/mla_sm120.cu +++ b/cpp/kernels/xqa/mla_sm120.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "defines.h" diff --git a/cpp/kernels/xqa/mma.cuh b/cpp/kernels/xqa/mma.cuh index e9cd69c2097..e38bdb16ad9 100644 --- a/cpp/kernels/xqa/mma.cuh +++ b/cpp/kernels/xqa/mma.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/nvrtc/test_nvrtc.cpp b/cpp/kernels/xqa/nvrtc/test_nvrtc.cpp index bcf653d53fa..cd956afab25 100644 --- a/cpp/kernels/xqa/nvrtc/test_nvrtc.cpp +++ b/cpp/kernels/xqa/nvrtc/test_nvrtc.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/kernels/xqa/platform.h b/cpp/kernels/xqa/platform.h index e25c5251ba6..87d5eaef153 100644 --- a/cpp/kernels/xqa/platform.h +++ b/cpp/kernels/xqa/platform.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/ref.py b/cpp/kernels/xqa/ref.py index 21ce403d84d..f7062e476e3 100755 --- a/cpp/kernels/xqa/ref.py +++ b/cpp/kernels/xqa/ref.py @@ -1,13 +1,18 @@ #!/usr/bin/env python3 -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related -# documentation and any modifications thereto. Any use, reproduction, -# disclosure or distribution of this material and related documentation -# without an express license agreement from NVIDIA CORPORATION or -# its affiliates is strictly prohibited. +# 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. import numpy as np diff --git a/cpp/kernels/xqa/specDec.h b/cpp/kernels/xqa/specDec.h index 47d525f049e..190e2a4907e 100644 --- a/cpp/kernels/xqa/specDec.h +++ b/cpp/kernels/xqa/specDec.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/test/refAttention.cpp b/cpp/kernels/xqa/test/refAttention.cpp index dd356c101c0..303678518f5 100644 --- a/cpp/kernels/xqa/test/refAttention.cpp +++ b/cpp/kernels/xqa/test/refAttention.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "refAttention.h" diff --git a/cpp/kernels/xqa/test/refAttention.h b/cpp/kernels/xqa/test/refAttention.h index a073ed0e801..4f1e673adaa 100644 --- a/cpp/kernels/xqa/test/refAttention.h +++ b/cpp/kernels/xqa/test/refAttention.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/test/test.cpp b/cpp/kernels/xqa/test/test.cpp index 6840af743b3..76e94616ce2 100644 --- a/cpp/kernels/xqa/test/test.cpp +++ b/cpp/kernels/xqa/test/test.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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 ENABLE_NVRTC diff --git a/cpp/kernels/xqa/tma.h b/cpp/kernels/xqa/tma.h index 38d7e439286..0e0605c81fb 100644 --- a/cpp/kernels/xqa/tma.h +++ b/cpp/kernels/xqa/tma.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/utils.cuh b/cpp/kernels/xqa/utils.cuh index 6f74a830ed2..49413f94a68 100644 --- a/cpp/kernels/xqa/utils.cuh +++ b/cpp/kernels/xqa/utils.cuh @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/kernels/xqa/utils.h b/cpp/kernels/xqa/utils.h index bdddd8456f1..30f529e8d7e 100644 --- a/cpp/kernels/xqa/utils.h +++ b/cpp/kernels/xqa/utils.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/tensorrt_llm/batch_manager/CMakeLists.txt b/cpp/tensorrt_llm/batch_manager/CMakeLists.txt index 225de2ee4b2..bca760dabcf 100644 --- a/cpp/tensorrt_llm/batch_manager/CMakeLists.txt +++ b/cpp/tensorrt_llm/batch_manager/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. set(BATCH_MANAGER_TARGET_NAME tensorrt_llm_batch_manager) set(BATCH_MANAGER_STATIC_TARGET ${BATCH_MANAGER_TARGET_NAME}_static) diff --git a/cpp/tensorrt_llm/executor/CMakeLists.txt b/cpp/tensorrt_llm/executor/CMakeLists.txt index 64ac632653d..e0e91d4b993 100644 --- a/cpp/tensorrt_llm/executor/CMakeLists.txt +++ b/cpp/tensorrt_llm/executor/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. set(EXECUTOR_TARGET_NAME tensorrt_llm_executor) set(EXECUTOR_STATIC_TARGET ${EXECUTOR_TARGET_NAME}_static) diff --git a/cpp/tensorrt_llm/executor/cache_transmission/nixl_utils/CMakeLists.txt b/cpp/tensorrt_llm/executor/cache_transmission/nixl_utils/CMakeLists.txt index 74785dabea6..ebdc05d64a1 100644 --- a/cpp/tensorrt_llm/executor/cache_transmission/nixl_utils/CMakeLists.txt +++ b/cpp/tensorrt_llm/executor/cache_transmission/nixl_utils/CMakeLists.txt @@ -1,13 +1,17 @@ # SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. if(NIXL_ROOT) find_package(NIXL REQUIRED) diff --git a/cpp/tensorrt_llm/kernels/cutlass_kernels/allreduce_gemm/epilogue/sm100_visitor_allreduce_tma_warpspecialized.hpp b/cpp/tensorrt_llm/kernels/cutlass_kernels/allreduce_gemm/epilogue/sm100_visitor_allreduce_tma_warpspecialized.hpp index 1223e687c46..923a8df4b4a 100644 --- a/cpp/tensorrt_llm/kernels/cutlass_kernels/allreduce_gemm/epilogue/sm100_visitor_allreduce_tma_warpspecialized.hpp +++ b/cpp/tensorrt_llm/kernels/cutlass_kernels/allreduce_gemm/epilogue/sm100_visitor_allreduce_tma_warpspecialized.hpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplJIT/nvrtcWrapper/src/nvrtcWrapper.cpp b/cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplJIT/nvrtcWrapper/src/nvrtcWrapper.cpp index c37d47295fb..96481d8474f 100644 --- a/cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplJIT/nvrtcWrapper/src/nvrtcWrapper.cpp +++ b/cpp/tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplJIT/nvrtcWrapper/src/nvrtcWrapper.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/kernels/decoderMaskedMultiheadAttention/decoderXQAImplJIT/nvrtcWrapper/include/nvrtcWrapper.h" diff --git a/cpp/tests/e2e_tests/CMakeLists.txt b/cpp/tests/e2e_tests/CMakeLists.txt index a45e3a3b6c7..f5deb048a18 100644 --- a/cpp/tests/e2e_tests/CMakeLists.txt +++ b/cpp/tests/e2e_tests/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_subdirectory(batch_manager) add_subdirectory(executor) diff --git a/cpp/tests/e2e_tests/batch_manager/CMakeLists.txt b/cpp/tests/e2e_tests/batch_manager/CMakeLists.txt index 5e388294d26..875e12eb975 100644 --- a/cpp/tests/e2e_tests/batch_manager/CMakeLists.txt +++ b/cpp/tests/e2e_tests/batch_manager/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. # guidedDecoderTest requires model tokenizer info, so it's easier to run it with # e2e tests instead of unit tests. diff --git a/cpp/tests/e2e_tests/batch_manager/guidedDecoderTest.cpp b/cpp/tests/e2e_tests/batch_manager/guidedDecoderTest.cpp index 8358e987334..5b59bc7a6e9 100644 --- a/cpp/tests/e2e_tests/batch_manager/guidedDecoderTest.cpp +++ b/cpp/tests/e2e_tests/batch_manager/guidedDecoderTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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 TOP_LEVEL_DIR diff --git a/cpp/tests/e2e_tests/batch_manager/trtGptModelRealDecoderTest.cpp b/cpp/tests/e2e_tests/batch_manager/trtGptModelRealDecoderTest.cpp index 38f1cccf936..f401a31305d 100644 --- a/cpp/tests/e2e_tests/batch_manager/trtGptModelRealDecoderTest.cpp +++ b/cpp/tests/e2e_tests/batch_manager/trtGptModelRealDecoderTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/trtGptModel.h" diff --git a/cpp/tests/e2e_tests/batch_manager/trtGptModelTest.cpp b/cpp/tests/e2e_tests/batch_manager/trtGptModelTest.cpp index bd8ef31d554..7ef5f4285ce 100644 --- a/cpp/tests/e2e_tests/batch_manager/trtGptModelTest.cpp +++ b/cpp/tests/e2e_tests/batch_manager/trtGptModelTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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 TOP_LEVEL_DIR diff --git a/cpp/tests/e2e_tests/executor/CMakeLists.txt b/cpp/tests/e2e_tests/executor/CMakeLists.txt index 765bbb22fae..4813c92584f 100644 --- a/cpp/tests/e2e_tests/executor/CMakeLists.txt +++ b/cpp/tests/e2e_tests/executor/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(executorMockTest executorMockTest.cpp) add_gtest(executorTest executorTest.cpp) diff --git a/cpp/tests/e2e_tests/executor/disaggExecutor.h b/cpp/tests/e2e_tests/executor/disaggExecutor.h index 50ab58e6864..6b3a529ca16 100644 --- a/cpp/tests/e2e_tests/executor/disaggExecutor.h +++ b/cpp/tests/e2e_tests/executor/disaggExecutor.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/tests/e2e_tests/executor/disaggExecutorTest.cpp b/cpp/tests/e2e_tests/executor/disaggExecutorTest.cpp index 02488273a4a..0eb05d2cc80 100644 --- a/cpp/tests/e2e_tests/executor/disaggExecutorTest.cpp +++ b/cpp/tests/e2e_tests/executor/disaggExecutorTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "disaggExecutor.h" diff --git a/cpp/tests/e2e_tests/executor/encDecTest.cpp b/cpp/tests/e2e_tests/executor/encDecTest.cpp index 94f72e937b6..0095ae30ad4 100644 --- a/cpp/tests/e2e_tests/executor/encDecTest.cpp +++ b/cpp/tests/e2e_tests/executor/encDecTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "executorTest.h" diff --git a/cpp/tests/e2e_tests/executor/executorMockTest.cpp b/cpp/tests/e2e_tests/executor/executorMockTest.cpp index 874623ac5e3..0f0176f1ed6 100644 --- a/cpp/tests/e2e_tests/executor/executorMockTest.cpp +++ b/cpp/tests/e2e_tests/executor/executorMockTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "executorTest.h" diff --git a/cpp/tests/e2e_tests/executor/executorTest.cpp b/cpp/tests/e2e_tests/executor/executorTest.cpp index 6b8c8d7eb9e..00ac50d88ad 100644 --- a/cpp/tests/e2e_tests/executor/executorTest.cpp +++ b/cpp/tests/e2e_tests/executor/executorTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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 TOP_LEVEL_DIR diff --git a/cpp/tests/e2e_tests/executor/executorTest.h b/cpp/tests/e2e_tests/executor/executorTest.h index 1d43016c0ad..7866a699226 100644 --- a/cpp/tests/e2e_tests/executor/executorTest.h +++ b/cpp/tests/e2e_tests/executor/executorTest.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once diff --git a/cpp/tests/unit_tests/CMakeLists.txt b/cpp/tests/unit_tests/CMakeLists.txt index 9dc321c6dd8..034de457bb7 100644 --- a/cpp/tests/unit_tests/CMakeLists.txt +++ b/cpp/tests/unit_tests/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/batch_manager) add_subdirectory(batch_manager) diff --git a/cpp/tests/unit_tests/batch_manager/CMakeLists.txt b/cpp/tests/unit_tests/batch_manager/CMakeLists.txt index 677fa3cfd1e..f23ce6302c1 100644 --- a/cpp/tests/unit_tests/batch_manager/CMakeLists.txt +++ b/cpp/tests/unit_tests/batch_manager/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(blockKeyTest blockKeyTest.cpp) add_gtest(cacheTransBufferTest cacheTransBufferTest.cpp) diff --git a/cpp/tests/unit_tests/batch_manager/capacitySchedulerTest.cpp b/cpp/tests/unit_tests/batch_manager/capacitySchedulerTest.cpp index 58f1f7d4fa0..ba611e8720a 100644 --- a/cpp/tests/unit_tests/batch_manager/capacitySchedulerTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/capacitySchedulerTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/tests/unit_tests/batch_manager/contextProgressTest.cu b/cpp/tests/unit_tests/batch_manager/contextProgressTest.cu index fd59656699e..9d336b63393 100644 --- a/cpp/tests/unit_tests/batch_manager/contextProgressTest.cu +++ b/cpp/tests/unit_tests/batch_manager/contextProgressTest.cu @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/contextProgress.h" diff --git a/cpp/tests/unit_tests/batch_manager/evictionPolicyTest.cpp b/cpp/tests/unit_tests/batch_manager/evictionPolicyTest.cpp index 250a8602fd0..96b6011eb56 100644 --- a/cpp/tests/unit_tests/batch_manager/evictionPolicyTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/evictionPolicyTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/evictionPolicy.h" diff --git a/cpp/tests/unit_tests/batch_manager/kvCacheManagerTest.cpp b/cpp/tests/unit_tests/batch_manager/kvCacheManagerTest.cpp index 2e4fa943ab0..4635e6ae037 100644 --- a/cpp/tests/unit_tests/batch_manager/kvCacheManagerTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/kvCacheManagerTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/kvCacheManager.h" diff --git a/cpp/tests/unit_tests/batch_manager/kvCacheUtilsTest.cpp b/cpp/tests/unit_tests/batch_manager/kvCacheUtilsTest.cpp index 96ca0091a40..0ccfd045b5d 100644 --- a/cpp/tests/unit_tests/batch_manager/kvCacheUtilsTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/kvCacheUtilsTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/kvCacheUtils.h" diff --git a/cpp/tests/unit_tests/batch_manager/llmRequestTest.cpp b/cpp/tests/unit_tests/batch_manager/llmRequestTest.cpp index 634ee31ad39..f1d39dc384d 100644 --- a/cpp/tests/unit_tests/batch_manager/llmRequestTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/llmRequestTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/llmRequest.h" diff --git a/cpp/tests/unit_tests/batch_manager/microBatchSchedulerTest.cpp b/cpp/tests/unit_tests/batch_manager/microBatchSchedulerTest.cpp index e635e487947..55834f3c66e 100644 --- a/cpp/tests/unit_tests/batch_manager/microBatchSchedulerTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/microBatchSchedulerTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/tests/unit_tests/batch_manager/peftCacheManagerTest.cpp b/cpp/tests/unit_tests/batch_manager/peftCacheManagerTest.cpp index 0ca9183fb6b..49adfe5a6cb 100644 --- a/cpp/tests/unit_tests/batch_manager/peftCacheManagerTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/peftCacheManagerTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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 TOP_LEVEL_DIR diff --git a/cpp/tests/unit_tests/batch_manager/staticThreadPoolTest.cpp b/cpp/tests/unit_tests/batch_manager/staticThreadPoolTest.cpp index 4bb7c066c83..8b3f6b40722 100644 --- a/cpp/tests/unit_tests/batch_manager/staticThreadPoolTest.cpp +++ b/cpp/tests/unit_tests/batch_manager/staticThreadPoolTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/batch_manager/utils/staticThreadPool.h" diff --git a/cpp/tests/unit_tests/common/CMakeLists.txt b/cpp/tests/unit_tests/common/CMakeLists.txt index 0bc5c953cb2..cd29e48781d 100644 --- a/cpp/tests/unit_tests/common/CMakeLists.txt +++ b/cpp/tests/unit_tests/common/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(cudaProfilerUtilsTest cudaProfilerUtilsTest.cpp) add_gtest(cudaUtilsTest cudaUtilsTest.cpp) diff --git a/cpp/tests/unit_tests/executor/CMakeLists.txt b/cpp/tests/unit_tests/executor/CMakeLists.txt index e2e230c4e28..de3a694d21d 100644 --- a/cpp/tests/unit_tests/executor/CMakeLists.txt +++ b/cpp/tests/unit_tests/executor/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(executorSamplingConfigTest samplingConfigTest.cpp) add_gtest(kvCacheConfigTest kvCacheConfigTest.cpp) diff --git a/cpp/tests/unit_tests/executor/agentCommTest.cpp b/cpp/tests/unit_tests/executor/agentCommTest.cpp index fd7a7a23de7..e796757a5d7 100644 --- a/cpp/tests/unit_tests/executor/agentCommTest.cpp +++ b/cpp/tests/unit_tests/executor/agentCommTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/cache_transmission/agent_utils/connection.h" diff --git a/cpp/tests/unit_tests/executor/decodingConfigTest.cpp b/cpp/tests/unit_tests/executor/decodingConfigTest.cpp index 4a6e2e6fd99..fc553077eaa 100644 --- a/cpp/tests/unit_tests/executor/decodingConfigTest.cpp +++ b/cpp/tests/unit_tests/executor/decodingConfigTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/dynamicBatchTunerTest.cpp b/cpp/tests/unit_tests/executor/dynamicBatchTunerTest.cpp index 0da42c63495..04ce10393b6 100644 --- a/cpp/tests/unit_tests/executor/dynamicBatchTunerTest.cpp +++ b/cpp/tests/unit_tests/executor/dynamicBatchTunerTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/dynamicBatchTuner.h" diff --git a/cpp/tests/unit_tests/executor/executorConfigTest.cpp b/cpp/tests/unit_tests/executor/executorConfigTest.cpp index 3cc6052962e..f4bd9959a25 100644 --- a/cpp/tests/unit_tests/executor/executorConfigTest.cpp +++ b/cpp/tests/unit_tests/executor/executorConfigTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/intervalSetTest.cpp b/cpp/tests/unit_tests/executor/intervalSetTest.cpp index f369b36e82b..a2bb0a8f753 100644 --- a/cpp/tests/unit_tests/executor/intervalSetTest.cpp +++ b/cpp/tests/unit_tests/executor/intervalSetTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/intervalSet.h" diff --git a/cpp/tests/unit_tests/executor/kvCacheConfigTest.cpp b/cpp/tests/unit_tests/executor/kvCacheConfigTest.cpp index 5a8e082e2a4..ca1a2a9147d 100644 --- a/cpp/tests/unit_tests/executor/kvCacheConfigTest.cpp +++ b/cpp/tests/unit_tests/executor/kvCacheConfigTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/loraConfigTest.cpp b/cpp/tests/unit_tests/executor/loraConfigTest.cpp index 6ce56cccbdf..6f9ad94e2f4 100644 --- a/cpp/tests/unit_tests/executor/loraConfigTest.cpp +++ b/cpp/tests/unit_tests/executor/loraConfigTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/requestTest.cpp b/cpp/tests/unit_tests/executor/requestTest.cpp index c5341c26f7a..f44f55b5141 100644 --- a/cpp/tests/unit_tests/executor/requestTest.cpp +++ b/cpp/tests/unit_tests/executor/requestTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/requestWithIdTest.cpp b/cpp/tests/unit_tests/executor/requestWithIdTest.cpp index 40b038c9269..e9c5d8db289 100644 --- a/cpp/tests/unit_tests/executor/requestWithIdTest.cpp +++ b/cpp/tests/unit_tests/executor/requestWithIdTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/requestWithId.h" diff --git a/cpp/tests/unit_tests/executor/responseTest.cpp b/cpp/tests/unit_tests/executor/responseTest.cpp index 91ec3c77a0e..ca511252d0f 100644 --- a/cpp/tests/unit_tests/executor/responseTest.cpp +++ b/cpp/tests/unit_tests/executor/responseTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/samplingConfigTest.cpp b/cpp/tests/unit_tests/executor/samplingConfigTest.cpp index ca9d4621d27..2c25e902bdb 100644 --- a/cpp/tests/unit_tests/executor/samplingConfigTest.cpp +++ b/cpp/tests/unit_tests/executor/samplingConfigTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/common/tllmException.h" diff --git a/cpp/tests/unit_tests/executor/serializeUtilsTest.cpp b/cpp/tests/unit_tests/executor/serializeUtilsTest.cpp index 71a4c3732d6..35295585354 100644 --- a/cpp/tests/unit_tests/executor/serializeUtilsTest.cpp +++ b/cpp/tests/unit_tests/executor/serializeUtilsTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/serializeUtils.h" diff --git a/cpp/tests/unit_tests/executor/tensorTest.cpp b/cpp/tests/unit_tests/executor/tensorTest.cpp index 5a1a9e8a1e3..568aab16a90 100644 --- a/cpp/tests/unit_tests/executor/tensorTest.cpp +++ b/cpp/tests/unit_tests/executor/tensorTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include diff --git a/cpp/tests/unit_tests/executor/transferAgentTest.cpp b/cpp/tests/unit_tests/executor/transferAgentTest.cpp index 8d9d64599af..0f21449f30a 100644 --- a/cpp/tests/unit_tests/executor/transferAgentTest.cpp +++ b/cpp/tests/unit_tests/executor/transferAgentTest.cpp @@ -1,13 +1,18 @@ /* * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "tensorrt_llm/executor/transferAgent.h" diff --git a/cpp/tests/unit_tests/executor/ucxCommTest.cpp b/cpp/tests/unit_tests/executor/ucxCommTest.cpp index 245ed459389..51d1d84d267 100644 --- a/cpp/tests/unit_tests/executor/ucxCommTest.cpp +++ b/cpp/tests/unit_tests/executor/ucxCommTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #define UCX_WRAPPER_LIB_NAME "tensorrt_llm_ucx_wrapper" diff --git a/cpp/tests/unit_tests/kernels/CMakeLists.txt b/cpp/tests/unit_tests/kernels/CMakeLists.txt index 2574df960ee..1058ae40958 100644 --- a/cpp/tests/unit_tests/kernels/CMakeLists.txt +++ b/cpp/tests/unit_tests/kernels/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(banRepeatNGramsKernelsTest banRepeatNGramsKernelsTest.cpp) add_gtest(decodingKernelsTest decodingKernelTest.cpp) diff --git a/cpp/tests/unit_tests/layers/CMakeLists.txt b/cpp/tests/unit_tests/layers/CMakeLists.txt index 56e71100295..3f194d3a77c 100644 --- a/cpp/tests/unit_tests/layers/CMakeLists.txt +++ b/cpp/tests/unit_tests/layers/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. set(SAMPLING_LAYER_TEST_SRC baseSamplingLayerTest.cpp samplingLayerTest.cpp topKSamplingLayerTest.cpp diff --git a/cpp/tests/unit_tests/multi_gpu/CMakeLists.txt b/cpp/tests/unit_tests/multi_gpu/CMakeLists.txt index 80476e75e49..5fb79c766cd 100644 --- a/cpp/tests/unit_tests/multi_gpu/CMakeLists.txt +++ b/cpp/tests/unit_tests/multi_gpu/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_subdirectory(kernels) diff --git a/cpp/tests/unit_tests/multi_gpu/cacheTransceiverTest.cpp b/cpp/tests/unit_tests/multi_gpu/cacheTransceiverTest.cpp index 4796fed2c70..9f60e539d1c 100644 --- a/cpp/tests/unit_tests/multi_gpu/cacheTransceiverTest.cpp +++ b/cpp/tests/unit_tests/multi_gpu/cacheTransceiverTest.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #define UCX_WRAPPER_LIB_NAME "tensorrt_llm_ucx_wrapper" diff --git a/cpp/tests/unit_tests/multi_gpu/kernels/CMakeLists.txt b/cpp/tests/unit_tests/multi_gpu/kernels/CMakeLists.txt index dd7bca803a8..db7554f4995 100644 --- a/cpp/tests/unit_tests/multi_gpu/kernels/CMakeLists.txt +++ b/cpp/tests/unit_tests/multi_gpu/kernels/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. if(NOT ENABLE_MULTI_DEVICE EQUAL 0) add_gtest(allReduceKernelTest allReduce/allReduceKernelTest.cu) diff --git a/cpp/tests/unit_tests/runtime/CMakeLists.txt b/cpp/tests/unit_tests/runtime/CMakeLists.txt index 08284d979c4..90cb84ad7f0 100644 --- a/cpp/tests/unit_tests/runtime/CMakeLists.txt +++ b/cpp/tests/unit_tests/runtime/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(bufferManagerTest bufferManagerTest.cpp) add_gtest(cudaMemPoolTest cudaMemPoolTest.cpp) diff --git a/cpp/tests/unit_tests/thop/CMakeLists.txt b/cpp/tests/unit_tests/thop/CMakeLists.txt index c19b51b305b..67b02d325be 100644 --- a/cpp/tests/unit_tests/thop/CMakeLists.txt +++ b/cpp/tests/unit_tests/thop/CMakeLists.txt @@ -1,13 +1,17 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. if(${BUILD_PYT}) add_gtest(thUtilsTest thUtilsTest.cpp) diff --git a/cpp/tests/unit_tests/utils/CMakeLists.txt b/cpp/tests/unit_tests/utils/CMakeLists.txt index 4280c5f76fa..2d7e9145c81 100644 --- a/cpp/tests/unit_tests/utils/CMakeLists.txt +++ b/cpp/tests/unit_tests/utils/CMakeLists.txt @@ -1,12 +1,16 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & -# AFFILIATES. All rights reserved. SPDX-License-Identifier: NVIDIA TensorRT -# Source Code License Agreement +# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & +# AFFILIATES. All rights reserved. SPDX-License-Identifier: Apache-2.0 # -# NVIDIA CORPORATION, its affiliates and licensors retain all intellectual -# property and proprietary rights in and to this material, related documentation -# and any modifications thereto. Any use, reproduction, disclosure or -# distribution of this material and related documentation without an express -# license agreement from NVIDIA CORPORATION or its affiliates is strictly -# prohibited. +# 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. add_gtest(testUtilsTest utilsTest.cpp) diff --git a/cpp/tests/utils/common.cpp b/cpp/tests/utils/common.cpp index f2def0d78db..5640cef7b49 100644 --- a/cpp/tests/utils/common.cpp +++ b/cpp/tests/utils/common.cpp @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #include "common.h" diff --git a/cpp/tests/utils/common.h b/cpp/tests/utils/common.h index 179ff73add0..f7b73a9acea 100644 --- a/cpp/tests/utils/common.h +++ b/cpp/tests/utils/common.h @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved. - * SPDX-License-Identifier: NVIDIA TensorRT Source Code License Agreement + * SPDX-FileCopyrightText: Copyright (c) 2024-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 * - * NVIDIA CORPORATION, its affiliates and licensors retain all intellectual - * property and proprietary rights in and to this material, related - * documentation and any modifications thereto. Any use, reproduction, - * disclosure or distribution of this material and related documentation - * without an express license agreement from NVIDIA CORPORATION or - * its affiliates is strictly prohibited. + * 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. */ #pragma once From 72752b419a925475c7bcd7592acf99c743a4b754 Mon Sep 17 00:00:00 2001 From: Kanghwan Jang <861393+karljang@users.noreply.github.com> Date: Thu, 30 Oct 2025 10:37:04 -0700 Subject: [PATCH 2/2] Remove old license Signed-off-by: Kanghwan Jang <861393+karljang@users.noreply.github.com> --- ... TensorRT Source Code License Agreement.pdf | Bin 184745 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 cpp/kernels/fmha_v2/NVIDIA TensorRT Source Code License Agreement.pdf diff --git a/cpp/kernels/fmha_v2/NVIDIA TensorRT Source Code License Agreement.pdf b/cpp/kernels/fmha_v2/NVIDIA TensorRT Source Code License Agreement.pdf deleted file mode 100644 index dd2ba2115e371de2f9d7302f5550b30b0f139f3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184745 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
  • 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�V_cSwDa3?~lT`Se^$1sf+Av#VQ~! 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 &Uo#W`W^Kjgif`?g+rL&`57V$ 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