草庐IT

os.environ[‘CUDA_VISIBLE_DEVICES‘] 和torch.cuda.set_device()

#方式一#importos#os.environ['CUDA_VISIBLE_DEVICES']='5'#方式二#importtorch#torch.cuda.set_device(5)官方文档:当使用PyTorch进行深度学习训练时,通常需要使用CUDA加速计算。在使用PyTorch进行训练之前,需要确保已经正确设置了可见的GPU设备,并且已经初始化了CUDA环境。os.environ['CUDA_VISIBLE_DEVICES']是一个环境变量,可以通过设置它来限制程序所能看到的可用GPU设备列表,从而确保程序只使用指定的GPU设备。设置该环境变量可以使用os.environ['CUDA_

memory - CUDA 表面与纹理

CUDA中的表面对象和纹理对象有什么区别?我应该什么时候使用其中一种?据我从开发人员文档中得知,它们完全相同。两者似乎都是使用特殊纹理内存的CUDA数组。唯一的区别似乎是访问内存的API方法。 最佳答案 Textures是只读的,surfaces是可写和可读的。SurfaceAPI后来被引入来适应这种差异。对内核只读的数据使用纹理,如果内核也写入数据,则为表面。 关于memory-CUDA表面与纹理,我们在StackOverflow上找到一个类似的问题: ht

memory - CUDA 共享内存和全局内存有什么区别?

我对如何在CUDA中使用共享内存和全局内存感到困惑,尤其是在以下方面:当我们使用cudaMalloc()时,我们得到一个指向shared还是global的指针内存力?全局内存是驻留在主机还是设备上?有没有大小限制为任一?哪个访问速度更快?正在存储一个共享内存中的变量与通过核心?IE。而不是拥有__global__voidkernel(){__shared__inti;foo(i);}为什么不等价__global__voidkernel(int*i_ptr){foo(*i_ptr);}intmain(){int*i_ptr;cudaMalloc(&i_ptr,sizeof(int));k

c++ - 带有 Boost 的 Cuda

我目前正在编写一个CUDA应用程序并想使用boost::program_options库来获取所需的参数和用户输入。我遇到的问题是NVCC无法处理编译boost文件any.hpp给出的错误,例如1>C:\boost_1_47_0\boost/any.hpp(68):errorC3857:'boost::any':multipletemplateparameterlistsarenotallowed我在网上搜索发现是因为NVCCcannothandlethecertainconstructsusedintheboostcode但是NVCC应该将主机代码的编译委托(delegate)给C+

c++ - CUDA 编译器 (nvcc) 宏

是否有我可以使用的CUDA的#define编译器(nvcc)宏?(如Windows的_WIN32等。)我需要这个用于在nvcc和VC++编译器之间通用的头代码。我知道我可以继续定义我自己的并将其作为参数传递给nvcc编译器(-D),但如果已经定义了一个就好了。 最佳答案 __CUDACC__我认为这不会那么微不足道。检查以下线程http://forums.nvidia.com/index.php?showtopic=32369&st=0&p=179913&#entry179913 关于c

c++ - CUDA 链接错误 - Visual Express 2008 - 由于(空)配置文件导致 nvcc 致命

在过去的2周里,我一直在广泛寻找可能的解决方案来解决我的错误。我已经成功安装了Cuda64位编译器(工具)和SDK,以及64位版本的VisualStudioExpress2008和带有Framework3.5的Windows7SDK。我正在使用WindowsXP64位。我已经确认VSE能够以64位编译,因为我使用以下网站上的步骤可以使用所有64位选项:(因为VisualExpress本身不包含64位包)http://jenshuebel.wordpress.com/2009/02/12/visual-c-2008-express-edition-and-64-bit-targets/6

c++ - 为什么转置 CUDA 网格(但不是它的线程 block )仍然会减慢计算速度?

编辑:似乎,至少在这种情况下,转置网格对L2缓存带宽有负面影响。这是从视觉分析器获得的。原因我还不清楚。我遇到了需要转置CUDA网格的GPU计算情况。因此,如果block_{x,y}最初作用于数据区域d_{x,y},现在它作用于数据区域d_{y,x},因此block_{y,x}将作用于数据区域d_{x,y}。下图给出了一个示例。值得一提的是,线程并不是在每个block内部转置,即一旦block被定位,threadIdx.x和threadIdx.y值以正常方式分别用于它们的x和y偏移。据我所知,理论上这种设计应该不会损害性能,因为仍然保留了内存合并模式,即block内的线程没有被转置,它

c++ - 如何在 CUDA 内核中使用 Eigen

Eigen是一个C++线性代数库http://eigen.tuxfamily.org.使用基本数据类型(如基本float组)很容易,只需将其复制到设备内存并将指针传递给cuda内核。但是Eigen矩阵是复杂类型,如何将其复制到设备内存并让cuda内核读取/写入它? 最佳答案 自2016年11月(Eigen3.3发布)以来,存在一个新选项:在CUDA内核中直接使用Eigen-参见thisquestion.来自链接问题的示例:__global__voidcu_dot(Eigen::Vector3f*v1,Eigen::Vector3f*

c++ - 对 CUDA/openCL 和 C++ AMP 的困惑

我了解到微软正在与Nvidia密切合作以提高AMP性能。但我的问题是:AMP是Microsoft的CUDA替代品吗?或者当NVIDIACUDA显卡可用时,AMP是否使用CUDA驱动程序?AMP是openCL的替代品吗?我还是很困惑.. 最佳答案 C++AMP是一个库(作为它的一部分,还引入了一个关键的语言扩展)。由于C++AMP是一个开放规范,它可以在任何其他低级语言上实现。Microsoft的实现基于DirectCompute(因此也基于HLSL),但是当您使用C++AMP时,这对您完全隐藏(这就是C++AMP可以成为开放规范的原

c++ - 在 cuda 主机代码中使用 openMP?

是否可以在CUDA文件中(不在内核代码中)使用openMPpragma?我将结合gpu和cpu计算。但是如果我将porgram与openmp选项链接(在linux下),nvvc编译器会失败并显示“找不到未知选项'openmp'”一种解决方法是仅在c/c++文件中使用openMP-statments。 最佳答案 我刚刚找到了这个http://www.cse.buffalo.edu/faculty/miller/Courses/CSE710/heavner.pdf第25页说:使用gcc:-#includeomp.h添加-fopenmp标