科学网

 找回密码
  注册
科学网 标签 GPU

tag 标签: GPU

相关帖子

版块 作者 回复/查看 最后发表

没有相关内容

相关日志

[转载]如何在Jetson TK1上安装Caffe深度学习库
alaclp 2015-12-3 13:53
Caffe 的创造者 Yangqing Jia ,最近花了些时间在NVIDIA Jetson 开发板上运行 caffe 框架。 Jetson TK1 有 192 个 CUDA 核,是非常适用于深度学习这种计算任务的。未来,如果我们想在移动设备上做一些事情的话, Jetson 是一个不错的选择,而且它预装 Ubuntu 操作系统,因此也是非常易于开发的。 Caffe内置了Alexnet模式,这是Imagenet-winning 架构的一个版本,可以识别1000 个不同种类的物体。用这个作为一种 benchmark , Jetson 可以在 34ms 里分析一个图像。 接下来,介绍如何在Jetson 上安装并运行 Caffe. 安装 你从盒子里拿到Jetson 的第一步是登录。你可以接一个显示器和键盘,但我倾向于你将它跟一个本地路由连接,然后 ssh 访问。 elinux.org/Jetson/Remote_Access 上有具体的步骤(不明白的地方可以在我们的QQ 技术群里询问) ,这时候在你的本地网络上会出现 tegra-ubuntu.local , username 是ubuntu: ssh ubuntu@tegra-ubuntu.local 默认密码是 ubuntu,接下来我们需要安装NVIDIA 的驱动,然后重启: sudo NVIDIA-INSTALLER/installer.sh sudo shutdown -r now 一旦开发板重启后,你可以登录进去,然后继续安装Caffe 所需的环境: ssh ubuntu@tegra-ubuntu.local sudo add-apt-repository universe sudo apt-get update sudo apt-get install libprotobuf-dev protobuf-compiler gfortran \ libboost-dev cmake libleveldb-dev libsnappy-dev \ libboost-thread-dev libboost-system-dev \ libatlas-base-dev libhdf5-serial-dev libgflags-dev \ libgoogle-glog-dev liblmdb-dev gcc-4.7 g++-4.7 你需要安装 Cuda SDK 以建立和运行GPU程序 ( CUDA 环境安装步骤都已经放在 QQ 技术群里,安装过程有任何问题,请随时在群里提出)。 如果一切顺利,你运行‘nvcc -V可以看到一个完整的编译器版本信息。这个时候你需要安装Tegra 版本的 OpenCV. ( 安装步骤同样在 QQ 群里找) 我们需要下载并安装Caffe sudo apt-get install -y git git clone https://github.com/BVLC/caffe.git cd caffe git checkout dev cp Makefile.config.example Makefile.config sed -i s/# CUSTOM_CXX := g++/CUSTOM_CXX := g++-4.7/ Makefile.config 我们必须使用gcc 4.7 版本,因为默认 4.8 会有一些问题。你应该可以完成整个安装。 make -j 8 all 一旦完成这可,你可以运行一下Caffe 的测试包来检查是否安装成功。这个可能需要花费一些时间,但希望一切顺利。 make -j 8 runtest 最后,你可以运行一下Caffe 的基准代码来检测一下性能。 build/tools/caffe time --model=models/bvlc_alexnet/deploy.prototxt --gpu=0 这个可能需要花费30 秒,输出一组统计数字。它运行 50 迭代的识别 pipleline 。每个分析 10 个不同的输入图像。因此看一下“‘ Average Forward pass ”时间,然后除以 10 就可以得到每个识别时间。我的结果是 337.86ms ,所以每个图像大概是 34ms 。你也可以把 -gpu=0 的标志去掉,看一下 CPU 的结果。在我这里看是大概 585ms ,所以你看 CUDA 还是起到作用了。 来源:http://www.gpus.cn/qianduan/front/getNewsArc?articleid=83
个人分类: GPU|3092 次阅读|0 个评论
基于GPU流处理单元的MrBayes并行加速
hypermarket 2015-11-20 10:01
随着用于分子系统发育推断数据量的增大,尤其是基于基因组和转录组的大数据时代的来临,越来越多研究者面临计算周期延长的挑战,因此人们提出了一些通过并行计算进行加速的解决方案。其中最典型的要数基于多CPU的解决方案,这种解决方案出现的时间最早、最成熟,目前也都受主流系统发育重建软件的支持。不过其局限性也比较明显,例如使用的灵活性、能源消耗率、对后验概率算法的加速效果等。基于这些考虑,我们设想,能否基于Nvidia显卡的GPU硬件、在CUDA计算环境下,实现在单机上对MrBayes的加速?在南开大学计算机与控制工程学院刘晓光和王刚教授研究组的努力下,这一设想得到了比较好的实现。 在2011年实现的对于核酸数据的加速水平为15-20倍的样子,矩阵越大加速比越高,最高可达40倍以上 。这意味着原先需要2-3个星期的计算可以被缩短到1天之内。 在2013年,对于核酸数据数据的加速比被提高到63-170倍,这意味着原先需要9个星期的计算可以被缩短到1天之内 。 在2015年,实现了对于蛋白质数据的加速 。 目前,对于MrBayes中形态和二级结构等其它数据的加速改造没有进行过尝试,由于这方面的数据量增长潜力不大,对适用于这些数据进行加速改造的意义不大。此外,目前对于核酸-蛋白质混合数据的加速改造尚未实现,还需要更多尝试和努力。 参考文献 Zhou J-F, *Liu X-G, Stones DS, Xie Q, Wang G. 2011. MrBayes on a Graphics Processing Unit. Bioinformatics 27: 1255-1261. http://bioinformatics.oxfordjournals.org/content/27/9/1255.full.pdf+html Bao J, Xia H, Zhou J-F, *Liu X, *Wang G. 2013. Efficient Implementation of MrBayes on Multi-GPU. Mol. Biol. Evol. 30: 1471-1479. http://mbe.oxfordjournals.org/content/30/6/1471.full.pdf+html Pang S, Stones RJ, *Ren MM, Liu XG, Wang G, Xia HJ, Wu HY, Liu Y, Xie Q. 2015. GPU MrBayes V3.1: MrBayes on Graphics Processing Units for Protein Sequence Data. Mol. Biol. Evol. doi: 10.1093/molbev/msv129, http://mbe.oxfordjournals.org/content/early/2015/05/25/molbev.msv129.abstract?papetoc
4783 次阅读|0 个评论
[转载]AMD发布嵌入式Radeon系列显卡,搭载Tonga GPU
alaclp 2015-10-10 00:07
AMD发布嵌入式Radeon系列显卡,搭载Tonga GPU 2015-09-30 17:31:25 来源: IT之家   跟贴 0 条 手机看新闻 IT之家讯 AMD发布了全新的CGN嵌入式Radeon系列显卡产品,主要面向工业级嵌入式设备。此类市场并不需要像个人产品那样的游戏处理能力,也不需要较高性能。然而对于低端工作站来说,本次发布的嵌入式Radeon显卡会给这些低能耗设备带来更高的性能。 新版嵌入式显卡为某些特定行业进行了优化,比如制药、航空航天和工业控制等。作为嵌入式产品,Radeon有三种内置方式,分别为PCI-Express板卡,MXM(移动PCI-E模块),以及MCM(多芯片模块)。这三种方式各自适合不同的市场领域,而且有各自的优缺点。 本次发布的显卡共有四种型号,分别为E8950、E8870、E8860和E6465。其中E8950为最高配置,采用MXM形式,搭载Tonga GPU。拥有2048个流处理器,128个纹理映射单元,显存为8GB的GDDR5,使用256位总线接口,功耗为95W,峰值性能(每秒浮点运算次数)为3 TFLOPS(万亿次)。 E8870采用MXM和PCI-Express两种模式,拥有12个计算单元,包括768个流处理器,48个纹理映射单元,以及16个光栅操作单元。显存为4GB的GDDR5,使用128位总线接口,峰值性能为1.5 TFLOPS。由于性能比E8950要低,因此功耗也相应有所减少,E8870功率为75W。 比E8870档次略低的显卡为E8860,有MXM、PCI-E和PCI-E三种形式,搭载Cape Verde GPU。配置方面,E8860有10个计算单元,包含640个流处理器,显存为2GB的GDDR5,采用128位总线接口,峰值性能为1.5 TFLOPS。 这四款显卡中最低端的是E6465,搭载Caicos GPU,有MXM、PCI-E和PCI-E三种形式,只有两个计算单元,包含128个流处理器,配备2GB的GDDR5显存,128位总线接口,功耗仅为20W。 AMD希望该系列全新嵌入式Radeon显卡能够在工业级专业设备领域提供优质体验,并且希望这些显卡的三种模式能够适应更多设备。(Source:Softpedia) (本文来源:IT之家 )
个人分类: GPU|1268 次阅读|0 个评论
CudaPre3D: An Alternative Preprocessing Algorithm
meigang 2015-6-19 23:06
CudaPre3D: An Alternative Preprocessing Algorithm for Accelerating 3D Convex Hull Computation on the GPU Abstract In the calculating of convex hulls for point sets, a preprocessing procedure that is to filter the input points by discarding non-extreme points is commonly used to improve the computational efficiency. We previously proposed a quite straightforward preprocessing approach for accelerating 2D convex hull computation on the GPU. In this paper, we extend that algorithm to being used in 3D cases. The basic ideas behind these two preprocessing algorithms are similar: first, several groups of extreme points are found according to the original set of input points and several rotated versions of the input set; then, a convex polyhedron / hull is created using the found extreme points; and finally those interior points that locate inside the formed convex polyhedron / hull are discarded. Experimental results show that: when employing the proposed preprocessing algorithm, it achieves the speedups of about 4x on average and 5x ~ 6x in the best cases over the cases where the proposed approach is not used. In addition, more than 95% input points can be discarded in most experimental tests. https://www.researchgate.net/publication/275887547_CudaPre3D_An_Alternative_Preprocessing_Algorithm_for_Accelerating_3D_Convex_Hull_Computation_on_the_GPU
2517 次阅读|0 个评论
gpu仿真,主要基于nvidia的fermi和gt200架构
depengchen 2015-2-14 14:55
http://www.gpgpu-sim.org/
个人分类: 异构并行|2760 次阅读|0 个评论
[转载]【GPU开发笔记】CUDA初探——查询设备
热度 1 lemoncyb 2015-1-20 09:24
CUDA编程主要做的就是和GPU打交道,在和这样的一个陌生的家伙交流之前,我们需要做的就是先得认识和熟悉这个家伙。 在深入研究如何编写设备代码之前,我们需要通过某种机制来判断计算机中当前有哪些设备,以及每个设备都支持哪些功能。幸运的是,可以通过一个非常简单的接口来获得这种信息。首先,我们希望知道在系统中有多少个设备是支持CUDA架构的,并且这些设备能够运行基于CUDA C编写的核函数。要获得CUDA设备的数量.可以调用cudaGetDeviceCount()。这个函数的作用从色的名字就可以看出来。在调用cudaGetDeviceCount()后,可以对每个设备进行迭代、井查询各个设备的相关信息。CUDA运行时将返回一个cudaDevice Prop类型的结构,其中包含了设备的相关属性。我们可以获得哪些属性?从CUDA 3.0开始,在cudaDeviceProp结构中包含了以下信息: view plain copy struct cudaDeviceProp { char name ; //标识设备的ASCII字符串 size_t totalGlobalMem; //设备上全局内存的总量,单位为字节 size_t sharedMemPerBlock; //在一个线程块(Block)中可使用的共享内存总量,单位为字节 int regsPerBlock; //每个线程块中可用的32位寄存器数量 int warpSize; //在一个线程束(warp)中包含的线程数量 size_t memPitch; // 在内存复制中最大的修正量(Pitch),单位为字节 int maxThreadsPerBlock; //在一个线程块中包含的最大线程数目 int maxThreadsDim ; //在多维线程块数组中,每一维包含的最大线程数量 int maxGridSize ; //在一个线程格(Grid)中,每一维可以包含的线程块的数量 size_t totalConstMem; //常量内存的总量 int major; //设备计算功能集的主版本号 int minor; //设备计算功能集的次版本号 int clockRate; // size_t textureAlignment; //设备的纹理对齐要求 int deviceoverlap; //一个布尔类型值,表示设备是否可以同时执行一个cudaMemory()调用和一个核函数调用 int multiProcessorCount; //设备上多处理器的数量 int kernelExecTimeoutEnabled; //一个布尔值,表示该设备上执行的核函数是否存在运行时限制 int integrated; //一个布尔值,表示设备是否是一个集成的GPU int canMapHostMemory; //一个布尔值,表示设备是否将主机内存映射到cuda设备地址空间 int computeMode; //表示设备的计算模式:默认,独占或禁止 int maxTexture1D; //一维纹理的最大大小 int maxTexture2D ; //二维纹理的最大维数 int maxTexture3D ; //三维纹理的最大维数 int maxTexture2DArray ; //二维纹理数组的最大维数 int concurrentKernels ; //一个布尔值,表示设备是否支持在同一个上下文中同时执行多个核函数 }; 设备属性的使用 通过上面的结构体,我们大致了解了设备的属性,然后我们就可以通过这个结构体来查询设备属性了。可能会有人问,到底我们需要这些设备属性来干嘛,别着急,以后在编写相关性能优化的代码的时候,就知道了解这些属性的好处了。现在我们只需要知道方法就可以了。 首先我们可以通过两个函数,第一个就是上面的cudaGetDeviceCount()来选择设备,然后循环地通过getDeviceProperties()来获得设备的属性,之后我们就可以通过这样的一个结构体变量将设备的属性值获取出来。 view plain copy #include cuda_runtime.h #include iostream using namespace std; int main() { cudaDeviceProp prop; int count; cudaGetDeviceCount(count); for ( int i = 0 ; i count ; i++) { cudaGetDeviceProperties(prop,i); cout the information for the device : iendl; cout name: prop.nameendl; cout the memory information for the device : iendl; cout total global memory: prop.totalGlobalMemendl; cout total constant memory: prop.totalConstMemendl; cout threads in warps: prop.warpSizeendl; cout max threads per block: prop.maxThreadsPerBlockendl; cout max threads dims: prop.maxThreadsDim prop.maxThreadsDim prop.maxThreadsDim endl; cout max grid dims: prop.maxGridSize prop.maxGridSize prop.maxGridSize endl; } return 0; } 我这边只是获取一部分的属性值,只是和大家介绍一下,具体的属性值可以按照这样的方法来获取。 原文地址:http://blog.csdn.net/timmawang/article/details/10362701
个人分类: cuda|3539 次阅读|2 个评论
Deep big simple neural nets excel on hand-written digit...
zhuwei3014 2014-7-24 05:14
2010_Deep big simple neural nets excel on hand-written digit recognition 首先看这篇文章: 2003_Best practice for convolutional neural networks applied to visual document analysis 这篇文章中心思想: Expanding training set with elastic deformation and affine transformation 本文的中心思想是运用仿射变换和形变扩大数据集,然后运用GPU加速训练庞大的简单神经网络,从而获得比较好的结果。 实验结果: 结论: 1. convolutional network is better than MLP 2. Elastic deformations have a considerable impact on performance both for 2-layer MLP and convolutional network 3. Cross-entropy seems better and faster than mean square error(MSE)
个人分类: DL论文笔记|2698 次阅读|0 个评论
[转载]无冕之王——Imagination公司的PowerVR
lucheng918 2013-11-18 17:03
移动处理器厂商中CPU基本都是源自ARM,同架构下各家厂商的表现都差不多,差别主要在GPU上,今天就来看看移动GPU厂商都有什么样的镇山之宝吧。   Imagination技术公司并不介入ARM处理器生产,他们专注于是移动GPU技术授权,因为专业所以强大,Imagination绝对是移动平台GPU授权的老大,即便是Intel的Atom处理器及桌面的GMA 500也使用了PwerVR系列GPU核心,他们的触角伸得很广,并不局限于ARM阵营。   Imagination也是一家英国公司,早前还有个部门VideoLogic,在3D加速卡方兴未艾的那个年代,VideoLogic也曾参与了Voodoo、NVIDIA、ATI等公司激战3D加速卡的战役,可惜最终存活的只有NVIDIA和ATI(AMD),不过失之东隅收之桑榆,Imagination的移动GPU技术部门PwerVR反倒有所收获,在移动市场上他们又可以俯视NVIDIA了。   Imagination公司的授权伙伴主要有Intel、苹果、联发科、LG、高通、瑞萨、三星、海思、Marvell、索尼等等,几乎都是大腕,其中Intel和苹果还是Imagination公司的大股东之一。   近年来Imagination公司也不再满足于移动GPU技术授权了,去年底 以1亿美元的代价收购了MIPS公司的专利和资产 ,已经把MIPS架构融入到自家Mtera处理器中了。CES展会上,Caustic公司展出了Caustic 2500/2100光线追踪加速卡,而这家公司也被Imagination收购了,看来他们的业务范围还在扩大。   至于具体的产品,Imagination的PowerVR历史悠久,型号众多,我们主要介绍PowerVR SGX 5、PowerVR SGX 5XT及未来的PowerVR 6系列吧。 PowerVR系列GPU 主力产品:PowerVR 5、PowerVR 5XT   PowerVR SGX 5系列主要有SGX 520、SGX 530、SGX 531、SGX 535、SGX 540以及SGX 545,常见的是SGX 531、SGX 540和SGX 545,联发科的双核产品中整合的就是SGX 531,,不过叫做SGX 531 Ultra,因为其频率大幅提高到了522MHz。   SGX 540在TI的OMAP 44x0系列很常见,Intel的Atom Z2460使用的也是SGX 540,Clover Tail平台的Atom Z276使用的就是SGX 545了。   PowerVR SGX 5系列使用的是USSE架构(Universal Scalable Shader Engine,通用可扩展渲染引擎),支持OpenGL ES 2.0/1.1,SGX 535/545还支持DX9,SGX 545支持DX10.1。   PowerVR SGX 5XT是SGX 5的升级版,主要有Power SGX 543、SGX 544、SGX 554三款,使用了USSE2引擎,峰值浮点性能是USSE引擎的2倍,强化了多核集成,这三者最多可以同时集成16个,苹果最新的A5、A5X、A6、A6X分别集成了SGX 543MP2、SGX 543MP4、SGX 543MP3及SGX 554MP4。 PowerVR 544MP架构   图形规范方面,PowerVR SGX 5XT依然支持OpenGL ES 2.0/1.1、DX9,不过该系列依然增加了新元素,自SGX 544开始支持PVRTC2纹理压缩格式,全系列引入了部分OpenGL ES 3.0中才有的技术,比如MRT多目标渲染、遮蔽查询、无缝立方体映射、浮点纹理等新功能。 今年的GDC大会期间Imagination称5XT系列将会支持部分OpenGL ES 3.0技术 未来王者——PowerVR 6向1TFLOPS水平迈进   虽然PowerVR SGX 5/5XT性能并不落后,但是Imagination还是早早地在2012年的CES展会上公布了新一代PowerVR 6系列移动GPU,架构代号Rogue。Imagination称目前的移动GPU性能水平是100GFLOPS级别的,而PowerVR 6则是朝着1000GFLOPS设计的。   1TFLOPS是个等级,我们以桌面显卡为例,HD 7850是1.76TFLOPS, HD 7770 是1.28TFLOPS, HD 7750 则是0.819TFLOPS,这意味着PowerVR 6系列的最高性能甚至可以超过HD 7750级别的桌面显卡,牛的一X。   当然,这么高的性能只有PowerVR 6系列的的旗舰型号可以达到,从高到低总计有G6630、G6400、G6430、G6200、G6230、G6100等型号,其中G6100、G6200/6400系列专为核心面积优化,适合组成单核、双核或者四核设计。   Imagination能成为移动GPU的老大显然会有很多独特优势和技术,他们的GPU不是性能最强的,也不是核心面积最小的,不过PowerVR的单位功耗性能、单位面积性能表现都很强,多核集成、配套的开发工具、纹理压缩格式、TBDR渲染技术都是他们冲锋陷阵的利器,综合起来PowerVR就是表现最优秀的移动GPU授权之一。   堆砌大篇PowerVR详细架构的文字也没什么意思,其中一个让人感兴趣的问题是PowerVR 5及5XT是否使用了统一渲染架构。从找到的资料来看,PowerVR的USSE引擎中第一个U代表的意思在目前的官网上是指Universal通用,但是早期的发布新闻上这个U代表的是Unified,也就是统一渲染的意思。   架构图中PowerVR 5之后的GPU中不再有VS和PS这样的单元,都叫做“Unified Scalable Shader Engine”(统一超标量渲染引擎),再加上它们都支持DX10规范,因此PowerVR 5之后的GPU实际上已经是统一渲染架构了。再考虑到PowerVR 5是在2005年宣布的,桌面级的统一渲染架构是2006年发布的,这就可以说明Imagination的技术实力是多么强大。 点评与展望:PowerVR 6啥时候上市   对一个占据了绝大多数市场份额的公司也没有继续赞扬的必要了,苹果、联发科等大客户的销量就能说明一切。虽然发布了好几年了,PowerVR 5/5XT依然是目前追求极致游戏性能的最佳选择之一。   问题是PowerVR 6,架构发布及PPT宣传都快一年半了,现在连影子都没。PowerVR 6的性能提升很夸张,制程工艺及实际应用都要跟得上才行,前几天正好有新闻说 Imagination联合TSMC宣布将使用后者的16nm FinFET工艺制造 ,这一下子就给支到至少2014年了。   发布时PowerVR 6已经有6家厂商换的授权,其中三家是TI、联发科和ST-Ecricsson(意法-爱立信),还有三家没宣布,不过结合之后的消息来看三家没公布名称的厂商至少有海思,而LG也在今年的CES展会上首次公布了PowerVR 6平台,说明他们也在授权内,瑞萨也展示过PowerVR 6平台,算起来差不多就是这三家了,苹果是否愿意获得PowerVR的授权就不得而知了。   只是时过境迁,TI目前退出了消费级嵌入式处理器市场, 意法-爱立信也关闭了 ,即便是公开展出的PowerVR 6也全都是大块头,集成到智能手机和平板所用的超低功耗处理器中还很远。
个人分类: 技术控|2127 次阅读|0 个评论
《CUDA中如何选择Block的尺寸》我写的一篇技术文档
sume 2013-6-1 10:59
介绍了如何在CUDA编程中设置block的尺寸,给出了计算示例。 下载地址 http://ishare.iask.sina.com.cn/f/36767710.html http://wenku.baidu.com/view/611aa63883c4bb4cf7ecd1c5.html
2731 次阅读|0 个评论
并行计算、页岩气与生命科学
热度 1 liuhong59 2013-1-14 10:05
中央处理器、图形处理器、页岩气孔隙、生命细胞可以都是纳米级的物理网络,不过有的是人造,有的是天然。图形处理器利用比中央处理器多很多的计算核心,可以达到令人吃惊的计算速度,天河一号的高速度就是利用这一点。图形处理器与中央处理器的编程有很多不同,它的各部分网络的传输存储速度由于物理结构不同而有很大不同,主要特点是计算核心多但每个核的程序寄存器,不利于逻辑判断和分支。图形处理器有点像“广大劳动群众”,中央处理器有点像“知识分子”,有政治家(你知道的)说“知识分子如不与广大劳动群众相结合则将一事无成”,这可以形象描述图形处理器与中央处理器在联合计算架构中的作用。物理结构不同性能就不同。细胞也是这样,砒霜杀死癌细胞,需要药物配方中“君臣佐使”四种生物化学成分共同作用,这也许就是生命细胞中的“并行运算”,中医用“五行”来描述,虽然不“科学”,但属于前科学。弗洛伊德的“梦的解析”不是计算机科学,但很多搞计算机操作系统的人认为“梦的解析”在一定程度上描述了大脑资源管理,潜意识=多线程,所以“梦的解析”属于前科学。中医可能对现代医学提供大量素材,如青蒿素、砒霜药物作用的发现,借助自然提取药物的思想国外也不奇怪,如紫杉醇的发明。页岩气的孔隙小于100纳米,与集成电路52纳米工艺在相同尺度,所以很多人阐述了它的很多奇妙性质,如界吸附面亲油亲水的变化带来了油气运移的“记忆性”,而吸附面亲油亲水性质可以被化学过程、温度、压力等物理过程改造。 改革开放=社会生理学=中医=GPU;阶级斗争=社会病理学=外科手术=CPU;
2708 次阅读|3 个评论
CUDA简单介绍(一)
jameshzd 2012-10-25 01:31
下面对CUDA和GPU做几个声明: GPU是作为CPU的“辅助计算设备”来使用的。也就是说,在CPU上效率较低的大规模的平行计算模块可以放入GPU中去执行,能增加整体的速度。但是千万不要讲原来CPU上很快的串行代码也奢望放到GPU上。不仅比较困难,也没有太大的帮助。“术业有专攻”,这句话不无道理。 CUDA C是C语言的超集(superset),也就是说,.cu的CUDA程序最根本的它是一个C程序,所有C语言中的语法都可以再CUDA C中实现。 要想用好CUDA,先想想我们要把一只大象装进一个冰箱里面冷冻,并且在将大象冻僵之后取出。需要什么条件?以及具体的步骤。 先说说条件: 一只大象(这是必须的,如果连大象都没有,何谈装呢?) 一个有门的冰箱(同理) 下面开始谈方法: 将冰箱的门打开 把大象塞进去 等待冷却。。。 把冰箱门打开 把大象取出来。 可能大家觉得我在说废话。但是GPU中很重要的命令恰巧可以和这些基本操作互相对应,下面我来一一讲解: 要有冰箱:这就要求我们要在GPU上为数据开辟一段内存空间。所用的指令就是 cudaMalloc((void**)pointer_name,size) ;size是所需要alloc内存的大小,pointer_name就是指向GPU内存的指针(在申请指针名的时候,最好将device端和host端的指针分开,否则有的时候会乱掉。)。而且这样也能保证我们在传指针到kernel函数的时候不至于出错(kernel函数只接受GPU上的内存指针)。 把大象塞进去:要求我们有从CPU到GPU的管道。这个函数式 cudaMemcpy(to,from,size,enum) ;其中的to代表数据传向的指针,from代表数据开始的指针,size是大小,enum是一个枚举量,它有四种不同的值,分别是:cudaMemcpyDeviceToHost(数据从GPU传向CPU);cudaMemcpyHostToDevice(数据从CPU传向GPU);cudaMemcpyHostToHost(数据从CPU传向CPU);cudaMemcpyDeviceToDevice(数据从GPU传向GPU);有了这个函数,我们CPU到GPU的通道就解决了。当然,更细致的时候我们还知道,GPU在这里的内存是global memory。在GPU端,内存的架构和内部的调度非常复杂。需要另外一篇博文来认真的探讨。 等待冷却:GPU中有了数据后,我们就可以在上面进行运算操作了。这也就是GPU计算最核心的部分。如何在GPU上进行有效的线程管理,如何利用SM中的share memory和SP中的register。这是作为一个高级GPU开发者必须要掌握的基本知识,无奈现在我还没有掌握。但是或许在几个星期以后,我能把它搞懂!在这里需要注意的一个语法是kernel函数的定义,kernel函数是在CPU端调用GPU端代码的一个入口,kernel有多种写法,每种写法都有不同的含义: __global__ void kernel(para) ;前面的前缀除了__global__之外还有__host__,__device__,__host__ and __device__这几种。__global__函数是指在CPU上调用,在GPU上执行的函数。__host__指的是在CPU上调用,在CPU中执行的,__device__指的是在GPU上调用,在GPU上执行的。 把大象取出来:这和把大象塞进去是运用的同样的通道,这里就不再赘述了。 如果嫌冰箱太麻烦的话(在编程中推荐这么做,因为下次再启动的时候就又有一块干净的内存了): cudaFree(pointer_onGPU) 。将你一开始alloc的那些memory给释放掉。 再过两天会将最重要的GPU里面的内存以及调度问题整理成一篇博文发表,请大家关注~~ 其实CUDA C的语言是很好学的,跑几个程序就能得到结果了。最重要的不是说我们要学一门语言,最重要的是学习并行计算的思路以及如何进行数据的并行化处理。将大量的计算过程拆分成很多平行处理的单元(当然,单元之间可以有相互的作用:1 block内部的thread之间可以互相交互)。这是CUDA学习的核心,也是最困难的地方。以上是我对于CUDA C语言的一些基本结构的理解。十分浅显,我也在努力的学习着。 On the way~~~
个人分类: 并行计算|5394 次阅读|0 个评论
Computer Vision on GPU with OpenCV
bluewind23 2012-6-10 18:33
OpenCV GPU Module Example (Use HOG,Release 2.3) Not use GPU Module: Mat frame; VideoCapture capture(camera); cv::HOGDescriptor hog; hog.setSVMDetector(cv::HOGDescriptor:: getDefaultPeopleDetectorector()); capture frame; vectorRect found; hog.detectMultiScale(frame, found, 1.4, Size(16, 16), Size(0, 0), 1.05, 16); Use GPU Module: Mat frame; VideoCapture capture(camera); cv:: gpu:: HOGDescriptor hog; hog.setSVMDetector(cv::HOGDescriptor:: getDefaultPeopleDetectorector()); capture frame; GpuMat gpu_frame; gpu_frame.upload(frame); vectorRect found; hog.detectMultiScale( gpu_frame , found, 1.4, Size(16, 16), Size(0, 0), 1.05,16);
个人分类: 学习研究|6054 次阅读|0 个评论
compile gromacs GPU version from source code
热度 1 albumns 2012-4-24 14:37
1. download source code: git clone git://git.gromacs.org/gromacs.git 2. install openMM and CUDA library into /soft/gromacs-gpu/openmm (download from https://simtk.org/project/xml/downloads.xml?group_id=506 ) /soft/gromacs-gpu/cuda configuring .cshrc as following etenv OPENMM_ROOT_DIR /soft/openmm setenv LD_LIBRARY_PATH /soft/gromacs4.6-gpu/cuda/lib64:/soft/gromacs4.6-gpu/cuda/lib:/soft/gromacs-gpu /openmm/lib 3. compile GROMACS CUDA from source code mkdir cuda cd cuda cmake ../. -DGMX_OPENMM=ON -DGMX_THREADS=OFF -DCMAKE_INSTALL_PREFIX=/soft/gromacs4.6-gpu make -j24 make install 4. configure .cshrc source /soft/gromacs4.6-gpu/bin/GMXRC.csh done!
5620 次阅读|2 个评论
关于计算的一些事情
qingsongcas 2011-4-8 09:13
前段时间探索过关于利用集群进行计算的相关,成功地搭建了采用opensuse+mosix的计算集群。但是当时就很疑惑,因为发现网上关于搭建集群的材料既少又老,03年左右。后面才发现,这是因为搭建集群不是个很好的方案,因为要进行专门的并行编程而且加速效果也不是很好。 后面同学建议研究下GPU并行编程,正好我平常编程采用Matlab和fortran,fortran的计算效率是毋庸置疑的(差不多是前者的20倍)但是用起来很不舒服,数据结果的可视化,以及可能出现一些很无奈的错误(比如越界或者混合运算,数据类型不匹配之类),错误又难以发现。Matlab可以直接观察变量,所以决定尝试下GPU计算了。另外初步的研究的一句话让我很是鼓舞,说GPU计算相当于一台电脑就是一个小集群。 很后悔研一的时候没有做这些工作(研一除了研究了下知识管理就是看电影玩游戏了)。颇有点“往者 不可谏 , 来者犹可追 ”的感觉。或者,还是多学点本事,多做点有意义的事情比较好。
个人分类: 心得|1266 次阅读|0 个评论
“显卡计算”与“天河1号”
热度 1 seawan 2011-3-24 19:51
我真是孤陋寡闻。今天听一个老同学说,我国的“天河1号”现在是世界超算第一名了。 我上网查查,果然。2700多万亿次/秒,第一。 而“显卡计算”这样技术,就是超级计算机背后的动力。 据说天河1号就是这样的,有无数个NVidia显卡组成的一个并行CPU+GPU群。 也就是说,现在的超级计算机,已经不再是超级CPU的同义词了,而是“显卡群”的同义词? 另外,在NVidia的网站的图片上,可以看到对Java/Pathon的支持。但是,在软件下载的区域,却只有C/C++。Why? 找了半天,才发现下面链接: Java wrapper jCUDA: Java for CUDA Bindings for CUDA BLAS and FFT JaCUDA .NET integration for CUDA Thrust: C++ template Library for CUDA CuPP : C++ framework for CUDA Libra: C/C++ abstraction layer for CUDA F# for CUDA
个人分类: 并行计算|3821 次阅读|1 个评论
超级计算机的CPU的实质是什么?
ssglwu 2010-12-26 09:46
吴国林 五评中国的超级计算机天河 1A CPU 的英文是 Central Processing Unit ,通常称之为中央处理器,或微处理器。一般来说, CPU 是电脑中最重要的核心组件。 CPU 包含运算 / 逻辑单元、控制单元和寄存器这三部分,这些单元都被集成在一块面积不大的硅晶片中。 CPU 的作用和大脑相似,它负责处理、运算计算机内部的所有数据。主板芯片组则更像是心脏,它控制着数据的交换。 一般来说, CPU 的种类和性质决定了你使用的操作系统和相应的软件, CPU 的速度决定了你的计算机有多强大 。 图片来自网络。 一、芯片的发展简史 1971 年 1 月, Intel 公司的霍夫 (Marcian E. Hoff) 研制成功世界上第一枚 4 位微处理器芯片 Intel 4004 ,标志着第一代微处理器问世,微处理器和微机时代从此开始。 Intel 早在 1976 年也推出了一款型号叫 8086 的 CPU 。 Intel 相继推出了 8088 、 80186 和 80188 ,但不是很成功。后来 Intel 将系统部件合并到 CPU 去的概念,产生了重要影响。如 80286/80386 。从 80386 起,人们就把 80 去掉了,直接称之为 x86 了。当 Intel 在推出 486 后, Intel 就将 CPU 型号命名为 Pentium ,从此, PII, P Ⅲ , P4 等不断升级的 CPU 。 二、 CPU 不是一个概念,而是一个具体的实实在在的技术人工物 。 从外表来看, CPU 常常是矩形或正方形的块状物,通过许多的管脚与主板相连。这不过是 CPU 的外衣 CPU 的封装。而 CPU 的内部,是一片大小通常不到 1/4 英寸的薄薄的硅晶片, 约火柴盒那么大 。在这块小小的硅片上,密布着数以百万计的晶体管,相互协调,完成着各种复杂的运算和操作。 比如, 英特尔公司的首席执行官戈登 摩尔将 4004 称之为 人类历史上最具革新性的产品之一 。 1971 年, Intel 公司推出了世界上第一台微处理器 4004 ,它集成了 2250 个晶体管 ,每个晶体管的距离是 10 微米,它能处理 4 比特的数据,运算速度每秒 6 万次,成本不到 100 美元。 Intel 8086 集成 2.9 万只晶体管。 1989 年, 80486 处理器面市。 80486 处理器集成了 120 万个晶体管。 1995 年秋天,英特尔发布了 Pentium Pro 处理器。 Pentium Pro 处理器总共集成了 550 万个晶体管,并且整合了高速二级缓存芯片,性能比 Pentium 更胜一筹。 1997 年英特尔发布了 Pentium II 处理器,它集成了 750 万个晶体管。 而 Intel Pentium 8400EE 处理器包含超过 2.3 亿个晶体管,可以搭配 64 位 WinXP 。而单个 CPU 的核心硅片的大小丝毫没有增大,这就要求有更先进的制造工艺,以便能生产出更精细的电路结构。 早期的 CPU 都使用 0.5 微米工艺制造出来的。随着 CPU 频率的增加,于是出现了 0.35 微米 以及现在普遍使用的 0.09 , 0.065 微米工艺。 如今,最新的处理器采用的是 0.065 微米技术制造,即是常说的 0.065 微米线宽。 这就要求制造工艺的革新。 线宽是指芯片上的最基本功能单元 门电路的宽度。由于门电路之间连线的宽度同门电路的宽度相同,因此,线宽可以描述制造工艺。缩小线宽意味着晶体管可以做得更小、更密集,可以降低芯片功耗,系统更稳定,而且可使用更小的晶圆,并降低成本。当然,并不是可以无限的降低线宽,因为有量子力学的效应的建制,一旦门电路的宽度小到足以必须用量子力学来描述电子的运动时,原来的芯片的经典运动规律就失效了 经典计算机失效了,就必须引入量子计算的概念,引入量子计算机。 从 CPU 处理信息的字长来看, CPU 可以分为:四位微处理器、八位微处理器、十六位微处理器、三十二位微处理器以及六十四位微处理器等等。 三、 CPU 不是一个数学的概念,不是一个纸上设计,而且是一个技术人工物,这就是说, CPU 必须涉及到集成电路的制造,这是一个工程技术问题。 有一 一个学计算机的网友 说: 博主看来很 仰视 CPU 。当代微处理器的设计是一个很难的事吗?答案是否定的!不要说一个集成电路专业的学生,哪怕一个懂一点 Verilog 仿真器的工程师,都可以在一天内通过调用 IP 核(就像软件设计中的标准函数) 设计一个具有相当强功能的 CPU ,而且这是 入门级技术 。而 CPU 设计中广泛使用的超级并行指令,超级流水线,超级调度这些技术,其实很多就是 90 年代以前超级计算机硬件中的成熟技术,只是因为当前集成电路技术发展了,可以 把大的设计 浓缩 在微小的芯片上而已 ,所以并非外行人想像中的那么难。 这方面我们中国并不落后 ,现在的关键在 集成电路制造 ,这些年也在快速追赶中。 即使你在设计出了有关的 CPU ,但是,工程技术能否实现,包括有关的线路制造技术、热量的释放技术等,能否做到相应的线宽要求?事实上,我们国家还没有掌握目前最小线宽的集成电路的制造技术。 中国的天河 -1A 也采用了( NVIDIA )的 Tesla GPU 。 事实上,目前国际超级计算机榜单的第一名(中国天河)、第三名以及第四名均采用英伟达( NVIDIA ) Tesla GPU 。 GPU 是图形处理器,其计算模型在一个异构计算模型中同时使用了 CPU 和 GPU ,应用程序的顺序部分在 CPU 上运行,计算密集型部分在 GPU 上运行。 GPU 已经迅速成为打造全球顶尖超级计算机的关键技术。 每颗 GPU 包含数以百计的并行核心,因而可以大幅提升系统性能。利用 GPU 和 CPU 打造的异构系统需要的占地面积更少、消耗的功耗更低。(图见上) 有关 GPU 见我的博文 超级计算机芯片 CPU+GPU 究竟有多重要? 显然,由 Tesla GPU 提供的优越性能是不能通过互联技术来解决的,中国的超级计算机还必须依赖它。就我个人愿望来说,希望中国不依赖它,而且自己把它搞出来,并超越它。
个人分类: 杂记|7822 次阅读|0 个评论
[转载]我国首套高效能分布式GPU超级计算系统启用
liushli 2010-4-28 17:38
GPU的计算能力优于CPU,发展速度快于CPU。 我国首套高效能分布式GPU超级计算系统启用 时间: 2010-04-27 01:50:19 来源: 太原日报    发表评论 关键词: GPU 分布式 医学影像处理 软硬件协同 超级计算机 内容摘要: 我国首套分布式GPU超级计算系统4月24日在中国科学院建成并正式启用,这标志着我国运用高性能计算解决实际科研与工程问题的能力达到了国际先进水平,在软硬件协同和能效方面进入了国际领先行列。   我国首套分布式GPU超级计算系统4月24日在中国科学院建成并正式启用,这标志着我国运用高性能计算解决实际科研与工程问题的能力达到了国际先进水平,在软硬件协同和能效方面进入了国际领先行列。   据介绍,当今世界高性能计算对科技进步、经济社会发展等的作用与日俱增。但在超级计算机的峰值突飞猛进的同时,其投资大、运行维护成本高、使用效率低等问题也日渐突出。中国科学院在财政部专项资金的支持下,构建了聚合计算能力近六千万亿次的分布式GPU超级计算系统。该系统满足了广大科技人员对超级计算的实际需求,以低廉的成本和现成的网络设施实现高效的超级计算,形成了一条应用导向、效率优先的富有中国特色的超级计算模式。   目前,中科院和高能物理研究所、国家天文台等十家用户单位已经利用相关系统开展了高能物理模拟与实验数据分析、天体物理与空间科学研究、石油物探数据分析与油藏开采过程模拟、工业和医学影像处理等方面的应用。该系统还正服务于国家重大专项、国家科技支撑计划、国家自然科学重大基金和多家大型企业。
个人分类: GPU/CUDA|720 次阅读|0 个评论
Matlab和GPU
zuozw 2009-11-22 19:22
昨天出去玩,发现同学实验室在用 Jacket 实现Matlab程序在GPU上计算。感觉速度和性能比较好。今下午找到Jacket 网站的用 户手册 和 例子 学习了一下,感觉挺有意思的。 Matlab在科研计算的作用是不容置疑的。但当进行大型计算(如从头算法)和没有大型服务器支持时,在个人电脑上运行的时间会特别长,甚至是不可能。 GPU(图形处理器)是显示卡的大脑。与此同时GPU的 高性能计算越来越受到重视。 Jacket Engine 是AccelerEyes开发的专门针对MATLAB基于GPU的计算引擎。 AccelerEyes成立于2007年,致力于将GPU科技引入高性能计算(HPC)当中,需要一个强劲的工具连接软件开发人员和GPU硬件之间。当硬件开发者致力于底层的软件工具(如CUDA),以支持他们的设备时,AccelerEyes 开发了高层的接口,完全屏蔽了底层硬件的复杂性。 如果买不起大型服务器,可以尝试用GPU计算。 学习 Jacket 编程(和M语言一样,只是在函数或循环结构前加个g),发现其中一点挺有用处的:懒惰计算(Lazy Execution),具体计算一开始不执行,直到最后结果需要才执行计算。这一方法可防止有些数值重复计算和防止误差累积。 更多请阅读 1、 Jacket官方网站 2、 GPU让桌面型超级计算机不再是梦想 3、 Tesla-CUDA高性能计算行业应用案例 4、 Tesla高性能计算应用案例-MATLAB、生命科学和医疗成像 5、 GPU加速Matlab高性能计算-Tesla+Jacket Engine解决方案
个人分类: 科研心得|11777 次阅读|2 个评论

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-16 15:50

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部