标签: gpu

CUDA:如何将多个重复的参数传递给CUDA内核

我正在寻找一种在CUDA内核中传递多个重复参数的优雅方法,

众所周知,每个内核参数都位于每个CUDA线程的堆栈中,因此,内核传递给每个线程的参数之间可能存在重复,每个线程都位于每个堆栈上.

为了最大限度地减少传递的重复参数的数量,我正在寻找一种优雅的方式.

为了解释我的担忧:假设我的代码如下:

   kernelFunction<<<gridSize,blockSize>>>(UINT imageWidth, UINT imageWidth, UINT imageStride, UINT numberOfElements,x,y,ect...)
Run Code Online (Sandbox Code Playgroud)

UINT imageWidth,UINT imageWidth,UINT imageStride,UINT numberOfElements参数位于每个线程库存中,

我正在寻找一个技巧来发送更少的参数并从其他来源访问数据.

我正在考虑使用常量内存,但由于常量内存位于全局,因此我将其删除.不用说内存位置应该很快.

任何帮助,将不胜感激.

performance cuda gpu gpgpu

-1
推荐指数
1
解决办法
719
查看次数

Cuda中warp调度和warp上下文切换之间的关系

据我了解,就绪的warp是可以在warp调度中执行的warp。等待扭曲正在等待获取或计算源操作数,因此无法执行。Warp 调度程序选择一个准备好的 warp 来执行“warp 调度”。

另一方面,当一个 warp 出现管道停顿或全局内存延迟较长时,另一个 warp 将被执行以隐藏延迟。这就是cuda中“warp上下文切换”的基本思想。

我的问题是:Cuda中的warp调度和warp上下文切换之间有什么关系。为了详细说明我的问题,下面是一个例子。

例如,当warp A 停止时,warp A 是等待获取全局内存的warp,一旦获取元素,warp A 将被调度或切换到就绪warp 池中。基于此,warp上下文切换是warp调度的一部分。这是对的吗?

任何人都可以提供有关 Cuda 中的 warp 上下文切换和 warp 调度的任何参考吗?英伟达似乎没有公开这些文件。

预先感谢您的回复。

cuda gpu scheduling context-switch

-1
推荐指数
1
解决办法
1126
查看次数

在CUDA计算能力3.5+中,所有线程(在SM上)是否真的每个都有255个寄存器?

我正在查看不同CUDA计算功能的以下最大值:

  1. 每个线程注册
  2. 每个寄存器(对称多处理器)
  3. 每个SM的线程

如出现在这里.嗯,它看起来像CUDA 3.5及以上,至少1 x 3> 2.这意味着虽然单个线程最多可以使用255个寄存器,但如果有太多线程尝试这样做,则会发生寄存器溢出.我的解释是否正确?或者说图1.不是真的正确,每个线程真的有64个寄存器吗?

cuda gpu gpgpu

-1
推荐指数
1
解决办法
260
查看次数

GTX 1070中的FP64 CUDA内核数量

我找到了有关特斯拉P100每个SM包含多少CUDA核心的信息.它的64*FP32和32*FP64.我无法找到GTX 1070的任何数字.

也是后续问题.由于特斯拉的核心比例为1:2,这意味着双精度性能是单精度内核性能的最大值的一半吗?

hardware cuda gpu

-1
推荐指数
1
解决办法
602
查看次数

R在云中的GPU上

我必须每天对包含600万行和20多列的数据集运行回归.我想加快计算速度并将其移入云端.是tensorflow.rstudio目前我的目的是最好的选择?

gpu regression r amazon-ec2 tensorflow

-1
推荐指数
1
解决办法
49
查看次数

使用bsxfun和GPU在matlab中矢量化嵌套循环

因为循环似乎非常慢,所以我想知道下面显示的代码中的嵌套循环是否可以使用矢量化bsxfun,也许GPU也可以引入.

%// Paramaters
i = 1;
j = 3;
n1 = 1500;
n2 = 1500;

%// Pre-allocate for output
LInc(n1+n2,n1+n2)=0;

%// Nested Loops - I 
for x = 1:n1
    for y = 1:n1
        num = ((n2 ^ 2) * (L1(i, i) + L2(j, j) + 1)) - (n2 * n * (L1(x,i) + L1(y,i)));
        LInc(x, y) = L1(x, y) + (num/denom);
        LInc(y, x) = LInc(x, y);
    end
end

%// Nested Loops - II
for x = 1:n1 …
Run Code Online (Sandbox Code Playgroud)

performance matlab gpu vectorization bsxfun

-2
推荐指数
1
解决办法
685
查看次数

声明"在给定SM上运行的所有线程可能合作"是真还是假?

在Udacity的测验:线程和块"并行编程简介"中,它询问语句"在给定SM上运行的所有线程可以合作解决问题"是真还是假.答案是错误的,但我认为应该是真的,因为:

  • 它使用"可能"而不是"必须".
  • 一些论文正在谈论块间GPU通信.

我有什么误解吗?

cuda gpu gpgpu

-2
推荐指数
1
解决办法
64
查看次数

大量计算导致 OpenGL 崩溃

我是 OpenGL 的新手。我的第一个项目是渲染一个 mandelbrot 集(我觉得这很有趣)并且由于必须完成的计算的性质,我认为最好在 GPU 上进行(基本上我在每个复杂平面的一部分的点,很多时间,我根据输出为这个点着色:大量可并行计算,这对 GPU 来说似乎不错,对吧?)。

