Tag: gpu programming

GPU编程,CUDA或OpenCL?

我是GPU编程的新手。 我有一台配备NVIDIA GeForce GT 640显卡的笔记本电脑。 我面临着两难困境,build议最受欢迎。 如果我去CUDA – Ubuntu或Windows显然,CUDA更适合Windows,而在Ubuntu上安装则是一个严重的问题。 我已经看到一些博客宣称在Ubuntu 11.10和Ubuntu 12.04上安装了CUDA 5。 但是,我一直无法让他们工作。 此外, 标准的CUDA教科书更喜欢在Windows域中工作,在安装和使用Unix / Ubuntu时或多或less都是沉默的。 CUDA或OpenCL – 现在这可能比我的第一个问题更棘手! 我大部分使用CUDA / Nvidia都遇到过GPGPU项目,但OpenCL可能是开源的下一个最佳select,在Ubuntu中安装可能不会成为问题,尽pipe这里的一些build议将是最有用的。 如果我使用OpenCL而不是CUDA,我会牺牲任何function吗? 任何帮助或build议?

CUDA内存如何pipe理?

当我运行只分配less量全局内存(低于20 M)的CUDA程序时,出现“内存不足”错误。 (从别人的post来看,我觉得这个问题跟内存碎片有关)我试着去理解这个问题,并且意识到我有一些与CUDA内存pipe理有关的问题。 CUDA中是否有虚拟内存的概念? 如果只允许一个内核在CUDA上同时运行,那么在其终止之后,它所使用或分配的所有内存是否会释放? 如果没有,当这些内存得到释放? 如果允许多个内核在CUDA上运行,他们如何确保它们使用的内存不重叠? 任何人都可以帮我回答这些问题吗? 谢谢 编辑1:操作系统:x86_64 GNU / Linux CUDA版本:4.0设备:Geforce 200,它是连接到机器的GPUS之一,我不认为它是一个显示设备。 编辑2:以下是我做了一些研究后得到的。 随时纠正我。 CUDA将为每个主机线程创build一个上下文。 这个上下文将保留信息,比如为这个应用程序保留了哪部分内存(预分配的内存或dynamic分配的内存),以便其他应用程序不能写入。 当这个应用程序终止(而不是内核)时,这部分内存将被释放。 CUDA内存由链接列表维护。 当应用程序需要分配内存时,它将通过此​​链接列表查看是否有连续内存块可用于分配。 如果找不到这样的块,即使总可用内存大于请求的内存,“内存不足”错误也会向用户报告。 这就是与内存碎片相关的问题。 cuMemGetInfo会告诉你有多less内存是空闲的,但是由于内存碎片,不一定能在最大分配中分配多less内存。 在Vista平台(WDDM)上,GPU内存虚拟化是可能的。 也就是说,多个应用程序可以分配几乎整个GPU内存,WDDM将pipe理数据交换回主内存。 新问题:1.如果上下文中保留的内存将在应用程序终止后完全释放,则内存碎片不应存在。 内存中必须有某种数据。 2.是否有任何方法来重构GPU内存?

使用Java与Nvidia GPU(cuda)

我正在做一个用java完成的业务项目,需要计算机业务市场的巨大计算能力。 简单的math,但数据量巨大。 我们订购了一些cuda GPU来试用它,因为Java不支持cuda,我想知道从哪里开始。 我应该build立一个JNI接口? 我应该使用JQUDA还是有其他方法可以使用? 我没有在这个领域的经验,我想如果有人指示我的东西,那么我就可以开始研究和学习。