File size: 2,271 Bytes
38fb1f6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# SPDX-FileCopyrightText: Copyright (c) 2019-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: LicenseRef-NvidiaProprietary
#
# 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.

OUTNAME_RELEASE = sample_non_zero_plugin
OUTNAME_DEBUG   = sample_non_zero_plugin_debug
EXTRA_DIRECTORIES = ../common ../utils
SAMPLE_DIR_NAME = $(shell basename $(dir $(abspath $(firstword $(MAKEFILE_LIST)))))
MAKEFILE ?= ../Makefile.config

ifneq ($(CUDA_INSTALL_DIR), )
	CUDA_INST_DIR ?= $(CUDA_INSTALL_DIR)
endif
CUDA_INST_DIR ?= /usr/local/cuda
CUDA_VER := $(shell $(CUDA_INST_DIR)/bin/nvcc --version | grep "release" | sed 's/.*release //' | sed 's/,.*//')

define cuda-ge
    CUDA_VER_GE_$(1)_$(2) := 0
    ifeq ($$(lastword $$(sort $(3) $(1).$(2))), $(3))
        CUDA_VER_GE_$(1)_$(2) := 1
    endif

    CUDA_GE_$(1)_$(2) ?= $$(CUDA_VER_GE_$(1)_$(2))

endef

$(eval $(foreach minor,$(shell seq 0 9),$(call cuda-ge,11,$(minor),$(CUDA_VER))))
$(eval $(foreach minor,$(shell seq 0 9),$(call cuda-ge,12,$(minor),$(CUDA_VER))))
$(eval $(foreach minor,$(shell seq 0 9),$(call cuda-ge,13,$(minor),$(CUDA_VER))))

SAMPLE_SMS = 75
ifeq ($(CUDA_GE_11_0), 1)
    SAMPLE_SMS += 80
endif

ifeq ($(CUDA_GE_11_1), 1)
    SAMPLE_SMS += 86
endif

ifeq ($(CUDA_GE_11_4), 1)
    SAMPLE_SMS += 87
endif

ifeq ($(CUDA_GE_11_8), 1)
    SAMPLE_SMS += 89 90
endif

ifeq ($(CUDA_GE_12_8), 1)
    SAMPLE_SMS += 100 101 120
endif

# Non-hardware forward compatible SMs
NON_HFC_SMS := 89 90

ifeq ($(CUDA_GE_12_8), 1)
    NON_HFC_SMS += 100 101 120
endif

ifeq ($(GENCODES),)
    $(foreach sm,$(SAMPLE_SMS),$(eval GENCODES += -gencode arch=compute_$(sm),code=sm_$(sm)))
    HFC_SMS := $(filter-out $(NON_HFC_SMS),$(SAMPLE_SMS))
    # Generate PTX with the highest supported FC SM
    GEN_PTX_SM := $(lastword $(sort $(HFC_SMS)))
    GENCODES += -gencode arch=compute_$(GEN_PTX_SM),code=compute_$(GEN_PTX_SM)
endif

include $(MAKEFILE)