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插件是连接Maya和Nebula3生态系统的重要桥梁,特别是其NVX2网格导出功能,为3D内容创作者提供了高效的数据交换途径。随着未来开发的推进,我们期待看到更多增强功能的出现,如N3格式的支持,...
总的来说,Nebula3命令行应用程序向导是Nebula3开发环境中的一个重要辅助工具,它通过简化命令行应用的创建和维护过程,使得初学者能够更快地掌握Nebula3框架,并投入到实际的项目开发中。通过不断的学习和实践,...
在Nebula3框架中,XML格式被广泛用于存储和传输数据,特别是在处理游戏或图形渲染等场景。本文将深入探讨“nebula3加载XML的核心实现”,关注于如何在Nebula3中读取、解析和利用XML文件来构建和操作ModelNode类型的...
总的来说,Nebula2.25汉化版为中文用户提供了更顺畅的使用体验,无论是专业音频工程师还是爱好者,都能在这个版本中更好地发掘Nebula的强大功能。从模拟各种音频效果到进行复杂的系统测试,Nebula2.25汉化版都是一个...
Console Application Wizard 是Nebula3生态中的一部分,它专门服务于命令行应用程序的创建。 在开发过程中,使用 **Console Application Wizard** 可以完成以下关键步骤: 1. **项目初始化**:向导会引导开发者...
3. **安全性**:Nebula模拟器提供了强大的隔离机制,确保各虚拟机之间的安全边界,防止恶意软件或攻击者跨虚拟机传播。 4. **可扩展性**:随着业务需求的增长,Nebula模拟器可以轻松添加新的虚拟机或扩展资源,无需...
【描述】中的"修正处理了无法扫描到全部游戏子Rom问题"意味着在原版NEBULA模拟器中,可能存在一个或多个子Rom文件无法被正确识别或加载的情况。这可能会导致某些游戏无法正常运行或功能不全。在"脱壳的nebula225b"这...
Nebula3是一款强大的游戏开发和实时图形渲染平台,它提供了一系列高级特性,包括物理模拟、光照计算、材质系统和动画处理等。这个向导主要关注如何利用RTPlugin(Real-Time Plugin)来优化和扩展渲染流程。 ...
在V2.6.0版本中,Nebula进一步优化了性能和功能,提升了用户体验,使其在大数据领域的应用更加广泛。 ### 一、Nebula核心特性 1. **高并发查询**:Nebula支持高并发的图查询,可以处理每秒成千上万的查询请求,...
Nebula项目则是SWT的一个增强版,它提供了许多SWT标准库中没有的组件,比如表格编辑器、树网格、日期时间选择器、分页控件等,这些组件在很多复杂的业务应用中非常实用。 将`nebula.zip`文件解压缩后,将其内容放入...
Java Nebula 客户端集成是指将 Nebula 图数据库与 Java 应用程序集成,以便在 Java 应用程序中使用 Nebula 图数据库的功能。下面是 Java Nebula 客户端集成的详细过程。 一、建立 Maven 工程 首先,需要创建一个 ...
此外,Nebula3 Engine还内置了物理模拟系统,可以实现逼真的物体碰撞和运动,增强游戏的交互性和沉浸感。 在编程方面,Nebula3 Engine通常采用C++作为主要的开发语言,但同时也支持脚本语言,如Lua或Python,这使得...
在Nebula Graph Studio中,你可以创建和管理图空间,定义顶点和边的类型,执行图查询语句(如nGQL),查看查询结果,以及进行复杂的图分析任务。此外,它还支持导入导出数据,监控图数据库的状态,并提供丰富的可视...
nebula-V3.3.0镜像资源包,包含meta、storged及graphd对应的镜像,以及nebula-console文件
1. **安装与配置**:首先,用户需要了解如何下载并安装Nebula PaperClips,包括兼容的操作系统、硬件需求以及安装过程。在配置阶段,用户可能需要设置默认打印机、页面设置等选项。 2. **文档导入**:PaperClips...
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.
总的来说,Nebula Graph Studio v3.1.0是一个强大的工具,它为Nebula Graph数据库提供了直观的图形化用户界面,涵盖了数据操作、查询、管理和导入导出等功能,适用于数据分析、社交网络、推荐系统等多个领域的应用。...
标题中的"org.eclipse.nebula.widgets.grid_1.0.0.jar_gridview_everyt8y_"暗示了我们正在讨论的是Eclipse Nebula项目中的一个组件,具体是Grid Viewer相关的库,版本为1.0.0。这个库是用于构建用户界面的,特别适用...
3. **控制器支持**:为了提供更真实的体验,CH-Nebula可能支持连接游戏手柄或者键盘映射,以模拟街机摇杆和按键。 4. **设置与优化**:用户可以根据自己的硬件配置调整模拟器的参数,如帧率、分辨率等,以获得最佳...
在Nebula Graph这样的图数据库中,Jepsen测试对于确保系统在各种故障场景下的稳定性和一致性至关重要。 **Jepsen测试流程** 1. **Docker集群**:Jepsen推荐使用Docker搭建测试环境,通常包括一个控制节点和多个...