标签: gpu

相当于CUDA内核中的usleep()?

我想usleep()在CUDA内核中调用类似的东西.基本目标是使所有GPU核心休眠或忙碌数小时 - 这是我想为CUDA应用程序做的一些健全性检查的一部分.我这样做的尝试如下:

#include <unistd.h>
#include <stdio.h>
#include <cuda.h>
#include <sys/time.h>

__global__ void gpu_uSleep(useconds_t wait_time_in_ms)
{
    usleep(wait_time_in_ms);
}

int main(void)
{
    //input parameters -- arbitrary
    //   TODO: set these exactly for full occupancy
    int m = 16;
    int n = 16;
    int block1D = 16;
    dim3 block(block1D, block1D);
    dim3 grid(m/block1D, n/block1D);

    useconds_t wait_time_in_ms = 1000;

    //execute the kernel
    gpu_uSleep<<< grid, block >>>(wait_time_in_ms);
    cudaDeviceSynchronize();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用NVCC编译时出现以下错误:

error: calling a host function("usleep") from a __device__/__global__ 
       function("gpu_uSleep") is not …
Run Code Online (Sandbox Code Playgroud)

sleep cuda gpu usleep

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

共享内存带宽Fermi vs Kepler GPU

在访问共享内存时,Kepler的费用是Fermi的2倍还是4倍?

编程指南说明:"每个存储区每两个时钟周期带宽为32位"(对于2.X),"每个存储区的每个时钟周期带宽为64位"(3.X),因此暗示了4倍?

cuda gpu gpgpu nvidia

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

使C#mandelbrot绘图更有效率

首先,我知道这个问题听起来好像我没有搜索,但我做了很多.

我为C#编写了一个小的Mandelbrot绘图代码,它基本上是一个带有PictureBox的窗体,我在其上绘制了Mandelbrot集.

我的问题是,它是非常慢的.如果没有深度变焦,它可以很好地工作并且移动并且变焦非常平滑,每次绘制只需不到一秒钟,但是一旦我开始放大一点并到达需要更多计算的地方,它就变得非常慢.

在其他Mandelbrot应用程序上,我的计算机在我的应用程序中工作得慢得多的地方确实很好,所以我猜我可以做很多事情来提高速度.

我做了以下事情来优化它:

  • 我没有在位图对象上使用SetPixel GetPixel方法,而是使用LockBits方法直接写入内存,这使得事情变得更快.

  • 我没有使用复数对象(我自己创建的类,而不是内置的类),而是使用2个变量re和im模拟复数.这样做可以减少乘法,因为在计算过程中对实部和虚部进行平方是一些事情,所以我只需将方块保存在变量中并重复使用结果而无需重新计算.

  • 我使用4个线程绘制Mandelbrot,每个线程执行不同的图像四分之一,它们都同时工作.据我所知,这意味着我的CPU将使用其4个核心来绘制图像.

  • 我使用Escape Time算法,据我所知最快?

这是我如何在像素之间移动并计算,它被注释掉,所以我希望它是可以理解的:

        //Pixel by pixel loop:
        for (int r = rRes; r < wTo; r++)
        {
            for (int i = iRes; i < hTo; i++)
            {

                //These calculations are to determine what complex number corresponds to the (r,i) pixel.
                double re = (r - (w/2))*step + zeroX ;
                double im = (i - (h/2))*step - zeroY;

                //Create the Z complex number
                double zRe = 0;
                double zIm = 0;

                //Variables …
Run Code Online (Sandbox Code Playgroud)

c# optimization gpu fractals mandelbrot

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

将数据上传到共享内存中以用于卷积内核

我在参考评论中理解批量加载时遇到一些困难.为了计算像素中的卷积,大小为5的掩模必须以该特定像素为中心.图像被分为图块.应用卷积掩模后的这些图块是尺寸为的最终输出图块TILE_WIDTH*TILE_WIDTH.对于属于输出图块边框的像素,当此图块属于图像的边框时,图像必须从相邻图块借用一些像素.否则,这些借来的值被赋值为零.这两个步骤描述于

if (srcY >= 0 && srcY < height && srcX >= 0 && srcX < width)
    N_ds[destY][destX] = I[src];
else
    N_ds[destY][destX] = 0;
Run Code Online (Sandbox Code Playgroud)

因此,共享存储器阵列的TILE_WIDTH + Mask_width - 1每一侧都有尺寸.我不清楚代码的以下部分.

  1. destYdestX指数.将输出索引除以输入切片宽度意味着什么?
  2. srcY添加srcX索引.为什么destYdestX索引参与srcY添加srcX索引?

    srcY = blockIdx.y * TILE_WIDTH + destY - Mask_radius;

    srcX = blockIdx.x * TILE_WIDTH + destX - Mask_radius;

  3. 为什么在第二次加载时我们使用偏移TILE_WIDTH * TILE_WIDTH
  4. 一般来说,有两次加载的直观解释是什么?
  5. 所有这些问题都可以根据下面的图像进行直观的示例吗?
  6. 谢谢!

编辑:图片添加.在绿色中有输出瓦片,在红色中我们有掩模以114索引为中心.很明显,面具借用了不同瓷砖的元素.最后,该图像指的是一个通道.

示例: …

cuda gpu

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

Clojure上的GPU编程?

我想知道如果Clojure有任何GPU集成库会怎么样?

我已经看过这个涉及手动滚动OpenCL代码的例子,但我特别是我正在寻找类似于Anacoda的东西,它将Numpy Python表达式相对无缝地转换为CUDA代码.

我对OpenCL或Cuda方法持开放态度.

cuda gpu clojure opencl

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

用于(转)神经网络计算的CPU与GPU

我是AI的学生,今年他将与pylearn和Theano(我也可能尝试火炬和咖啡)合作实施神经网络,我即将为此买一台笔记本电脑.我希望根据您对此事的经验给予您帮助.

我没有很大的预算,所以我负担不起.我有两三个简单的问题:

哪个最适合图书馆,如theano,torch,caffe:ATINVIDIA?有没有人尝试过Geforce 740M 820M 840M上的GPU计算?它比CPU更好吗?或者如果我买不起巨大的GPU,那么购买带有i7的笔记本电脑比用这些(廉价)卡更好吗?

感谢您的时间,

cpu gpu machine-learning computer-vision neural-network

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

如何卸载 NVIDIA 内核模块“nvidia”以安装新驱动程序?

我需要升级我的 nvidia 驱动程序,以便我尝试运行NVIDIA-LInux-x86_64.run文件

但是,我看到以下消息

ERROR: An NVIDIA kernel module 'nvidia' appears to already be loaded in your kernel.  This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading.  Please be sure to exit any programs that may be using the GPU(s) before attempting to upgrade your driver.  If no GPU-based programs …
Run Code Online (Sandbox Code Playgroud)

ubuntu gpu nvidia tensorflow ubuntu-18.04

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

如何在 python 中重置 CUDA GPU

有没有办法在 python 中重新启动 CUDA GPU?或者释放它以便另一个脚本可以访问它?

\n\n

我有时会在 python 中使用 GPU 时遇到错误,再次访问 GPU 的唯一解决方案是重新启动我的 Jupyter 笔记本。

\n\n

PS:我使用 GPU 来使用 pytorch 进行一些计算。

\n\n

我得到的具体错误是:

\n\n
RuntimeError: CUDA error: device-side assert triggered\n
Run Code Online (Sandbox Code Playgroud)\n\n

我见过https://towardsdatascience.com/cuda-error-device-side-assert-triggered-c6ae1c8fa4c3和许多其他人讨论这个问题。我的主要问题是如何在不重新启动 Jupyter 内核的情况下继续使用 GPU 会话

\n\n

即我想捕获这个错误,我用 try/ except 执行此错误并继续,因为我正在一个接一个地训练多个模型,所以我无法重新启动来解决我的问题。

\n\n

编辑重新启动内核似乎是公认的天真的解决方案,请参阅:

\n\n

- https://forums.fast.ai/t/how-to-free-up-gpu-memory-in-pytorch-0-2-x/9256/2 \n- https://towardsdatascience.com/cuda -error-device-side-assert-triggered-c6ae1c8fa4c3,其中她提到“在 Kaggle 上工作?Here\xe2\x80\x99s 为什么即使按照上述步骤操作,你仍然在挣扎”

\n

python gpu pytorch

9
推荐指数
0
解决办法
6056
查看次数

macOS 从终端获取 GPU 历史记录(使用情况)

在最新版本的 Activity Monitor 中,可以按 CMD+4 并获取 GPU 使用情况的图形表示。但是,我想从我的本机 macOS 应用程序获取此信息,因此我正在寻找一种从 macOS 命令行获取此数据(显示在活动监视器中)的方法。

macOS 上的活动监视器 GPU 历史记录信息

macos terminal command-line gpu

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

除了“cuda”之外,您能否在“hip”或“OpenCL”等其他内容上加速 torch DL 训练?

我注意到torch.device可以接受一系列参数,确切地说是cpu, cuda, mkldnn, opengl, opencl, ideep, hip, msnpu

然而,在训练深度学习模型时,我只见过cuda或被cpu使用过。很多时候代码看起来像这样

if torch.cuda.is_available():
    device = torch.device("cuda")
else:
    device = torch.device("cpu")
Run Code Online (Sandbox Code Playgroud)

我从未见过其他任何人被使用,并且想知道它们是否可以使用以及如何使用。我相信配备 AMD 显卡的最新 MacBook 应该可以使用"hip",但这是真的吗?训练速度会与使用一个 CUDA GPU 相似吗?torch.device如果不是,那么如果实际上无法使用这些选项,那么接受这些选项又有什么意义呢?

gpu opencl deep-learning pytorch

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