请教在分布式内存文件系统上系统上运行CUDA程序出现的问题

下次自动登录
现在的位置:
& 综合 & 正文
希望深入学习后能回答这个问题—“ 有谁知道用OPENMP,CUDA,MPI,TBB这些方法设计出来的程序的性能和优缺点”
偶然发现这个问题————有谁知道用OPENMP,CUDA,MPI,TBB这些方法设计出来的的性能和优缺点。请不吝赐教~
截取下精彩回答,希望在自己学成之后能对此有更深的理解!
这个问题太大了, 估计不是三两句话能说清楚的
先抛个砖, 从并行编程的模式看, 有共享内存和分布式之分, 纯数据并行和任务并行之分, 支持的之分, 实现的方式之分(语言扩展还是类库模板)...
明白了这些, 大概能知道哪个方式适合你的应用或者要求.
没有绝对的好坏之分, 就像大家一直在谈论的编程语言谁更好的问题.
intel_iclifort
我的一点看法是:优缺点:使用OpenMP设计起来会稍微简单点,只需用一条语句就能优化程序性能(关键1),就单独对矩阵相乘来说性能是很不错的。 而使用MPI会稍微复杂点,但也能达到好的效果。
关键代码1:
void ParallelMxM( float c[N][N], float a[N][N], float b[N][N] ) {
#pragma omp parallel for schedule(dynamic)
for ( int i = 0; i & N; ++i ) {
for ( int j=0; j&N; ++j ) {
float sum = 0;
for ( int k=0; k&N; ++k ) {
sum += a[i][k]*b[k][j];
如果编写的程序各线程之间有复杂的交互的话,用raw threading比较好,其他就用openMP和TBB等从程序风格上来说,C的程序用OpenMP好点,C++用TBB
最后一个是最深刻的解答了!
期待最后的解答!
如果编写的程序各线程之间有复杂的交互的话,用raw threading比较好,其他就用openMP和TBB等从程序风格上来说,C的程序用OpenMP好点,C++用TBB
我最近也在做高性能计算的课题,只是刚刚起步,呵呵,所以说得也很浅,望高手指正。楼主举出的这些库或者标准,都是用于并行计算的,不过其各自针对的侧重点或者实现的并行方法不同。MPI即消息传递接口,用于计算机间传递的信息,也就是说,主要是针对计算机群集(cluster)并行或者超级计算机的并行。因为我现在实验条件没有群集,所以了解不多,呵呵。OpenMP主要通过是一些编译的预处理指令实现并行,在C/C++里面形如“#pragma ...”这样的东东,现在最新的版本是3.0, GCC和Intel C++支持最新的,微软的10VS都只支持到2.0。OpenMP主要实现的是多线程,也就是在一台多个CPU处理器的计算机上发挥作用。不过也有在群集中使用的OpenMP论文,我没有关注,只是知道。OpenMP由于只是加一些预处理器指令,而且其目的是要让编写的程序在并行和串行时同时都能正常运行,所以其最大的优点是可以将现行的串行C程序经过不大的更改便成为多线程的。有地方说OpenMP主要是针对循环的并行,我只是刚开始学,没有体会到,呵呵。TBB是Intel公司的产品,基于STL,得过Jolt的大奖,是非常好的线程库,其最大优点是结构良好,抽象程度也比OpenMP要高,许多地方说,如果是写新程序,用TBB比较好,不过其不支持C,只支持C++。做图形学的,如果知道OpenCV库,这个库就用到了TBB。我本来准备对CPU并行用TBB的,不过看到了TBB的网站上FAQ,其写到,应该在程序中尽可能地用OpenMP,现在还是决定先学OpenMP了,呵呵,OpenMP和TBB可以并存,不过要学起来也不是一朝一夕能够完成,将Intel的TBB官网FAQ节选如下:Everyone should use OpenMP as much as they can. It is easy to use, it is standard, it is supported by all major compilers, and it exploits parallelism well. But it is very loop oriented, and does not address algorithm or data structure level parallelism. When OpenMP works for your code, you should use it. We’ve seen it used to great advanatage in financial applications, mp3 codecs, scientific programs and high definition video editing software. OpenMP is best geared for Fortran and C code.CUDA是NVIDIA公司公司针对其生产的GPU做的编程库,有如Intel为CPU开发的TBB一样。GPU其实一直是可以并行的,其特点是数据密集型的并行,但以前编程接口很少,高手们要通过OpenGL才能实现使用GPU进行并行计算。直到NVIDIA开发了CUDA,我们可以利用C/C++来进行GPU的编程。前述的类库或标准都是针对CPU,而CUDA针对的是GPU,所以可以想见的是,以上的库可以和CUDA配合起来用。实际上已经有人完成了许多方案,如用MPI和CUDA实现群集高性能GPU的协作,OpenMP和TBB和NVIDIA实现CPU和GPU的协作。这里还要指出的是,从编程方面来说,OpenMP和TBB的编译器支持非常广泛,而CUDA较前两者都很新,所以支持的编译器不多,而TBB只是类库,还是基于STL的,所以应该和CUDA更容易配合,当然CUDA和OpenMP的配合已经有人实现了。我只是从实现的方法上说这么多,至于优劣,我的能力不足以评估,呵呵。我现在主要希望研究CPU和GPU异构的协作,这可能用到OpenMP,TBB和CUDA,如果楼主及其他高手也有同样想法,可一起探讨。
&&&&推荐文章:
【上篇】【下篇】5068人阅读
大数据(6)
1. 如何理解“分布式”?
& & &经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。
2. 分布式系统
& &&分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
分布式程序: 运行在分布式系统上的计算机程序。
分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。
& & 区分分布式计算和并行计算:共同点都是大任务划分为小任务。不同点:
分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。
1)分布式操作系统
& & & 分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
2)分布式文件系统
& & & &分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
3)分布式程序设计和编译解释系统
& & & 分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
& & &分层应用程序可以按层数进行划分,信息可以从数据层通常存储在数据库传送到表现层显示在客户端上。通常每层相对于其他层来说都运行在不同的系统中,或者在同一系统中的不同进程空间里。分层好处:减小整个应用程序的复杂性;使应用程序能够更好的扩展,跟得上企业发展的需要。&
两层应用程序典型的结构,一个客户端的用户机前端一个包含数据库的网络服务器后端逻辑上根据两者的物理位置划分。通常客户端包含大部分业务逻辑,随着数据库及存储过程的发展,语言允许业务逻辑在数据库服务器中存储并执行。目前最常用的是三层应用程序结构,包含一个用户服务层表现层,一个业务服务层和一个数据服务层。&由于两层应用程序即客户端服务器端结构的功能限制,分布式应用程序通常分为三层或者更多层。每层的组件都执行一个特定类型的处理。
3)分布式数据库
之我见:分布式数据库,由分布在不同地方(地理位置上的分布)的多个数据库(称为站点)连接(基于计算机网络来连接)而成。利用分布式DBMS对各个站点统一管理,各个站点逻辑上统一起来。基于数据分布的透明性,仿佛在管理单个站点上的数据。其优点在于:容错,提高访问速度。
wiki官方解释: 分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或结点。分布式数据库有一个统一的数据库管理系统来进行管理,称为分布式数据库管理系统。
&分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。从这三个基本特点还可以导出的其它特点有:数据分布透明性、集中与自治相结合的控制机制、适当的数据冗余度和事务管理的分布性。分布式数据库按照各站点中数据库管理系统的数据模型的异同分为异构型分布式数据库和同构型分布式数据库,按照控制系统的类型分为全局控制集中性、全局控制分散型和全局控制可变型
3. Hadoop , HDFS, HBase, Hive
之我见: &
& & &Hadoop是一个分布式系统基础框架,基于这个框架开发分布式应用程序,利用集群的高速运算和存储的威力。类似于,基于NVIDIA 的 CUDA并行架构开发并行程序,发挥GPU的并行计算能力。
& & &HDFS是Hadoop的文件系统。基于HDFS,你可以对文件进行操作,例如新建,删除,编辑,重命名等。
& & &HBase: 基于Hadoop架构的数据库系统。不是关系型数据库,基于列的模式。
& & &Hive: 基于HBase的高层语言。类似于SQL --- 访问和处理关系型数据库的计算机语言。
官方解释:
& & & Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
& & & &HDFS(Hadoop Distributed File System)是Hadoop实现的一个分布式文件系统。它存储 Hadoop 集群中所有存储节点上的文件。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS 的架构是基于一组特定的节点构建的,存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的
RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
& & & & HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。Hadoop
HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase的数据模型和存储结构,参考&
& & & & Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件(例如xml)映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:325885次
积分:3490
积分:3490
排名:第6545名
原创:92篇
转载:27篇
评论:54条
(4)(1)(2)(1)(4)(4)(5)(4)(3)(1)(3)(5)(3)(3)(1)(1)(1)(2)(2)(1)(6)(9)(5)(6)(10)(10)(2)(2)(4)(1)(8)(1)(1)(2)(1)系统运维(25)
1. 如何理解“分布式”?
& & &经常听到”分布式系统“,”分布式计算“,”分布式算法“。分布式的具体含义是什么?狭义的分布是指,指多台PC在地理位置上分布在不同的地方。
2. 分布式系统
& &&分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
& &&分布式程序:&运行在分布式系统上的计算机程序。
& &&分布式计算:利用分布式系统解决来计算问题。在分布式计算里,一个问题被细化成多个任务,每个任务可以被一个或者多个计算机来完成。
& & 区分分布式计算和并行计算:共同点都是大任务划分为小任务。不同点:&分布式计算:基于多台PC,每台PC完成同一任务中的不同部分。分布式的计算被分解后的小任务互相之间有独立性,节点之间的结果几乎不互相影响,实时性要求不高。并行计算:基于同一个台PC,利用CPU的多核共同完成一个任务。
1)分布式操作系统
& & & 分布式操作系统:负责管理分布式处理系统资源和控制分布式程序运行。它和集中式操作系统的区别在于资源管理、进程通信和系统结构等方面。
2)分布式文件系统
& &&& &分布式文件系统具有执行远程文件存取的能力,并以透明方式对分布在网络上的文件进行管理和存取。
3)分布式程序设计和编译解释系统
& &&& 分布式程序设计语言用于编写运行于分布式计算机系统上的分布式程序。一个分布式程序由若干个可以独立执行的程序模块组成,它们分布于一个分布式处理系统的多台计算机上被同时执行。它与集中式的程序设计语言相比有三个特点:分布性、通信性和稳健性。
& & &分层应用程序可以按层数进行划分,信息可以从数据层(通常存储在数据库)传送到表现层(显示在客户端上)。通常每层相对于其他层来说都运行在不同的系统中,或者在同一系统中的不同进程空间里。分层好处:减小整个应用程序的复杂性;使应用程序能够更好的扩展,跟得上企业发展的需要。&
3)分布式数据库
之我见:分布式数据库,由分布在不同地方(地理位置上的分布)的多个数据库(称为站点)连接(基于计算机网络来连接)而成。利用分布式DBMS对各个站点统一管理,各个站点逻辑上统一起来。基于数据分布的透明性,仿佛在管理单个站点上的数据。其优点在于:容错,提高访问速度。
wiki官方解释:&分布式数据库是用计算机网络将物理上分散的多个数据库单元连接起来组成的一个逻辑上统一的数据库。每个被连接起来的数据库单元称为站点或结点。分布式数据库有一个统一的数据库管理系统来进行管理,称为分布式数据库管理系统。
&分布式数据库的基本特点包括:物理分布性、逻辑整体性和站点自治性。从这三个基本特点还可以导出的其它特点有:数据分布透明性、集中与自治相结合的控制机制、适当的数据冗余度和事务管理的分布性。分布式数据库按照各站点中数据库管理系统的数据模型的异同分为异构型分布式数据库和同构型分布式数据库,按照控制系统的类型分为全局控制集中性、全局控制分散型和全局控制可变型
3. Hadoop , HDFS, HBase, Hive
之我见:&&
& & &Hadoop是一个分布式系统基础框架,基于这个框架开发分布式应用程序,利用集群的高速运算和存储的威力。类似于,基于NVIDIA
的 CUDA并行架构开发并行程序,发挥GPU的并行计算能力。
& & &HDFS是Hadoop的文件系统。基于HDFS,你可以对文件进行操作,例如新建,删除,编辑,重命名等。
& & &HBase: 基于Hadoop架构的数据库系统。不是关系型数据库,基于列的模式。
& & &Hive: 基于HBase的高层语言。类似于SQL --- 访问和处理关系型数据库的计算机语言。
官方解释:
& & & Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。
& & & &HDFS(Hadoop Distributed File System)是Hadoop实现的一个分布式文件系统。它存储 Hadoop 集群中所有存储节点上的文件。对外部客户机而言,HDFS 就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是
HDFS 的架构是基于一组特定的节点构建的,存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)。这与传统的
RAID 架构大不相同。块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作。HDFS 内部的所有通信都基于标准的 TCP/IP 协议。
& & & & HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC
Server上搭建起大规模结构化存储集群。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。Hadoop
HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。HBase的数据模型和存储结构,参考&
& & & & Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件(例如xml)映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。
其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:186455次
积分:2901
积分:2901
排名:第8462名
原创:76篇
转载:225篇
评论:18条
(1)(1)(1)(1)(2)(2)(4)(4)(1)(2)(1)(3)(2)(5)(2)(1)(4)(4)(6)(1)(1)(1)(1)(3)(4)(40)(109)(42)(44)(3)您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
分布式内存多核处理器流程序虚拟机的研究.pdf56页
本文档一共被下载:
次 ,您可免费全文在线阅读后下载本文档
文档加载中...广告还剩秒
需要金币:200 &&
优秀硕士毕业论文,本科毕业设计参考文献资料。完美PDF格式,支持复制编辑!!!
你可能关注的文档:
··········
··········
华中科技大学
硕士学位论文
分布式内存多核处理器流程序虚拟机研究
姓名:余华飞
申请学位级别:硕士
专业:计算机软件与理论
指导教师:于俊清
华 中 科 技 大 学 硕 士 学 位 论 文
随着多核处理器成为主流产品和工业标准,如何在屏蔽处理器底层细节简化编
程方式的同时充分利用多核处理器的并行资源,是并行程序设计领域的研究热点和
难点。流编程作为一种高效的并行编程模型提供了显式的并行性,广泛用于多媒体
处理和科学计算等数据和计算密集型领域。流编程模型受到了广泛的关注,各大芯
片厂商和科研机构都研制出不同的多核体系结构来支持流应用,但它们都只开发针
对自己平台的软件系统,使得流应用在各平台间移植困难。针对以上问题,需要对
流程序的跨平台问题进行系统研究。
通过向流编程模型 Brook
中加入数据流模型设计了新的流编程模型 DFBrook ,
可以同时支持数据级和任务级的并行,编程人员可以通过向 C 代码中嵌入流代码来
表达特定程序模块的数据流执行。为了使 DFBrook 应用程序在不同的多核处理器上
易于移植并充分利用并行资源,设计并实现了流程序虚拟机(Stream program Virtual
Machine, SVM )来优化处理流应用。SVM 对不同多核体系结构的关键部分进行提炼,
如内存层次、处理器结构和数据传输引擎等,形成抽象机模型,并定义了一组应用
程序接口,以编译器辅助消息驱动的动态调度方式来完成流应用到抽象机模型上的
正在加载中,请稍后...}

我要回帖

更多关于 cuda常量内存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信