您的 CPU 可能是四核,但您知道现在有些显卡拥有超过 200 个核心吗?我们已经了解了当今显卡中的 GPU 在图形方面的功能。现在它们也可以用于非图形任务,在我看来,结果简直令人惊叹。适合并行性的算法在 GPU 上的运行速度可能比在 CPU 上快得多。

有一些技术可以使这一切成为可能:

1.) CUDA 由英伟达公司。它似乎是最知名且有据可查的。不幸的是,它仅适用于 NVidia 显卡。我已经下载了 SDK,尝试了一些示例,并且 CUDA 中正在完成一些很棒的事情。但事实上它仅限于 NVidia 卡,这让我对它的未来产生了疑问。

2.) 溪流 由 ATI 提供。ATI 相当于 CUDA。正如您所料,它仅适用于 ATI 卡。

3.) OpenCL - Khronos Group 已经制定了该标准,但仍处于起步阶段。不过我喜欢 OpenCL 的想法。希望大多数显卡制造商都支持它,并使跨显卡开发变得更加容易。

但是还有哪些其他非图形 GPU 编程技术即将推出,哪些技术最有前景?您是否看到或希望看到这些技术被内置到一些主流开发框架(例如 .NET)中,从而使其变得更加容易?

有帮助吗?

解决方案

我预计,这一技术将成为流行和主流,但它需要一定的时间来做到这一点。我的猜测是约5至10年。

当你正确地指出,对于采用该技术的一个主要障碍是缺乏对大多数适配器运行的公共库的 - 无论是ATI和nVidia。在此之前解决到可接受的程度,技术不会进入主流,并会留在那个特定的硬件上运行的定制应用程序的利基。

对于C#和其他高级管理语言集成起来 - 这将需要更长的时间,但XNA已经证明了自定义着色器和管理环境,可以混合在一起 - 在一定程度上。当然,shader代码仍然没有在C#中,有这样做的几个主要障碍。

一个主要的原因的GPU代码执行速度快是它有什么代码可以和不可以做严格的限制,而且它使用的,而不是通常的RAM显存。这使得它难以带来一起CPU代码和GPU代码。而解决方法是可能的,它们将几乎否定的性能增益。

一种可能的解决方案,我看到的是使一个子语言具有其局限性,被编译到GPU代码,且具有严格定义与ususal C#代码沟通的方式C#。然而,这并不比我们已经太大不同 - 只是更舒服,因为一些语法糖和标准库函数来写。不过,这也是时代离现在。

其他提示

我觉得你可以算下的DirectX作为另一种方式来使用GPU。

这是我的经验,GPU是对于易于并行算法的速度极快。最近,我优化的特殊图像中的CUDA调整大小算法要快100倍以上在GPU上(即使不是高端的一个)比四核英特尔处理器。该问题是在数据获取到GPU,然后取结果回主存储器,两个方向上由该机器,这是小于2 GB / s的上的memcpy()速度的限制。其结果是,该算法只比CPU版本...

略快

所以这真的取决于。如果你有一个科学的应用程序,你可以保留大部分数据在GPU上,和所有的算法映射到GPU执行,然后罚款。否则我会等到有CPU和GPU之间更快的管道,还是让我们来看看ATI有他们的袖子与组合芯片...

关于该技术的使用方法:我认为一旦你有你的东西在CUDA,其它步骤将它移植到OpenCL的(或其他语言),运行的是没有那么大。你做了所有的重活通过并行算法的,剩下的仅仅是一个不同的“味道”

蒙特卡洛是尴尬的并行,但它是在金融和科学计算核心技术。

一位受访稍微不正确地说,大多数现实世界的挑战是不容易分解到这些类型的任务。

许多tractible科学调查通过利用什么可以在一个易并行方式表达进行。

只是因为它被命名为“尴尬”并行并不意味着它不是一个非常重要的领域。

我在几个的金融机构工作过,并且我们预见,我们可以扔掉1000+蒙特卡洛引擎的农场几大NVIDIA CUDA安装(排列在一起叶片的许多栈) - 大量减少在电力和散热成本数据中心。

一个显著架构的好处是,有少了很多网络负荷也,因为有需要被供给数据并报告其结果远不如机器。

从根本然而,这种技术是在抽象比托管运行时的语言,如C#更低的水平,我们谈论,关于其自己的处理器运行他们自己的代码的硬件设备。

集成应先用Matlab,数学做我预计,随着课程的C- API的...

这是未来用于基于GPU的处理的另一种技术是现有的高级别计算库GPU版本。不是很华丽,我知道,但它对于程序的移植代码和易于显著的优势。

例如,AMD的流2.0 SDK包括版本其BLAS(线性代数)库与一些在GPU上执行的计算的。 API是完全一样的CPU的唯一版本,他们已经运好多年的库;所有的需要被重新链接的应用程序,和它使用的GPU和运行速度更快。

