Questions tagged «gpu»

图形处理单元-专门的,相对便宜的硬件单元,用于快速图形计算和高度数据并行的科学计算。

10
哪些问题很适合GPU计算?
因此,对于要解决的问题,最好的解决方法是串行解决,并且可以并行管理。但是现在,我对基于CPU的计算可以最好地处理什么以及应该将哪些内容卸载到GPU的想法还不多。 我知道这是一个基本问题,但是我的大部分搜索工作都被清楚地主张一个或另一个的人们所困扰,而他们并没有真正证明为什么或有些模糊的经验法则。在这里寻找更有用的回应。
84 gpu 

1
截至2013年末,CUDA与OpenCL
从程序员的角度来看,CUDA和OpenCL在2013年末之间如何比较?我的小组正在考虑尝试利用GPU计算。通过选择仅支持OpenCL但不支持CUDA的硬件,我们是否会大大限制自己? 具体来说,以下假设是否正确? CUDA中所有可能的功能在OpenCL中也可能 只要我们不使用库,给定的任务就不会很容易(或更难)地完成 CUDA的主要优势是库的可用性 两者都对所有三个主要平台(Win / OSX / Linux)都具有良好的支持。
34 hpc  gpu  cuda  opencl 

4
GPU在哪些统计方法上比CPU快?
我刚刚在台式机上安装了Nvidia GT660图形卡,经过一番挣扎,我设法将其与R接口。 我一直在玩几个使用GPU的R软件包,尤其是gputools,并且在比较我的GPU和CPU执行一些基本操作所花费的时间: 求逆矩阵(CPU更快) qr分解(CPU更快) 大相关矩阵(CPU速度更快) 矩阵乘法(GPU快得多!) 请注意,我主要是对gputools进行了实验,因此也许其他软件包的性能更好。 概括地说,我的问题是:哪些常规统计操作可能值得在GPU而不是CPU上执行?
18 r  gpu 

4
当前可用的GPU是否支持双精度浮点运算?
我已经在包含24个Intel Xeon CPU的节点组成的Ubuntu Linux集群上运行了分子动力学(MD)代码GROMACS。我的兴趣点对浮点算术精度有些敏感,因此我不得不以双精度而不是单精度运行GROMACS-尽管双精度的计算成本较高。因此,在群集上,我以双精度方式编译了GROMACS。 我正在考虑购买一些GPU,因为可能会有相对于CPU的加速(“ GPU加速”)。但是,我需要一个可以执行双精度算术的GPU。您知道这样的硬件是否可以在市场上买到吗?一个在GROMACS邮件列表上最近的文章表明,双精度的GPU市场上不能获得: 硬件尚不支持[双精度算术],但AFAIK。 这个Wikipedia页面似乎暗示双精度GPU并不常见,因为它们可能效率不高: Nvidia GPU上的浮点实现大部分符合IEEE标准。但是,并非所有供应商都这样。这对正确性有影响,对于某些科学应用而言,正确性被认为很重要。虽然在CPU上通常可以使用64位浮点值(双精度浮点数),但GPU并不普遍支持这些值。有些GPU架构牺牲了IEEE遵从性,而另一些则完全缺乏双精度。已经进行了一些努力来在GPU上模拟双精度浮点值。但是,速度折衷首先抵消了将计算量卸载到GPU上的任何好处。 此NVIDIA的Tesla页,在图表中引用“峰值双精度浮点性能”,似乎表明,双精度计算可以,其实,做他们的GPU(虽然在更高的计算成本)。 那么,我应该相信什么?您对此问题有经验吗?

3

2
在GPU上解决ODE系统的选项?
我想在“平凡的可并行化”设置下将ODE的求解系统投放到GPU上。例如,使用512个不同的参数集进行灵敏度分析。 理想情况下,我想使用智能自适应时间步长求解器(例如CVODE)而不是固定时间步长(例如Forward Euler)来执行ODE解决方案,而是在NVIDIA GPU而不是CPU上运行它。 有人这样做吗?有图书馆吗?
15 ode  gpu 

1
使用Python和双精度现代GPU进行科学计算
这里有没有人通过Python在新一代(例如K20)GPU中使用过双精度科学计算? 我知道这项技术正在迅速发展,但是目前最好的方法是什么?GPU超出了流行的科学Python库numpy和scipy的范围,我曾经想使用theano,但它似乎只对GPU使用float32精度。我知道google可以为python gpu提供搜索结果,但我希望获得比可能会或可能不会会见其制造商的项目列表更多的见识。
14 python  gpu  precision 

