精华内容
下载资源
问答
  • HEVC并行处理方法

    2018-08-08 11:33:17
    HEVC提供了适用于进行数据并行处理的结构单元,如片和Tile,在不同的片和Tile中,数据信息是相互独立的,这样有利于将其分配给不同的运算单元来处理;...在HEVC中,并行处理技术主要包括:基于Tile的并行和波前...

    HEVC提供了适用于进行数据并行处理的结构单元,如片和Tile,在不同的片和Tile中,数据信息是相互独立的,这样有利于将其分配给不同的运算单元来处理;对于小于片和Tile的划分单元,HEVC支持波前并行处理(Wavefront Parallel Processing, WPP),这是对于相互具有依赖关系的图像单元进行数据并行处理的方法。在HEVC中,并行处理技术主要包括:基于Tile的并行和波前并行两种。在进行基于Tile的并行时,由于Tile的相互独立性,不需要考虑它们之间的相互依赖关系,而在进行波前并行处理时,数据间的相互依赖关系是必不可少的。

    展开全文
  • Python并行处理

    万次阅读 2017-11-02 14:37:36
    原文:Parallel Processing in Python 作者:Frank Hofmann 翻译:Diwei 简介当你在机器上启动某个程序时,它只是在自己的“bubble”...例如,这个所谓的进程环境包括该进程使用的内存页,处理该进程打开的文件,用

    原文:Parallel Processing in Python
    作者:Frank Hofmann
    翻译:Diwei

    简介

    当你在机器上启动某个程序时,它只是在自己的“bubble”里面运行,这个气泡的作用就是用来将同一时刻运行的所有程序进行分离。这个“bubble”也可以称之为进程,包含了管理该程序调用所需要的一切。

    例如,这个所谓的进程环境包括该进程使用的内存页,处理该进程打开的文件,用户和组的访问权限,以及它的整个命令行调用,包括给定的参数。

    此信息保存在UNIX/Linux系统的流程文件系统中,该系统是一个虚拟文件系统,可通过/proc目录进行访问。条目都已经根据进程ID排过序了,该ID是每个进程的唯一标识符。示例1显示了具有进程ID#177的任意选择的进程。

    示例1:可用于进程的信息



    构建程序代码以及数据

    程序越复杂,就越有助于将其分成较小的模块。不仅仅源代码是这样,在机器上执行的代码也同样适用于这条规则。该规则的典型范例就是使用子进程并行执行。这背后的想法就是:

    • 单个进程包含了可以单独运行的代码段
    • 某些代码段可以同时运行,因此原则上允许并行
    • 使用现代处理器和操作系统的特性,例如可以使用处理器的所有核心,这样就可以减少程序的总执行时间
    • 减少程序/代码的复杂性,并将工作外包专门的代理

    使用子进程需要重新考虑程序的执行方式,从线性到并行。它类似于将公司的工作视角从普通员工转变为经理——你必须关注谁在做什么,某个步骤需要多长时间,以及中间结果之间的依赖关系。

    这有利于将代码分割成更小的部分,这些更小的部分可以由专门用于此任务的代理执行。如果还没有想清楚,试想一下数据集的构造原理,它也是同样的道理,这样就可以由单个代理进行有效的处理。但是这也引出了一些问题:

    • 为什么要将代码并行化?落实到具体案例中或者在努力的过程中,思考这个问题有意义吗?
    • 程序是否打算只运行一次,还是会定期运行在类似的数据集上?
    • 能把算法分成几个单独的执行步骤吗?
    • 数据是否允许并行化?如果不允许,那么数据组织将以何种方式进行调整?
    • 计算的中间结果是否相互依赖?
    • 需要对硬件进行调整吗?
    • 在硬件或算法中是否存在瓶颈,如何避免或者最小化这些因素的影响?
    • 并行化的其他副作用有哪些?

    可能的用例就是主进程,以及后台运行的等待被激活的守护进程(主/从)。此外,这可能是启动按需运行的工作进程的一个主要过程。在实践中,主要的过程是一个馈线过程,它控制两个或多个被馈送数据部分的代理,并在给定的部分进行计算。

    请记住,由于操作系统所需要的子进程的开销,并行操作既昂贵又耗时。与以线性方式运行两个或多个任务相比,在并行的情况下,根据您的用例,可以在每个子过程中节省25%到30%的时间。例如,如果在系列中执行了两项消耗5秒的任务,那么总共需要10秒的时间,并且在并行化的情况下,在多核机器上平均需要8秒。有3秒是用于各种开销,即这部分是无法压缩和优化的,所以速度提高是有极限的。

    运行与Python并行的函数

    Python提供了四种可能的处理方式。首先可以使用multiprocessing模块并行执行功能。第二,进程的替代方法是线程。从技术上讲,这些都是轻量级的进程,不在本文的范围之内。想了解更加详细的内容,可以看看Python的线程模块。第三,可以使用os模块的system()方法或subprocess模块提供的方法调用外部程序,然后收集结果。

    multiprocessing模块涵盖了一系列方法来处理并行执行例程。这包括进程,代理池,队列以及管道。

    清单1使用了五个代理程序池,同时处理三个值的块。对于代理的数量和对chunksize的值都是任意选择的,用于演示目的。根据处理器中核心的数量来调整这些值。

    Pool.map()方法需要三个参数 - 在数据集的每个元素上调用的函数,数据集本身和chunksize。在清单1中,我们使用square函数,并计算给定整数值的平方。此外,chunksize不是必须的。如果未明确设置,则默认chunksize为1。

    请注意,代理商的执行订单不能保证,但结果集的顺序是正确的。它根据原始数据集的元素的顺序包含平方值。

    清单1:并行运行函数



    运行此代码应该产生以下输出:



    注意:我们将使用Python 3作为这些例子。

    使用队列运行多个函数

    作为数据结构,队列是非常普遍的,并且以多种方式存在。 它被组织为先进先出(FIFO)或先进先出(LIFO)/堆栈,以及有和没有优先级(优先级队列)。 数据结构被实现为具有固定数量条目的数组,或作为包含可变数量的单个元素的列表。

    列表2.1-2.7中,我们使用FIFO队列。 它被实现为已经由来自multiprocessing模块的相应类提供的列表。此外,time模块被加载并用于模拟工作负载。

    清单2.1:要使用的模块



    接下来,定义一个worker函数(清单2.2)。 该函数实际上代表代理,需要三个参数。进程名称指示它是哪个进程,tasksresults都指向相应的队列。

    在工作函数里面是一个while循环。tasksresults都是在主程序中定义的队列。tasks.get()从要处理的任务队列中返回当前任务。小于0的任务值退出while循环,返回值为-1。任何其他任务值都将执行一个计算(平方),并返回此值。将值返回到主程序实现为result.put()。这将在results队列的末尾添加计算值。

    清单2.2:worker函数



    下一步是主循环(参见清单2.3)。首先,定义了进程间通信(IPC)的经理。接下来,添加两个队列,一个保留任务,另一个用于结果。

    清单2.3:IPC和队列



    完成此设置后,我们定义一个具有四个工作进程(代理)的进程池。我们使用类multiprocessing.Pool(),并创建一个它的实例。 接下来,我们定义一个空的进程列表(见清单2.4)。

    清单2.4:定义一个进程池



    作为以下步骤,我们启动了四个工作进程(代理)。 为了简单起见,它们被命名为“P0”到“P3”。使用multiprocessing.Pool()完成创建四个工作进程。这将它们中的每一个连接到worker功能以及任务和结果队列。 最后,我们在进程列表的末尾添加新初始化的进程,并使用new_process.start()启动新进程(参见清单2.5)。

    清单2.5:准备worker进程



    我们的工作进程正在等待工作。我们定义一个任务列表,在我们的例子中是任意选择的整数。这些值将使用tasks.put()添加到任务列表中。每个工作进程等待任务,并从任务列表中选择下一个可用任务。 这由队列本身处理(见清单2.6)。

    清单2.6:准备任务队列



    过了一会儿,我们希望我们的代理完成。 每个工作进程对值为-1的任务做出反应。 它将此值解释为终止信号,此后死亡。 这就是为什么我们在任务队列中放置尽可能多的-1,因为我们有进程运行。 在死机之前,终止的进程会在结果队列中放置-1。 这意味着是代理正在终止的主循环的确认信号。

    在主循环中,我们从该队列读取,并计数-1。 一旦我们计算了我们有过程的终止确认数量,主循环就会退出。 否则,我们从队列中输出计算结果。

    清单2.7:结果的终止和输出



    示例2显示了Python程序的输出。 运行程序不止一次,您可能会注意到,工作进程启动的顺序与从队列中选择任务的进程本身不可预测。 但是,一旦完成结果队列的元素的顺序与任务队列的元素的顺序相匹配。

    示例2



    注意:如前所述,由于执行顺序不可预测,您的输出可能与上面显示的输出不一致。

    使用os.system()方法

    system()方法是os模块的一部分,它允许在与Python程序的单独进程中执行外部命令行程序。system()方法是一个阻塞调用,你必须等到调用完成并返回。 作为UNIX / Linux拜物教徒,您知道可以在后台运行命令,并将计算结果写入重定向到这样的文件的输出流(参见示例3):

    示例3:带有输出重定向的命令



    在Python程序中,您只需简单地封装此调用,如下所示:

    清单3:使用os模块进行简单的系统调用



    此系统调用创建一个与当前Python程序并行运行的进程。 获取结果可能会变得有点棘手,因为这个调用可能会在你的Python程序结束后终止 - 你永远都不会知道。

    使用这种方法比我描述的先前方法要贵得多。 首先,开销要大得多(进程切换),其次,它将数据写入物理内存,比如一个需要更长时间的磁盘。 虽然这是一个更好的选择,你的内存有限(像RAM),而是可以将大量输出数据写入固态磁盘。

    使用子进程模块

    该模块旨在替换os.system()os.spawn()调用。子过程的想法是简化产卵过程,通过管道和信号与他们进行通信,并收集他们生成的输出包括错误消息。

    从Python 3.5开始,子进程包含方法subprocess.run()来启动一个外部命令,它是底层subprocess.Popen()类的包装器。 作为示例,我们启动UNIX/Linux命令df -h,以查找机器的/ home分区上仍然有多少磁盘空间。在Python程序中,您可以执行如下所示的调用(清单4)。

    清单4:运行外部命令的基本示例



    这是基本的调用,非常类似于在终端中执行的命令df -h / home。请注意,参数被分隔为列表而不是单个字符串。输出将与示例4相似。与此模块的官方Python文档相比,除了调用的返回值之外,它将调用结果输出到stdout

    示例4显示了我们的呼叫的输出。输出的最后一行显示命令的成功执行。调用subprocess.run()返回一个类CompletedProcess的实例,它有两个名为args(命令行参数)的属性和returncode(命令的返回值)。

    示例4:运行清单4中的Python脚本



    要抑制输出到stdout,并捕获输出和返回值进行进一步的评估,subprocess.run()的调用必须稍作修改。没有进一步修改,subprocess.run()将执行的命令的输出发送到stdout,这是底层Python进程的输出通道。 要获取输出,我们必须更改此值,并将输出通道设置为预定义值subprocess.PIPE。清单5显示了如何做到这一点。

    清单5:抓取管道中的输出



    如前所述,subprocess.run()返回一个类CompletedProcess的实例。在清单5中,这个实例是一个简单命名为output的变量。该命令的返回码保存在属性output.returncode中,打印到stdout的输出可以在属性output.stdout中找到。 请注意,这不包括处理错误消息,因为我们没有更改输出渠道。

    结论

    由于现在的硬件已经很厉害了,因此也给并行处理提供了绝佳的机会。Python也使得用户即使在非常复杂的级别,也可以访问这些方法。正如在multiprocessingsubprocess模块之前看到的那样,可以让你很轻松的对该主题有很深入的了解。

    展开全文
  • 并行处理技术

    2009-12-28 14:39:00
    模型并行性是指在同一时刻或同一时间间隔内完成两种或两种以上性质相同或不相同的工作,只要在时间上互相重叠,...(3)任务处理的并行:是指将程序分解成可以并行处理的多个处理任务,而使两个或多个任务并行处理。...
    并行处理技术模型并行性是指在同一时刻或同一时间间隔内完成两种或两种以上性质相同或不相同的工作,只要在时间上互相重叠,都存在并行性。计算机系统中的并行性可从不同的层次上实现,从低到高大致可分为:
    (1)指令内部的并行:是指指令执行中的各个微操作尽可能实现并行操作。
    (2)指令间的并行:是指两条或多条指令的执行是并行进行的。
    (3)任务处理的并行:是指将程序分解成可以并行处理的多个处理任务,而使两个或多个任务并行处理。
    (4)作业处理的并行:是指并行处理两个或多个作业。如多道程序设计、分时系统等。另外,从数据处理上,也有从低到高的并行层次。
    (5)字串位并:同时对一个二进制字的所有位进行操作。
    (6)字并位串:同时对多个字的同一位进行操作。
    (7)全并行:同时对许多字的所有位进行操作。 并行处理技术图效1.时间并行

    时间并行指时间重叠,在并行性概念中引入时间因素,让多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部分,以加快硬件周转而赢得速度。

    时间并行性概念的实现方式就是采用流水处理部件。这是一种非常经济而实用的并行技术,能保证计算机系统具有较高的性能价格比。目前的高性能微型机几乎无一例外地使用了流水技术。

    2.空间并行

    空间并行指资源重复,在并行性概念中引入空间因素,以“数量取胜”为原则来大幅度提高计算机的处理速度。大规模和超大规模集成电路的迅速发展为空间并行技术带来了巨大生机,因而成为实现并行处理的一个主要途径。空间并行技术主要体现在多处理器系统和多计算机系统。但是在单处理器系统中也得到了广泛应用。

    3.时间并行+空间并行

    指时间重叠和资源重复的综合应用,既采用时间并行性又采用空间并行性。显然,第三种并行技术带来的高速效益是最好的。

    并行处理技术中国大型并行计算机21世纪的计算机系统在不同层次上采取了并行措施,只有当并行性提高到一定层次时,具有了较高的并行处理能力,才能称为“并行处理系统”。一般有以下三种并行措施。

    时间重叠:时间重叠是在并行性概念中引入时间因素,即多个处理过程在时间上相互错开,轮流重叠地使用同一套硬件设备的各个部件,以加快硬件周转而赢得速度。这各并行措施表现在指令解释的重叠及流水线部件与流水线处理机。

    资源重复:资源重复是在并行性概念中引入空间因素。这种措施提高计算机处理速度最直接,但由于受硬件价格昂贵的限制而不能广泛使用。目前,随着硬件价格的降低,已在多种计算机系统中使用,如多处理机系统、陈列式处理机等。

    资源共享:资源共享也是在并行性概念中引入时间因素,它是通过软件的方法实现的。即多个用户按一定的时间顺序轮流使用同一套硬件设备;既可以是按一定的时间顺序共享cpu,也可以是cpu与外围设备在工作时间上的重叠。这种并行措施表现在多道程序和分时系统中,而分布式处理系统和计算机网络则是更高层次的资源共享。

    从第一台电子计算机发明,电子计算机已经经历了五代。计算机发展到第四代时,出现了用共享存储器、分布存储器或向量硬件选件的不同结构的并行计算机,开发了用于并行处理的多处理操作系统专用语言和编译器,同时产生了用于并行处理或分布计算的软件工具和环境。到出现的计算机称为第五代计算机,它们的主要特点是进行大规模并行处理。并行处理技术是在微电子、印刷电路、高密度封装技术、高性能处理机、存储系统、外围设备、通信通道、语言开发、编译技术、操作系统、程序设计环境和应用问题等研究和工业发展的产物。

    并行计算机具有代表性的应用领域有:天气预报建摸、vlsi电路的计算机辅助设计、大型数据库管理、人工智能、犯罪控制和国防战略研究等,而且它的应用范围还在不断地扩大。并行处理技术主要是以算法为核心,并行语言为描述,软硬件作为实现工具的相互联系而又相互制约的一种结构技术。本文就并行处理技术的算法策略、描述性定义及软硬件方面的实现做一个简单的介绍。

    并行处理技术图形介绍一、并行算法的基本策略
    在并行处理技术中所使用的算法主要遵循三种策略:
    1.分而治之法:也就是把多个任务分解到多个处理器或多个计算机中,然后再按照一定的拓扑结构来进行求解。
    2.重新排序法:分别采用静态或动态的指令词度方式。
    3.显式/隐式并行性结合:显式指的是并行语言通过编译形成并行程序,隐式指的是串行语言通过编译形成并行程序,显式/隐式并行性结合的关键就在于并行编译,而并行编译涉及到语句、程序段、进程以及各级程序的并行性。

    二、并行性描述定义
    利用计算机语言进行并行性描述的时候主要有三种方案:
    1.语言扩展方案:也就是利用各种语言的库函数来进行并行性功能的扩展。
    2.编译制导法:也称为智能编译,它是隐式并行策略的体现,主要是由并行编译系统进行程序表示、控制流的分析、相关分析、优化分析和并行化划分,由相关分析得到方法库管理方案,由优化分析得到知识库管理方案,由并行化划分得到程序重构,从而形成并行程序。
    3.新的语言结构法:这是显式并行策略的体现。也就是建立一种全新的并行语言的体系,而这种并行语言通过编译就能直接形成并行程序。

    并行处理技术软件模型并行软件可分成并行系统软件和并行应用软件两大类,并行系统软件主要指并行编译系统和并行操作系统,并行应用软件主要指各种软件工具和应用软件包。在软件中所牵涉到的程序的并行性主要是指程序的相关性和网络互连两方面。

    1.程序的相关性:

    程序的相关性主要分为数据相关、控制相关和资源相关三类。
    数据相关:说明的是语句之间的有序关系,主要有流相关、反相关、输出相关、i/o相关和求知相关等,这种关系在程序运行前就可以通过分析程序确定下来。数据相关是一种偏序关系,程序中并不是每一对语句的成员都是相关联的。可以通过分析程序的数据相关,把程序中一些不存在相关性的指令并行地执行,以提高程序运行的速度。

    控制相关:是语句执行次序在运行前不能确定的情况。它一般是由转移指令引起的,只有在程序执行到一定的语句时才能判断出语句的相关性。控制相关常使正在开发的并行性中止,为了开发更多的并行性,必须用编译技术克服控制相关。而资源相关则与系统进行的工作无关,而与并行事件利用整数部件、浮点部件、寄存器和存储区等共享资源时发生的冲突有关。软件的并行性主要是由程序的控制相关和数据相关性决定的。在并行性开发时往往把程序划分成许多的程序段——颗粒。颗粒的规模也称为粒度,它是衡量软件进程所含计算量的尺度,用细、中、粗来描述。划分的粒度越细,各子系统间的通信时延也越低,并行性就越高,但系统开销也越大。因此,在进行程序组合优化的时候应该选择适当的粒度,并且把通讯时延尽可能放在程序段中进行,还可以通过软硬件适配和编译优化的手段来提高程序的并行度。

    2.网络互连:

    将计算机子系统互连在一起或构造多处理机或多计算机时可使用静态或动态拓扑结构的网络。静态网络由点一点直接相连而成,这种连接方式在程序执行过程中不会改变,常用来实现集中式系统的子系统之间或分布式系统的多个计算结点之间的固定连接。动态网络是用开关通道实现的,它可动态地改变结构,使之与用户程序中的通信要求匹配。动态网络包括总线、交叉开关和多级网络,常用于共享存储型多处理机中。在网络上的消息传递主要通过寻径来实现。常见的寻径方式有存储转发寻径和虫蚀寻径等。在存储转发网络中以长度固定的包作为信息流的基本单位,每个结点有一个包缓冲区,包从源结点经过一系列中间结点到达目的结点。存储转发网络的时延与源和目的之间的距离(段数)成正比。而在新型的计算机系统中采用虫蚀寻径,把包进一步分成一些固定长度的片,与结点相连的硬件寻径器中有片缓冲区。消息从源传送到目的结点要经过一系列寻径器。同一个包中所有的片以流水方式顺序传送,不同的包可交替地传送,但不同包的片不能交叉,以免被送到错误的目的地。虫蚀寻径的时延几乎与源和目的之间的距离无关。在寻径中产生的死锁问题可以由虚拟通道来解决。虚拟通道是两个结点间的逻辑链,它由源结点的片缓冲区、结点间的物理通道以及接收结点的片缓冲区组成。物理通道由所有的虚拟通道分时地共享。虚拟通道虽然可以避免死锁,但可能会使每个请求可用的有效通道频宽降低。因此,在确定虚拟通道数目时,需要对网络吞吐量和通信时延折衷考虑。

    并行处理技术接口并行处理技术是解决需要长时间处理,特别是全3d模拟难题极为高效的方案。若拥有多台工作站,则可将它们当做一个处理机群来操作,然而,linux微机机群却拥有更高的性能/价格比。并行处理技术可适用于sunsolaris,sgiirix和linux运行环境,但不支持微机windows环境。并行处理技术使全3d模拟工作的可适用性得到极大程度地扩展。以往需要数天才能完成的处理任务,仅需几小时即可完成。例如油气系统模拟以往仅能作为研究工作,而现在则可以作为油气勘探风险评价的常规流程之一。清楚地展示出近几年在没有硬件成本增加的前提下处理速度的重大突破!petromod并行处理(pp)许可证iespetromod的并行处理(pp)许可证可按处理器的个数购买,折扣量与所购买的可并行处理的数目有关。并行处理的购置费和维护费都很低,但它们可灵活地应用于不同的工作中,因为不管如何应用,许可证只管您可拥有的并行处理数:-并行处理技术主要用于加速对大的全3d数据模型的处理能力。典型的处理器数介于8-12之间,并行处理的加速因子通常与处理器数接近,即8个处理器的加速能力近于原来的8倍,因为并行处理技术能够充分利用机群中所有内存。-并行处理技术还可用于对2d模型进行处理。-并行处理技术对petrorisk处理特别重要,因为每一个风险运算过程都对应一个处理器!这意味着多个风险运算过程可在并行机中同时运行,并且风险模拟可有机地融入全3d处理工作中。 并行处理技术技术分析遵循不同的技术途径,采用不同的并行措施,在不同的层次上实现并行性的过程,反映了计算机体系结构向高性能发展的自然趋势。

    在单处理机系统中,主要的技术措施是在功能部件上,即改进各功能部件,按照时间重叠、资源重复和资源共享形成不同类型的并行处理系统。在单处理机的并行发展中,时间重叠是最重要的。把一件工作分成若干相互联系的部分,把每一部分指定给专门的部件完成,然后按时间重叠措施把各部分执行过程在时间上重叠起来,使所有部件依次完成一组同样的工作。例如将执行指令的过程分为三个子过程:取指令、分析指令和执行指令,而这三个子过程是由三个专门的部件来完成,它们是取指令部件、分析指令部件和指令执行部件。它们的工作可按时间重叠,如在某一时刻第i条指令在执行部件中执行,第i+1条指令在分析部件中分析,第i+2条指令被取指令部件取出。三条指令被同时处理,从而提高了处理机的速度。另外,在单处理机中,也较为普遍地运用了资源重复,如多操作部件和多体存储器的成功应用。

    多机系统是指一个系统中有多个处理机,它属于多指令流多数据流计算机系统。按多机之间连接的紧密程度,可分为紧耦合多机系统和松耦合多机系统两种。在多机系统中,按照功能专用化、多机互连和网络化三个方向发展并行处理技术。

    功能专用化经松散耦合系统及外围处理机向高级语言处理机和数据库机发展。多机互连是通过互联网络紧密耦合在一起的、能使自身结构改变的可重构多处理机和高可靠性的容错多处理机。计算机网络是为了适应计算机应用社会化、普及化面发展起来的。它的进一步发展,将满足多任务并行处理的要求,多机系统向分布式处理系统发展是并行处理的一种发展趋势。

    并行处理技术中国第一代大型计算机国家重大基础研究项目课题以及国家高技术研究项目。中心的主要任务是为研究所的高性能计算提供相关的科学与技术支持,主要包括:
    1.高性能并行计算机环境的建设与管理
    2.高性能并行计算软件与理论研究
    3.大规模科学计算可视化软件与理论研究
    4.大规模数据管理软件与理论研究
    5.计算机网络技术的开发与应用
    6.虚拟现实技术研究
    •上海超级计算中心成立与2000年底,是上海市信息化建设的一个重要基础设施。该中心以上海市的科研教育和工业发展为基础,为汽车碰撞模拟、船舶设计等提供高性能计算能力。目前拥有国内top100排名第一的超级计算机曙光4000a。
    •中国科学院的超级计算中心成立于1996年,为中国科学院的科学研究提供计算环境,是中国科学院信息化建设的重要基础设施之一。

    转载于:https://www.cnblogs.com/kangderui/archive/2009/12/28/1634114.html

    展开全文
  • GPU 图像并行处理

    千次阅读 2018-03-23 16:58:09
    GPGPU、GPU、CUDA ...与CPU相比,GPU具有以下优势:强大的并行处理能力和高效率的数据传输能力。其中,并行性主要体现了指令级、数据级和任务级三个层次。高效率的数据传输主要体现在两个方面: G...

    GPGPU、GPU、CUDA

    GPGPU是一种编程模式,采用图形编程语言,使用GPU进行一些图形计算。

    GPU是显卡。

    CUDA,是一个利用NVIDIA GPU计算能力的平台,是一种并行计算架构。

    GPU并行化处理

    与CPU相比,GPU具有以下优势:强大的并行处理能力和高效率的数据传输能力。其中,并行性主要体现了指令级、数据级和任务级三个层次。高效率的数据传输主要体现在两个方面: GPU与显存之间的带宽为:16GB/s;系统内存到显存的带宽为:4GB/s。

    综上所述,GPU比较适合处理具有下面特性的应用程序:1、大数据量;2、高并行性;3、低数据耦合;4、高计算密度;5、与CPU交互比较少。

    数字图像处理的并行化分析

    数字图像处理算法多种多样,但从数据处理的层面来考虑,可以分为:像素级处理、特征级处理和目标级处理三个层次。

    (1)像素级图像处理

      像素级处理,即由一幅像素图像产生另一幅像素图像,处理数据大部分是几何的、规则的和局部的。根据处理过程中的数据相关性,像素级处理又可进一步分为点运算、局部运算和全局运算。

    (2)特征级图像处理

      特征级处理是在像素图像产生的一系列特征上进行的操作。常用的特征包括:形状特征、纹理特征、梯度特征和三维特征等,一般采用统一的测度,如:均值、方差等,来进行描述和处理,具有在特征域内进行并行处理的可能性。但是,由于其特征具有象征意义和非局部特性,在局部区域并行的基础上,需要对总体进行处理。利用GPU实现并行化处理的难度比较大。

    (3)目标级图像处理

      目标级处理是对由一系列特征产生的目标进行操作。由于目标信息具有象征意义和复杂性,通常是利用相关知识进行推理,得到对图像的描述、理解、解释以及识别。由于其数据之间相关性强,且算法涉及到较多的知识和人工干预,并行处理的难度也比较大。

      由此可见,整个图像处理的结构可以利用一个金字塔模型来表示。在底层,虽然处理的数据量巨大,但由于局部数据之间的相关性小,且较少的涉及知识推理和人工干预,因此大多数算法的并行化程度比较高。当沿着这个金字塔结构向高层移动时,随着抽象程度的提高,大量原始数据减少,所需的知识和算法的复杂性逐层提高,并行化处理的难度也逐渐加大。

      由于绝大部分的图像处理算法是在像素级进行的,且GPU的SIMD并行流式处理在进行像素级的图像处理时具有明显的优势,而特征级和目标级处理无论是从数据的表达还是从算法自身的实现来说,都很难实现GPU并行化。

    使用GPU提高OpenCV的图像处理运算速度

    OpenCV中提供了GPU模块,可以用来加速图像处理的相关运算。OpenCV的GPU模块是使用CUDA编写的。

    OpenCV中GPU模块的调用点击这里,使用GPU模块需要开启WITH_CUDA选项。

    OpenCV官方关于CUDA的说明及范例点击这里

    关于如何在实时图像处理中使用OpenCV与GPU可以参考这篇文章

    展开全文
  • 计算体系包括组成和硬件两个方面,随着计算机系统的发展,逐渐由单个处理器的简单计算系统发展为由多个处理器,甚至多个不同架构处理器组成的复杂计算系统。这篇文章就计算体系结构展开讨论,从计算框架特别是异构...
  • 基于GPU的数字图像并行处理研究

    千次阅读 2015-09-26 11:28:22
    摘要:针对像素级图像处理算法并行化程度高的特点,利用...最后通过图像的卷积运算验证了GPU的并行处理能力。 关键词:GPU;片元程序;Cg;并行处理 GPU并行化处理  可编程图形处理器(Programmable Graphic Proc
  • 我首先从一般的分布式存储及运算架构开始了解,我个人觉得这些经典的架构,包括mapreduce,做得是一种特定情况下的并行处理。也就是说,我们程序员必须知道具体问题的并行算法。但是,我觉得应该有更一般的并行...
  • Groovy的并行处理框架 GPars

    千次阅读 2014-02-09 10:24:19
    随着并行计算在计算机上的广泛应用(自己用的本本都已经是双核的了),并行计算软件也逐步...是为Groovy提供的一款开源并行类库,给我们提供了多种高级抽象,包括:map/reduce、fork/join、asynchronous closures、a
  • 并行传输数据和串行传输数据 计算机系统中的并行处理和数据传输模式 (Parallel Processing and Data Transfer Modes in a Computer System) Instead of processing each instruction sequentially, a parallel ...
  • x265探索与研究(八):x265中的并行处理机制函数关系分析    HEVC的高计算复杂度如果仅仅依赖于单核处理器计算能力的提高,其代价是非常昂贵的,为此,HEVC的设计充分考虑到了并行计算的需求。x265不同于HM...
  • 下面这个示例包括并行处理枚举,并行输出到控制台。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Sys
  • 并行信号处理技术-序

    千次阅读 2017-09-11 22:27:38
    下面几篇将连载并行信号处理技术,内容来自于我原来的工作,略作总结。 背景和意义 然而随着材料科学和电子对抗技术发展,雷达面临着前所未有的挑战。隐身、低空、高速、高机动目标对雷达的探测能力提出了新的要求...
  • 谷歌公司最先提出了分布式并行编程模型MapReduce,Hadoop MapReduce是它的 开源实现,后者比前者使用门槛低很多。 MapReduce和传统的并行计算框架的比较 传统并行计算框架 MapReduce 集群架构/容错性 共享...
  • 并行计算与分布式处理的区别?

    千次阅读 2015-04-30 13:27:17
     并行计算或称平行计算是相对于串行计算来说的。 所谓并行计算可分为时间上的并行...为执行并行计算,计算资源应包括一台配有多处理机(并行处理)的计算机、一个与网络相连的计算机专有编号,或者两者结合使用。
  • 大规模并行处理(MPP,massively parallel processing)是多个处理器(processor)处理同一程序的不同部分时该程序的协调过程,工作的各处理器运用自身的操作系统(Operating System)和内存。大规模并行处理器...
  • 大数据处理并行计算

    万次阅读 2017-05-04 08:06:30
    大数据处理并行计算随着对地观测技术的发展,获取到的地理数据越来越精细,而数据量也越来越大,地理数据数据处理与分析的时间耗费就越大。因此,传统的数据处理技术和串行计算技术难以满足高精细地理大数据处理的...
  • 并行处理思想与弗林(Flynn)分类

    千次阅读 2015-03-18 18:14:25
    并行计算机是由一组处理单元组成的,这组处理单元通过相互之间的通信与协作,以更快的速度共同完成一项大规模的计算任务。因此,并行计算机的两个最主要的组成部分是计算节点和节点间的通信与协作机制。并行计算机...
  • “云计算”(Cloud Computing)是分布式处理(Distributed Computing)、并行处理(Parallel Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。  最近,大公司如...
  • java8——并行数据处理与性能

    千次阅读 2018-03-06 11:09:41
    前言在Java7之前,并行处理数据集合非常麻烦。第一,你得明确地把包含数据的数据结构分若干子部分;第二,你要给每个字部分分配一个独立的线程。第三,你需要在恰当的时候对它们进行同步来避免不希望出现的竞争条件...
  • python的os模块封装了常见的系统调用,其中就包括fork,可以在Python程序中轻松创建子进程: ? 1 2 3 4 5 6 7 8 9 import os ...
  • 并行计算与分布式处理的区别

    千次阅读 2017-06-09 15:29:42
    一、一些概念 ... 超线程技术的目的是提高物理处理器的利用效率,开销是模拟的多个逻辑处理器在工作切换时,有不少的数据保存和恢复工作,因此实际处理性能的提升要弱于多核CPU的多个物理处理器;双核CPU的两
  • 后端服务包括数据库查询、缓存查询、数据的提交等等; 各个后端服务的处理不相互依赖等。 如果你也有同样的场景,欢迎你来订阅这篇文章,本场 Chat 内容如下: 如何实现多服务的并行执行; 如何做到服多服务的结果...
  • 并行算法

    千次阅读 2019-04-23 19:22:44
    并行算法就是用多台处理机联合求解问题的方法和步骤,其运行过程是将给定的问题首先分解成若干个尽量相互独立的子问题,然后使用多台计算机同时求解他,从而最终求得原问题的解。 1.并行算法设计 并行算法设计...
  • 这颗SoC创下了三个中国第一:中国第一颗具有自己指令集架构的双核处理器,中国第一颗真正将CPU和GPU集成在单个Die上的SoC,中国第一颗基于并行计算且具有先进同步多线程设计的多核处理器芯片。” IC1 具有
  • Oracle 并行操作

    万次阅读 2016-04-22 12:22:53
    这 时提升性能的另一种方法就应运而生,也就是并行处理——同时利用多个 CPU进行工作。正统的理论界认为,企业的数据库有两种类型,OLTP 和 OLAP,前者用于业务处理,其 特点是大量的运行时间很短的事务型
  • 导语一般情况下,关于性能的讨论,对于ArcGIS平台来说都是ArcGIS for Server、ArcSDE方面更多一些,很少会涉及到ArcGIS for Desktop方面的性能问题,刚好前几...后台64位运行ArcGIS Desktop10引入了后台处理,简单来说
  • 并行计算

    千次阅读 2013-02-24 15:03:40
    1 并行计算机系统结构 大型并行机系统一般可分为6类机器:单指令多数据流SIMD(single instruction multiple data);并行向量处理机PVP...大规模并行处理机MPP(massively parallel processor);工作站机群COW
  • Matlab并行编程

    千次阅读 2017-04-27 19:57:33
    本文讲的Matlab并行编程包括并行for循环和数据并行(同一个程序运行在不同的数据上),分别对应于parfor、spmd方法 1. 并行方法 parpool %开启并行池(parallel pool) %parallel program delete(gcp('nocreate')...
  • 并行计算及并行算法

    万次阅读 多人点赞 2018-06-13 22:27:31
    一、并行计算  简单地说,并行计算就是在并行计算机上所做的计算。从普通意义上讲,它和常说的高性能计算、超级计算等是同义词。并行计算的初衷是为了努力仿真自然世界中一个序列中含有众多同时发生的、复杂且相关...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,885
精华内容 108,754
关键字:

并行处理包括