Я пытаюсь использовать __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 к файлу.
Как выглядит полный 'CUDA_NVCC_FLAGS'? Вы добавляете к ним, но, вероятно, у вас уже есть архитектура там, которая не поддерживает перетасовку. – tera
@tera У меня есть Tesla K20Xm, который равен 3.5, поэтому все должно быть в порядке. 3 или выше. CMakeLists.txt устанавливает 'CUDA_NVCC_FLAGS' значение '-gencode arch = compute_30, code = sm_30'. – Rabee
@talonmies Я отредактировал ответ, чтобы включить простое ядро, а также ошибку из компилятора. – Rabee