类似地,丹·坎贝尔在GTRI一直工作在一个实施CUDA用于信号处理的VSIPL标准的。 (具体地,排序信号和图像处理,在雷达系统和相关的东西等医学成像很常见的。)再一次,这是一个标准接口,并已用在其它处理器VSIPL实施方式编写的应用程序可以简单地与这一个重新编译和使用GPU的能力在适当情况下。

在实践中,这些天已经不少高性能的数值方案不做自己的低级编程,但依靠库。在英特尔硬件,如果你正在做数字运算,它通常很难被击败的,它实现了大部分的东西英特尔数学库(MKL) - 并利用它们意味着你可以得到所有的向量指令的优势,聪明的技巧在新的x86处理器,而无需专门的代码为他们。随着之类的东西的GPU,我怀疑这会变得更加普遍。

因此,我认为观看技术是形成用于在特定域的应用程序核心构建块的通用库,在方式的发展的是的,可以同时最小化的量来有效地发送关闭至GPU的那些算法捕获部件从程序员需要不可移植GPU专用聪明。

(偏置免责声明:我公司也一直致力于我们的VSIPL ++库的CUDA端口上,所以我倾向于认为这是一个好主意)

此外,在一个完全不同的方向,你可能想看看一些的那个是RapidMind正在做的事情。他们的平台最初是打算用于多核CPU类型的系统,但他们一直在做工作的一个好一点的它,以及延伸到GPU计算。

几乎任何可以并联也许能够受益。更具体的例子将是SETI @ home的,折叠@家和其他分布式项目以及科学计算。

特别的东西,在很大程度上依赖于浮点运算。这是因为GPU的有专门的电路,这是非常快的,在浮点运算。这意味着它不是通用的,但它是在什么它做的非常好。

如果你想看看更多的专用GPU处理,请的Nvidia的Tesla GPU 。这是一个GPU,但它实际上并没有一个监视器输出!

我怀疑我们将看到太多的GPU处理常见的桌面上,或者至少一会儿,因为不是每个人都有一个CUDA或类似的图形卡,如果他们甚至有一个显卡都没有。这也很难使程序更加并行。游戏可能可能利用这一额外的动力,但是这将是非常困难的,可能不会有太大的用处,因为所有的图形计算大多是已经在GPU和其他工作的CPU上的的是在CPU上由于指令集。

GPU处理,至少在一段时间,将是那些需要大量浮点运算的非常具体的利基市场。

要记住,即使任务,这本身就可以连续从并行化中受益,如果他们必须独立进行多次这一点很重要。

另外,请记住,每当有人报告了GPU实现的CPU执行的加速,这是几乎从来没有一个公平的比较。为了实现真正的公平,实施者必须先花打造一个真正的优化,并行CPU执行时间。一个单一的英特尔酷睿i7 965 XE CPU能取得今天的双精度约为70亿次。目前高端的GPU可以做双精度和1000年左右在单精度70-80亿次。因此超过15的加速可能意味着低效率的CPU实现。

与GPU计算一个重要的需要注意的是,这是目前的“小规模”。随着超级计算设施,您可以运行数百甚至数千个CPU内核的并行算法。与此相反,GPU“集群”目前只限于连接到一个机器约8的GPU。当然,一些这些机器可以结合在一起,但是这增加了额外的复杂性,因为数据必须不仅电脑之间,而且GPU之间传递。另外,现在还没有一个MPI相当于让过程透明地扩展到多台机器上多个GPU;它必须手动执行(可能与MPI组合)。

除了规模的这个问题,GPU的并行计算的另一主要限制是对存储器的访问模式的严重限制。随机内存访问是可能的,但精心策划的内存访问将会导致很多倍,更好的性能。

也许最有前途的未来竞争者是Intel的Larrabee的。它的CPU,系统内存,并且,也许要好得多访问最重要的是,高速缓存。这应该有很多算法给它相当大的优势。如果它不能在目前的GPU海量存储器带宽相匹配,但是,它可以是竞争对于最佳地使用该带宽算法背后的滞后。

目前这一代的硬件和软件需要大量的开发努力,以获得最佳性能。这通常包括调整算法,有效地利用GPU内存。它也经常涉及不同的方法进行试验以找到最好的一个。

另请注意,以获得最佳性能所需要的努力是必要的,以证明使用GPU硬件。幼稚实现和优化的执行之间的差异可以是数量级或更多的顺序。这意味着,一个优化的CPU impelemntation将可能是一样好或比幼稚GPU实现甚至更好。

人们已经着手对CUDA .NET绑定。请参见这里。然而,在低级别工作的必要性,我不认为GPU计算已经准备好为群众呢。

我已经听到了很大的轰动大量关于今天的转向是GPU的成更通用的“阵列proceesor单位”,用的任何的矩阵数学问题,而不仅仅是图形处理使用。我没见过什么来它尚未虽然。

