Articles of cuda

什么是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规格。 有任何想法吗? 谢谢!

为什么我的c程序突然使用了30g的虚拟内存?

最重要的是,我注意到,我的c程序(使用CUDA 3.2)的虚拟尺寸为28g或更多(查看VIRT),每次运行都从头开始。 这对我来说没有任何意义。 居民的记忆是有道理的,在我最大的数据集上只有2g左右。 我知道在过去的某个时候虚拟大小并不是很大,但是我不确定什么时候发生了变化。 为什么我的程序会使用28g的虚拟内存(或为什么top的VIRT会这么大)呢? 我了解VIRT包含可执行二进制文件(仅437K),共享库和“数据区”。 什么是“数据区”? 如何找出共享库需要多less内存? 我的进程的总内存的其他元素呢? / proc / <pid> / smaps(1022行)的内容: http ://pastebin.com/fTJJneXr 从smaps的条目之一表明,其中之一是最大的,但没有标签…我怎么能找出这个“空白”是28GB的条目? 200000000-900000000 —p 00000000 00:00 0 Size: 29360128 kB Rss: 0 kB Pss: 0 kB Shared_Clean: 0 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB Referenced: 0 kB Anonymous: 0 kB Swap: 0 kB KernelPageSize: […]

使用CUDA 6.0的C ++ 11标准

我想在我的CUDA 6.0项目中为我的C ++文件使用C ++ 11标准。 当我将CUDA 6.0 Nsight Eclipse设置中的编译器更改为g ++并添加-std=c++11选项时,我收到了很多像这样的错误: error: namespace "std::__gnu_cxx" has no member "__normal_iterator" 显然,我必须为CUDA“select”一次编译器,然后再select我的C ++文件。 我该怎么做? 安装支持未公开的C ++ 11的CUDA 6.5不是一个选项。