并发和并行:
今天和师妹讨论问题,师妹说到了现在要做的一个项目。要做大规模的并行模拟事件的模拟。问我是否可以在GPU上实现。
我们这里拿一群人来分一盒饼干来做例子。
一群人要怎么来分这些饼干啦?这里有M个饼干,有N个人要分这个饼干。
并发,就是每一个哪一个小饼干,然后各自吃各自的饼干,然后每一轮N个人就分掉了N个饼干。当然这里假设M比N大。
并行,就是N个人同时先把一个饼干分了,吃完以后再接着分下面的M-1个饼干,这样再接下去就把饼干吃完了。
这样看起来并发就比并行好了,因为每一个问题都是独立的,并发到N个处理器上面,就可以单独处理了。
但是这里有两个问题,第一个是M很小的时候,N很大,这个时候就可以采用并行的方式,让一个饼干分成很多小块,让N个人来先把一个饼干先吃完。还有当一个饼干很大的时候,一个人要吃很久才能吃完,那也可以采用并行的方式,后处理完一个还以先得到一个的结果,剩下来的慢慢处理,这个时候采用并发要等所有的处理完了才能看到整个结果,所以不一定好使。
对于并行和并发我到认为并不需要去死记硬背这些名词,只要记住并行计算,其实就是不同粒度的并发处理。
有粗粒度的,有细粒度的,不同粒度里面还可以包含不同的饼干,有巧克力饼干、有花生饼干、酥性饼干、韧性饼干、发酵(苏打)饼、薄脆饼干、曲奇饼干、夹心饼干、威化饼干、蛋圆饼干、蛋卷、黏花饼干、水泡饼干,不同的饼干也可以同时吃,所以不要讲究太多的并发或者并行,选择最适合当前的硬件架构的方法,使用最得心应手的方法,就可以了。
对于现在的GPU来讲,并行可能是比较好的选择,至少CUDA架构更适合做并行的工作,并发的工作也可以,不过得看应用,如果是并发的每一个的粒度不太一样,就需要不同的thread group同步等待,在并编程中,很忌讳等待问题,这样就成了让很多人的饼都吃完了,还看着你在吃饼,大家也只能等你把饼吃完了以后再去拿盘子里面的饼,这样会让很多人不爽的!
所以尽量做到硬件上的运行是均匀的,让硬件饱和抱起来,这样不管是并发还是并行,都可以让任务尽快的完成。
上面讨论的都是并行并非或者粒度的一些概念性的东西,我们可以看看硬件的并发,现在我们可以把这个架构分成三层,一个是集群层面,看么一个节点的工作这个就可以算是粗粒度,然后是每一个节点内的的每一个core或者GPU内部,这个可以算是细粒度的并行。在每一个层面都需要有好的算法来选择粒度的划分,如果把要处理的数据看做是一对面粉,那就需要选择最优的流程来做饼干,然后选择最好的分配方法分给大家。
数据的划得根据每一个处理节点的处理能力,还要考虑每一个节点的传输效率,精良做到有一部分面粉在和面,有一部分面粉在烤饼干,还有一部分饼干已经可以吃了,还有就是吃完了……这样尽量让网络带宽最优,使用率最好,然后每一个硬件的处理能力都发挥到极致,这就是达到了整个系统的最优化。
从实践中,你会发现 ,最好的分派算法,粗粒度的算法选得好,性能会提高的倍数是最好的,越到细粒度越难调优,所以算法是关键。
分享到:
相关推荐
2. 粒度方面,并行计算中,处理器间的交互一般很频繁,往往具有细粒度和低开销的特征,并且被认为是可靠的。而在分布式计算中,处理器间的交互不频繁,交互特征是粗粒度,并且被认为是不可靠的。 3. 联系,并行计算...
1. **任务粒度**:并行计算的优势在于大量小任务的并行执行,因此任务应足够小,以减少线程同步的开销。 2. **数据无依赖**:并行计算通常要求任务之间不存在数据依赖关系,这样可以避免线程间的等待和同步问题。 3....
虽然MATLAB默认会利用多核CPU的全部核心,但通过并行计算工具箱,我们可以更细粒度地控制多线程,如使用`parfor`和`spmd`来实现多线程并行。 总结,MATLAB的异步并行计算是提高计算效率的有效手段,它结合了多线程...
因此,我们需要权衡任务粒度、线程数量以及数据局部性等因素,以达到最佳的并行计算效果。可以使用TaskScheduler和ParallelOptions类来定制并行策略,如限制最大并行度,或者指定特定的线程池。 在实际编程中,我们...
并行计算在图形学中的全局光照计算,如光线追踪算法,就是一个明显的例子。例如,在光线追踪算法中,计算量与场景中物体的数量、分辨率以及光线散射的复杂度直接相关,计算量可能非常巨大。类似地,在气象预报中,...
并行计算是计算机科学中的一个重要领域,它涉及同时使用多种计算资源来解决计算问题的过程。并行计算的目标是提高计算机系统的计算速度和处理能力,以满足日益增长的计算需求。并行计算的领域包括但不限于业务处理、...
并行计算的一个挑战是任务分解、任务依赖关系、任务粒度分配、并发度、任务交互等问题。 Demo 演示 在该资源中,作者提供了一个简单的计算 Demo,演示如何使用 OpenMP 工具和手工编写的线程工具来并行化计算任务,...
在 MATLAB 中,我们可以使用并行计算技术来进行快速计算。本文将为您介绍 MATLAB 技术并行计算的基本概念、使用方法和注意事项。 一、并行计算的概念 并行计算是指在多个处理单元(核心、节点、机器等)上同时进行...
书中选择MPI(Message Passing Interface)、POSIX线程和OpenMP这三个应用最广泛的编写可移植并行程序的标准作为编程模型,并在不同例子中反映了并行计算的不断变化的应用组合。本书结构合理,可读性强,加之每章精心...
并行计算的粒度是指并行化的程度,从程序级别到微操作级别,根据任务的特点选择合适的并行粒度。共享内存是并行计算中的一种存储结构,所有处理器都能访问同一全局内存空间,其可分为UMA(统一内存访问)和NUMA(非...
不过,基于标题中的信息“并行计算综论”,我可以提供关于并行计算的基础知识点和相关概念,这些内容可能与书籍中介绍的知识点有关。 ### 并行计算基础知识点 1. **并行计算的概念**: 并行计算是使用多个计算...
在实际并行计算环境中,常用的消息传递接口如MPI提供了良好的可移植性和可扩展性,适合大粒度的进程级并行,但学习难度较高。共享存储模型如OpenMP则易于学习,适用于SMP和DSM系统,但在多处理器情况下性能可能受限...
针对经典遗传规划算法(CGP)存在容易早熟收敛、运行效率低的缺陷,提出一种将分布式计算与遗传规划算法结合的计算...实验表明,基于分布式粗粒度并行计算的遗传规划算法(CGGP)计算性能优于经典遗传规划算法(CGP)。
总结来说,GPU/CPU协同粗粒度并行计算技术在城市区域震害模拟中的应用,提供了一种经济高效的解决方案,有助于提升地震灾害预测的精度和速度。该方法对于推动城市防灾减灾工作具有重要的理论价值和实践意义。
以上内容涵盖了并行计算的基本概念、Petri网建模方法、FPGA在并行计算中的应用,以及如何将Petri网模型映射到FPGA平台的具体实施方法。这些知识点对于理解和实现基于FPGA的并行计算系统具有重要的参考价值。
在本文中,分布式计算被引入到遗传规划算法中,形成了所谓的基于分布式粗粒度并行计算的遗传规划算法(Coarse-Grained Genetic Programming, CGGP)。其核心思想是在并行计算环境中,通过多个子种群进行并行进化,...
然而,当时并行计算面临的主要挑战包括内存模式、计算粒度和市场需求。MATLAB的全局内存模型并不适应大多数并行系统,大数据矩阵的传输成本高昂;大部分时间花在了语法解析和图形生成上,而非计算密集型任务;并且,...
粗粒度并行遗传算法的计算性能及其应用研究.nh