使用nvcc编译器的-G参数进行编译时,GPU性能不佳
我正在进行一些测试,我意识到编译时使用-g参数比没有它的表现不好. 我已经检查了Nvidia的文档: --device-debug (-G) Generate debug information for device code. ,但这并没有帮助我知道为什么给我如此糟糕的表现的原因. 它在哪里生成此调试信息?何时?这种不良表现的原因是什么? 解决方案 使用-G switch 禁用大多数编译器优化 nvcc可能会在设备代码中使用.由于这个原因,最终的代码通常比未使用-G编译的代码慢. . 通过在每种情况下通过cuobjdump -sass myexecutable运行可执行文件并查看生成的设备代码,这很容易看到.在非-G情况下,您通常会看到设备代码较少,并且您也可以看到特定优化的差异. 这样做的原因之一是,高度优化的设备代码可以消除源代码和实际源代码变量的实际行.这可能会使调试代码非常困难.因此,
0 2023-05-23
编程技术问答社区
完全禁用NVCC的优化功能
我正在尝试测量GPU上的峰值单精度拖鞋,因为我正在修改PTX文件以在寄存器上执行连续的MAD指令.不幸的是,编译器正在删除所有代码,因为它实际上无用,因为我不执行数据的任何负载/存储.是否有编译器标志或Pragma可以添加到代码中,因此编译器不会触摸它? 谢谢. 解决方案 我认为没有任何方法可以关闭编译器中的此类优化.您可以通过添加代码来存储您的值并将该代码包裹在始终为false的条件语句中来解决此问题.为了使编译器无法确定始终为false的条件,请使用至少一个变量(不仅是常数). 其他解决方案 要完全禁用NVCC的优化,您可以使用以下内容: nvcc -O0 -Xopencc -O0 -Xptxas -O0 // sm_1x targets using Open64 frontend nvcc -O0 -Xcicc -O0 -Xptxas -O0 // sm_2x and sm_3x targets using NVVM frontend 请注意,结果
4 2023-05-12
编程技术问答社区
在C++中链接Cuda的问题
我已经搜索了现有的问题,但是我似乎无法解决这个问题. 我有一个blur_mask.cc文件: #include #include #include #include #include #include #include extern "C" void gpuBlurMask(unsigned char* srcData, int srcStep, uchar3* dst, int dstStep, int width, int height, float *mask, int maskStep, int maskWidth, int maskHeight, int blockSize=16); using namespace std; using
2 2023-05-10
编程技术问答社区
nvprof命令错误:没有找到cupti64_102.dll
当我尝试在命令提示中运行nvprof命令时,系统erros弹出并说:"执行代码无法进行,因为找不到cupti64_102.dll.重新安装程序可能会解决此问题." > 我已经安装了CUDA工具包10.2,但cupti64_102.dll不在/bin中. 系统:Windows 10,Quadro K4200,CUDA10.2,CUDA工具包10.2 解决方案 只需转到环境变量选择路径 将以下字符串添加到您的路径 c:\ program文件\ nvidia gpu计算工具包\ cuda \ v10.2 \ extras \ cupti \ lib64 然后nvprof将按预期工作.
6 2023-05-02
编程技术问答社区
NVCC致命:不支持的GPU架构" Compute_86"
我有一个nvidia rtx 3090 ti 24gb,带有此驱动程序 CUDA Version: 11.4 Driver Version: 470.74 18.04.1-Ubuntu SMP Cuda compilation tools, release 9.1, V9.1.85 我已经寻找了此卡体系结构,它是安培的,因此库的版本是Compute_86或SM_86(如果我没有错).但是在使用NVCC编译时,它给了我 NVCC致命:不支持的GPU架构'Compute_86' 我已经运行了NVCC-螺旋 - 我发现了一些奇怪的东西,它使我回报了GPU代码和GPU-Architecture 允许此选项的值:'Compute_30','Compute_32','Compute_35', 'compute_37','compute_50','compute_52','compute_53','compute_60','compute_61', 'compute
58 2023-05-02
编程技术问答社区
关于创建CUDA上下文的区别
我有一个使用三个内核的程序.为了获得加速,我正在做一个虚拟记忆副本以创建上下文,如下所示: __global__ void warmStart(int* f) { *f = 0; } 我想在内核之前启动,如下所示: int *dFlag = NULL; cudaMalloc( (void**)&dFlag, sizeof(int) ); warmStart>>(dFlag); Check_CUDA_Error("warmStart kernel"); 我还阅读了以cudaFree(0)或cudaDevicesynchronize()创建上下文的其他最简单方法.但是,使用这些API调用比使用虚拟内核更糟糕. 强迫上下文后,程序的执行时间为虚拟内核的0.000031秒,0.000064秒为0.000064秒,cudadevicesynchronize()和cudafree(0).时间是该程序的10个个人执行的平均值. 因此,我得出的结论
0 2023-05-02
编程技术问答社区
不支持的GPU架构compute_30在支持CUDA 5的GPU上。
我目前正在尝试在最新的CUDA工具包上编译Darknet,即11.1版.我有一个能够运行CUDA版本5的GPU,即GEFORCE 940m.但是,在使用最新的CUDA工具包重建DarkNet时,它说 NVCC致命:不支持的GPU架构'Compute_30' COMPUTE_30用于版本3,当我的GPU可以运行版本5时,它如何失败 我的代码是否可能检测到我的英特尔图形卡,而不是我的NVIDIA GPU?如果是这样,是否可以更改检测? 解决方案 支持compute_30的支持已被删除,以 CUDA 10.2 .因此,如果您使用的是NVCC,请确保使用此标志来定位DarkNet构建系统中正确的体系结构 -gencode=arch=compute_50,code=sm_50 您可能还需要使用此方法来避免对架构的警告. . -Wno-deprecated-gpu-targets 其他解决方案 我添加了以下内容: makefiletemp = open
0 2023-05-02
编程技术问答社区
为CPU编译cuda代码
我正在学习CUDA 5.5,但我没有任何NVIDIA GPU.在旧版本中,NVCC有一个标志 - 多层,用于编译CPU的CUDA代码. 在新版本的NVCC中,有什么选择?我正在研究Linux. 解决方案 CUDA工具包,因为至少CUDA 4.0不支持没有GPU的CUDA代码的能力. 如果您只想编译代码,请参阅这个问题. 如果您想使用CUDA 5.5编译的CUDA代码,则需要CUDA能够的GPU. 如果您愿意使用较旧的CUDA工具包,则可以安装各种模拟器之一,例如,或者您可以安装一个非常旧的(例如〜CUDA 3.0)CUDA工具包,该工具包具有在CPU上运行CUDA代码的能力. 其他解决方案 理想情况下,您可以访问兼容CUDA兼容的NVIDIA GPU. 但是,除此之外,这是一个可能会有所帮助的模拟器: https://code.google.com/p/cuda-waste/p/cuda-waste/> 如果您有一个Linux盒,也可以
0 2023-05-02
编程技术问答社区
当使用cudaMallocManaged时,为什么NVIDIA Pascal GPU在运行CUDA Kernels时速度很慢?
我和Pascal Titan X GPU一起测试了新的CUDA 8,并且期望我的代码速度提高,但由于某种原因,它最终会变慢.我在Ubuntu 16.04. 这是可以重现结果的最小代码: cudasample.cuh class CUDASample{ public: void AddOneToVector(std::vector &in); }; cudasample.cu __global__ static void CUDAKernelAddOneToVector(int *data) { const int x = blockIdx.x * blockDim.x + threadIdx.x; const int y = blockIdx.y * blockDim.y + threadIdx.y; const int mx = gridDim.x * blockDim.x; data[y * mx + x] = dat
0 2023-05-02
编程技术问答社区
CUDA nvcc构建库链
我的目标是:library2.so正在使用library1.so和mycode.o正在使用(libs链接)library2.so(也许是library1.so). 源代码为(省略了一个线标头文件): library1.cu: __device__ void func1_lib1(void){} library2.cu: #include "library1.h" __global__ void func1_lib2(void) { func1_lib1(); } extern "C" void func2_lib2(void) { func1_lib2>>(); } mycode.c: #include "library2.h" int main(void) { func2_lib2(); } 我正在构建共享库用makefile broken: rm -f *.o *.so nvcc -
4 2023-04-19
编程技术问答社区
如何在google colab中向nvcc传递标志?
我想使用__device__ lambda,但它说我需要传递标志' - exptended-lambda'. 我在Colab中使用此环境. !wget https://developer.nvidia.com/compute/cuda/9.2/Prod/local_installers/cuda-repo-ubuntu1604-9-2- local_9.2.88-1_amd64 -O cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64.deb !dpkg -i cuda-repo-ubuntu1604-9-2-local_9.2.88-1_amd64.deb !apt-key add /var/cuda-repo-9-2-local/7fa2af80.pub !apt-get update !apt-get install cuda-9.2 !nvcc --version !pip install git+git://github.
0 2023-04-13
编程技术问答社区
当你不使用NVCC时,是否使用了NVIDIA的JIT编译缓存?
我们都应该知道(但没有足够的人),当您使用NVCC构建CUDA程序时,并将其运行在该设备上,该设备的特定设备完全编译(SASS)代码不包含在二进制中 - 中间PTX代码被jited,结果实际上用于运行内核.在此期间,a 现在,假设我正在编写C ++文件,该文件在运行时动态编译内核,而不是使用NVCC,例如: 我使用NVRTC的nvrtcCompileProgram()来编译CUDA C ++代码,以具体体系结构为目标(例如sm_70). 我使用cuda驱动程序的cuModuleLoad()将PTX文件加载带有内核. 会将汇编结果放在该缓存中吗? 解决方案 您所描述的缓存行为与NVCC或NVRTC无关.运行时JIT编译代码的缓存是驱动程序级别机制,主要用于实现较新的硬件与旧代码的兼容性. 使用运行时或驱动程序API运行CUDA代码时,有三种情况需要考虑运行内核: 该应用程序为驱动程序提供了兼容的SASS(是运行时API应用程序中的静态链接有效载荷,或从文件
22 2023-04-13
编程技术问答社区
我如何让PTX文件执行
我知道如何从.cu生成.ptx文件,以及如何从.ptx.生成.cubin文件,但我不知道如何获得最终可执行文件. 更具体地说,我有一个sample.cu文件,该文件已编译为sample.ptx.然后,我使用NVCC将sample.ptx编译为sample.cubin.但是,如果没有主机代码,就无法直接执行此.cubin文件.如何将文件链接到我的原始.cu文件以生成最终可执行文件? 解决方案 您应该能够使用CumoduleLeLoLoDdataex直接从CUDA驱动程序API运行PTX代码.有一个示例其他解决方案 在CUDA 4.0开始,您可以在CUDA内核中写入inline ptx.
4 2023-04-13
编程技术问答社区
安装cudatoolkit时缺少Nvcc?
我已经沿着Pytorch安装了 conda install pytorch torchvision cudatoolkit=10.0 -c pytorch 但是,似乎没有安装NVCC.如果我想使用例如nvcc -V,我会发现找不到NVCC的错误,并且我应该使用sudo apt install nvidia-cuda-toolkit.安装它 我可以做到这一点(我不想尝试,然后发现它不起作用/使整个CUDA设置弄乱). 这是错误还是预期的行为? 我正在使用Ubuntu 18.04,并具有CUDA 10.2 解决方案 在使用Pytorch 1.4安装10.1的cudatoolkit时遇到了这个问题. 有一个conda-forge软件包https://anaconda.org/conda-forge/cudatoolkit-dev.安装此后,nvcc以及其他CUDA库将在bin/和lib/中提供. . 其他解决方案 您可以尝试 conda install
4 2023-04-13
编程技术问答社区
使用nvcc编译时出现 "没有这样的文件或目录"
我正在尝试使用Ubuntu上的NVCC编译CUDA代码.但是,当我这样做时,我将获得此输出: > make /usr/local/cuda/bin/nvcc -m64 --ptxas-options="-v" -gencode arch=compute_11,code=sm_11 -gencode arch=compute_13,code=sm_13 -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -o main main.cu gcc: No such file or directory make: *** [main] Error 1 即使我试图在其中只有一个主函数编译文件,它仍然不起作用: > /usr/local/cuda/bin/nvcc main.cu gcc: No such file or
20 2023-04-13
编程技术问答社区
当我有一个表面声明时,我怎样才能为sm_1X和sm_2X编译CUDA程序?
我正在写一个使用表面的库(重新样本并写入纹理)以获得性能: ... surface my_surf2D; //allows writing to a texture ... 目标平台GPU具有计算能力2.0,我可以用: 编译我的代码 nvcc -arch=sm_20 ... 而且它可以正常工作. 问题是,当我试图开发和调试笔记本电脑上的库,该笔记本电脑具有带有计算能力1.1的nvidia ion gpu(我也希望我的库向后兼容).我知道此体系结构不支持表面 #if (__CUDA_ARCH__
8 2023-04-08
编程技术问答社区
如何配置mex将编译器标志传递给nvcc?
在用nvcc编译mex文件时,我一直在努力将CUDA特定的编译器选项传递给nvcc编译器,因为mex mex无法识别它们. 我找到了一些有关传递编译器标志的旧帖子和一些较新的, 但是这些问题非常针对用户,而且mex编译器多年来发生了变化,因此我无法弄清楚该怎么做. 那么,我的具体问题:我该怎么做才能使mex将编译器标志传递给nvcc? 更通用:一个使mex将编译器标志传递给另一个编译器的应该做什么? 解决方案 如果使用XML文件中选项的最新编译方式,则可以将其中的默认编译标记进行编码.例如,我的看起来像: COMPILER="nvcc" COMPFLAGS="-gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_35,code=sm_35 -gencode=arch=compute_50,code=\&q
0 2023-03-27
编程技术问答社区
我怎样才能向mexcuda编译器指定一个最小的计算能力来编译一个mex函数?
我在.cu文件中有一个CUDA项目,我想使用mexcuda将其编译到.mex文件中.因为我的代码利用了64位浮点原子操作atomicAdd(double *, double),它仅适用于计算能力6.0或更高的GPU设备,因此我需要在编译时将其指定为标志. 在我的标准IDE中,这可以正常工作,但是当使用mexcuda编译时,这无法正常工作.在mexcuda('-v', 'mexGPUExample.cu', 'NVCCFLAGS=-gencode=arch=compute_60,code=sm_60') 但是,当我在文件上使用此命令时,详细选项吐出以下行: Building with 'NVIDIA CUDA Compiler'. nvcc -c --compiler-options=/Zp8,/GR,/W3,/EHs,/nologo,/MD - gencode=arch=compute_30,code=sm_30 -gencode=arch=compute_50,co
0 2023-03-27
编程技术问答社区
抑制 "堆栈大小不能动态确定 "的警告?
我会收到cuda警告 ptxas warning : Stack size for entry function '_Z13a_test_kernelv' cannot be statically determined. 现在,我知道它的含义,并且有一个所以质疑为什么会发生.我想抑制警告(使用NVCC 10.x编译时).我可以吗?如果是这样,我到底要在哪里放置警告#pragma? 解决方案 添加--nvlink-options -suppress-stack-size-warning使用NVCC 编译时
24 2023-03-23
编程技术问答社区