NVIDIA / nv-wavenet

Reference implementation of real-time autoregressive wavenet inference
BSD 3-Clause "New" or "Revised" License
735 stars 126 forks source link

Compilation error for target arch sm_52 #5

Closed sunilkgrao closed 6 years ago

sunilkgrao commented 6 years ago

I cannot seem to compile for target arch sm_52

It works if I specify sm_60 or sm_70.

Is there an issue with compiling for a gtx titan x (sm_52) or is this meant to be supported?

running 'make nv_wavenet_test' outputs the following:

`nvcc -arch=sm_30 -std=c++11 --use_fast_math -lineinfo -maxrregcount 512 nv_wavenet_test.cu matrix.cpp nv_wavenet_reference.cpp -o nv_wavenet_test nv_wavenet_util.cuh(89): error: more than one conversion function from "half" to a built-in type applies: function "half::operator float() const" function "half::operator short() const" function "half::operator unsigned short() const" function "half::operator int() const" function "half::operator unsigned int() const" function "half::operator long long() const" function "half::operator unsigned long long() const" function "half::operator __nv_bool() const"

nv_wavenet_util.cuh(89): error: more than one conversion function from "half" to a built-in type applies: function "half::operator float() const" function "half::operator short() const" function "half::operator unsigned short() const" function "half::operator int() const" function "half::operator unsigned int() const" function "half::operator long long() const" function "half::operator unsigned long long() const" function "half::operator __nv_bool() const"

2 errors detected in the compilation of "/tmp/tmpxft_000024ab_00000000-8_nv_wavenet_test.cpp1.ii". Makefile:70: recipe for target 'nv_wavenet_test' failed make: *** [nv_wavenet_test] Error 1 `

This is the makefile:

`NVCC = nvcc

ARCH=compute_52 -code=sm_52,compute_52

NVCC_FLAGS = -arch=$(ARCH) -std=c++11

nvcc_ARCH += -gencode=arch=compute_52,code=\"sm_52,compute_52\"

NVCC_FLAGS += $(nvcc_ARCH) -std=c++11

ARCH=sm_30# \ -gencode=arch=compute_30,code=sm_30 \ -gencode=arch=compute_50,code=sm_50 \ -gencode=arch=compute_52,code=sm_52 \ -gencode=arch=compute_60,code=sm_60 \ -gencode=arch=compute_61,code=sm_61 \ -gencode=arch=compute_62,code=sm_62 \ -gencode=arch=compute_70,code=sm_70 \ -gencode=arch=compute_70,code=compute_70

NVCC_FLAGS = -arch=$(ARCH) -std=c++11

NVCC_FLAGS += --use_fast_math

MAX_REGS = 512

HEADERS = nv_wavenet_util.cuh \ nv_wavenet_singleblock.cuh \ nv_wavenet_dualblock.cuh \ nv_wavenet_persistent.cuh \ nv_wavenet.cuh \ matrix_math.cuh \ softmax.cuh \ nv_wavenet_conversions.cuh

default: test

test : math_test nv_wavenet_test math_test nv_wavenet_test

nv_wavenet_perf : nv_wavenet_perf.cu $(HEADERS) $(NVCC) $(NVCC_FLAGS) -maxrregcount $(MAX_REGS) --ptxas-options=-v nv_wavenet_perf.cu -o nv_wavenet_perf

nv_wavenet_test : nv_wavenet_test.cu matrix.cpp matrix.h nv_wavenet_reference.cpp $(HEADERS) $(NVCC) $(NVCC_FLAGS) -lineinfo -maxrregcount $(MAX_REGS) nv_wavenet_test.cu matrix.cpp nv_wavenet_reference.cpp -o nv_wavenet_test

math_test : math_test.cu matrix_math.cuh matrix.cpp softmax.cuh $(NVCC) $(NVCC_FLAGS) math_test.cu matrix.cpp -lineinfo -o math_test

clean: rm nv_wavenet_perf nv_wavenet_test math_test `

BrianPharris commented 6 years ago

nv-wavenet requires sm_60 or later, since it relies on hardware support for half-precision math.

It should be possible to modify the code to use only floats so that it can compile for sm_52, but we do not have plans to support it in nv-wavenet.