gpu相关内容
我在具有 4 个 GPU 的多 GPU 系统上运行 cuda 内核函数.我预计它们会同时发布,但事实并非如此.我测量每个内核的启动时间,第二个内核在第一个内核完成执行后启动.所以在 4 个 GPU 上启动内核并不比 1 单个 GPU 快. 如何让它们同时工作? 这是我的代码: cudaSetDevice(0);GPU_kernel 解决方案 我做了一些关于在 4 Kepler K
..
是否可以直接从 GPU (CUDA/openCL) 访问硬盘/闪存盘并直接从 GPU 的内存加载/存储内容? 我试图避免将内容从磁盘复制到内存,然后再将其复制到 GPU 的内存. 我阅读了有关 Nvidia GPUDirect 的信息,但不确定它是否符合我上面的解释.它讨论了远程 GPU 内存和磁盘,但在我的例子中,磁盘是 GPU 本地的. 基本思想是加载内容(类似于 dma)-
..
我正在尝试使用 GpuMat 数据编写自定义内核来查找图像像素的反余弦值.当 GPU 有 CV_8UC1 数据但不能使用字符计算反余弦时,我可以在上传数据时上传、下载和更改值.但是,当我尝试将我的 GPU 转换为 CV_32FC1 类型(浮点数)时,我在下载部分遇到了非法内存访问错误.这是我的代码: //.cu 代码#include #include
..
何时真正需要调用 cudaDeviceSynchronize 函数? 据我从 CUDA 文档中了解到,CUDA 内核是异步的,因此我们似乎应该在每次内核启动后调用 cudaDeviceSynchronize.但是,我尝试了相同的代码(训练神经网络),有和没有任何 cudaDeviceSynchronize,除了时间测量之前的一个.我发现我得到了相同的结果,但速度提高了 7-12 倍(取决于矩
..
当我运行 nvidia-smi 时,我收到以下消息: 初始化 NVML 失败:驱动程序/库版本不匹配 一个小时前,我收到了同样的消息,并卸载了我的 cuda 库,我能够运行 nvidia-smi,得到以下结果: 在此之后,我从 NVIDIA 官方页面 然后简单地说: sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd
..
我有一个 C 函数, double* foofunc(){/* 函数体 */} 我不知道如何在Fortran中声明一个接口来调用这个C函数. 另外,如果一个指针应该指向 GPU 设备内存,我如何在 Fortran 接口中定义它?我需要使用 DEVICE 属性吗? 请使用 Fortran 直到 2003 年支持的功能. 有什么建议吗? 解决方案 既然你有 Fortran
..
我需要使用 NVidia CUBLAS 计算复数的两个向量(Hadamard 乘积)的元素乘法.不幸的是,CUBLAS 中没有 HAD 操作.显然,您可以使用 SBMV 操作来做到这一点,但在 CUBLAS 中它没有实现复数.我不敢相信 CUBLAS 无法实现这一目标.对于复数,还有其他方法可以使用 CUBLAS 实现吗? 我无法编写自己的内核,我必须使用 CUBLAS(或其他标准 NVID
..
具体来说,我的问题是我的 CUDA 代码需要 才能运行.默认情况下,这不包含在 NVRTC 中.大概在创建程序上下文时(即调用nvrtcCreateProgram),我必须发送文件名(curand_kernel.h)以及源代码curand_kernel.h?我觉得我不应该这样做. 很难说;我还没有设法从 NVIDIA 找到一个需要像这样的标准 CUDA 文
..
在 cuBLAS 中,cublasIsamin() 给出单精度数组的 argmin. 这是完整的函数声明: cublasStatus_t cublasIsamin(cublasHandle_t handle, int n,const float *x, int incx, int *result) cuBLAS 程序员指南提供了有关 cublasIsamin() 参数的信息: 如
..
我正在寻找一种在没有 NVIDIA GPU 的系统上运行 CUDA 程序的方法. 我尝试安装 MCUDA 和 gpuOcelot,但安装时似乎遇到了一些问题. 我已经阅读了 如何使用软件实现在没有 GPU 的情况下运行 CUDA?.那里的答案建议更改系统的硬件,使用模拟器(现已弃用)或切换到 OpenCL.这些都不能充分满足我的要求 解决方案 CUDA 是 NVIDIA 专有技
..
我在带有 CUDA 5 的 Linux 上使用计算能力为 35 的 tesla k20.通过一个简单的子内核调用,它会给出一个编译错误:Unresolved extern function cudaLaunchDevice 我的命令行如下所示: nvcc --compile -G -O0 -g -gencode arch=compute_35 , code=sm_35 -x cu -o f
..
我最近在家里的机器上安装了第二个 GPU (Tesla K40),我的搜索表明第一个 PCI 插槽成为为 CUDA 作业选择的默认 GPU.一个很好的链接解释它可以在这里找到: 默认 GPU 分配 我原来的 GPU 是 TITAN X,也启用了 CUDA,但它确实最适合单精度计算,而 Tesla 更适合双精度.我对小组的问题是,是否有办法将我的默认 CUDA 编程设备设置为始终是第二个
..
假设我有两个 device_vector数组,d_keys 和 d_data. 如果 d_data 例如是一个扁平的 2D 3x5 数组(例如 { 1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 7, 6, 5, 4, 3 } )和 d_keys 是大小为 5 的一维数组(例如 { 1, 0, 0, 1, 1 } ),我怎样才能做一个减少这样我最终如果相应的 d_ke
..
在 CUDA 4.x 上第一次调用 cudaMalloc 已经不是什么秘密了速度可能慢得离谱(被报告了好几次),这似乎是 CUDA 驱动程序中的一个错误. 最近,我注意到奇怪的行为:cudaMalloc 的运行时间直接取决于我链接到我的程序的第 3 方 CUDA 库的数量(请注意,我不使用这些库,只需将我的程序与它们链接) 我使用以下程序运行了一些测试: int main() {cu
..
我有一个推力device_vector.我想将它转换为原始指针,以便我可以将它传递给内核.我该怎么做? thrust::device_vectordv(10);//转换为RAW内核>>(pass raw) 解决方案 你可以使用 thrust::raw_pointer_cast 来做到这一点.设备向量类有一个成员函数 data,它将返回一个 thrust::device_p
..
我目前正在做一个 python 项目,我想利用 GPU 进行一些计算. 乍一看似乎有很多可用的工具;乍一看,我觉得我错过了什么. Copperhead 看起来很棒,但尚未发布.我似乎仅限于编写低级 CUDA 或 openCL 内核;没有推力,没有cudpp.如果我想整理一些东西,我必须自己做. 这对我来说似乎不太正确.我真的错过了什么吗?还是这种 GPU 脚本还没有达到宣传的效果
..
CUDA 文档没有具体说明多少个 CUDA 进程可以共享一个 GPU.例如,如果我在系统中只安装了一张 GPU 卡的情况下,由同一用户启动多个 CUDA 程序,效果如何?能保证执行的正确性吗?在这种情况下,GPU 是如何调度任务的? 解决方案 来自独立主机进程的 CUDA 活动通常会创建独立的 CUDA contexts,每个进程一个.因此,从不同主机进程启动的 CUDA 活动将在同一设备
..
我正在编写一个简单的 memcpy 内核来测量我的 GTX 760M 的内存带宽并将其与 cudaMemcpy() 进行比较.看起来是这样的: template__global__ 静态void copy(void* src, void* dest, unsigned int size) {使用vector_type = int2;vector_type* src2 = reinterpret_
..
在什么情况下应该将volatile关键字与CUDA内核的共享内存一起使用?我知道 volatile 告诉编译器永远不要缓存任何值,但我的问题是关于共享数组的行为: __shared__ 浮动产品[THREADS_PER_ACTION];//一些计算产品[threadIdx.x] = localSum;//等待每个人完成计算__syncthreads();//然后是(基本的,丑陋的)减少:if (
..
最近我一直在尝试使用 Numba 库在 Python 中进行 GPU 编程.我一直在使用那里的教程在他们的网站上阅读它,目前我坚持使用他们的示例,可以在这里找到:https://numba.pydata.org/numba-doc/latest/cuda/examples.html.我试图概括一下快速矩阵乘法的示例(其形式为 A*B=C).在测试时,我注意到维度不能完全被每块线程数 (TPB) 整
..