2017-02-02 3 views
0

Я пытаюсь использовать __shfl_xor в своем ядре, но когда я пытаюсь его скомпилировать, я получаю ошибку «error: identifier» __shfl_xor «undefined». Я знаю, что вы должны установить флаг arch=compute_30,code=sm_30, чтобы использовать его, но я уже добавил, что в моем CMakeLists.txtИспользование __shfl_xor в моем ядре CUDA, но получение ошибки при компиляции

Вот мое ядро:

__global__ void dummy_kernel() 
{ 
    int x = 5; 
    int y = 10; 
    __shfl_xor(x, y); 
} 

Вот выход из компилятора:

/filepath/kernel_file.cu(13): error: identifier "__shfl_xor" is undefined 

Вот как выглядит мой CMakeLists.txt как:

cmake_minimum_required(VERSION 3.1) 

if(NOT CMAKE_BUILD_TYPE) 
    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) 
endif() 

find_package(CUDA REQUIRED) 

cuda_add_executable(CasHashing3D 
    MatchPairGPU.cu 
) 
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_30,code=sm_30") 
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -gencode arch=compute_35,code=sm_35") 
set_property(TARGET CasHashing3D PROPERTY CXX_STANDARD 11) 
set_property(TARGET CasHashing3D PROPERTY CXX_STANDARD_REQUIRED ON) 

configure_file(job.sh.in job.sh @ONLY) 

makefile, сгенерированный CMake, слишком велик, чтобы вставить в вопрос, так что вот a link к файлу.

+1

Как выглядит полный 'CUDA_NVCC_FLAGS'? Вы добавляете к ним, но, вероятно, у вас уже есть архитектура там, которая не поддерживает перетасовку. – tera

+0

@tera У меня есть Tesla K20Xm, который равен 3.5, поэтому все должно быть в порядке. 3 или выше. CMakeLists.txt устанавливает 'CUDA_NVCC_FLAGS' значение '-gencode arch = compute_30, code = sm_30'. – Rabee

+0

@talonmies Я отредактировал ответ, чтобы включить простое ядро, а также ошибку из компилятора. – Rabee

ответ

1

Как-то я изменил свой CMakeLists.txt на следующее, и это сработало, я понятия не имею, почему. Я уточню ответ, когда выясню, что я делаю неправильно.

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -lpthread") 
cmake_minimum_required(VERSION 3.2) 
project(CasHashing3D) 
find_package(CUDA REQUIRED) 
# Pass options to NVCC 
set(
    CUDA_NVCC_FLAGS 
    ${CUDA_NVCC_FLAGS}; 
    -O3 -gencode arch=compute_35,code=sm_35; 
    ) 

cuda_add_executable(CasHashing3D 
    Main.cc 
) 

set_property(TARGET CasHashing3D PROPERTY CXX_STANDARD 11) 
set_property(TARGET CasHashing3D PROPERTY CXX_STANDARD_REQUIRED ON) 
configure_file(job.sh.in job.sh @ONLY) 
Смежные вопросы