`
izuoyan
  • 浏览: 9232170 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Nebula3中的Jobs子系统

阅读更多

Jobs子系统是Nov2009这版本新加入的. 最初的背景可能是官方在把引擎移植到PS3上时, 为了充分利用SPU而做的优化. 参考KILLZONE2, SPU上可以计算的部分有:

· 动画

· 危险预测 AI

· 弹道回避 AI

· 障碍物规避 AI

· 冲撞判定

· 物理演算

· 粒子计算

· 粒子渲染

· 场景图( Scene graph

· 生成绘图列表

· 光源基准图像渲染扫描计算 (IBL Probe)

· 图像后处理

· 动态音乐播放系统的控制

· 关节平滑处理

· MP3 解压

· Playstation Edge 内的解压处理 (Zlib)

其中红色的是N3中已经采用的Job运算. 当然, 并不是所有的任务都并行化了才好, 对于Win32平台, GPU不是最大瓶颈, CPU的核心数目前并没有那么多, 所以骨骼/粒子/场景部分并行化是一个不错的选择. 当然, AI这种上层逻辑也是有其必要性的. 物理部分, 一般是采用物理引擎了, 至于内部怎么实现是它们的事.

Jobs系统结构一览:

由于公开的SDK只包含Win32平台, 所以PS3不做讨论.

Win32平台上, Jobs系统是基于ThreadPool(线程池)实现的. 先来明确一下各个类的功能:

l Job: 可以称之为任务”, 进行异步工作的基本单位. 它由以下部分组成:

n 输入数据缓冲

n 输出数据缓冲

n 统一(uniform)数据缓冲

n 任务函数

任务函数对输入数据缓冲进行并行处理, 把产生的结果写入输出数据缓冲. 输入数据缓冲会被分割到一些Slice(), Slice则会并行地处理. Uniform数据缓冲对于各个Slice而言是唯一的, 通常是用于给任务函数传输一些额外的参数.

l JobPort: MessagePort一样, JobPort是一个管道的端口”, 接收要执行的Job对象, 并处理有依赖关系的Job之间的同步和等待. 对于普通的Job, 它只是简单地拆成JobSlice扔给ThreadPool, 而对于有依赖关系的JobChain, 它会保证每个Job的第一个Slice在同一个工作线程(WorkerThread), 这样可以改善负荷. 同时, 为了保证后面的Job在前一个Job完成时才执行, JobPort会把前面Job的完成事件(CompletionEvent)告诉下一个Job, 让其等待.

l JobSystem: 这只是一个外观类, 真正的实现是JobTheadPool

l JobThreadPool: 这里面包含几个工作线程(目前是4), 每次增加Job, 它会把Job的各个Slice分散到不同的工作线程中去, 让它们尽可能地并行化执行

l WorkerThread: 这是从Thread类派生的, 就是一个实际的线程. 它的基本执行单位是JobCommand. JobCommand有两种类型:

n Run: 执行JobSlice

n Sync: 等待完成事件

WorkerThread里只有一个JobCommand的队列, 按次序执行. 如果是Run类型, 则执行;如是是Sync类型, 则等待. 这就是JobChain互相依赖的关键!

CPU频率止步不前, 核心数不断增加的今天, 并行编程已经成为一种趋势. 就是连主机这样的平台, 也免不了多个”SPU”. N3中的”Fat Thread””Job System”, 可以说是其两大精髓, 给大家做多线程化引擎编程提供了一个不错的参考.

分享到:
评论

相关推荐

    Nebula3的maya插件

    总结来说,Nebula3的Maya插件是连接Maya和Nebula3生态系统的重要桥梁,特别是其NVX2网格导出功能,为3D内容创作者提供了高效的数据交换途径。随着未来开发的推进,我们期待看到更多增强功能的出现,如N3格式的支持,...

    Nebula3命令行应用程序向导

    总的来说,Nebula3命令行应用程序向导是Nebula3开发环境中的一个重要辅助工具,它通过简化命令行应用的创建和维护过程,使得初学者能够更快地掌握Nebula3框架,并投入到实际的项目开发中。通过不断的学习和实践,...

    nebula3加载xml的核心实现

    在Nebula3框架中,XML格式被广泛用于存储和传输数据,特别是在处理游戏或图形渲染等场景。本文将深入探讨“nebula3加载XML的核心实现”,关注于如何在Nebula3中读取、解析和利用XML文件来构建和操作ModelNode类型的...

    Nebula3 Console Application Wizard

    Console Application Wizard 是Nebula3生态中的一部分,它专门服务于命令行应用程序的创建。 在开发过程中,使用 **Console Application Wizard** 可以完成以下关键步骤: 1. **项目初始化**:向导会引导开发者...

    Nebula2.25_汉化

    总的来说,Nebula2.25汉化版为中文用户提供了更顺畅的使用体验,无论是专业音频工程师还是爱好者,都能在这个版本中更好地发掘Nebula的强大功能。从模拟各种音频效果到进行复杂的系统测试,Nebula2.25汉化版都是一个...

    Nebula3 渲染程序向导

    Nebula3是一款强大的游戏开发和实时图形渲染平台,它提供了一系列高级特性,包括物理模拟、光照计算、材质系统和动画处理等。这个向导主要关注如何利用RTPlugin(Real-Time Plugin)来优化和扩展渲染流程。 ...

    Nebula模拟器-Nebula模拟器-Nebula模拟器

    3. **安全性**:Nebula模拟器提供了强大的隔离机制,确保各虚拟机之间的安全边界,防止恶意软件或攻击者跨虚拟机传播。 4. **可扩展性**:随着业务需求的增长,Nebula模拟器可以轻松添加新的虚拟机或扩展资源,无需...

    nebula图数据库V2.6.0

    在V2.6.0版本中,Nebula进一步优化了性能和功能,提升了用户体验,使其在大数据领域的应用更加广泛。 ### 一、Nebula核心特性 1. **高并发查询**:Nebula支持高并发的图查询,可以处理每秒成千上万的查询请求,...

    nebula-graph-studio-3.8.0 ARM架构编译完成的包

    在Nebula Graph Studio中,你可以创建和管理图空间,定义顶点和边的类型,执行图查询语句(如nGQL),查看查询结果,以及进行复杂的图分析任务。此外,它还支持导入导出数据,监控图数据库的状态,并提供丰富的可视...

    eclipse nebula部件

    Nebula项目则是SWT的一个增强版,它提供了许多SWT标准库中没有的组件,比如表格编辑器、树网格、日期时间选择器、分页控件等,这些组件在很多复杂的业务应用中非常实用。 将`nebula.zip`文件解压缩后,将其内容放入...

    脱壳的nebula225b

    【描述】中的"修正处理了无法扫描到全部游戏子Rom问题"意味着在原版NEBULA模拟器中,可能存在一个或多个子Rom文件无法被正确识别或加载的情况。这可能会导致某些游戏无法正常运行或功能不全。在"脱壳的nebula225b"这...

    java-nebula客户端集成(csdn)————程序.pdf

    Java Nebula 客户端集成是指将 Nebula 图数据库与 Java 应用程序集成,以便在 Java 应用程序中使用 Nebula 图数据库的功能。下面是 Java Nebula 客户端集成的详细过程。 一、建立 Maven 工程 首先,需要创建一个 ...

    nebula3 engine

    此外,Nebula3 Engine还内置了物理模拟系统,可以实现逼真的物体碰撞和运动,增强游戏的交互性和沉浸感。 在编程方面,Nebula3 Engine通常采用C++作为主要的开发语言,但同时也支持脚本语言,如Lua或Python,这使得...

    nebula-V3.3.0镜像资源包

    nebula-V3.3.0镜像资源包,包含meta、storged及graphd对应的镜像,以及nebula-console文件

    Nebula PaperClips打印例子

    1. **安装与配置**:首先,用户需要了解如何下载并安装Nebula PaperClips,包括兼容的操作系统、硬件需求以及安装过程。在配置阶段,用户可能需要设置默认打印机、页面设置等选项。 2. **文档导入**:PaperClips...

    Nebula 3 source code

    A game engine and framework. It is built to be portable to various platforms, including the consoles and the iPhone. It has been used in commercial projects.

    org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_

    标题中的"org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_"暗示了我们正在讨论的是Eclipse Nebula项目中的一个组件,具体是Grid Viewer相关的库,版本为1.0.0。这个库是用于构建用户界面的,特别适用...

    CH-Nebula

    3. **控制器支持**:为了提供更真实的体验,CH-Nebula可能支持连接游戏手柄或者键盘映射,以模拟街机摇杆和按键。 4. **设置与优化**:用户可以根据自己的硬件配置调整模拟器的参数,如帧率、分辨率等,以获得最佳...

    Jepsen 测试框架在图数据库 Nebula Graph 中的技术实践.docx

    在Nebula Graph这样的图数据库中,Jepsen测试对于确保系统在各种故障场景下的稳定性和一致性至关重要。 **Jepsen测试流程** 1. **Docker集群**:Jepsen推荐使用Docker搭建测试环境,通常包括一个控制节点和多个...

    docker分布式nebula集群持久化配置文件.rar

    docker手动搭建3台nebula分布式集群,持久化配置的meta、graph、storage配置文件demo。

Global site tag (gtag.js) - Google Analytics