博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux下Qt+CUDA调试并运行
阅读量:4310 次
发布时间:2019-06-06

本文共 16229 字,大约阅读时间需要 54 分钟。

Qt与CUDA相结合具体的操作主要修改qt项目中的配置文件pro。下面以测试的项目为例。

因为这是一个测试案例,代码很简单,下面将这几个文件的代码贴出来,方面后面对应pro文件和Makefile文件中的内容。

1.main.cpp

1 #include "mainwindow.h" 2 #include 
3 4 int main(int argc, char *argv[]) 5 { 6 printf("main1 \n"); 7 8 QApplication a(argc, argv); 9 MainWindow w;10 w.show();11 12 printf("main2 \n");13 return a.exec();14 }

2.mainwindow.cpp

1 #include "ui_mainwindow.h" 2 #include "binlinearinterpolationcuda.h" 3  4  5 MainWindow::MainWindow(QWidget *parent) : 6     QMainWindow(parent), 7     ui(new Ui::MainWindow) 8 { 9     ui->setupUi(this);10     printf("MainWindow \n");11 12     BinlinearInterpolation();//cuda代码的入口13 }14 15 MainWindow::~MainWindow()16 {17     delete ui;18 }

3.binlinearinterpolationcuda.cu

1 #include "binlinearinterpolationcuda.h" 2  3  4 __global__ void Binlinear1_kernel(float *M,float *N,int *x,int *width1); 5 __global__ void Binlinear2_kernel(float *N,float *V,int *y,int *width1); 6 void BinlinearInterpolation(){ 7 /****/ 8     Binlinear1_kernel<<
>>(M,N,x,width1); 9 Binlinear2_kernel<<
>>(N,V,y,width1);10 /***/11 12 }

4.binlinearinterpolationcuda.h

1 #ifndef BINLINEARINTERPOLATIONCUDA_H 2 #define BINLINEARINTERPOLATIONCUDA_H 3 #include "cuda_runtime.h" 4 #include "device_launch_parameters.h" 5 #include 
6 #include "malloc.h" 7 #define WIDTH 11 8 9 #define HEIGHT 1010 #define X_INTER 311 #define Y_INTER 312 #define BLOCK_SIZE 813 14 void BinlinearInterpolation();15 #endif // BINLINEARINTERPOLATIONCUDA_H

5.mainwindow.h

1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3  4 #include 
5 6 namespace Ui { 7 class MainWindow; 8 } 9 10 class MainWindow : public QMainWindow11 {12 Q_OBJECT13 14 public:15 explicit MainWindow(QWidget *parent = 0);16 ~MainWindow();17 18 void creatMenu();19 20 private:21 Ui::MainWindow *ui;22 23 24 };25 26 #endif // MAINWINDOW_H

6.pro文件的配置

1 ###################################################################### 2 # Automatically generated by qmake (2.01a) Thu Nov 2 11:20:26 2017 3 ###################################################################### 4  5 TEMPLATE = app 6 TARGET =  7 DEPENDPATH += . 8 INCLUDEPATH += . \ 9     /usr/local/include \10     /usr/include11 12 QT += core gui13 CONFIG += debug14 15 HEADERS += mainwindow.h \16     binlinearinterpolationcuda.h17 FORMS += mainwindow.ui18 SOURCES += main.cpp mainwindow.cpp19 LIBS += -L"/usr/local/lib" \20     -L"/usr/local/cuda/lib64" \21     -lcudart \22     -lcufft23 24 DEPENDPATH += .25 26 OTHER_FILES += binlinearinterpolationcuda.cu27 28 CUDA_SOURCES += binlinearinterpolationcuda.cu29 30 CUDA_SDK = "/usr/local/cuda"   # Path to cuda SDK install31 CUDA_DIR = "/usr/local/cuda"            # Path to cuda toolkit install32 SYSTEM_NAME = linux         # Depending on your system either 'Win32', 'x64', or 'Win64'33 SYSTEM_TYPE = 64            # '32' or '64', depending on your system34 CUDA_ARCH = sm_21           # Type of CUDA architecture, for example 'compute_10', 'compute_11', 'sm_10'35 NVCC_OPTIONS = --use_fast_math36 37 38 INCLUDEPATH += $$CUDA_DIR/include39 QMAKE_LIBDIR += $$CUDA_DIR/lib64/40 41 CUDA_OBJECTS_DIR = ./42 43 CUDA_LIBS = cudart cufft44 CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')45 NVCC_LIBS = $$join(CUDA_LIBS,' -l','-l', '')46 47 CONFIG(debug, debug|release) {48     # Debug mode49     cuda_d.input = CUDA_SOURCES50     cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o51     cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}52     cuda_d.dependency_type = TYPE_C53     QMAKE_EXTRA_COMPILERS += cuda_d54 }55 else {56     # Release mode57     cuda.input = CUDA_SOURCES58     cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o59     cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -O3 -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}60     cuda.dependency_type = TYPE_C61     QMAKE_EXTRA_COMPILERS += cuda62 }

