2

QtをCUDAと統合しようとしています。私はUbuntu12.04に取り組んでいます。私はすでにCUDAとQtをインストールしています。

QTクリエーターとCudaをセットアップしようとしたときに、「リンクが行われていないため、リンカー入力ファイルは使用されていません」という手順に従いました。

ただし、それでもエラーが発生します。

これが私がそれをした方法です。

ホームディレクトリに「CUDA2」という空のQtプロジェクトを作成しました。

以下のファイルを追加しました

cuda_interface.cu

// CUDA-C includes
#include <cuda.h>


extern "C"
void runCudaPart();

// Main cuda function

void runCudaPart() {

// all your cuda code here *smile*

}

main.cpp

#include <QtCore/QCoreApplication>

extern "C"
void runCudaPart();

int main(int argc, char *argv[]) {

    QCoreApplication a(argc, argv);

    runCudaPart();

    return a.exec();

}

.proファイルに次の行を追加しました

QT += core
QT -= gui

TARGET = cuda2
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
# Source files for C/C++ compiler
SOURCES += main.cpp
# project build directories
DESTDIR = $$system(pwd)
OBJECTS_DIR = $$DESTDIR/Obj
# and C/C++ flags
QMAKE_CFLAGS_RELEASE =-O3
QMAKE_CXXFLAGS_RELEASE =-O3
# cuda source
CUDA_SOURCES += cuda_interface.cu
# Path to cuda toolkit install
CUDA_DIR = /usr/local/cuda
INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib
# GPU architecture
CUDA_ARCH = sm_20
# NVCC flags
NVCCFLAGS = --compiler-options -fno-strict-aliasing -use_fast_math --ptxas-options=-v
# Path to libraries
LIBS += -lcudart -lcuda
# join the includes in a line
CUDA_INC = $$join(INCLUDEPATH,' -I','-I',' ')
cuda.commands = $$CUDA_DIR/bin/nvcc -m64 -O3 -arch=$$CUDA_ARCH -c $$NVCCFLAGS $$CUDA_INC $$LIBS ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT}
cuda.dependcy_type = TYPE_C
cuda.depend_command = $$CUDA_DIR/bin/nvcc -O3 -M $$CUDA_INC $$NVCCFLAGS      ${QMAKE_FILE_NAME}

cuda.input = CUDA_SOURCES
cuda.output = ${OBJECTS_DIR}${QMAKE_FILE_BASE}_cuda.o
# Tell Qt that we want add more stuff to the Makefile
QMAKE_EXTRA_COMPILERS += cuda

qmakeを実行してmakefileを生成しました。「ビルド」をクリックすると、このエラーが発生します-

13:33:35: Running build steps for project CUDA2...
13:33:35: Configuration unchanged, skipping qmake step.
13:33:35: Starting: "/usr/bin/make" -w
make: Entering directory `/home/alex/CUDA2'
Makefile:541: warning: overriding commands for target `Obj/main.o'
Makefile:538: warning: ignoring old commands for target `Obj/main.o'
/usr/local/cuda/bin/nvcc -m64 -O3 -arch=sm_20 -c --compiler-options -fno-strict-aliasing     -use_fast_math --ptxas-options=-v -I/usr/local/cuda/include -lcudart -lcuda    cuda_interface.cu -o Obj/cuda_interface_cuda.o
ptxas info    : Compiling entry function '__cuda_dummy_entry__' for 'sm_20'
ptxas info    : Used 2 registers, 32 bytes cmem[0]
g++ -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB -      DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -  I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/main.o main.cpp
gcc -c -pipe -O3 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_CORE_LIB -   DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -   I/usr/include/qt4 -I/usr/local/cuda/include -I. -o Obj/cuda_interface.o cuda_interface.cu
gcc: warning: cuda_interface.cu: linker input file unused because linking not done
g++ -Wl,-O1 -o cuda2 Obj/cuda_interface_cuda.o Obj/main.o Obj/main.o   Obj/cuda_interface.o    -L/usr/local/cuda/lib -L/usr/lib/x86_64-linux-gnu -lcudart -lcuda -  lQtCore -lpthread 
g++: error: Obj/cuda_interface.o: No such file or directory
make: *** [cuda2] Error 1
make: Leaving directory `/home/alex/CUDA2'
13:33:36: The process "/usr/bin/make" exited with code 2.
Error while building project CUDA2 (target: Desktop) 
When executing build step 'Make'

.proファイルがLinuxで動作するかどうかはわかりません。OSX用に作成されたようです。また、CUDA_ARCH=sm_20の行が正しいかどうかもわかりません。GPUアーキテクチャを見つける方法はありますか?NVIDIA QuadroFX380Mを使用しています

私は何が間違っているのですか?

ありがとう!

4

2 に答える 2

3

コメントに基づいて、.proファイルにいくつかの「よくある間違い」がありました。

まず、CUDAツールキットは32ビットと64ビットのライブラリディレクトリを分離しています。したがって、QMAKE_LIBDIRを次のように調整する必要があります。

QMAKE_LIBDIR += $$CUDA_DIR/lib64 # for 64bits operating system

また

QMAKE_LIBDIR += $$CUDA_DIR/lib # for 32bits operating system

.cuファイルはg++でコンパイルされていないため、.proファイルにSOURCESとして含めないでください。あなたの質問の.proファイルはこのケースを示していませんが、.cuファイルがQtのプロジェクトにあったとコメントしました。それらを削除してください。

最後に、すべての変更が有効になるようにするには、QTCreatorIDEメニューで次の手順を実行します。

  1. ビルド->プロジェクト#をクリーンアップして古いものをクリーンアップします
  2. ビルド->qmake#を実行して、.proの変更を取得します
  3. ビルド->ビルドプロジェクト#明らか

PS:@alandがコメントしたように、GPUデバイスの計算能力は1.2なので、CUDA_ARCH=sm_12を調整します。

于 2012-05-28T15:54:37.867 に答える
0
  1. これが問題です:

    g ++:エラー:Obj / cuda_interface.o:そのようなファイルまたはディレクトリはありません

  2. すべてのCUDAソースとライブラリを削除し、すべてが完全にクリーンであることを確認して、最初から再インストールします。

  3. ここに良いガイドがあります:

    http://laurencedawson.com/ubuntu-11.10-and-cuda-4.1

    <=すでにUbuntuとNVidiaドライバーがインストールされていると仮定して、CUDAツールキットとソースを再インストールして再構築します。

  4. Qtを忘れて、動作するまでグラフィカルIDEを忘れてください。

    コマンドラインからCUDAを再インストールして再構築してください。

  5. QtとIDEに戻る前に、コマンドラインから「deviceQuery」を実行できることを確認してください。

別の良いリソース:

http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_C_Getting_Started_Linux.pdf

于 2012-05-27T18:11:55.927 に答える