我正在一台计算机上工作,Nvidia 驱动程序和 Cuda 是由其他人安装的,所以我不知道他们安装它们的方法。其中/usr/local/有两个目录cuda和cuda.10.0。运行nvidia-smi会输出:
CUDA版本:11.0
这让我相信系统上安装了两个 cuda 版本,这导致了一些错误。
在这个问题之后,我首先删除了 cuda:
sudo apt-get --purge remove "*cublas*" "cuda*" "nsight*"
Run Code Online (Sandbox Code Playgroud)
然后做
sudo rm -rf /usr/local/cuda*
Run Code Online (Sandbox Code Playgroud)
(我没有卸载 nvidia-drivers 并且Driver Version: 450.80.02已安装)。运行nvidia-smi仍然输出:
CUDA版本:11.0
如何卸载cuda 11?我更喜欢 cuda 10,但找不到 cuda 11 的安装位置。
我还需要卸载 nvidia 驱动程序吗?
看来我误解了本地内存,认为访问速度很快,并且在内核中分配一个大数组可以利用它,这将是一件好事。然而,经过一番谷歌搜索后,看起来本地内存实际上是全局内存的一部分,因此访问速度会很慢。所以现在我试图准确理解当我在内核中分配一个大数组时会发生什么。考虑到寄存器非常有限,数组肯定无法容纳在该空间中。剩余部分是否会溢出并写入本地分配的全局内存空间?它的各个部分是否根据需要移入和移出寄存器?如果我必须在内核中多次读写它,那么它是否以某种方式缓存,可以减轻它是全局内存的事实?线程实际可以使用多少内存来动态分配数组,这个限制只是全局内存量除以线程数吗?
如果这对你答案中的数字很重要,我正在使用 V100。谢谢!
在 CUDA 编程指南的共享内存部分中,它指出 warp 的共享内存访问不是序列化的,而是广播读取的。
然而,它没有说明如果整个块请求相同的内存地址会发生什么。warp 之间的访问是串行的还是 CUDA 可以广播到整个块。
我的案例的演示代码
// Assume 1024 sized int array
__global__ add_from_shared(int* i, int* j, int* out)
{
__shared__ int shmem[1024];
shmem[threadIdx.x] = i[threadIdx.x];
...
Do some stuff
...
// Is the shared memory call here serilized between warps or is it a broadcast over the entire block?
j[threadIdx.x] += shmem[0];
}
Run Code Online (Sandbox Code Playgroud)
谢谢
这个问题可以与我的另一个问题相关查看。
我尝试并行运行多个机器学习进程(使用 bash)。这些是使用 PyTorch 编写的。在一定数量的并发程序(我的例子中是 10 个)之后,我收到以下错误:
RuntimeError: Unable to find a valid cuDNN algorithm to run convolution
Run Code Online (Sandbox Code Playgroud)
正如这个答案中提到的,
...发生这种情况的原因可能是达到了 VRAM 内存限制(从错误消息来看,这相当不直观)。
对于我的 PyTorch 模型训练案例,减小批量大小有帮助。您可以尝试此操作,或者减小模型大小以消耗更少的 VRAM。
我尝试了此处提到的解决方案,以强制执行每个进程的 GPU 内存使用限制,但此问题仍然存在。
对于单个进程或较少数量的进程,不会出现此问题。由于同一时刻只有一个上下文运行,为什么这会导致内存问题?
使用/不使用 MPS 时都会出现此问题。我认为 MPS 可能会出现这种情况,但其他情况则不然,因为 MPS 可能会并行运行多个进程。
我无法在代码中使用 glXSwapBufferEXT,我得到未声明的标识符。但例如 glXQueryDrawable 可以工作。
在我的 cmake 文件中,我链接了 Opengl 库,并将它们包含在编译器中。
在我的标题中,我包括 GL/glx.h 和 GL/glxext.h。
运行 glxinfo 显示 GLX_EXT_swap_control 存在,并且在我的应用程序中测试扩展也显示它在运行时存在。
我究竟做错了什么?我错过了什么吗?
我为 Quadro K5000 安装了 NVIDIA 346.47 驱动程序
Linux gcc4.9/clang3.5
我在一台拥有四个内核的cpu的机器上运行cuda程序,如何更改cuda c程序以使用所有四个内核和所有可用的gpu?
我的意思是我的程序在gpus计算之前也在主机端执行操作'...
谢谢!
我尝试学习CUDA。它与 C 非常相似。我尝试在我的 GPU 中运行一些代码。但我认为它并不快,我认为这与我的代码有关。我想只有我 __global__ void func(ull* num1, ull* num2, ull* sum)在 GPU 上工作。这就是我要的。但它并不快。我该怎么办。
typedef uint64_t ull;
#define E1 1
#define E2 5000000000000000
__global__ void func(ull* num1, ull* num2, ull* sum)
{
for (ull i = *num1; i <= *num2; i++)
{
sum[0] += i;
}
}
int main()
{
ull n1 = E1;
ull n2 = E2;
ull sum = 0;
ull* d_n1;
ull* d_n2;
ull* d_sum;
cudaMalloc(&d_n1, sizeof(ull));
cudaMalloc(&d_n2, sizeof(ull));
cudaMalloc(&d_sum, sizeof(ull));
cudaMemcpy(d_n1, &n1, sizeof(ull), cudaMemcpyHostToDevice); …Run Code Online (Sandbox Code Playgroud)