多核与并行

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

   在这里我们先初步分析一下目前移动游戏开发的概念与以往发生了怎样的改变。我们知道以前所谓的游戏开发与移动开发基本没有交集,移动游戏开发往往专指J2ME开发的一些小游戏,入门不难但是普遍用户体验不佳。而且由于J2ME标准不太统一所以造成移动游戏开发没有什么通用性,更难以形成统一的标准。但是由于平板及智能手机的普及,尤其是IPHONE的出现使移动游戏的核心领域迅速由2D向3D转换。

   一个新兴市场往往是最需要创意的,而随着市场的逐渐成熟则逐渐稳定与成熟的技术会变得越来越重要。我想对于移动的开发也是如此。那么目前移动开发最重要的,也是最本质的改观就是手机迅速由单核或者说是双核向着多核转变,目前比较流行的机型例如三星的NOTE2,S3等全部是4核,可以。可以预见很快就要完成到8核的进化

 

那么我们来分析一下结合移动平台目前的情况分析一下多核的趋势

1、  移动平台上的进程往往是用户当前进程通吃绝大部分资源的情况:与服务器或者桌面版系统不同,基本每个移动平台或者说是移动系统对于用户的当前进程的资源分配都有相当大的倾斜。所以往往是用户当前的使用进程可以占用全部CPU的资源,那么可以想象如果用户的程序拥有强大的CPU支持,但是只能完整的利用其中一核的效率,那么其实程序的效率也就无从谈起。

推论:移动平台上的多核性能优化不能指望操作系统,必须由应用开发设计人员来完成。

2、进程的多核优化不是简单的多起线程,有的朋友可能这样认为,多核的优化就是多起线程。其实这绝对是一种误区,绝大多数情况下还是主线程对于整个程序流畅性起到了绝对的作用,所谓的多程程往往是指用户进程向服务器或者操作系统请求数据的情况,其实用户进程绝对部分时间是在主进程上运行的。所以最需要优化的往往是我们的主线程,如果没有多线程运行就没法优化的说法是不正确的。

推论:如果要优化性能数据请求进程不是重点,而用户界面的主进程才是重头戏。

好让我们快速来举几个场景来分析一下情况,如果你是在做一个基于云端的手机应用,那么你的进程有一个很重要的任务是要解析XML报文,生成XML对象的数组,虽然编程框架如.NET或者J2EE等可以完成这样的工作,但是他的工作机制肯定是这样的,那么你需要遍历一下整个字符串,然后找到其中的标签和值,然后生成相应的对象。那么好问题来了,其实由于XML报文采用的是字典方式的数据组织形式,只要你知道标签的NAME就可以找到标签的值,而同一级别下的数据组织顺序没有关系,或者换种说法,那就是前一项的解析结果对于后一项的解析没有影响,那么没必要串行。OK透过简单的分析这种情况可以并行处理。

那么如果您做游戏那么其实情况就更多了,比如你在做矩阵变换,虽然不管XNA还是DX都会有相应的函数处理,其实还是遍历矩阵中的所有元素然后将此元素带入用某一方程式求值后放入新的位置。和上面的情况一样,每一项的处理结果均以单独立完成,互不影响,又没必要串行。

其实直白的解释并行的条件就是最终的计算结果的若干元素相互之间不产生影响,每一元素的生成均可以独立进行。那么总是回来了这种可以并行的情况JAVA或者C的类库有没有能你做优化?OK简单的看个例子,假如你有一个数组A[1,2,3,4]你需要把每个元素都加1形成这样的数据B[2,3,4,5],那么不管是C还是JAVA写法都类似。我以伪代码举例了

INT B[4];

FOR (INT I=0,I<A.LENGTH,I++)

{

B[I]=A[I]+1;

}

好结果代码是这么写的还有可能并行吗?

无论是哪个编译器都都必须让循环变量I执行I++的操作,才可以做B[I]=A[I]+1的动作。这个循环变量直接把一个可并行计算的机会葬送掉了。

其实这种循环变量的写法之所以没有被反强烈思过,是因为这种写法是贴近单核CPU的,他一步步的告诉CPU该怎么做。但是在多核时代这种表达方式不再适用。

再举个简单的例子:

比如银行的营业大厅以前常常是只有一个营业员那么假如你是营业经理设计流程就只能是一个人办理完成业务再进入下一个人(这样的方式类似于循环变量的方式)

但是目前银行的营业大厅里经常是四五营业员那么新的流程不能是一个人办理业务完成后再叫下一个人的方式不再适用。而是要让每个营业员都可以叫号。而之前规定只有一个客户办理完成业务的情况下才能让下一个客户进门办理业务的规则必须废止。

如果对于上面那个例子中所讲的对于A[1,2,3,4]中每个元素都加1的需求,函数式也就是并行式的语言是怎么做的呢?我以F#为例

Let add  x = x +1

List.map add [1 .. 4] 

