CUDAは主にUbuntu上で8.0ベースで開発している。でもメインはiMac/Marverickなので、時々XCode・CUDA7.5でやっている。下手なKernel関数を走らせるとシステムダウンするので怖い。
XCodeのデバッグ環境は使いやすいので、使いたいのだが、Kernel関数に別ファイルで定義されているクラスを使ったところ、
ptxas fatal : Unresolved extern function '_ZN15WorldControllerC1Ev'
とでてしまった。ぐぐってみるとこれは相対形式で.cuをコンパイルするためには、-dcオプションを使わないといけないらしい。そこで、ccmakeをつかって、その中の
CUDA_NVCC_FLAGS
に、-dcをいれてみた。すると今度は、
more than one compilation phase specified
と、またエラーになってしまった。そこで再び調査したところ、CMakeLists.txtに、
SET(CUDA_SEPARABLE_COMPILATION ON)
を追加してみたところ、うまくいった。
手書きでオプション全部つけてやればうまくいくのだが、cmakeの便利さは手放せない。でも時々こういったデフォルト以外の事をしようとすると、やもするとなかなか独力では解決しない。ほんとにグーグルさんは力になってくれるので感謝。いや、貴重な情報を描いてくれた人へこそ感謝、だな。
この後、リンク時にエラーが出た。
Unable to open output file '/Volumes/.../EXE_intermediate_link.o': 'Error opening output file
これは、Releaseとか、Debugとかの名前のフォルダーが存在しないため起きる。CMakeが提供するスクリプトではフォルダを自動的に作成してくれないらしい。しょうが無いので自分でフォルダを作成してオーケー。
0 件のコメント:
コメントを投稿