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

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

1.main.cpp

 #include "mainwindow.h"
#include <QApplication> int main(int argc, char *argv[])
{
printf("main1 \n"); QApplication a(argc, argv);
MainWindow w;
w.show(); printf("main2 \n");
return a.exec();
}

2.mainwindow.cpp

 #include "ui_mainwindow.h"
#include "binlinearinterpolationcuda.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
printf("MainWindow \n"); BinlinearInterpolation();//cuda代码的入口
} MainWindow::~MainWindow()
{
delete ui;
}

3.binlinearinterpolationcuda.cu

 #include "binlinearinterpolationcuda.h"

 __global__ void Binlinear1_kernel(float *M,float *N,int *x,int *width1);
__global__ void Binlinear2_kernel(float *N,float *V,int *y,int *width1);
void BinlinearInterpolation(){
/****/
Binlinear1_kernel<<<gridDim,blockDim>>>(M,N,x,width1);
Binlinear2_kernel<<<gridDim1,blockDim1>>>(N,V,y,width1);
/***/ }

4.binlinearinterpolationcuda.h

 #ifndef BINLINEARINTERPOLATIONCUDA_H
#define BINLINEARINTERPOLATIONCUDA_H
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include "malloc.h"
#define WIDTH 11 #define HEIGHT 10
#define X_INTER 3
#define Y_INTER 3
#define BLOCK_SIZE 8 void BinlinearInterpolation();
#endif // BINLINEARINTERPOLATIONCUDA_H

5.mainwindow.h

 #ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); void creatMenu(); private:
Ui::MainWindow *ui; }; #endif // MAINWINDOW_H

6.pro文件的配置

 ######################################################################
# Automatically generated by qmake (2.01a) Thu Nov 2 11:20:26 2017
###################################################################### TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += . \
/usr/local/include \
/usr/include QT += core gui
CONFIG += debug HEADERS += mainwindow.h \
binlinearinterpolationcuda.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp
LIBS += -L"/usr/local/lib" \
-L"/usr/local/cuda/lib64" \
-lcudart \
-lcufft DEPENDPATH += . OTHER_FILES += binlinearinterpolationcuda.cu CUDA_SOURCES += binlinearinterpolationcuda.cu CUDA_SDK = "/usr/local/cuda" # Path to cuda SDK install
CUDA_DIR = "/usr/local/cuda" # Path to cuda toolkit install
SYSTEM_NAME = linux # Depending on your system either 'Win32', 'x64', or 'Win64'
SYSTEM_TYPE = 64 # '32' or '64', depending on your system
CUDA_ARCH = sm_21 # Type of CUDA architecture, for example 'compute_10', 'compute_11', 'sm_10'
NVCC_OPTIONS = --use_fast_math INCLUDEPATH += $$CUDA_DIR/include
QMAKE_LIBDIR += $$CUDA_DIR/lib64/ CUDA_OBJECTS_DIR = ./ CUDA_LIBS = cudart cufft
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
NVCC_LIBS = $$join(CUDA_LIBS,' -l','-l', '') CONFIG(debug, debug|release) {
# Debug mode
cuda_d.input = CUDA_SOURCES
cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
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}
cuda_d.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
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}
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda
}

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

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

8.Makefile文件

 #############################################################################
