标签: gpu-programming

CUDA是什么样的?它是为了什么?有什么好处?以及如何开始?

我有兴趣在一些新技术下开发,我正在考虑尝试CUDA.现在......他们的文档太技术性,无法提供我正在寻找的答案.另外,我想听听那些已经有过CUDA经验的人的答案.

基本上我的问题是标题中的问题:

什么是CUDA?(它是一个框架吗?还是一个API?什么?)

它是为了什么?(还有什么不仅仅是编程到GPU?)

它是什么样的?

针对CUDA编程而不是编程到CPU有什么好处?

使用CUDA开始编程的好地方是什么?

cuda nvidia gpu-programming

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

printf里面有CUDA __global__函数

我目前正在GPU上编写矩阵乘法并希望调试我的代码,但由于我不能在设备函数中使用printf,我还能做些什么来查看该函数内部的内容.这是我目前的功能:

__global__ void MatrixMulKernel(Matrix Ad, Matrix Bd, Matrix Xd){

    int tx = threadIdx.x;
    int ty = threadIdx.y;

    int bx = blockIdx.x;
    int by = blockIdx.y;

    float sum = 0;

    for( int k = 0; k < Ad.width ; ++k){
        float Melement = Ad.elements[ty * Ad.width + k];
        float Nelement = Bd.elements[k * Bd.width + tx];
        sum += Melement * Nelement;
    }

    Xd.elements[ty * Xd.width + tx] = sum;
}
Run Code Online (Sandbox Code Playgroud)

我很想知道Ad和Bd是否是我认为的,看看是否真的被调用了.

c c++ cuda gpu-programming

24
推荐指数
2
解决办法
6万
查看次数

如何管理CUDA内存?

当我运行仅分配少量全局内存(低于20 M)的CUDA程序时,出现"内存不足"错误.(从其他人的帖子中,我认为问题与内存碎片有关)我试着理解这个问题,并意识到我有几个与CUDA内存管理有关的问题.

  1. CUDA中是否有虚拟内存概念?

  2. 如果只允许一个内核同时在CUDA上运行,在终止后,它使用或分配的所有内存都将被释放?如果没有,这些内存何时免费发布?

  3. 如果允许在CUDA上运行多个内核,他们如何确保他们使用的内存不重叠?

谁能帮我回答这些问题?谢谢

编辑1:操作系统:x86_64 GNU/Linux CUDA版本:4.0设备:Geforce 200,它是连接到机器的GPUS之一,我不认为它是显示设备.

编辑2:以下是我做了一些研究后得到的结果.随意纠正我.

  1. CUDA将为每个主机线程创建一个上下文.此上下文将保留诸如内存的哪一部分(预先分配的内存或动态分配的内存)等信息已保留给此应用程序,以便其他应用程序无法写入该应用程序.当此应用程序终止(不是内核)时,将释放这部分内存.

  2. CUDA内存由链接列表维护.当应用程序需要分配内存时,它将通过此​​链接列表查看是否有可用于分配的连续内存块.如果找不到这样的块,即使总可用内存大小大于请求的内存,"内存不足"错误也会向用户报告.这就是与内存碎片有关的问题.

  3. cuMemGetInfo将告诉您有多少可用内存,但不一定是由于内存碎片而可以在最大分配中分配多少内存.

  4. 在Vista平台(WDDM)上,GPU内存虚拟化是可能的.也就是说,多个应用程序几乎可以分配整个GPU内存,WDDM将管理交换数据到主内存.

新问题:1.如果在应用程序终止后上下文中保留的内存将完全释放,则不应存在内存碎片.内存中必须留有某种数据.2.有没有办法重构GPU内存?

cuda nvidia gpu-programming

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

什么是GPU上的连贯内存?

我曾经偶然发现一个术语"非连贯"和"连贯"的记忆

与图形编程相关的技术论文.我一直在寻找一个简单而明确的解释,但是发现了这种类型的"硬核"论文.我很高兴收到外行人的样式答案,关于GPU体系结构实际上是什么连贯的内存以及它是如何实现的与其他(可能不相干)的内存类型进行比较.

gpu gpgpu gpu-programming vulkan

20
推荐指数
2
解决办法
3299
查看次数

为CUDA内核调用设置VS 2010 Intellisense

我刚刚开始进行CUDA编程,而且它的功能非常好,我的GPU已经被认可了.我在这里使用这个非常有用的指南在Visual Studio中部分设置了Intellisense: http://www.ademiller.com/blogs/tech/2010/10/visual-studio-2010-adding-intellisense-support-for-cuda-c/

和这里: http://www.ademiller.com/blogs/tech/2011/05/visual-studio-2010-and-cuda-easier-with-rc2/

但是,Intellisense仍然没有像这样接受内核调用:

// KernelCall.cu
#include <iostream>
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

__global__ void kernel(void){}

int main()
{
    kernel<<<1,1>>>();

    system("pause");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

行内核<<< 1,1 >>>()用红色下划线,特别是第一个左边的一个箭头,错误读数为"Error:expected and expression".但是,如果我将鼠标悬停在该函数上,则会正确显示其返回类型和参数.它仍然编译得很好,我只是想知道如何摆脱这个小烦恼.

intellisense cuda visual-studio-2010 gpu-programming

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

"-arch sm_13"和"-arch sm_20"之间的区别是什么?

我的应用程序需要双精度计算.根据我在谷歌上发现的,我应该添加一个标志"-arch sm_13"或"-arch sm_20".

Q1:"-arch sm_13"和"-arch sm_20"有什么区别?

Q2:"-arch sm_13"和"-arch sm_20"之间的性能是否存在差异?

我的GPU:GTX 570.

谢谢.

cuda gpu gpu-programming

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

使用CL/cl.h文件编译OpenCL程序

我有样品"Hello,World!" 来自网络的代码,我想在我大学的服务器上的GPU上运行它.当我输入"gcc main.c"时,它会响应:

CL/cl.h:没有这样的文件或目录

我该怎么办?我怎么能有这个头文件?

gpu opencl gpu-programming

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

本地内存比CUDA中的共享内存慢吗?

我只发现本地内存比寄存器内存慢,每个线程两种类型.

共享内存应该很快,但它比[线程]的本地内存更快?

我想要做的是一种中值滤波器,但具有给定的百分位数而不是中位数.因此,我需要获取列表的块,对它们进行排序,然后选择一个合适的列表.但我无法开始对共享内存列表进行排序或出现问题.只要复制到本地内存,我会失去很多性能吗?

c cuda gpu-programming gpu-shared-memory gpu-local-memory

14
推荐指数
1
解决办法
5651
查看次数

GPU上的Java:直接在GPU上使用普通Java完成方法

首先:是否可以使用Java并让它(部分)运行或使用GPU?如果可能的话,是否可以使用普通的Java语法而不使用特殊的cuda或opencl语法?

我想只需要使用我的编码java源代码,让它在GPU上进行尽可能小的更改.

我非常感谢代码示例.

java gpu gpu-programming

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

在OpenCL中,平台,上下文和设备之间有什么区别?

我是OpenCL编程的新手.设备,上下文和平台有什么区别?

gpgpu opencl gpu-programming

13
推荐指数
1
解决办法
5924
查看次数