听闻英伟达的GPU计算卡很久,一直没有使用过,现在涉及到大量计算的问题,想尝试下并行计算的威力,有几点疑惑希望大虾指点:
拿tesla c2075为例,其内存为ddr5 6gb,用gpu运算时这6gb内存不够时,会发生啥情况?会调用CPU的内存(电脑的)么?如果会的话,GPU与CPU内存之间的数据传输速度比CPU直接访问CPU内存的速度慢多少?比CPU访问硬盘的速度又快多少?
哪位大虾知道的话,望点拨点拨,鄙人先谢啦!
内存不够的情况下编译会出错,cudaMalloc将会返回错误信息。
GPU无法使用CPU空间的内存(mapped memory例外,但是是在某些特殊情况下使用的)。
GPU与CPU内存传输速度看的是PCI-E带宽,肯定比CPU访问内存慢,不过传输速度还是够用的,但是要快于CPU访问硬盘的速度!
首先感谢大虾!
您的意思是指,我在使用内存的时候,一开始开的数据太大或是在计算过程中产生的数据超过自带的内存(如6 GB)后就会返回错误信息,不能继续下去么?
还有您说的特殊情况能举个通俗点儿的例子么?就比如说我现在的数据需要内存不够时,可以调用么?
谢谢您!
1:GPU一般无法调用CPU端的内存,有6GB显存就只能用这些,如果不够用,需要你自行拆分数据,写出合适的算法程序。
2:GPU和CPU通信需要走pci-e总线,如果需要和系统内存传递数据,还要经过北桥(包括被CPU集成的北桥)里面的内存控制器。一般来说,好一点显卡的显存带宽是pci-e总线 16X速率的10~20倍,好一点CPU的内存带宽是pci-e总线16X速率的数倍。所以你如果需要大量数据走pci-e总线的话,GPU会被pci-e总线完全拖住,无法发挥出效能。
至于硬盘,硬盘的延迟大概比内存慢6个数量级,如果您真的可以忍受硬盘的速度,我觉得那也没必要上神马GPU加速了。
非常感谢您的回答,使我获得了不少信息,我没有接触过并行计算,思想还停留在很原始的编程阶段,所以才会有以上疑问,谢谢您!
另:我看很多人都是用多块计算卡的,他们的显存、内存是如何协调的,会有被pci-e总线拖慢的情况么?
多卡需要分拆数据,只通过pci-e总线传递少量的边界数据,并且尽量用计算掩盖其传输过程。
(另外,请勿在正式的讨论帖中使用各种嬉皮笑脸的表情。)
谢谢大侠指导,我已纠正,不敢再嬉皮笑脸了!定以严谨的态度对待您的回答。
版主,推荐一本入门学习gpu并行计算的书吧!谢谢!
1:第一手资料推荐NV的官方文档。
2:入门教程推荐国外大学CUDA课程的视频,可以在各种公开课网站找到,配套的讲义等可以在各学校的网站上找到。
3:NV网站上也有一些学习书籍的介绍,可以找来参考。
第一和第二我都可以去找,第二你说的公开课网站我在几个较大的网易和新浪里没有搜索到呀,能推荐一本纸质的书么?我买来学习学习,谢谢!
斯坦福大学的CUDA课程iTUNES U上有。MIT和UIUC的讲义和录音各自学校网页上有。2008年胡文美老师台大的短期讲座视频和讲义网上也都有,就是内容稍微老点。另外可以去优酷和土豆等网站看。
我觉得这些讲义加上官方手册就不错。书也有几本,不过CUDA发展很快,书籍不修订的话,一两年就有些不合适了。要看的话,CUDA by example
算一本把吧。
好的,谢谢!
不客气,还可以找胡文美老师主编的GPU computing GEMs系列两卷,hands on approach等。