# Makefile for building: qtcuda
# Generated by qmake (2.01a) (Qt 4.8.1) on: Thu Nov 2 19:39:13 2017
# Project: qtcuda.pro
# Template: app
# Command: /usr/local/Trolltech/Qt-4.8.1/bin/qmake -o Makefile qtcuda.pro
############################################################################# ####### Compiler, tools and options CC = gcc
CXX = g++
DEFINES = -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
CFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
CXXFLAGS = -m64 -pipe -g -Wall -W -D_REENTRANT $(DEFINES)
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.
LINK = g++
LFLAGS = -m64 -Wl,-rpath,/usr/local/Trolltech/Qt-4.8.1/lib
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
AR = ar cqs
RANLIB =
QMAKE = /usr/local/Trolltech/Qt-4.8.1/bin/qmake
TAR = tar -cf
COMPRESS = gzip -9f
COPY = cp -f
SED = sed
COPY_FILE = $(COPY)
COPY_DIR = $(COPY) -r
STRIP = strip
INSTALL_FILE = install -m 644 -p
INSTALL_DIR = $(COPY_DIR)
INSTALL_PROGRAM = install -m 755 -p
DEL_FILE = rm -f
SYMLINK = ln -f -s
DEL_DIR = rmdir
MOVE = mv -f
CHK_DIR_EXISTS= test -d
MKDIR = mkdir -p ####### Output directory OBJECTS_DIR = ./ ####### Files SOURCES = main.cpp \
mainwindow.cpp moc_mainwindow.cpp
OBJECTS = binlinearinterpolationcuda_cuda.o \
main.o \
mainwindow.o \
moc_mainwindow.o
DIST = /usr/local/Trolltech/Qt-4.8.1/mkspecs/common/unix.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf \
qtcuda.pro
QMAKE_TARGET = qtcuda
DESTDIR =
TARGET = qtcuda first: all
####### Implicit rules .SUFFIXES: .o .c .cpp .cc .cxx .C .cpp.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cc.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .cxx.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .C.o:
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<" .c.o:
$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<" ####### Build rules all: Makefile $(TARGET) $(TARGET): ui_mainwindow.h $(OBJECTS)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
{ 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 || true 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 \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf \
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf \
/usr/local/Trolltech/Qt-4.8.1/lib/libQtGui.prl \
/usr/local/Trolltech/Qt-4.8.1/lib/libQtCore.prl
$(QMAKE) -o Makefile qtcuda.pro
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/unix.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/linux.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/gcc-base-unix.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-base.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/common/g++-unix.conf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/qconfig.pri:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/modules/qt_webkit_version.pri:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_functions.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt_config.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/exclusive_builds.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_pre.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/debug.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/default_post.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/gdb_dwarf_index.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/warn_on.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/qt.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/unix/thread.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/moc.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/resources.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/uic.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/yacc.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/lex.prf:
/usr/local/Trolltech/Qt-4.8.1/mkspecs/features/include_source_dir.prf:
/usr/local/Trolltech/Qt-4.8.1/lib/libQtGui.prl:
/usr/local/Trolltech/Qt-4.8.1/lib/libQtCore.prl:
qmake: FORCE
@$(QMAKE) -o Makefile qtcuda.pro dist:
@$(CHK_DIR_EXISTS) .tmp/qtcuda1.0.0 || $(MKDIR) .tmp/qtcuda1.0.0
$(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.0 clean:compiler_clean
-$(DEL_FILE) $(OBJECTS)
-$(DEL_FILE) *~ core *.core ####### Sub-libraries distclean: clean
-$(DEL_FILE) $(TARGET)
-$(DEL_FILE) Makefile check: first mocclean: compiler_moc_header_clean compiler_moc_source_clean mocables: compiler_moc_header_make_all compiler_moc_source_make_all compiler_cuda_d_make_all: binlinearinterpolationcuda_cuda.o
compiler_cuda_d_clean:
-$(DEL_FILE) binlinearinterpolationcuda_cuda.o
binlinearinterpolationcuda_cuda.o: binlinearinterpolationcuda.h \
binlinearinterpolationcuda.cu
/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.cu compiler_moc_header_make_all: moc_mainwindow.cpp
compiler_moc_header_clean:
-$(DEL_FILE) moc_mainwindow.cpp
moc_mainwindow.cpp: mainwindow.h
/usr/local/Trolltech/Qt-4.8.1/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp compiler_rcc_make_all:
compiler_rcc_clean:
compiler_image_collection_make_all: qmake_image_collection.cpp
compiler_image_collection_clean:
-$(DEL_FILE) qmake_image_collection.cpp
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all: ui_mainwindow.h
compiler_uic_clean:
-$(DEL_FILE) ui_mainwindow.h
ui_mainwindow.h: mainwindow.ui
/usr/local/Trolltech/Qt-4.8.1/bin/uic mainwindow.ui -o ui_mainwindow.h compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
compiler_yacc_impl_make_all:
compiler_yacc_impl_clean:
compiler_lex_make_all:
compiler_lex_clean:
compiler_clean: compiler_cuda_d_clean compiler_moc_header_clean compiler_uic_clean ####### Compile main.o: main.cpp mainwindow.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp mainwindow.o: mainwindow.cpp mainwindow.h \
ui_mainwindow.h \
binlinearinterpolationcuda.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp moc_mainwindow.o: moc_mainwindow.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp ####### Install install: FORCE uninstall: FORCE FORCE:

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

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

最新文章

  1. .Net多文件同时上传(Jquery Uploadify)
  2. lufylegend游戏引擎
  3. Cocos2d-x 3.2 学习笔记(十二)TimberMan!疯狂伐木工!
  4. matlab演奏《卡农》
  5. ASP.Net软件工程师基础(二)
  6. JS 获取select(多选下拉)中所选值的示例代码
  7. POJ 1915 经典马步 双向bfs
  8. 简单实现contentOS下开机自动启动tomcat
  9. 无法将类型为“System.DBNull”的对象强制转换为类型“System.String”
  10. git在项目中的实际运用
  11. python 生成图形验证码
  12. PHP算法学习(3) 冒泡排序
  13. JavaScript装饰者模式
  14. 解决Windows下Tomcat控制台中文乱码
  15. 高性能缓存Caffeine
  16. mvc 之 配置EF+oralce
  17. idea Connection to SQL Server - 公网8 failed java
  18. SpringMVC系列(十四)Spring MVC的运行流程
  19. java面试②基础部分
  20. NGUI可展开列表的实现

热门文章

  1. hdu 4347 The Closest M Points(KD树)
  2. Android 设置ImageView宽度固定,其高度按比例缩放适应
  3. H3C ICMP
  4. HDU1358 Period 题解 KMP算法
  5. 2006年NOIP普及组复赛题解
  6. java 递归(Recursion)
  7. UVa1601 - The Morning after Halloween [单向bfs]
  8. Linux 基础(一)stat函数
  9. 【codeforces 749A】Bachgold Problem
  10. Linux 内核/sbin/hotplug 工具