标签: nvcc

nvcc -Xptxas -v编译器标志无效

我有一个CUDA项目.它由几个包含我的应用程序逻辑的.cpp文件和一个包含多个内核的.cu文件以及一个__host__调用它们的函数组成.

现在我想确定我的内核使用的寄存器数量.我的普通编译器调用如下所示:

nvcc -arch compute_20 -link src/kernel.cu obj/..obj obj/..obj .. -o bin/..exe -l glew32 ...

不幸的是,在此调用中添加"-Xptxas -v"编译器标志无效.编译器仍然生成与以前相同的文本输出.编译后的.exe也可以像以前一样工作,只有一个例外:我的帧速率从80fps上升到1800fps.

cuda nvcc

9
推荐指数
3
解决办法
7135
查看次数

cuda的虚拟和真实架构之间的差异

试图理解cuda的虚拟和真实架构之间的差异,以及不同的配置如何影响程序的性能,例如

-gencode arch=compute_20,code=sm_20
-gencode arch=compute_20,code=sm_21
-gencode arch=compute_21,code=sm_21
...
Run Code Online (Sandbox Code Playgroud)

NVCC手册中给出了以下说明,

GPU编译通过中间表示PTX([...])执行,可以将其视为虚拟GPU架构的程序集.与实际的图形处理器相反,这种虚拟GPU完全由它提供给应用程序的一组功能或特征来定义.特别地,虚拟GPU架构提供(大部分)通用指令集,并且二进制指令编码不是问题,因为PTX程序总是以文本格式表示.因此,nvcc编译命令总是使用两种体系结构:用于指定虚拟中间体系结构的计算体系结构,以及用于指定要执行的目标处理器的真实GPU体系结构.要使这样的nvcc命令有效,真实体系结构必须是虚拟体系结构的实现(某种程度或另一种).这将在下面进一步解释.所选择的虚拟架构更多地是关于应用程序所需的GPU功能的声明:使用最小的虚拟架构仍然允许第二个nvcc阶段的最广泛的实际架构.相反,指定提供应用程序未使用的功能的虚拟体系结构会不必要地限制可在第二个nvcc阶段中指定的可能GPU集.

但仍然不太明白性能会受到不同配置的影响(或者,可能只会影响物理GPU设备的选择?).特别是,这句话对我来说最让人困惑:

特别地,虚拟GPU架构提供(大部分)通用指令集,并且二进制指令编码不是问题,因为PTX程序总是以文本格式表示.

cuda nvcc

9
推荐指数
1
解决办法
2473
查看次数

编译CPU的cuda代码

我正在研究cuda 5.5,但我没有任何Nvidia GPU.在旧版本的nvcc中有一个标志--multicore来编译CPU的cuda代码.在新版本的nvcc中,有什么选择?我正在研究Linux.

cuda nvidia nvcc

9
推荐指数
2
解决办法
1万
查看次数

nvcc致命:没有为选项'gpu-architecture'定义值'sm_20'

我看了很多页面,或者不能按照他们的说法去做,因为他们不清楚和/或我的知识还不够.

我想跑:

luarocks install https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec

这样我就可以使用GPU加速在一些图像上运行DenseCap.当我运行它时,我收到此错误:

$ luarocks install https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec
Using https://raw.githubusercontent.com/qassemoquab/stnbhwd/master/stnbhwd-scm-1.rockspec... switching to 'build' mode
Cloning into 'stnbhwd'...
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 0), reused 14 (delta 0), pack-reused 0
Receiving objects: 100% (24/24), 19.42 KiB | 0 bytes/s, done.
Checking connectivity... done.
cmake -E make_directory build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH="/home/tex/torch/install/bin/.." -DCMAKE_INSTALL_PREFIX="/home/tex/torch/install/lib/luarocks/rocks/stnbhwd/scm-1" && make

-- The C compiler identification is GNU 5.4.0
-- …
Run Code Online (Sandbox Code Playgroud)

cuda nvidia nvcc luarocks torch

9
推荐指数
2
解决办法
6536
查看次数

如何编译PTX代码

我需要修改PTX代码并直接编译.原因是我想要一个接一个地有一些特定的指令,并且很难编写一个导致我的目标PTX代码的cuda代码,所以我需要直接修改ptx代码.问题是我可以将它编译为(fatbin和cubin),但我不知道如何将这些(.fatbin和.cubin)编译为"Xo"文件.

cuda nvcc ptx

8
推荐指数
2
解决办法
8004
查看次数

编译GPU的C++程序的一部分

是否可以将带有nvcc的GPU编译(C++)代码转换为共享对象(.so文件)并从C++程序动态加载它(在本例中,Cern的ROOT,它本质上是一个C++解释器("CINT")) ).

我想要运行的一个简单示例是:

extern "C"
void TestCompiled() {
  printf("test\n");
  exit(0); 
}
Run Code Online (Sandbox Code Playgroud)