这样就OK了。其实这咱写法也很好理解,先定义一个函数ADD就是把输入x加上1之后返回,而第二行的意思就是对于数据[1 .. 4]中的每个元素都执行add函数,并形成对应的元素。与FOR循环的做法相比,函数式语言避免了循环变量的出现带来的串行问题,虽然表达变简单了但是由于没有规定具体的实现,却增大了并行优化的空间。

好,这次的主要内容就是这些,总结一句话目前的多核移动时代,你可以不了解函数式语言的具体语法,但是不能不了解这种思想。后面的博客也不想就F#的具体语法来做详细介绍,但是我会尽我所能对函数式语言中所包含的思想进行介绍。

Rust中的并行并发优化:释放多核性能 并行并发是计算机领域中重要的概念,它们都多核性能的释放息息相关。并行是指同时执行多个任务或操作,通常是通过利用多个处理器核心或线程来实现的。在计算机系统中,多个任务可以并行执行,以提高整体的计算速度和效率。​而并发则是指多个任务或操作在同一时间段内执行,通过时间片轮转或者任务切换的方式,使得用户感觉多个任务是同时执行的。并行不同的是,并发是在单个处理器核心或线程上进行的,通过快速切换任务的方式实现多个任务的交替执行。​。 阅读详情

相关推荐

5、分布式、并行计算多核架构解析

本文深入解析了分布式、并行计算多核架构的核心概念、分类、应用场景及挑战。内容涵盖并行计算的不同模式(如SIMD、MISD、MIMD),并行计算机的分类(如分布式计算、集群计算、网格计算、云计算等),多核处理器的架构特点优势,以及并行计算在科学计算、数据挖掘和人工智能领域的应用案例。同时,文章还讨论了并行计算所面临的交互开销、负载均衡、同步互斥等问题及其解决方案,并展望了未来并行计算技术的发展趋势。

iii12的专栏 79

多核时代的移动开发(一)-函数式编程思想到来

在这里我们先初步分析一下目前移动游戏开发的概念以往发生了怎样的改变。我们知道以前所谓的游戏开发移动开发基本没有交集,移动游戏开发往往专指J2ME开发的一些小游戏,入门不难但是普遍用户体验不佳。而且由于J2ME标准不太统一所以造成移动游戏开发没有什么通用性,更难以形成统一的标准。但是由于平板及智能手机的普及,尤其是IPHONE的出现使移动游戏的核心领域迅速由2D向3D转换。   一个新兴市场往往

Python爱好者的专栏 1万+

9、多核环境下的并行计算分支限界算法

本文探讨了多核和GPU环境下并行计算的发展应用,重点分析了分支限界(B&B)算法在解决组合优化问题中的作用及其并行化策略。文章介绍了多核编程模型(如POSIX Threads和OpenMP)以及GPU编程工具(如CUBLAS库),并通过矩阵乘法和流水车间调度问题展示了并行计算的实际应用。同时,文章总结了B&B算法的三种主要并行化模型,并讨论了其优缺点及适用场景,为高效解决大规模组合优化问题提供了理论支持和实践指导。

fun88的博客 69

函数式 - 主席树 > <

· 博主语文体育老师教的     · 本文年龄限定 16+     · 吐槽上面 2条的都是⑨     很久以前的坑了……     因为最近刷到树上路径K大值什么的, 实在不想写XX分块树......     推荐文章 :         1、丽洁姐的《可持久化数据结构研究》         2、Seter 对 BZOJ 1901 的吐槽 - http://s

聆风吹雪、 518

Java8函数式编程3-并行并发

Java8对程序并行和并发新增支持的简单介绍

cuiods的博客 2330

【译】成为一名函数式码农系列之六

