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类型的...
Console Application Wizard 是Nebula3生态中的一部分,它专门服务于命令行应用程序的创建。 在开发过程中,使用 **Console Application Wizard** 可以完成以下关键步骤: 1. **项目初始化**:向导会引导开发者...
总的来说,Nebula2.25汉化版为中文用户提供了更顺畅的使用体验,无论是专业音频工程师还是爱好者,都能在这个版本中更好地发掘Nebula的强大功能。从模拟各种音频效果到进行复杂的系统测试,Nebula2.25汉化版都是一个...
Nebula3是一款强大的游戏开发和实时图形渲染平台,它提供了一系列高级特性,包括物理模拟、光照计算、材质系统和动画处理等。这个向导主要关注如何利用RTPlugin(Real-Time Plugin)来优化和扩展渲染流程。 ...
3. **安全性**:Nebula模拟器提供了强大的隔离机制,确保各虚拟机之间的安全边界,防止恶意软件或攻击者跨虚拟机传播。 4. **可扩展性**:随着业务需求的增长,Nebula模拟器可以轻松添加新的虚拟机或扩展资源,无需...
在V2.6.0版本中,Nebula进一步优化了性能和功能,提升了用户体验,使其在大数据领域的应用更加广泛。 ### 一、Nebula核心特性 1. **高并发查询**:Nebula支持高并发的图查询,可以处理每秒成千上万的查询请求,...
在Nebula Graph Studio中,你可以创建和管理图空间,定义顶点和边的类型,执行图查询语句(如nGQL),查看查询结果,以及进行复杂的图分析任务。此外,它还支持导入导出数据,监控图数据库的状态,并提供丰富的可视...
Nebula项目则是SWT的一个增强版,它提供了许多SWT标准库中没有的组件,比如表格编辑器、树网格、日期时间选择器、分页控件等,这些组件在很多复杂的业务应用中非常实用。 将`nebula.zip`文件解压缩后,将其内容放入...
【描述】中的"修正处理了无法扫描到全部游戏子Rom问题"意味着在原版NEBULA模拟器中,可能存在一个或多个子Rom文件无法被正确识别或加载的情况。这可能会导致某些游戏无法正常运行或功能不全。在"脱壳的nebula225b"这...
Java Nebula 客户端集成是指将 Nebula 图数据库与 Java 应用程序集成,以便在 Java 应用程序中使用 Nebula 图数据库的功能。下面是 Java Nebula 客户端集成的详细过程。 一、建立 Maven 工程 首先,需要创建一个 ...
此外,Nebula3 Engine还内置了物理模拟系统,可以实现逼真的物体碰撞和运动,增强游戏的交互性和沉浸感。 在编程方面,Nebula3 Engine通常采用C++作为主要的开发语言,但同时也支持脚本语言,如Lua或Python,这使得...
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.
标题中的"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搭建测试环境,通常包括一个控制节点和多个...
docker手动搭建3台nebula分布式集群,持久化配置的meta、graph、storage配置文件demo。