草庐IT

CUDA_TOOL

全部标签

c++ - 可由设备或主机调用的 CUDA 函数

我在一些需要从设备和主机调用的CUDA代码中有一个可重用的函数。是否有合适的限定符?例如在这种情况下,func1的正确定义是什么:intfunc1(inta,intb){returna+b;}__global__devicecode(float*A){inti=blockDim.x*blockIdx.x+threadIdx.x;A[i]=func1(i,i);}voidmain(){//Normalcudamemoryset-up//Callfunc1frominsidemain:intj=func1(2,4)//Normalcudamemorycopy/programrun/retr

c++ - CUDA 驱动程序 API 和函数处理

我有一个项目需要C++11,所以我将文件分为两类:使用C++11的文件和使用C++03的文件,因此与nvcc编译器兼容。当我有一个不是模板函数的内核时,很容易加载模块并使用cuModuleGetDataEx找到函数名称。但是,当内核是模板时,函数名称在显式特化后会被破坏。这使得在使用CUDA驱动程序API加载模块后很难获得函数的句柄。例如,考虑这个功能。templateglobalvoidvector_add(constT*a,constT*b,T*c,constSizeTypedim){constSizeTypei=blockIdx.x*blockDim.x+threadIdx.x;

c++ - OpenGL 着色器与 CUDA

我正在使用this在我的OpenGL程序中用于抗锯齿的FXAA着色器。现在我在CUDA中重新实现了这段代码并进行了测试。生成的图像是相同的,但CUDA版本要慢得多。(着色器在垂直同步时以60FPS运行,而CUDA下降到约40FPS)这是CUDA代码:__device__uchar4readChar(intx,inty){returnsurf2Dread(surfaceRead,(x)*sizeof(uchar4),(y),cudaBoundaryModeClamp);}__device__uchar4readFloatBilin2(floatx,floaty){intx1=floor(

c++ - Qt 的 CUDA 包装器

Qt发布了一个很好的Opencl包装器(QtOpencl),它在隐藏大量样板方面做得非常好,并使OpenCL与Qt的显示小部件和Opengl很好地配合。但有几件事我可以在Cuda中比OpenCL做得更好,而且Cuda工具更加成熟。制作一个简单的CudaC++包装器并集成到Qt构建过程中相对容易,但我想知道是否有人做了更多的事情?理想情况下是等效的QtCuda库。Qt人员对Cuda支持不感兴趣,因为它不够跨平台编辑:仅供搜索,有一个QtCUDAopenGLPBO的包装器。它基于多布斯博士simplePBOexample.需要修复几个错误才能使其与Cuda4很好地配合使用,但这是一个好的开

c++ - 调用 cuda 内核时的性能损失

我想知道在C/C++中执行cuda内核调用的开销是多少,如下所示:somekernel1>>(args);somekernel2>>(args);somekernel3>>(args);我问这个问题的原因是因为我正在构建的应用程序当前对多个内核进行重复调用(调用之间没有内存被重新读取/写入设备),我想知道是否将这些内核调用包装到单个内核调用(某些内核1-3成为设备函数)会对性能产生任何有意义的差异。 最佳答案 在非WDDMWindows平台上,使用运行时API启动内核的主机端开销仅为大约15-30微秒。在WDDM平台(我不使用)上,

c++ - 我可以从不是由 nvcc 编译的 C++ 代码调用 CUDA 运行时函数吗?

有什么方法可以调用CUDA运行时函数调用,例如cudaMemcpy(...);在.cpp文件中,使用常规C++编译器编译? 最佳答案 编辑:有一个examplehere但它不再被发现,但大部分示例都复制在下面。调用者C(但可以是C++)#include#include#include#includeexternvoidkernel_wrapper(int*a,int*b);intmain(intargc,char*argv[]){inta=2;intb=3;kernel_wrapper(&a,&b);return0;}被调用者(CU

解决RuntimeError:No CUDA GPUs are available

解决RuntimeError:NoCUDAGPUsareavailable如果本来显卡是能用的版本这些也能对的上。基本解决方法为在使用之前检查cuda是否可用不检测默认不可用。或者在文件头加入importtorchtorch.cuda.current_device()torch.cuda._initialized=True//检测一下cuda是否可用print(torch.cuda.is_available())False//重新在文件头加入下面说明importtorchtorch.cuda.current_device()torch.cuda._initialized=True如果这两种方式

c++ - 在 Windows 上使用 clang 编译 CUDA 时的重新定义

尽管question几乎相同已经问过,答案是针对OSX的,不再适用(而且真的很老套)。问题是在Windows上用clang编译cuda时,math_functions.hpp中有大量重定义。通过一些调查,显然cuda决定将其math_functions.hpp和math_functions.h函数放在namespacestd中(这是否合法??),并与cmath中的所有libstdc++函数和clang自己用于编译cuda的头文件发生冲突。我该如何处理?最好不要使用上一个问题中显示的hacky方式?旁注根据clang的documentation,clang可以基于__global__/_

c++ - 在 CUDA 中增加每个线程的工作量的示例

算法:我正在用CUDA编写程序,问题如下:两个矩阵A(n*128)和B(m*128)我取A的第一行,并逐一计算该vector与B的所有行之间的距离。我将每个距离的结果写在矩阵C的一行上,因此C的元素C(i,j)包含A的第i行和B的第j行之间的距离。然后我继续处理A的下一行。我是这样实现的:我有一个由(n*m)个块组成的网格,每个块有128个线程。(1*128)。问题:程序成功运行并获得预期结果,但执行时间仅比它的单线程CPU版本快5到10倍。所以我想知道如何在减少之前增加每个线程的工作以提高性能.内核代码(原文:未优化)__global__voidEuclideanDistances(

c++ - Visual Studio 中的 Cuda 并行代码生成

我在VisualStudio2012解决方案中有几个C++项目。这些项目包含大量文件和我用/MP以加快代码生成速度。我想知道是否有一种方法可以以类似的方式加速NVCC。在包含CUDA内核的项目中使用/MP不会缩短编译时间,而且我只能看到一个内核在工作。所以问题是:如何使用我的多核PC来加速CUDA编译? 最佳答案 从CUDA5.5开始,nvcc没有与MSVC的/MP等效的功能,因此.cu文件的任何构建并行性都需要来自调用NVCC的构建工具。如果您可以使用GNUMake构建(例如,在Cygwin下或在Linux/Unix/OSX系统上