你已经学了函数式编程相关的所有新知识,你可能开始困惑:“然后呢?我如何才能在我的工作中实践起来?” 这得具体问题具体分析。如果你工作中用的是像[Elm](http://elm-lang.org/)或者[Haskell](https://www.haskell.org/)这类纯函数语言,那这些知识很容易就能运用起来。 如果你只能用某种命令式语言(这种情况很常见),比如JavaScript,你还是能运用大部分我们之前

野草园 741

多核编程并行计算的挑战实践

本文深入探讨了多核编程并行计算领域的关键书籍参考资料,以及在这一领域内所面临的挑战和实践方法。从理论到应用,从设计到实现,涉及多核处理器架构、并发数据访问、任务通信、同步机制等多个方面。

weixin_42591413的博客 490

深入理解并行计算多核编程的关键概念

本文深入探讨了并行计算多核编程的核心概念,包括操作系统在多核编程中的角色、进程线程的管理、内存管理以及并行设计模式。文中详细解读了并行随机访问机模型(PRAM),以及如何通过POSIX标准和OpenMP指令实现并行化。同时,强调了在多核编程中对互斥锁信号量、条件变量和临界区的正确使用,以及对并发系统中同步机制的需求。文章还涉及了数据竞争、死锁等问题,并提供了避免这些问题的策略。

weixin_42511832的博客 613

Ubuntu多核并行计算实验教程实践

并行计算是指同时使用多个计算资源解决计算问题的过程。它通过将任务分解为更小的子任务,由多处理器或多计算机并行执行,从而达到缩短解决时间的目的。在多核处理器普及的今天,合理运用并行计算不仅能够提高计算效率,还可以在科学研究、大数据分析、机器学习等领域中处理更大规模的数据集。消息传递接口(Message Passing Interface,MPI)是高性能计算中广泛使用的并行编程标准。它允许不同的计算节点之间通过发送和接收消息来协调计算过程。

weixin_35671843的博客 383

多核、多线程、并发并行

一、概念 进程线程 进程是操作系统进行资源分配管理和调度的单元,比如我们打开QQ,运行的QQ就是一个进程。 线程是进程的一个子集,线程是CPU进行调度和执行的单元。 一个进程可以包含一个线程(单线程的进程),也可以包含多个线程(多线程的进程)。 多核多线程 在单核时代,也可以实现多线程,同一时间内,各个(同一或者不同)线程争夺CPU时间片。 在多核时代,各个进程及其线程可以在不同CPU内核上执行。多核为多线程并行执行提供了可能。 并发、并行串行 串行:各个线程排队等待CPU的执行。 并发:指的是不同

qq_42412749的博客 2789

多核架构下的并行编程内存管理

本文深入探讨了多核架构下的并行编程技术及其对软件开发的影响。首先介绍了多核处理器的三种常见配置:超线程、经典多处理器和单芯片多处理器。接着,文章分析了混合多核架构的概念以及如何通过代码优化和专业化来利用其独特能力。特别强调了软件开发者如何利用CMP(对称多处理)来提升应用程序性能,并指出并非所有应用程序都适合并行处理。文章最后讨论了处理器架构的基础知识,包括寄存器、主内存、虚拟内存等组件,以及编译器和操作系统如何CPU交互,影响程序性能。

weixin_42298778的博客 531

关于多核单核、并行并发

并行:时间段内有很多的线程或进程在执行,但何时间点上都只有一个在执行,多个线程或进程争抢时间片轮流执行。 并发:时间段和时间点上都有多个线程或进程在执行。 单核cpu的话只能是并行多核cpu才能做到并发执行。 那有人可能有这样的疑问:那多进程的并发有什么意义,不但没有提高cpu的利用效率,由于调度等开销,还降低了cpu的使用。 这样的想法是片面的: 1.进程并不是时时刻刻都占用cp

gx_wqm的专栏 6605

ThrustOpenMP集成:如何在多核CPU上实现高性能并行计算

Thrust是由NVIDIA开发的C++并行算法库,它提供了丰富的并行算法接口,能够帮助开发者轻松实现高性能计算。通过将ThrustOpenMP结合,开发者可以在多核CPU系统上充分发挥硬件潜力,实现高效的并行计算。 ## 什么是Thrust并行计算库? Thrust是一个基于C++标准模板库(STL)的并行算法库,它抽象了底层硬件细节,让开发者能够专注于算法逻辑。Thrust支持多种后端系

gitblog_00393的博客 913

⚡ Simulink多核并行优化 多核心绑定 实践-SFTW-CPU

现代仿真控制系统中,至关重要。本方案结合技术,实现高性能模型运行。

doctorqi的博客 364

5、多核并行程序设计指南

本文详细介绍了多核并行程序设计的核心概念方法,重点探讨了 PCAM 方法学(分区、通信、聚合、映射)在并行程序设计中的应用,并结合图像卷积算法进行了实例说明。文章还分析了多种分解模式(如任务并行性、分治分解、几何分解)和程序结构模式(如主从模式、分叉-合并模式),比较了它们的性能特征及适用场景。最后,通过组合分解模式程序结构模式,展示了如何设计高效并行程序并优化其性能。本文旨在帮助开发者掌握多核环境下并行程序设计的理论实践技巧。

3c4x5z6v7b的博客 86

3、多核计算中的并行性能优化

本文探讨了多核计算中的并行性能优化策略,重点分析了NTChem和Linpack两种算法的并行化方法优化实践。通过任务化操作、MPI互操作性库的使用以及调度策略优化,有效减少了通信负载不平衡和优先级反转问题,提高了程序在多核环境下的性能。同时,文章也指出了并行化过程中面临的一些挑战,如通信死锁、内核吞吐量下降等问题,并提出了针对性的解决方案。实验结果表明,合理的并行化策略能够在大线程数配置下显著提升性能,但在低线程数场景下仍存在优化空间。

z2a3b4c5d的博客 89
上一篇: 控制台程序设计
下一篇: ActiveX控件开发总结
wwl33695
博客等级 码龄18年 136粉丝 46原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值