这段代码是用nvcc --compiler-options '-fPIC' -o TestCompiled_C.so --shared TestCompiled.cu.编译的.使用以下命令将共享对象加载到ROOT:

{ // Test.C program
  int error, check;
  check = gROOT->LoadMacro("TestCompiled_C.so", &error);
  cout << "check " << check << " " << " error: " << error << endl;
  TestCompiled();  // run macro
  exit(0); 
}
Run Code Online (Sandbox Code Playgroud)

加载库好,但找不到TestCompiled():

$ root -b -l Test.C
root [0] 
Processing Test.C...
check 0  error: 0
Error: Function Hello() is not defined …
Run Code Online (Sandbox Code Playgroud)

c++ dynamic-linking nvcc

8
推荐指数
1
解决办法
1381
查看次数

限制CUDA中的寄存器使用:__ launch_bounds__ vs maxrregcount

来自NVIDIA CUDA C编程指南:

可以使用maxrregcount编译器选项控制寄存器使用,也可以按启动边界中的描述启动边界.

从我的理解(并纠正我,如果我错了),虽然-maxrregcount限制整个.cu文件可能使用的寄存器数量,__launch_bounds__限定符定义maxThreadsPerBlockminBlocksPerMultiprocessor每个__global__内核.这两个完成相同的任务,但有两种不同的方式.

我的用法要求我40每个线程都有寄存器以最大化性能.因此,我可以使用-maxrregcount 40.我也可以40通过使用强制寄存器,__launch_bounds__(256, 6)但这会导致加载和存储寄存器溢出.

导致这些寄存器泄漏的两者之间有什么区别?

cuda gpu nvidia nvcc

8
推荐指数
1
解决办法
5093
查看次数

Cuda - nvcc - 没有可在设备上执行的内核映像。问题是什么?

我正在尝试将 nvcc 与最简单的示例一起使用,但它无法正常工作。我正在编译并执行来自https://devblogs.nvidia.com/easy-introduction-cuda-c-and-c/的示例,但是我的服务器无法执行全局函数。我重写了代码以获取一些错误消息,并收到以下消息:“没有可在设备上执行的内核映像”

我的 GPU 是 Quadro 6000,cuda 版本是 9.0。

#include <stdio.h>
#include <cuda_runtime.h>

__global__ void saxpy(int n, float a, float *x, float *y)
{
  int i = blockIdx.x*blockDim.x + threadIdx.x;
  y[i] = 10.0; //a*x[i] + y[i];  
}

int main(int argc, char *argv[])
{
  int N = 120;
  int nDevices;
  float *x, *y, *d_x, *d_y;

  cudaError_t err = cudaGetDeviceCount(&nDevices);
  if (err != cudaSuccess) 
    printf("%s\n", cudaGetErrorString(err));
  else
    printf("Number of devices %d\n", nDevices);

  x = (float*)malloc(N*sizeof(float));
  y = …
Run Code Online (Sandbox Code Playgroud)

cuda nvcc

8
推荐指数
1
解决办法
2万
查看次数

支持 CUDA 5 的 GPU 上不受支持的 GPU 架构计算_30

我目前正在尝试在最新的 CUDA 工具包(版本 11.1)上编译 Darknet。我有一个能够运行 CUDA 版本 5 的 GPU,它是 GeForce 940M。然而,在使用最新的 CUDA 工具包重建暗网时,它说

nvcc 致命:不支持的 GPU 架构“compute_30”

compute_30 适用于版本 3,当我的 GPU 可以运行版本 5 时它怎么会失败 我的代码是否有可能检测到我的英特尔显卡而不是我的 Nvidia GPU?如果是这种情况,是否可以更改其检测?

cuda nvidia nvcc darknet yolo

8
推荐指数
1
解决办法
1万
查看次数

nvcc fatal:不支持的 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
Run Code Online (Sandbox Code Playgroud)

我已经找到了这个卡架构,它是Ampere,所以库的版本是compute_86或sm_86(如果我没记错的话)。但是用 nvcc 编译时它给了我返回

nvcc fatal:不支持的 GPU 架构“compute_86”

我运行了 nvcc --help 并且发现了一些奇怪的东西,它返回了我的 gpu-code 和 gpu-architecture

此选项允许的值:'compute_30'、'compute_32'、'compute_35'、'compute_37'、'compute_50'、'compute_52'、'compute_53'、'compute_60'、'compute_61'、'compute_62'、'compute_70'、 'compute_72','sm_30','sm_32','sm_35','sm_37','sm_50','sm_52','sm_53','sm_60','sm_61','sm_62','sm_70','sm_72 '。

所以我缺少任何驱动程序版本或某些必须下载的库,或者我无法使用我的 GPU 进行编译?

ubuntu compiler-errors nvidia nvcc pytorch

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

nvcc ×10

cuda ×8

nvidia ×5

c++ ×1

compiler-errors ×1

darknet ×1

dynamic-linking ×1

gpu ×1

luarocks ×1

ptx ×1

pytorch ×1

torch ×1

ubuntu ×1

yolo ×1