pro文件的配置是参照http://blog.163.com/qimo601@126/blog/static/15822093201401305739673/中提到的方法。该方法非常适用,比其他需要修改Makefile文件的方法更加实用。

7.修改完pro文件后,就可以qmake->make->执行目标文件

8.Makefile文件

1 #############################################################################  2 # Makefile for building: qtcuda  3 # Generated by qmake (2.01a) (Qt 4.8.1) on: Thu Nov 2 19:39:13 2017  4 # Project:  qtcuda.pro  5 # Template: app  6 # Command: /usr/local/Trolltech/Qt-4.8.1/bin/qmake -o Makefile qtcuda.pro  7 #############################################################################  8   9 ####### Compiler, tools and options 10  11 CC            = gcc 12 CXX           = g++ 13 DEFINES       = -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED 14 CFLAGS        = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES) 15 CXXFLAGS      = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES) 16 INCPATH       = -I/usr/local/Trolltech/Qt-4.8.1/mkspecs/linux-g++-64 -I. -I/usr/local/Trolltech/Qt-4.8.1/include/QtCore -I/usr/local/Trolltech/Qt-4.8.1/include/QtGui -I/usr/local/Trolltech/Qt-4.8.1/include -I. -I/usr/local/include -I/usr/include -I/usr/local/cuda/include -I. -I. 17 LINK          = g++ 18 LFLAGS        = -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.1/lib 19 LIBS          = $(SUBLIBS)  -L/usr/local/cuda/lib64/ -L/usr/local/Trolltech/Qt-4.8.1/lib -L/usr/local/lib -L/usr/local/cuda/lib64 -lcudart -lcufft -lQtGui -L/usr/local/Trolltech/Qt-4.8.1/lib -L/usr/X11R6/lib64 -lQtCore -lpthread  20 AR            = ar cqs 21 RANLIB        =  22 QMAKE         = /usr/local/Trolltech/Qt-4.8.1/bin/qmake 23 TAR           = tar -cf 24 COMPRESS      = gzip -9f 25 COPY          = cp -f 26 SED           = sed 27 COPY_FILE     = $(COPY) 28 COPY_DIR      = $(COPY) -r 29 STRIP         = strip 30 INSTALL_FILE  = install -m 644 -p 31 INSTALL_DIR   = $(COPY_DIR) 32 INSTALL_PROGRAM = install -m 755 -p 33 DEL_FILE      = rm -f 34 SYMLINK       = ln -f -s 35 DEL_DIR       = rmdir 36 MOVE          = mv -f 37 CHK_DIR_EXISTS= test -d 38 MKDIR         = mkdir -p 39  40 ####### Output directory 41  42 OBJECTS_DIR   = ./ 43  44 ####### Files 45  46 SOURCES       = main.cpp \ 47         mainwindow.cpp moc_mainwindow.cpp 48 OBJECTS       = binlinearinterpolationcuda_cuda.o \ 49         main.o \ 50         mainwindow.o \ 51         moc_mainwindow.o 52 DIST          = /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/unix.conf \ 53         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf \ 54         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf \ 55         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf \ 56         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf \ 57         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf \ 58         /usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri \ 59         /usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri \ 60         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf \ 61         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf \ 62         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf \ 63         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf \ 64         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf \ 65         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf \ 66         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf \ 67         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf \ 68         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf \ 69         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf \ 70         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf \ 71         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf \ 72         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf \ 73         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf \ 74         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf \ 75         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf \ 76         qtcuda.pro 77 QMAKE_TARGET  = qtcuda 78 DESTDIR       =  79 TARGET        = qtcuda 80  81 first: all 82 ####### Implicit rules 83  84 .SUFFIXES: .o .c .cpp .cc .cxx .C 85  86 .cpp.o: 87     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" 88  89 .cc.o: 90     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" 91  92 .cxx.o: 93     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" 94  95 .C.o: 96     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" 97  98 .c.o: 99     $(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"100 101 ####### Build rules102 103 all: Makefile $(TARGET)104 105 $(TARGET): ui_mainwindow.h $(OBJECTS)  106     $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)107     { test -n "$(DESTDIR)" && DESTDIR="$(DESTDIR)" || DESTDIR=.; } && test $$(gdb --version | sed -e 's,[^0-9]\+\([0-9]\)\.\([0-9]\).*,\1\2,;q') -gt 72 && gdb --nx --batch --quiet -ex 'set confirm off' -ex "save gdb-index $$DESTDIR" -ex quit '$(TARGET)' && test -f $(TARGET).gdb-index && objcopy --add-section '.gdb_index=$(TARGET).gdb-index' --set-section-flags '.gdb_index=readonly' '$(TARGET)' '$(TARGET)' && rm -f $(TARGET).gdb-index || true108 109 Makefile: qtcuda.pro  /usr/local/Trolltech/Qt-4.8.1/mkspecs/linux-g++-64/qmake.conf /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/unix.conf \110         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf \111         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf \112         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf \113         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf \114         /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf \115         /usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri \116         /usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri \117         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf \118         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf \119         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf \120         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf \121         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf \122         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf \123         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf \124         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf \125         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf \126         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf \127         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf \128         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf \129         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf \130         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf \131         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf \132         /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf \133         /usr/local/Trolltech/Qt-4.8.1/lib/libQtGui.prl \134         /usr/local/Trolltech/Qt-4.8.1/lib/libQtCore.prl135     $(QMAKE) -o Makefile qtcuda.pro136 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/unix.conf:137 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf:138 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf:139 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf:140 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf:141 /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf:142 /usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri:143 /usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri:144 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf:145 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf:146 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf:147 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf:148 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf:149 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf:150 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf:151 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf:152 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf:153 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf:154 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf:155 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf:156 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf:157 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf:158 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf:159 /usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf:160 /usr/local/Trolltech/Qt-4.8.1/lib/libQtGui.prl:161 /usr/local/Trolltech/Qt-4.8.1/lib/libQtCore.prl:162 qmake:  FORCE163     @$(QMAKE) -o Makefile qtcuda.pro164 165 dist: 166     @$(CHK_DIR_EXISTS) .tmp/qtcuda1.0.0 || $(MKDIR) .tmp/qtcuda1.0.0 167     $(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/qtcuda1.0.0/ && $(COPY_FILE) --parents binlinearinterpolationcuda.cu .tmp/qtcuda1.0.0/ && $(COPY_FILE) --parents mainwindow.h binlinearinterpolationcuda.h .tmp/qtcuda1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp .tmp/qtcuda1.0.0/ && $(COPY_FILE) --parents mainwindow.ui .tmp/qtcuda1.0.0/ && (cd `dirname .tmp/qtcuda1.0.0` && $(TAR) qtcuda1.0.0.tar qtcuda1.0.0 && $(COMPRESS) qtcuda1.0.0.tar) && $(MOVE) `dirname .tmp/qtcuda1.0.0`/qtcuda1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/qtcuda1.0.0168 169 170 clean:compiler_clean 171     -$(DEL_FILE) $(OBJECTS)172     -$(DEL_FILE) *~ core *.core173 174 175 ####### Sub-libraries176 177 distclean: clean178     -$(DEL_FILE) $(TARGET) 179     -$(DEL_FILE) Makefile180 181 182 check: first183 184 mocclean: compiler_moc_header_clean compiler_moc_source_clean185 186 mocables: compiler_moc_header_make_all compiler_moc_source_make_all187 188 compiler_cuda_d_make_all: binlinearinterpolationcuda_cuda.o189 compiler_cuda_d_clean:190     -$(DEL_FILE) binlinearinterpolationcuda_cuda.o191 binlinearinterpolationcuda_cuda.o: binlinearinterpolationcuda.h \192         binlinearinterpolationcuda.cu193     /usr/local/cuda/bin/nvcc -D_DEBUG --use_fast_math -I"." -I"/usr/local/include" -I"/usr/include" -I"/usr/local/cuda/include" -lcudart -lcufft --machine 64 -arch=sm_21 -c -o binlinearinterpolationcuda_cuda.o binlinearinterpolationcuda.cu194 195 compiler_moc_header_make_all: moc_mainwindow.cpp196 compiler_moc_header_clean:197     -$(DEL_FILE) moc_mainwindow.cpp198 moc_mainwindow.cpp: mainwindow.h199     /usr/local/Trolltech/Qt-4.8.1/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp200 201 compiler_rcc_make_all:202 compiler_rcc_clean:203 compiler_image_collection_make_all: qmake_image_collection.cpp204 compiler_image_collection_clean:205     -$(DEL_FILE) qmake_image_collection.cpp206 compiler_moc_source_make_all:207 compiler_moc_source_clean:208 compiler_uic_make_all: ui_mainwindow.h209 compiler_uic_clean:210     -$(DEL_FILE) ui_mainwindow.h211 ui_mainwindow.h: mainwindow.ui212     /usr/local/Trolltech/Qt-4.8.1/bin/uic mainwindow.ui -o ui_mainwindow.h213 214 compiler_yacc_decl_make_all:215 compiler_yacc_decl_clean:216 compiler_yacc_impl_make_all:217 compiler_yacc_impl_clean:218 compiler_lex_make_all:219 compiler_lex_clean:220 compiler_clean: compiler_cuda_d_clean compiler_moc_header_clean compiler_uic_clean 221 222 ####### Compile223 224 main.o: main.cpp mainwindow.h225     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp226 227 mainwindow.o: mainwindow.cpp mainwindow.h \228         ui_mainwindow.h \229         binlinearinterpolationcuda.h230     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp231 232 moc_mainwindow.o: moc_mainwindow.cpp 233     $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp234 235 ####### Install236 237 install:   FORCE238 239 uninstall:   FORCE240 241 FORCE:

有兴趣的同学,可以根据pro文件中的内容都Makefile中的代码。

 9.有关pro文件的配置情况,可以参看“http://blog.csdn.net/liang19890820/article/details/51774724”

转载于:https://www.cnblogs.com/zhangjxblog/p/7774800.html

你可能感兴趣的文章
X-Forwarded-For伪造及防御
查看>>
android系统平台显示驱动开发简要:LCD驱动调试篇『四』
查看>>
Android 高仿微信头像截取 打造不一样的自定义控件
查看>>
Jenkins的初级应用(1)-Publish Over SSH
查看>>
利用正则表达式群发定制邮件
查看>>
【原】RDD专题
查看>>
第三周——构建一个简单的Linux系统MenuOS
查看>>
Docker 的两类存储资源 - 每天5分钟玩转 Docker 容器技术(38)
查看>>
Codeforces 257D
查看>>
常用的20个强大的 Sublime Text 插件
查看>>
ajaxfileupload.js在IE中的支持问题
查看>>
tensorflow学习之(十)使用卷积神经网络(CNN)分类手写数字0-9
查看>>
当document.write里含有script标签时
查看>>
工作中常见问题
查看>>
JAVA 从一个List里删除包含另一个List的数据
查看>>
外国的月亮比较圆吗?外籍团队工作有感
查看>>
CentOS 关闭烦人的屏保
查看>>
分布式系统事务一致性解决方案
查看>>
ShuffleNet总结
查看>>
前后台验证字符串长度
查看>>