Articles of cuda

在Linux上编译一个基本的OpenCV + Cuda程序

我曾经在linux上使用过opencv,但是没有使用cuda。 我已经努力了几个月的以下编译错误。 在尝试了许多解决scheme后,我放弃了使用windows。 不过,我真的想在Linux上工作。 这是我用来编译opencv_gpu网站上给出的阈值示例的命令。 nvcc `pkg-config –libs opencv` -L. -L/usr/local/cuda/lib -lcuda -lcudart `pkg-config –cflags opencv` -I. -I/usr/local/cuda/include threshold.cpp -o threshold 这里是错误的: /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `main': threshold.cpp:(.text+0x124): undefined reference to `cv::gpu::Stream::Null()' threshold.cpp:(.text+0x156): undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)' threshold.cpp:(.text+0x16d): undefined reference to `cv::gpu::GpuMat::download(cv::Mat&) const' /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::GpuMat(cv::Mat const&)': threshold.cpp:(.text._ZN2cv3gpu6GpuMatC1ERKNS_3MatE[cv::gpu::GpuMat::GpuMat(cv::Mat const&)]+0x63): […]

CUDA和固定(页面locking)内存不是页面locking?

我试图弄清楚CUDA(或OpenCL实现)是否在需要固定(页面locking)的内存时说实话。 我试着cudaMallocHost并看着/proc/meminfo值Mlocked和Unevictable ,都停留在0,永远不会( /proc/<pid>/status报告VmLck也为0)。 我用mlock来locking页面内存,并按照预期值上升。 所以这种行为的两个可能的原因可能是: 我没有从CUDA API获取页面locking内存,并且cudaSuccess是假的 CUDA绕过了页面locking内存的操作系统计数器,因为CUDA在Linux内核方面有一些神奇的function 所以实际的问题是:当我使用CUDA分配页面locking内存时,为什么我无法从操作系统获取页面locking内存的值? 另外:如果不是从/proc/meminfo或/proc/<pid>/status我可以在哪里得到正确的值? 谢谢! 系统:Ubuntu 14.04.01 LTS; CUDA 6.5; Nvidida Driver 340.29; Nvidia Tesla K20c

什么是CUDA的NVIDIA版本304.125

我使用的是Ubuntu 14.04。 我想安装CUDA。 但我不知道哪个版本适合我的笔记本电脑。 我跟踪我的驱动器 $cat /proc/driver/nvidia/version NVRM version: NVIDIA UNIX x86_64 Kernel Module 304.125 Mon Dec 1 19:58:28 PST 2014 GCC version: gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) 我试图安装CUDA cuda-linux64-rel-7.0.28-19326674但是当我通过命令testing ./deviceQuery ./deviceQuery Starting… CUDA Device Query (Runtime API) version (CUDART static linking) cudaGetDeviceCount returned 35 -> CUDA driver version is insufficient for CUDA runtime version […]

dynamic并行 – 启动许多小内核是非常缓慢的

我正在尝试使用dynamic并行来改进我在CUDA中的algorithm。 在我原来的CUDA解决scheme中,每个线程计算每个块通用的编号。 我想要做的是首先启动一个粗略(或低分辨率)的内核,在这个线程中,线程只计算一次公共值(就像每个线程代表一个块一样)。 然后每个线程创build一个1个块(16×16线程)的小网格,并为其传递公共值启动一个子内核。 从理论上讲,它应该更快,因为它可以节省许多冗余操作。 但实际上,解决scheme的工作非常缓慢,我不知道为什么。 这是代码,非常简单,只是想法。 __global__ coarse_kernel( parameters ){ int common_val = compute_common_val(); dim3 dimblock(16, 16, 1); dim3 dimgrid(1, 1, 1); child_kernel <<< dimgrid, dimblock >>> (common_val, parameters); } __global__ child_kernel( int common_val, parameters ){ // use common value do_computations(common_val, parameters); } child_kernels的数量很多,每个线程一个,并且必须有大约400×400线程。 据我所知,GPU应该并行处理所有这些内核? 或者子内核按顺序处理? 我的结果显示,性能比我原来的解决scheme慢10倍以上。

Linux上的CUDA 5.5和Intel C / C ++编译器

对于我目前的项目,我需要在同一个项目中使用CUDA和Intel C / C ++编译器。 (我依靠的是英特尔MKL的SSYEV实现,使用GCC + MKL而不是ICC + MKL(GCC约3ms,ICC约300μs)的时间大约是其10倍。 icc -v icc version 12.1.5 NVIDIA表示支持Intel ICC 12.1( http://docs.nvidia.com/cuda/cuda-samples/index.html#linux-platforms-supported ),但即使降级到Intel ICC 12.1.5(已安装作为英特尔®Composer XE 2011 SP1 Update 3的一部分),我仍然遇到这个问题: nvcc -ccbin=icc src/test.cu -o test /usr/local/cuda-5.5/bin//..//include/host_config.h(72): catastrophic error: #error directive: — unsupported ICC configuration! Only ICC 12.1 on Linux x86_64 is supported! #error — unsupported ICC configuration! Only […]

CUDA – 关于“分支”和“分支”Visual Profiler结果的混淆(2)

我使用NVIDIA Visual Profiler来分析我的代码。 testing内核是: //////////////////////////////////////////////////////////////// Group 1 static __global__ void gpu_test_divergency_0(float *a, float *b) { int tid = threadIdx.x + blockIdx.x * blockDim.x; if (tid < 0) { a[tid] = tid; } else { b[tid] = tid; } } static __global__ void gpu_test_divergency_1(float *a, float *b) { int tid = threadIdx.x + blockIdx.x * blockDim.x; […]

是否可以在应用程序之间共享Cuda上下文?

我想在两个独立的Linux进程(使用POSIX消息队列,我已经设置)之间传递Cuda环境。 使用cuCtxPopCurrent()和cuCtxPushCurrent() ,我可以得到上下文指针,但是这个指针在我调用该函数的进程的内存中被引用,并且在进程之间传递是没有意义的。 我正在寻找其他解决scheme。 我到目前为止的想法是: 尝试深层复制CUcontext结构,然后传递副本。 看看我能否find一个共享内存的解决scheme,我的Cuda指针都放在那里,这样两个进程都可以访问它们。 将这些stream程合并成一个程序。 在Cuda 4.0中,我可以切换到更好的上下文共享。 我不确定选项(1)是否可能,也不能确定(2)是否可用。 (3)如果我想把东西变成通用的(这是在一个劫持垫片内),它并不是一个真正的select。 (4)我会看Cuda 4.0,但我不确定它是否能在那里工作。 谢谢!

如何在linux中包含cutil.h

我不知道如何在Linux中包含cutil.h,我知道它在哪里,但我不知道如何包含它。 想法请。

NVCC CUDA交叉编译无法find“-lcudart”

我已经在Ubuntu虚拟机上安装了CUDA 5.0和NVCC,甚至在编译CUDA C程序时也遇到了问题。 错误如下: user@ubuntu:~/CUDA$ nvcc helloworld.cu -o helloworld.o -target-cpu-arch=ARM -ccbin=/usr/bin/arm-linux-gnueabi-gcc-4.6 –machine=32 /usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /usr/local/cuda-5.0/bin/../lib/libcudart.so when searching for -lcudart /usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /usr/lib/libcudart.so when searching for -lcudart /usr/lib/gcc/arm-linux-gnueabi/4.6/../../../../arm-linux-gnueabi/bin/ld: cannot find -lcudart collect2: ld returned 1 exit status 我试图研究这个问题,并遇到这个链接: 跳过不兼容的libcudart.so当search-lcudart 所以我遵循了在该链接上提供的build议,并添加了 /usr/local/cuda-5.0/lib64 和 /usr/local/cuda-5.0/lib 到我的LD_LIBRARY_PATH环境variables,现在这是结果 user@ubuntu:~/CUDA$ echo $LD_LIBRARY_PATH /usr/local/cuda-5.0/lib:/usr/local/cuda-5.0/lib64 user@ubuntu:~/CUDA$ 但问题依然存在,请大家帮忙。

如何在Linux机器上获得我的CUDA规格?

我正在访问一台具有用于CUDA计算的nVidia卡的远程机器,但是我找不到一种方法来知道它使用哪个卡以及CUDA规范(版本等)是什么。 我在terminal上使用了“lspci”命令,但没有nvidia卡的标志。 我很确定它有一个nVidia卡,nvcc似乎被安装。 但我真的想弄清楚卡和CUDA规格。 有任何想法吗? 谢谢!