1

こんにちは、Ubuntu に linux64 用の nVidia OptiX SDK バージョン 3.0.0 をインストールしようとしています。

.run ファイルをダウンロードしました。実行が終了すると、 ~/NVIDIA-OptiX-SDK-3.0.0-linux64/ というフォルダーができました。

私のホームフォルダにあります。

プリコンパイルされたサンプルは正常に動作しますが、独自のコードをコンパイルしようとすると、コンパイラは .cu ファイルを CUDA ファイルとして処理し、それらを .cu.o にコンパイルしようとするようです。私のプログラムのエラーの出力の1つは次のとおりです。

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 という名前のサブフォルダーがあります。

何か案は?よろしく

4

1 に答える 1

1

出力のテキストから判断すると、CMake を使用してサンプルをビルドしているようです。ビルド システムは、PTX ファイルではなくオブジェクト ファイルをコンパイルしたいと考えているようです。表示されているエラー メッセージも、この症状を示しています。

CMake 内から CUDA コードをコンパイルするには、いくつかの方法があります。

CUDA ランタイムを使用している場合は、通常、次の操作を行います。

cuda_add_executable(myprogram main.cpp mycuda.cu myheader.h)

これにより、main.cpp.o と mycuda.cu.o の 2 つのオブジェクト ファイルで構成される myprogram という実行可能ファイルが作成されます。CUDA ランタイムは、cuda ファイル内のコードが CUDA ランタイム API に準拠していることを期待しています。

さらに、実行可能ファイルの代わりにライブラリをコンパイルする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_srcsPTX オプションを指定して呼び出します。参照用にここにも関数を含めました。

#########################################################
# 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()
于 2013-04-22T19:39:23.027 に答える