Articles of cuda

设备内存空间中的cuda程序内核代码

有没有什么办法可以找出在gpu(设备)内存中占用多less内存代码(执行)? 如果我有512 MB的设备内存,我怎么知道有多less可用的分配? 可视化分析器显示这样的信息?

在linux下编译CUDA代码,得到错误:cutil_inline.h:没有这样的文件或目录

代码是在Windows下开发的,但是当我用nvcc在linux下编译代码时,它给出了错误: cutil_inline.h:没有这样的文件或目录。 我机器中的PATH是: # User specific aliases and functions export PATH=/usr/local/cuda/bin:/usr/local/NVIDIA_GPU_Computing_SDK:$PATH export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/NVIDIA_GPU_Computing_SDK:$LD_LIBRARY_PATH 丢失的文件cutil_inline.h已经在“NVIDIA_GPU_Computing_SDK”包中。 我怎么解决这个问题? 你的善意答复对我来说非常重要。

通过PCIe的DMA到其他设备

我试图直接从Linux中的另一个PCIe设备访问NIC中的DMA地址。 具体来说,我试图从NVIDIA GPU读取,以绕过所有的CPU。 我已经研究了零拷贝networking和DMA到用户空间的post,但是他们要么没有回答这个问题,要么涉及到从内核空间到用户空间的一些拷贝。 我试图避免使用任何CPU时钟,因为与延迟不一致,并且我有非常严格的延迟要求。 我拿到了我使用的intel卡(e1000e驱动程序)的NIC驱动程序,我发现在哪里分配了环形缓冲区。 正如我在前面的文章中所理解的那样,我会对dma_addr_ttypes的描述符感兴趣。 他们也有一个叫做dma的rx_ring结构体的成员。 我使用ioctl调用来传递desc和dma成员,但除了零之外,我无法在GPU中获得任何东西。 GPU代码如下: int *setup_gpu_dma(u64 addr) { // Allocate GPU memory int *gpu_ptr; cudaMalloc((void **) &gpu_ptr, MEM_SIZE); // Allocate memory in user space to read the stuff back int *h_data; cudaMallocHost((void **)&h_data, MEM_SIZE); // Present FPGA memory to CUDA as CPU locked pages int error = cudaHostRegister((void **) […]

CUDA内存错误

我在多个GPU(每台机器两个GPU)上运行高性能计算,目前我在GeForce GTX TITAN上testing我的代码。 最近我注意到随机记忆错误发生,所以我不能依靠结果了。 试图debugging,遇到我不明白的事情。 如果有人能帮我理解为什么会发生以下情况,我将不胜感激。 所以,这是我的GPU: $ nvidia-smi -a Driver Version : 331.67 GPU 0000:03:00.0 Product Name : GeForce GTX TITAN … VBIOS Version : 80.10.2C.00.02 FB Memory Usage Total : 6143 MiB Used : 14 MiB Free : 6129 MiB Ecc Mode Current : N/A Pending : N/A 我的Linux机器(Ubuntu 12.04 64位): $ uname […]

CUDA / PyCUDA:哪个GPU在运行X11?

在有多个GPU的Linux系统中,如何确定哪个GPU运行X11,哪个完全可以运行CUDA内核? 在一个运行X11的低功耗GPU和运行内核的更高能量的GPU的系统中,可以通过一些启发式的方法来确定使用更快的卡。 但是在有两张相同卡片的系统上,这种方法不能使用。 是否有CUDA和/或X11 API来确定这一点? 更新:命令“nvidia-smi -a”显示是否连接“显示器”。 我还没有确定这是否意味着物理连接,逻辑连接(运行X11),或两者兼而有之。 在此命令上运行strace会显示大量的ioctl被调用,并且不会调用X11,因此假设卡正在报告显示器是物理连接的。

cudaHostRegister是否等同于mlock()系统调用?

与非locking内存相比,固定或页面locking的内存传输速度更快。 CUDA提供了cudaHostAlloc和cudaHostRegister调用来分配或注册页面locking的内存。 然后Nvidia驱动程序检查内存传输,如果主机内存被locking,并根据复制代码path发出。 是否有可能与系统调用mlock()实现与cudaHostRegister完全相同的效果(关于传输速度)页面locking内存? 还是相应的CUDA调用更新驱动程序查询的内部数据库?

如何在FC18中安装CUDA 5.5驱动程序?

我已经花了两天的时间试图完成它,但没有快乐。 请帮忙! 我正在尝试安装CUDA 5.5驱动程序,与工具包一起提供。 截至昨天,我已经开始在FC17,但在各种尝试的过程中,我已经升级到FC18。 首先,这是我的问题:CUDA的存储库希望安装版本319.37,但是我现在的版本是319.32(我可以从rpmfusion获得)。 来自rpmfusion的驱动程序版本适用于我的video卡。 当我将CUDA的存储库添加到由yum识别的repos列表中,然后尝试从那里安装时,驱动程序将不会加载声明版本不匹配。 所以…我被卡住了 我无法安装其他CUDA相关的库,因为它们列出了它们的依赖项,这些内核不能工作(?)我不确定那个版本号是什么。 这是yum想要安装的,一旦要求安装cuda : Installing: cuda x86_64 5.5-22 cuda 2.4 k Installing for dependencies: cuda-5-5 x86_64 5.5-22 cuda 3.3 k nvidia-modprobe x86_64 319.37-1.fc18 cuda 14 k xorg-x11-drv-nvidia-devel i686 1:319.37-2.fc18 cuda 116 k xorg-x11-drv-nvidia-devel x86_64 1:319.37-2.fc18 cuda 116 k xorg-x11-drv-nvidia-libs i686 1:319.37-2.fc18 cuda 28 M Updating for dependencies: […]

在R中调用GPU函数

我已经成功安装了CUDA和rpud 。 我能够编译和运行我的文件vecAdd.cu ,但我想在R中调用这个函数。我用下面的指令分别创buildvecAdd.o和vecAdd.so ,我没有任何错误。 nvcc -m64 -I/usr/local/cuda-5.5/include -I/usr/include/R – I/usr/local/include -g -O2 -c -o VecAdd.o VecAdd.cu –ptxas-options -v -Xcompiler -fPIC g++ -m64 -std=gnu99 -shared -L/usr/local/lib64 -o VecAdd.so VecAdd.o -L/usr/lib64/R/lib -lR -L/usr/local/cuda-5.5/lib64 -lcuda -lcudart -lcurand -lm 当我试图加载它在R使用: > dyn.load("/home/CUDACodes/VecAdd.so") Error in dyn.load("/home/CUDACodes/VecAdd.so") : unable to load shared object '/home/CUDACodes/VecAdd.so': libcudart.so.5.5: cannot open shared object file: […]

NVCC试图链接不必要的对象

我有一个项目,我正在努力与CUDA运行。 由于各种原因,它需要编译一个可执行文件,支持或不支持GTK, 而不需要重新编译所有相关的文件。 在C语言下,我通过编译对象的基本版本*.o和对象的GTK版本编译为*.gtk.o来*.gtk.o 。 因此,我可以链接到该库,如果需要使用GTK,它将引入这些function(及其要求); 如果没有,它不会触及这些对象。 转换为nvcc导致了一些问题:它总是或从不GTK模式工作; 但是如果我用额外的GTK对象编译库,它会拒绝忽略它们并链接一个GTKless可执行文件。 (它失败,因为无法find我所称的开罗function的错误。) 我猜测, nvcc链接到(至less有一个)embedded在对象中的助手函数,这会导致链接器parsing整个对象。 运行ar d <lib> <objects.gtk.o>手动从库中删除它们将“修复”问题,所以在那里没有真正的依赖关系。 我正在编译/链接 /usr/local/cuda/bin/nvcc –compiler-options -Wall –compiler-options -pipe -rdc=true -O0 -g -G -I inc -I inc/ext -arch compute_20 -o program program.cu obs/external.o libs/base.a libs/extra.a libs/core.a -lm 我怎样才能让nvcc忽略不需要的对象?

有两个gpu的时候如何设置Torch使用一个gpu?

我的电脑有两个GPU。 这是我第一次使用两个GPU。 当我有一个GPU时,我只运行Cuda程序,它只在一个GPU上运行。 但是,我不知道如何控制程序使用哪个GPU以及如何在唯一的一个GPU上运行程序。 我search了互联网和post说 导出CUDA_VISIBLE_DEVICES = 0 在运行程序之前必须使用这个。 我有两个程序运行。 一个是火炬脚本,另一个是Cuda脚本。 我打开了两个terminal,在第一个terminal,我使用了上面的命令并运行火炬程序。 之后,在第二个terminal,我也使用了上面的命令,只把数字从0改为1,运行cuda程序。 然而,看到nvidia-smi的图片,它显示了这两个程序分配给了第0个GPU。 我想将火炬程序(PID 19520)分配给第0个,将cuda程序(PID 20351)分配给第1个GPU。 我如何将这两个程序分配给不同的GPU设备? 以下是火炬脚本的设置。 (Ubuntu 14.04,nvidia titan gtx x,cuda-7.5) –[[command line arguments]]– cmd = torch.CmdLine() cmd:text() cmd:text('Train a Recurrent Model for Visual Attention') cmd:text('Example:') cmd:text('$> th rnn-visual-attention.lua > results.txt') cmd:text('Options:') cmd:option('–learningRate', 0.01, 'learning rate at t=0') cmd:option('–minLR', 0.00001, 'minimum learning […]