4
异步蜂窝自动机的并行(GPU)算法
我有一组计算模型,这些模型可以描述为异步蜂窝自动机。这些模型类似于Ising模型,但稍微复杂一些。这样的模型似乎可以从在GPU而非CPU上运行中受益。不幸的是,并行化这样一个模型不是很简单,而且我也不清楚如何去实现它。我知道有关于该主题的文献,但似乎所有这些文献都是针对对算法复杂性细节感兴趣的铁杆计算机科学家,而不是像我这样只想要描述我可以实现的东西的人,以及因此,我觉得它是不可渗透的。 为了清楚起见,我并不是在寻找最佳算法,而是希望可以在CUDA中快速实现的最佳算法比我的CPU实现有明显的提高。在这个项目中,程序员的时间比计算机的时间更多地是一个限制因素。 我还应该澄清,异步蜂窝自动机与同步自动机是完全不同的事情,并且并行化同步CA的技术(例如Conway的生活)不能轻易地适应此问题。区别在于,同步CA在每个时间步同时更新每个小区,而异步CA在每个时间步更新随机选择的本地区域,如下所述。 我希望并行化的模型是在由约100000个单元组成的网格(通常是六角形)上实现的(尽管我想使用更多),用于运行它们的非并行算法如下所示: 随机选择一对相邻的单元格 根据围绕这些单元格的局部邻域计算“能量”函数Δ èΔË\Delta E 以取决于的概率(使用为参数),要么交换两个单元的状态,要么不执行任何操作。Ë- βΔ èË-βΔËe^{-\beta \Delta E}ββ\beta 无限重复上述步骤。 边界条件也有一些复杂性,但是我想这些对于并行化不会造成太大困难。 值得一提的是,我对这些系统的瞬态动力学感兴趣,而不仅仅是平衡状态,因此我需要具有与上述等效的动力学特性的东西,而不是仅仅具有相同平衡分布的东西。(因此,chequerboard算法的变化不是我想要的。) 并行化上述算法的主要困难是冲突。由于所有计算仅取决于晶格的局部区域,因此许多晶格位点可以并行更新,只要它们的邻域不重叠即可。问题是如何避免这种重叠。我可以想到几种方法,但是我不知道哪种方法最适合实施。这些如下: 使用CPU生成随机网格站点的列表并检查冲突。当网格站点的数量等于GPU处理器的数量时,或者如果检测到冲突,请将每组坐标发送到GPU单元以更新相应的网格站点。这将很容易实现,但可能不会大大提高速度,因为检查CPU上的冲突可能不会比对CPU进行整个更新便宜得多。 将网格划分为区域(每个GPU单元一个),并拥有一个GPU单元负责随机选择和更新其区域内的网格单元。但是这个想法有很多我不知道如何解决的问题,最明显的是当一个单位选择一个与其区域边缘重叠的邻域时应该发生什么。 大致如下所示:让时间分步进行。将晶格分成不同的根据某个预定义方案在每个时间步上设置一组区域,并让每个GPU单元随机选择和更新一对邻域不与区域边界重叠的网格单元。由于边界每时每刻都在变化,因此只要区域相对较大,此约束就不​​会对动力学产生太大影响。这似乎易于实现并且可能很快,但是我不知道它对动态的近似程度,或者在每个时间步长上选择区域边界的最佳方案是什么。我发现了一些对“块同步细胞自动机”的引用,它们可能与这个想法相同或不同。(我不知道,因为似乎该方法的所有描述要么都是俄语的,要么是我无法访问的资源。) 我的具体问题如下: 以上任何算法是否是处理异步CA模型的GPU并行化的明智方法? 有没有更好的办法? 是否存在针对此类问题的现有库代码? 在哪里可以找到“块同步”方法的清晰英语描述? 进展 我相信我已经想出了一种可能合适的并行化异步CA的方法。下面概述的算法适用于一次仅更新一个单元的普通异步CA,而不是像我的那样更新相邻的一对单元。将其推广到我的具体情况有一些问题,但是我认为我有一个解决方案的想法。但是,由于下面讨论的原因,我不确定它将带来多少速度优势。 这个想法是用等效的随机同步CA(SCA)代替异步CA(以下称为ACA)。为此,我们首先想到ACA是一个泊松过程。即,时间连续进行,并且每个单元以每单位时间执行其更新功能的恒定概率独立于其他单元。 我们构造了一个SCA,该SCA的每个单元均存储两件事:该单元的状态 (即,在顺序实现中将存储在每个单元中的数据),以及一个浮点数代表(连续)时,在其将在下一次更新。此连续时间不对应于SCA的更新步骤。我将后者称为“逻辑时间”。时间值根据指数分布随机初始化:。(其中是一个可以任意选择其值的参数。)X我ĴX一世ĴX_{ij}Ť我ĴŤ一世Ĵt_{ij}Ť我Ĵ(0 )〜精通(λ )Ť一世Ĵ(0)〜经验值⁡(λ)t_{ij}(0) \sim \operatorname{Exp}(\lambda)λλ\lambda 在每个逻辑时间步,SCA的单元将更新如下: 如果对于附近的任何,时间,则不执行任何操作。ķ ,升ķ,升k, l我,Ĵ一世,Ĵi,jŤķ 升&lt; 吨我ĴŤķ升&lt;Ť一世Ĵt_{kl}<t_{ij} 否则,(1)使用与原始ACA相同的规则,根据相邻小区的状态更新状态;(2)生成一个随机值并将更新为。X我ĴX一世ĴX_{ij}Xķ 升Xķ升X_{kl}Δ 吨〜精通(λ )ΔŤ〜经验值⁡(λ)\Delta t \sim \operatorname{Exp}(\lambda)Ť我ĴŤ一世Ĵt_{ij}Ť我Ĵ+ Δ 吨Ť一世Ĵ+ΔŤt_{ij}+\Delta t …