因此,当单个图像没有太多计算时一切正常,但是一旦像素*迭代超过大约 90 亿,程序就会崩溃(显示的图像显示只计算了其中的一部分,青色部分是初始背景):

未完全计算 Mandelbrot 集的黑暗部分

事实上,如果计算总数低于这个限制但足够接近(比如 85 亿),它仍然会崩溃,但需要更多的时间。所以我猜有一些问题不会出现在足够少的计算中(在它到达那里之前它总是完美无缺地工作)。我真的不知道它可能是什么,因为我真的很陌生。当程序崩溃时,它说:“Mandelbrot Set.exe 中 0x000000005DA6DD38 (nvoglv64.dll) 处的未处理异常:请求致命程序退出。”。它也是在那里指定的相同地址(它仅在我退出 Visual Studio,我的 IDE 时才会更改)。

那么这里是整个代码,加上着色器文件(顶点着色器不做任何事情,所有计算都在片段着色器中):编辑:这是项目所有 .cpp 和 .h 文件的链接,代码太大而不能放在这里,无论如何都是正确的(虽然远非完美); https://github.com/JeffEkaka/Mandelbrot/tree/master

这是着色器:

NoChanges.vert(顶点着色器)

#version 400

// Inputs
in vec2 vertexPosition;  // 2D vec.
in vec4 vertexColor;

out vec2 fragmentPosition;
out vec4 fragmentColor;

void main() {
gl_Position.xy = vertexPosition;
gl_Position.z = 0.0;
gl_Position.w = 1.0;  // Default.

fragmentPosition = vertexPosition;

fragmentColor = vertexColor;

}
Run Code Online (Sandbox Code Playgroud)

CalculationAndColorShader.frag(片段着色器)

#version 400
uniform int …
Run Code Online (Sandbox Code Playgroud)

c++ opengl gpu mandelbrot

-2
推荐指数
1
解决办法
1307
查看次数

Vulkan:为什么1080 Ti在arch上的maxMemoryAllocationCount为4294967296但在Windows上只有4096?

我目前正在用C++构建一个游戏引擎,它使用vulkan进行渲染.在实现地形渲染器时,我达到了硬件限制,maxMemoryAllocationCount限制了分配的内存块数量.我检查了https://vulkan.gpuinfo.org/,看看不同GPU上的这个值有多高.在查看"GeForce GTX 1080 Ti"时,Windows的值为4096,而arch/manjaro的值为4294967296.为什么这些操作系统之间存在差异,何时这应该是硬件限制?

c++ gpu vulkan

-2
推荐指数
1
解决办法
379
查看次数

cuda运行时错误(48):没有内核映像可用于在设备上执行

我是pytorch的新手.我从这个存储库中获取了代码https://github.com/ruotianluo/ImageCaptioning.pytorch,并希望为图像制作标题.安装"CUDA",当我运行脚本来创建注释时,会产生以下结果:

$ CUDA_LAUNCH_BLOCKING = 1条蟒蛇eval.py --model model.pth - -infos_path infos.pkl --image_folder等等--num_images 1 /home/azat/anaconda2/lib/python2.7/site-packages/h5py/ 初始化的.py :36:FutureWarning:不推荐将issubdtype的第二个参数从floatto 转换为 np.floating.在将来,它将被视为np.float64 == np.dtype (float) .type.从进口._conv作为register_converters _register_converters /home/azat/anaconda2/lib/python2.7/site-packages/torch/cuda/ INIT的.py:97:UserWarning:实测值GPU0的GeForce 820M是CUDA能力2.1.PyTorch不再支持这款GPU,因为它太旧了.warnings.warn(old_gpu_warn%(d,name,major,capability 1))DataLoaderRaw从文件夹加载图片:blah 0列出目录中的所有图像blah DataLoaderRaw找到8张图片THCudaCheck FAIL文件=/pytorch/torch/lib/THC/generic/THCTensorMathPairwise.cu line = 40 error = 48:没有内核映像可用于设备Traceback(最近一次最后一次调用):文件"eval.py",第122行,在vars(opt)中文件"/ home/azat/Programing/Python/techno_atom_neuro/Others Implementation/ImageCaptioning.pytorch-master/eval_utils.py",第82行,在eval_split中data = loader.get_batch(split)文件"/ home/azat/Programing/Python/techno_atom_neuro/Others实现/ ImageCaptioning.pytorch-master/dataloaderraw.py",第112行,在get_batch img = Variable(preprocess(img),volatile = True)文件"/home/azat/anaconda2/lib/python2.7/site-packages/torchvision /transforms/transforms.py",第42行,在调用 img = t(img)文件"/home/azat/anaconda2/lib/python2.7/ site-packages/torchvision/transforms/transforms.py",第118行,在调用 返回F.normalize(tensor,self.mean,self.std)文件"/home/azat/anaconda2/lib/python2.7/site- packages/torchvision/transforms/functional.py",第161行,标准化t.sub_(m).div_(s)RuntimeError:cuda运行时错误(48):没有内核映像可以在/ pytorch /上的设备上执行火炬/ lib目录/ THC /通用/ THCTensorMathPairwise.cu:40

所以,我想知道这个错误是什么,硬件或软件.我该如何解决这个问题呢.谢谢.

PyTorch
OS: Ubuntu 16.04
PyTorch version: 0.3.1 pip …
Run Code Online (Sandbox Code Playgroud)

python cuda gpu python-2.7 pytorch

-2
推荐指数
1
解决办法
2553
查看次数