Установка Nvidia Optix SDK 3.0.0 Ubuntu 12.04
Привет, я пытаюсь установить nVidia OptiX SDK версии 3.0.0 для Linux на Ubuntu.
Я скачал файл.run. Когда выполнение было закончено, я получил папку ~/NVIDIA-OptiX-SDK-3.0.0-linux64/
Это в моей домашней папке.
Предварительно скомпилированные примеры работают нормально, но когда я пытаюсь скомпилировать свой собственный код, компилятор, похоже, обрабатывает файлы.cu как файлы CUDA и пытается скомпилировать их в.cu.o. Один из выводов ошибки моей программы был:
Building NVCC (Device) object CMakeFiles/RayTracerExec.dir/src/Tracy/ObjectLoader/optixcu/./RayTracerExec_generated_triangle_mesh_target.cu.o
Обычно файлы должны компилироваться в какие-то ptx файлы?
Ошибка следующая:
ptxas /tmp/tmpxft_00000eef_00000000-5_triangle_mesh_target.ptx, line 94; error : Label expected for argument 0 of instruction 'call'
ptxas /tmp/tmpxft_00000eef_00000000-5_triangle_mesh_target.ptx, line 94; error : Call target not recognized
ptxas /tmp/tmpxft_00000eef_00000000-5_triangle_mesh_target.ptx, line 94; error : Function '_rt_buffer_get_64' not declared in this scope
Не нахождение функции _rt_buffer_get_64
заставляет меня чувствовать, что что-то не установлено должным образом.
В этой папке находятся подпапки с именем doc include lib64 SDK SDK-precompiled-samples. Я скопировал содержимое include в / usr / local / include и содержимое lib64 в /usr/local/lib
Есть идеи? С уважением
1 ответ
Похоже, вы используете CMake для построения образца, исходя из текста в выводе. Похоже, что система сборки думает, что вы хотите скомпилировать объектные файлы вместо файлов PTX. Сообщения об ошибках, которые вы видите, также указывают на этот симптом.
Существует несколько методов компиляции кода CUDA из CMake.
Если вы используете среду выполнения CUDA, вы обычно делаете следующее:
cuda_add_executable(myprogram main.cpp mycuda.cu myheader.h)
Это создает исполняемый файл myprogram, который состоит из двух объектных файлов: main.cpp.o и mycuda.cu.o. Среда выполнения CUDA ожидает, что код в файле cuda будет соответствовать API среды выполнения CUDA.
В дополнение к cuda_add_executable
существует также cuda_add_library
который компилирует библиотеку вместо исполняемого файла. Оба этих макроса используют другой макрос cuda_wrap_srcs
это делает большую часть тяжелой работы, вплоть до генерации команд сборки для компиляции кода CUDA. Помимо прочего, у этого макроса есть аргумент для указания того, хотите ли вы использовать среду выполнения CUDA или нацелиться только на PTX (аргументы OBJ или PTX).
Чтобы компилировать шейдеры OptiX, необходимо настроить PTX. В нашем SDK, который мы отправляем, это выполняется через функции CMake, называемые OPTIX_add_sample_executable
который можно найти в <install>/SDK/CMakeLists.txt
, В основном то, что делает эта функция, это вызов cuda_wrap_srcs
с указанной опцией PTX. Я включил здесь функцию для справки.
#########################################################
# OPTIX_add_sample_executable
#
# Convenience function for adding samples to the code. You can copy the contents of this
# function into your individual project if you wish to customize the behavior. Note that
# in CMake, functions have their own scope, whereas macros use the scope of the caller.
function(OPTIX_add_sample_executable target_name)
# These calls will group PTX and CUDA files into their own directories in the Visual
# Studio projects.
source_group("PTX Files" REGULAR_EXPRESSION ".+\\.ptx$")
source_group("CUDA Files" REGULAR_EXPRESSION ".+\\.cu$")
# Separate the sources from the CMake and CUDA options fed to the macro. This code
# comes from the CUDA_COMPILE_PTX macro found in FindCUDA.cmake. We are copying the
# code here, so that we can use our own name for the target. target_name is used in the
# creation of the output file names, and we want this to be unique for each target in
# the SDK.
CUDA_GET_SOURCES_AND_OPTIONS(source_files cmake_options options ${ARGN})
# Create the rules to build the PTX from the CUDA files.
CUDA_WRAP_SRCS( ${target_name} PTX generated_files ${source_files} ${cmake_options}
OPTIONS ${options} )
# Here is where we create the rule to make the executable. We define a target name and
# list all the source files used to create the target. In addition we also pass along
# the cmake_options parsed out of the arguments.
add_executable(${target_name}
${source_files}
${generated_files}
${cmake_options}
)
# Most of the samples link against the sutil library and the optix library. Here is the
# rule that specifies this linkage.
target_link_libraries( ${target_name}
sutil
optix
${optix_rpath}
)
endfunction()