forked from heterodb/pg-strom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile.cuda
60 lines (55 loc) · 2.42 KB
/
Makefile.cuda
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
#
# Definitions for nvcc code build for PG-Strom
#
# standalone build?
ifeq ($(STROM_BUILD_ROOT),)
PG_CONFIG ?= pg_config
endif
#
# Header and Libraries of CUDA
#
CUDA_PATH_LIST := /usr/local/cuda /usr/local/cuda-*
CUDA_PATH := $(shell for x in $(CUDA_PATH_LIST); \
do test -e "$$x/include/cuda.h" && echo $$x; done | head -1)
CUDA_IPATH := $(CUDA_PATH)/include
CUDA_BPATH := $(CUDA_PATH)/bin
CUDA_LPATH := $(CUDA_PATH)/lib64
NVCC := $(CUDA_BPATH)/nvcc
NVCC_VERSION := $(shell $(NVCC) --version | grep ^Cuda | \
grep -o -E 'V[0-9\.]+$$' | \
sed -e 's/V//g' -e 's/\./ /g' | \
awk '{ print $$1 * 1000 + $$2 * 10; }')
# Max number of registers per GPU thread for PG-Strom modules
# (64k / 128 = up to 512 threads per SM)
MAXREGCOUNT := 128
__NUM_GPUS := $(shell ls -d /proc/driver/nvidia/gpus/*/information | wc -l)
ifeq ($(__NUM_GPUS),0)
__NVCC_TARGET := --gpu-architecture=compute_60 \
--gpu-code=sm_60,sm_61,sm_70,sm_75,sm_80,sm_86,sm_89,sm_90 \
--threads 8
else
__NVCC_TARGET := --gpu-architecture=native
endif
# flags to build GPU libraries
__NVCC_CFLAGS += -I $(shell $(PG_CONFIG) --includedir-server) \
--maxrregcount=$(MAXREGCOUNT) \
--source-in-ptx -lineinfo \
-DHAVE_FLOAT2 \
$(__NVCC_TARGET)
__NVCC_LDFLAGS += -Xnvlink --suppress-stack-size-warning \
$(__NVCC_TARGET)
# nvcc flags
NVCC_CFLAGS = $(__NVCC_CFLAGS) $(NVCC_FLAGS_CUSTOM) $(NVCC_CFLAGS_CUSTOM)
NVCC_LDFLAGS = $(__NVCC_LDFLAGS) $(NVCC_FLAGS_CUSTOM) $(NVCC_LDFLAGS_CUSTOM)
# PG-Strom GPU Code
__CUDA_CORE_FILES = xpu_common cuda_gpuscan cuda_gpujoin cuda_gpupreagg \
xpu_basetype xpu_numeric xpu_timelib xpu_textlib \
xpu_misclib xpu_jsonlib xpu_postgis
__CUDA_CORE_HEADERS = cuda_common.h xpu_common.h xpu_opcodes.h xpu_basetype.h \
xpu_numeric.h xpu_textlib.h xpu_timelib.h xpu_misclib.h \
xpu_jsonlib.h xpu_postgis.h
CUDA_OBJS = $(addsuffix .o, $(__CUDA_CORE_FILES) $(CUDA_CUSTOM_FILES))
CUDA_SRCS = $(addsuffix .cu,$(__CUDA_CORE_FILES) $(CUDA_CUSTOM_FILES))
CUDA_HEADERS = $(__CUDA_CORE_HEADERS) $(CUDA_CUSTOM_HEADERS)
CUDA_MD5SUM = $(shell cat $(CUDA_HEADERS) $(CUDA_SRCS) | md5sum | awk '{print $$1}')
CUDA_FATBIN = pgstrom-gpucode-V$(NVCC_VERSION)-$(CUDA_MD5SUM).fatbin