⑴ cuda编程中如何把.cu文件编译成.so库文件 具体是什么命令 需要看什么资料 举个例子最好
不好意思,这个没有接触过。
⑵ linux下CUDA程序一般怎么编译啊
编译好的是什么类型的程序?c?还是java还是别的? 很多只能再命令行运行的文件必须在终端执行。 而且就算编译好了,编译好的可执行文件是没有可执行权限的。 需要手动添加才能运行~ 希望你说具体点最好有截图~
⑶ CUDA请教,本人初学CUDA程序,可以编译成功,但无法生成,总是显示以下错误。
第一种方案:在项目-属性-链接器- 命令行 加 /nodefaultlib:libcd
第二种方案:在项目-属性-链接器- 输入-忽略特定库加:LIBCD.lib
⑷ 如何ubuntu12/linux 安装CUDA5.5
在ubuntu12/linux安装CUDA5.5的步骤如下:
1、在英伟达的官网上下载对应系统版本的cuda5.5工具包,我的笔记本是32位的,下载的包是cuda_5.5.22_linux_32.run,当然下载deb包也可以,deb包可双击安装。推荐使用run包。
注意事项
ubuntu不需要重新编译内核,记得centos和red hat需要,命令也简单:$sudo dracut -v /boot/initramfs-$(uname -r).img $(uname -r)
⑸ 如何使用cudaMallocPitch和cudaMemcpy2D
有时候,我们需要在比较大的项目中调用CUDA,这就涉及到MFC+CUDA的环境配置问题,以矩阵相乘为例,在MFC中调用CUDA程序。我们参考罗振东[email protected](国防科学技术大学计算机学院)的方法。
环境: Windows 7 SP1
Microsoft Visual Studio 2010
CUDA 5.0
步骤:
1.首先建立一个空的名叫Matrix Multiplication_KahanMFC的“FCM应用程序”项目:
点击“确定”,这时弹出如下窗口
我们需要对默认项目进行一些修改,点击“下一步”,我们设置一个空的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. 右击项目-->“生成自定义”:
在弹出的窗口中勾选CUDA 5.0(.target,.props)。如果使用其他版本的CUDA,就勾选对应的版本:
点击“确定”。
6. 修改 kernel.cu的编译链接设置
在解决方案资源管理器中右击kernel.cu文件-->“属性”,在弹出窗口中-->“常规”-->“项类型”的下拉列表中选择
点击“应用”后,“常规”下方会出现一个“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倍的时间。
⑹ 编译cuda并运行cuda程序的命令是
在什么操作系统下啊。。。你问的是不是编译cu代码啊,因为CUDA不是开源的。
如果编译自己的代码,是nvcc
运行和执行其它可执行程序一样啊
⑺ ubuntu14.04 cuda 6.5 怎样配置
1. 预检查
按照参考链接1中所示,检查系统。
执行命令:
:~$ lspci | grep -i nvidia
03:00.0 3D controller: NVIDIA Corporation GK110GL [Tesla K20c] (rev a1)
04:00.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
04:00.1 Audio device: NVIDIA Corporation GK106 HDMI Audio Controller (rev a1)
发现有K20和K4000两块GPU,还有一块Audio的应该是声卡。
然后,执行命令检查系统版本:
~$ uname -m && cat /etc/*release
x86_64
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"
NAME="Ubuntu"
VERSION="14.04.1 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 14.04.1 LTS"
VERSION_ID="14.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
可以看到,机器是ubuntu14.04的版本。
然后,使用gcc --version检查gcc版本是否符合链接1中的要求:
~$ gcc --version
gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for ing conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
检查完毕,就去nvidia的官网(参考链接3)上下载驱动,为下载的是ubuntu14.04的deb包。
2. 安装
Deb包安装较为简单,但是安装过程中提示不稳定,不过用着也没啥出错的地方。
先按照参考链接2安装必要的库。
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev
还是按照官网上的流程来。
$ sudo dpkg -i cuda-repo-<distro>_<version>_<architecture>.deb
$ sudo apt-get update
$ sudo apt-get install cuda
可能需要下载较长时间,但是没关系,放在那等着就是。
没啥问题就算安装好了。
安装过程中提示:
*** Please reboot your computer and verify that the nvidia graphics driver is loaded. ***
*** If the driver fails to load, please use the NVIDIA graphics driver .run installer ***
*** to get into a stable state.
我没管,提示使用.run安装比较稳定,但我现在用着没问题。
3. 配置环境
我的系统是64位的,因此配置环境时在.bashrc中加入
$ export PATH=/usr/local/cuda-6.5/bin:$PATH
$ export LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64:$LD_LIBRARY_PATH
配置完环境后,执行命令
~$ source .bashrc
使其立刻生效。
4. 安装sample
配置好环境后,可以执行如下命令:
$ cuda-install-samples-6.5.sh <dir>
这样,就将cuda的sample拷贝到dir文件夹下了。该命令只是一个拷贝操作。
然后进入该文件夹,执行make命令进行编译,编译时间较长,需要等待。
5. 验证安装是否成功
5.1. 驱动验证
首先,验证nvidia的驱动是否安装成功。
~$ cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Mole 340.29 Thu Jul 31 20:23:19 PDT 2014
GCC version: gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1)
5.2. Toolkit验证
验证cuda toolkit是否成功。
~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Thu_Jul_17_21:41:27_CDT_2014
Cuda compilation tools, release 6.5, V6.5.12
5.3. 设备识别
使用cuda sample已经编译好的deviceQuery来验证。deviceQuery在<cuda_sample_install_path>/bin/x_86_64/linux/release目录下。我的结果如下,检测出了两块GPU来。
~/install/NVIDIA_CUDA-6.5_Samples/bin/x86_64/linux/release$ ./deviceQuery
./deviceQuery Starting...
CUDA Device Query (Runtime API) version (CUDART static linking)
Detected 2 CUDA Capable device(s)
Device 0: "Tesla K20c"
CUDA Driver Version / Runtime Version 6.5 / 6.5
CUDA Capability Major/Minor version number: 3.5
Total amount of global memory: 4800 MBytes (5032706048 bytes)
(13) Multiprocessors, (192) CUDA Cores/MP: 2496 CUDA Cores
GPU Clock rate: 706 MHz (0.71 GHz)
Memory Clock rate: 2600 Mhz
Memory Bus Width: 320-bit
L2 Cache Size: 1310720 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent and kernel execution: Yes with 2 engine(s)
Run time limit on kernels: No
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Enabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 3 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
Device 1: "Quadro K4000"
CUDA Driver Version / Runtime Version 6.5 / 6.5
CUDA Capability Major/Minor version number: 3.0
Total amount of global memory: 3071 MBytes (3220504576 bytes)
( 4) Multiprocessors, (192) CUDA Cores/MP: 768 CUDA Cores
GPU Clock rate: 811 MHz (0.81 GHz)
Memory Clock rate: 2808 Mhz
Memory Bus Width: 192-bit
L2 Cache Size: 393216 bytes
Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
Maximum Layered 1D Texture Size, (num) layers 1D=(16384), 2048 layers
Maximum Layered 2D Texture Size, (num) layers 2D=(16384, 16384), 2048 layers
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 65536
Warp size: 32
Maximum number of threads per multiprocessor: 2048
Maximum number of threads per block: 1024
Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535)
Maximum memory pitch: 2147483647 bytes
Texture alignment: 512 bytes
Concurrent and kernel execution: Yes with 1 engine(s)
Run time limit on kernels: Yes
Integrated GPU sharing Host Memory: No
Support host page-locked memory mapping: Yes
Alignment requirement for Surfaces: Yes
Device has ECC support: Disabled
Device supports Unified Addressing (UVA): Yes
Device PCI Bus ID / PCI location ID: 4 / 0
Compute Mode:
< Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >
> Peer access from Tesla K20c (GPU0) -> Quadro K4000 (GPU1) : No
> Peer access from Quadro K4000 (GPU1) -> Tesla K20c (GPU0) : No
deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 2, Device0 = Tesla K20c, Device1 = Quadro K4000
Result = PASS
这样,cuda就安装成功了。
⑻ 如何安装CUDA
PRE-INSTALLATION ACTIONS 安装前准备
1.1.Verify You Have a CUDA-Capable GPU
在终端中输入: $ lspci | grep -i nvidia ,会显示自己的NVIDIA GPU版本信息
去CUDA的官网http://developer.nvidia.com/cuda-gpus查看自己的GPU版本是否在CUDA的支持列表中
1.2.Verify You Have a Supported Version of Linux 检查自己的linux版本是否支持,我安装的是ubuntu14.04版本的,这个就没有问题
在终端中输入: $ uname -m && cat /etc/*release
终端显示结果如下所示:
1.3. Verify the System Has gcc Installed
在终端中输入: $ gcc --version
1.4. Verify the System has the Correct Kernel Headers and Development Packages Installed
在终端中输入: $ uname –r 可以查看自己的kernel版本信息
在终端中输入:$ sudo apt-get install linux-headers-$(uname -r)
可以安装对应kernel版本的kernel header和package development
这四个小步骤我都比较顺利,安装好ubuntu后这些都装好了,如果在某一步中有问题,可以参照官方文档进行解决。
runfile安装cuda 下载链接https://developer.nvidia.com/cuda-downloads
2.1.禁用 nouveau
终端中运行:$ lsmod | grep nouveau,如果有输出则代表nouveau正在加载。
Ubuntu的nouveau禁用方法:
在/etc/modprobe.d中创建文件blacklist-nouveau.conf,在文件中输入以下两行内容:
blacklist nouveau
options nouveau modeset=0
在终端中输入:$ sudo update-initramfs –u
设置完毕可以再次运行
$ lsmod | grep nouveau 检查是否禁用成功
如果运行后没有任何输出,则代表禁用成功(如果还有输出,表示没有禁用成功,不过也不要担心,可以重启电脑,再次运行该命令一般情况下会显示禁用成功)。
2.2.重启电脑,到达登录界面时,alt+ctrl+f1,进入text mode,登录账户
2.3.在text mode中输入
$ sudo service lightdm stop 关闭图形化界面
2.4.切换到cuda安装文件的路径
运行$ sudo sh cuda_7.5.18_linux.run
一般下载好cuda安装包后直接放在home目录下,就可以按照上面的代码运行了,建议这么做。
遇到提示是否安装openGL ,选择no(如果你的电脑跟我一样是双显,且主显是非NVIDIA的GPU需要选择no,否则可以选择yes)。其他都选择yes或者默认安装成功后,会显示installed,否则会显示failed。
2.5. 输入 $ sudo service lightdm start 重新启动图形化界面。
Alt + ctrl +F7,返回到图形化登录界面,输入密码登录。
如果能够成功登录,则表示不会遇到循环登录的问题,基本说明CUDA的安装成功了。
2.6. 重启电脑。检查Device Node Verification。
检查路径~/dev下 有无存在名为nvidia*(以nvidia开头)的多个文件(device files)
如果没有的话,可以参考官方文档里的指导步骤,进行添加。
添加过程:
a)在home下创建一个文档,命名位modprobe,不要后缀,文档的内容如下:
#!/bin/bash
/sbin/modprobe nvidia
if [ "$?" -eq 0 ]; then
# Count the number of NVIDIA controllers found.
NVDEVS=`lspci | grep -i NVIDIA`
N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`
N=`expr $N3D + $NVGA - 1`
for i in `seq 0 $N`; do
mknod -m 666 /dev/nvidia$i c 195 $i
done
mknod -m 666 /dev/nvidiactl c 195 255
else
exit 1
fi
/sbin/modprobe nvidia-uvm
if [ "$?" -eq 0 ]; then
# Find out the major device number used by the nvidia-uvm driver
D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`
mknod -m 666 /dev/nvidia-uvm c $D 0
else
exit 1
fi
b)将该文件复制到/etc/init.d目录下
终端输入: $ sudo chmod 755 /etc/init.d/modprobe
d)执行如下命令将脚本放到启动脚本中去。
终端输入: $ cd /etc/init.d
$ sudo update-rc.d modprobe defaults 95
注意:数字95其实可以随便设置的。
e)关机然后重新启动,去~/dev下面查看,不出意外此时应该有nvidia*系类文件了。
对于2.6的说明:很有必要说一下不管怎么搞我的nvidia*文件总是出现不了,所以我放弃,不过好像并没有太大的影响。这一点根据情况大家自己试试吧。
2.7. 设置环境变量。
终端中输入 $ sudo gedit /etc/profile
在打开的文件末尾,添加以下两行:
export PATH=/usr/local/cuda-7.5/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda7.5/lib64/:$LD_LIBRARY_PATH
2.8. 重启电脑,检查上述的环境变量是否设置成功。
终端中输入 : $ env
在输出的环境变量中检查有无上述 设置的变量,如果有则代表设置成功。
3. 检查cuda是否安装成功。
3.1.检查 NVIDIA Driver是否安装成功
终端输入 :$ cat /proc/driver/nvidia/version 会输出NVIDIA Driver的版本号
3.2检查 CUDA Toolkit是否安装成功
终端输入 : $ nvcc –V 会输出CUDA的版本信息
3.3尝试编译cuda提供的例子
切换到例子存放的路径,默认路径是 ~/NVIDIA_CUDA-7.5_Samples
终端输入:$ make
注意:这里的make操作是将Samples文件夹下所有的demo都编译了一遍,所以比较耗时,如果仅仅想测试某个例子,可以进入相应的文件夹去编译即可。
如果出现错误的话,则会立即报错停止,否则会开始进入编译阶段。
注意:我第一次运行的时候就报错了,错误是缺少一些依赖库,一般情况下也就是这个问题,按照如下方式安装就好,其实也没必要都安装,不过安装上也不会报错:
$ sudo apt-get install freeglut3-dev
$ sudo apt-get install build-essential
$ sudo apt-get install libx11-dev
$ sudo apt-get install libxmu-dev
$ sudo apt-get install libxi-dev
$ sudo apt-get install ibgl1-mesa-glx
$ sudo apt-get install llibglu1-mesa
$ sudo apt-get install libglu1-mesa-dev
安装好后,在终端输入: $ make
成功后,NVIDIA_CUDA-7.5_Samples文件夹下会出现一个bin文件夹。运行编译生成的二进制文件。
编译后的二进制文件 默认存放在~/NVIDIA_CUDA-7.5_Samples/bin中。
⑼ cuda程序编译方面,各位都有哪些方法和经验
首先创建一个soTest的文件夹,里面有两个文件deviceQuery.cpp, t.cpp。 12345678deviceQuery.cpp的代码可以参考CUDASDK t.cpp的源代码如下: #include int cudev(int argc, char** argv);int main(int argc, char ** argv){ cudev(argc,argv); return 0;}然后在当前目录下输下命令
⑽ 如何在Linux下编译CUDA程序,生成动态链接库
首先创建一个soTest的文件夹,里面有两个文件deviceQuery.cpp, t.cpp。
deviceQuery.cpp的代码可以参考CUDASDKt.cpp的源代码如下:
#includeintcudev(intargc,char**argv);
intmain(intargc,char**argv)
{
cudev(argc,argv);
return0;
}
然后在当前目录下输下命令