3
Nvidia K20X与GeForce Titan进行GPGPU加速
我试图了解这两种用于学术计算的图形卡之间的区别,特别是对于DGEMM组件。 如果我们看原始统计数据,它们都有相同的GK110芯片,几乎在每个类别中都有可比较的统计数据,而且我相信它们具有相同的核心体系结构。不计任何折扣,K20X的价格大约是Titan的4倍。从效率的角度来看,在K20X上使用Titan似乎很有意义。 我很难理解这里的区别,有人可以阐明情况吗? 需要注意的是,我正在考虑为机架服务器购买这些卡,并基本上以完全倾斜的方式运行直到它们消失为止。但是,我认为对单个作业使用多个GPU的效率并不是特别重要。

3
推动GPU编程
我对GPGPU编程非常陌生,所以如果这个问题不是特别合适,请原谅我。据我了解,与通常的CPU编程相比,GPU编程是一项非常复杂的工程工作。必须注意发散性问题,切片,固定的内存分配以及主机设备通信/设备计算重叠。 经过一些研究后,我发现了推力库,它似乎试图模仿C ++ STL。很好 但是,基于我非常有限的经验,并且看到了获得良好性能所需的所有微观管理,我对性能有些怀疑。能否有效地内部处理所有复杂的编程部分?一些非常著名的库(例如PETSc)似乎使用了此软件包,这使我相信它应该以某种方式出现。 我想知道,与低级CUDA编程相比,对CUDA有更多经验和推力的人能否对软件包的性能说一两句话。什么时候可以使用推力?什么时候应该切换回CUDA?

2
大协方差矩阵的并行计算
我们需要计算大小为的协方差矩阵 10000 × 1000010000×1000010000\times10000 至 100000 × 100000100000×100000100000\times100000。我们可以访问GPU和集群,我们想知道什么是加快这些计算速度的最佳并行方法。

2
在共享内存中的GPU上查找小型非对称矩阵本征对的最快方法
我有一个问题,我需要找到一个小的(通常小于60x60)非对称矩阵的所有正对(如特征值为正)。当特征值小于某个阈值时,我可以停止计算。我知道特征值是真实的。关于可以用来尝试获得最佳性能的算法有何建议?我必须进行数千次分解,因此速度很重要。 先感谢您。 编辑:我需要在共享内存的GPU上执行此操作。矩阵也不必相同大小。我目前不知道有任何图书馆可以这样做。将会提出非常适合该问题的算法建议。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.