Ubuntu12的Qt5.4怎么链接curses库

Ubuntu12的Qt5.4怎么链接curses库,第1张

在英伟达的官网上下载对应系统版本的cuda5.5工具包,我的笔记本是32位的,下载的包是cuda_5.5.22_linux_32.run,当然下载deb包也可以,deb包可双击安装。推荐使用run包。

检查自己的系统是否符合安装条件,这一点很重要,我开始没有检测GCC,导致后面几次安装失败。命令$lspci | grep -i nvidia ,检测电脑是否安装NVIDIA显卡,命令$gcc --version,检测GCC版本,注意:CUDA5.5只支持GCC4.6版本,如果显示的不是下图所示,则需要重新将GCC链接。同时安装头文件和编译环境$sudo apt-get install linux-headers-$(uname -r) build-essential

gcc版本是4.6的跳过此步。如果gcc版本不是4.6的,则需要将GCC重新链接,在目录/usr/bin下,只需两个命令即可完成重新链接。

$sudo mv gcc gcc.bak

$sudo ln -s gcc-4.6 gcc

删除之前的Ubuntu nvidia驱动包,$sudo apt-get –purge remove nvidia*,并将开源驱动nouveau屏蔽掉,使用命令$sudo vim /etc/modprobe.d/blacklist.conf,添加blacklist vga16fb blacklist nouveau blacklist rivafb blacklist nvidiafb blacklist rivatv。

关闭图形环境,$sudo stop lightdm,按Ctrl+Alt+F1,打开一个终端,登录。进入下载的Ubuntu nvidia驱动安装文件所在目录,$sudo sh ./cuda_5.5.22_linux_32.run命令进行安装。如果遇到failed,不用着急,打开安装log,排查问题,warning不用管,看ERROR。

安装完成后,需要重启。此时电脑清晰多了,说明安装成功。 从事GPU开发的我们还需要装上cuda和openCL库的支持:$sudo apt-get install nvidia-current-dev。

在已有工程上右键单击,选择添加已有项。

2.添加编译规则。右键单击工程文件,选择自定义生成规则,在d出的对话框中选择CUDA Build Rule x.x。

3.修改.cu文件的编译器。右键单击.cu文件,单击属性,修改编译规则,选择刚才添加的CUDA编译器。

4.添加包含目录。在项目属性-》C++-常规-附加包含目录中添加CUDA SDK的目录。例如"C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 3.2\C\common\inc""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.0\include"

5.添加.lib文件。在链接器-》输入中添加cudart.lib cutil32D.lib

6.修改代码生成为多线程(/MT)方式。

7.Done.

以上是工程配置。

除此之外,还要把调用cuda代码的c++函数在.cu文件中用extern "C" 包含起来。

有时候,我们需要在比较大的项目中调用CUDA,这就涉及到MFC+CUDA的环境配置问题,以矩阵相乘为例,在MFC中调用CUDA程序。我们参考罗振东iylzd@163.com(国防科学技术大学计算机学院)的方法。

环境: Windows 7 SP1

Microsoft Visual Studio 2010

CUDA 5.0

步骤:

1.首先建立一个空的名叫Matrix Multiplication_KahanMFC的“FCM应用程序”项目:

点击“确定”,这时d出如下窗口

我们需要对默认项目进行一些修改,点击“下一步”,我们设置一个空的MFC项目,选择“单个文档”和“MFC标准”:

点击“完成”。

2.创建CUDA的调用接口函数及其头文件

(1)头文件

“添加”-->“新建项”-->“Visual C++”-->“头文件(.h)”-->“名称”-->“CUDA_Transfer.h” -->“添加”,如下图:

在CUDA_Transfer.h中添加如下代码:

//CUDA_Transfer.h

#include

#include "math.h"

using namespace std

int run_cuda(float* GPU, float* CPU)

如下图所示:

(2)函数

按照和增加头文件相似的方法,添加函数。“添加”-->“新建项”-->“Visual C++”-->“C++文件(.cpp)” -->“名称”-->“CUDA_Transfer.cpp” -->“添加”,如下图:

在CUDA_Transfer.cpp中添加如下代码:

//CUDA_Transfer.cpp

#include "CUDA_Transfer.h"

#include "stdafx.h"

extern "C" int runtest(float* GPU, float* CPU)

int run_cuda(float* GPU, float* CPU)

{

runtest(GPU,CPU)

return 0

}

如下图所示:

需要注意的是在MFC的文件中是不能包含(include).cu文件的,会报错,所以我们使用extern "C"的方式来实现函数的调用。

3. 创建存放cuda 代码的筛选器,名为CUDA

“添加”-->“新建筛选器”,重命名为CUDA

4. 在筛选器CUDA中创建一个CUDA源代码文件,kernel.cu。

我们直接把已经写好的矩阵相乘的程序kernel.cu复制到项目目录下,添加到CUDA筛选器中去。

添加”-->“现有项”-->“kernel.cu”-->“添加”:

把kernel.cu的int main()函数改为extern "C" int runtest(float* GPU, float* CPU),两个参数用来获得GPU和CPU计算所使用的时间,单位为毫秒。

5. 右击项目-->“生成自定义”:

在d出的窗口中勾选CUDA 5.0(.target,.props)。如果使用其他版本的CUDA,就勾选对应的版本:

点击“确定”。

6. 修改 kernel.cu的编译链接设置

在解决方案资源管理器中右击kernel.cu文件-->“属性”,在d出窗口中-->“常规”-->“项类型”的下拉列表中选择

点击“应用”后,“常规”下方会出现一个“CUDA C/C++”的设置,没有特殊需求,不需要修改,点击“确定”。

7.修改工程设置。

工程设置需要修改“链接器”-->“输入”-->“附加依赖项”和“生成事件”-->“预先生成事件”-->“命令行”。需要设置的参数比较多,我们采用比较简单的方法。

我们新建一个空的CUDA项目,在这个空CUDA项目的项目属性中找到“链接器”-->“输入”-->“附加依赖项”,把“附加依赖项”中所包含的项复制到我们的MFC项目中:

按照同样的方法,设置“生成事件”-->“预先生成事件”-->“命令行”:

设置完成后,点击“确定”。

8.修改MFC文件,完成调用。

我们需要在MFC中调用CUDA程序,显示出GPU和CPU计算两个1024*1024矩阵相乘所消耗的时间。

在Matrix Multiplication_KahanMFCView.cpp中包含(include)"CUDA_Transfer.h"

文件;在CMatrixMultiplication_KahanMFCView::OnDraw(CDC* pDC)中添加如下代码:

float GPU

float CPU

run_cuda(&GPU, &CPU)

CString strGPU,strCPU

strGPU.Format(_T("GPU:%f \n"),GPU)

strCPU.Format(_T("CPU:%f \n"),CPU)

pDC->TextOut(0,0,strGPU)

pDC->TextOut(0,30,strCPU)

如图所示:

然后重新生成解决方案,运行。

计算要花费一些时间,需要等待,测试的时候可以把矩阵大小改小一些。因为把程序加到了OnDraw中,所以每当刷新窗口时候(例如调整窗口大小时),都会调用。由于计算耗时比较长,窗口看起来会像无响应一样,等计算完成就好了。

运行的结果如下:

在矩阵比较大的情况下,GPU的加速效果明显,GPU耗时只需要620ms,而CPU需要23438ms,要花费将近40倍的时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7927352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存