在理论是,阵列处理器可能大致遵循浮点处理器随后几十年前相同的轨迹。本来浮点处理器是昂贵的附加选项PC的,不是很多人不屑于买。最终,他们变得如此重要,他们投入的CPU本身。

我重复我给答案。

长期我认为,GPU将不复存在,作为通用处理器发展到接管这些功能。 英特尔的Larrabee 是第一步。历史经验表明,对赌86是一个好主意。

GHC(Haskell的)的研究人员(工作微软研究院)直接增加了对嵌套数据并行支持的通用编程语言。该想法是使用多个内核和/或GPU在后端尚未暴露数据平行阵列作为语言本机类型,而不管并行执行的代码的运行时(或串行用于单CPU回退)。

http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell

根据这个在未来几年取得的成就,我希望看到其他语言(C#专)拿起的想法,这可能使这些各种各样的功能,更主流的观众。也许到那时的CPU-GPU带宽和驱动程序问题将得到解决。

的GPU中的问题很好地工作,其中有一个高电平数据级并行的,这本质上意味着有一种方法来划分要处理的数据,使得它们可以全部被处理。

的GPU不是固有的速度在时钟速度水平。其实我是比较肯定的着色器时钟速度(或者也许他们有他们这些天?更GPGPU的术语)相比,ALU的一个现代化的台式机处理器是相当缓慢。问题是,一个GPU有这些着色器的绝对量很大,转动GPU到一个非常大的 SIMD 处理器。随着现代化的Geforce着色器的量,例如,有可能为一个GPU可同时对几百(千?)的浮点数的工作。

那么短,一个GPU可以是惊人的快对于问题在这里可以适当地划分数据和独立处理的分区。这不是那么强大的任务(线程)级并行

随着GPU技术的一个大问题是,当你确实有很多计算能力在那里,将数据传输到(和出它)是可怕的(性能明智)。并仔细观看任何比较基准......他们往往比较GCC(以最少的优化,没有量化)单处理器系统到GPU上。

与GPU的另一个大问题是,如果你不仔细想想你的数据是如何组织的,你将遭受内部触及真正的性能(在GPU)。这往往涉及重写非常简单的代码到垃圾的旋绕桩。

我对这项技术感到非常兴奋。但是,我认为,这只会加剧的大规模并行任务,带宽的一个真正的挑战。增加更多的内核只会增加争用内存。 OpenCL和其他GPGPU抽象库不提供任何工具来改善这一点。

任何高性能计算硬件平台通常被设计为与带宽问题,精心策划,到硬件,平衡吞吐量,延迟,缓存和成本。只要商品硬件,CPU和GPU的,被设计在彼此隔离,优化带宽只有到他们的本地内存,这将是非常难以提高这个对于需要它的算法。

其真实的图形处理器可以实现数据级并行的情况非常喜性能数据,为许多这里提到。但在我看来,没有多大用处它在用户空间了。 我不能说这一切GPGPU宣传来自GPU制造商,它只是想找到新的市场,并使用他们的产品帮助的感觉。并且那absolutelly确定。 你有没有想过,为什么英特尔/ AMD didnt包括除了标准的人一些小型x86核心(可以说 - 模型有四个x86核心和64只小86核),只是为了增强数据级paralelism capabilties?他们肯定能做到这一点,如果想要的。我的猜测是,业界只是不需要那种在常规的桌面/服务器计算机的处理能力。

GPU 可能会也可能不会像现在一样流行,但其基本思想正在成为一种相当流行的高功率处理方法。现在出现的一种趋势是外部“加速器”来帮助 CPU 处理大型浮点作业。GPU 只是加速器的一种。

英特尔正在发布一款名为“ 至强融核, ,他们希望能够挑战 GPU 作为 HPC 加速器的地位。这 细胞处理器 采用了类似的方法,使用一个主 CPU 来执行一般任务,并将计算密集型任务卸载到其他一些处理元素,从而实现了一些令人印象深刻的速度。

总体而言,加速器目前似乎很受关注,因此它们至少应该存在一段时间。GPU 是否仍然是事实上的加速器还有待观察。

您看法,即GPU被比CPU更快地基于由施加到PS3的喜欢,NVIDIA和ATI硬件

几个embarassingly并行应用程序创建的误解

http://en.wikipedia.org/wiki/Embarrassingly_parallel

大多数现实世界的挑战是不容易分解到这些类型的任务。桌面CPU是更好的方式适合于同时从特性集和性能的角度来看这种类型的挑战。

我期望CPU被用于相同的东西?

我只是说这似乎是一个噱头给我。我毫不犹豫地说“这是无处可去”,当涉及到的技术,但GPU的主要功能是图形渲染和CPU的主要功能是所有其他处理。具有GPU做任何事情似乎只是怪诞的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top