当前位置: 首页 > news >正文

网站建设捌金手指花总五中装建设集团董事长

网站建设捌金手指花总五,中装建设集团董事长,怎么做网站在里面填字,小程序收录wordpress主题并行化job ParallelFor jobs​docs.unity3d.com 当调度Jobs时#xff0c;只能有一个job来进行一项任务。在游戏中#xff0c;非常常见的情况是在一个庞大数量的对象上执行一个相同的操作。这里有一个独立的job类型叫做IJobParallelFor来处理此类问题。ParallelFor jobs当调…并行化job ParallelFor jobs​docs.unity3d.com 当调度Jobs时只能有一个job来进行一项任务。在游戏中非常常见的情况是在一个庞大数量的对象上执行一个相同的操作。这里有一个独立的job类型叫做IJobParallelFor来处理此类问题。ParallelFor jobs当调度Jobs时只能有一个job来进行一项任务。在游戏中非常常见的情况是在一个庞大数量的对象上执行一个相同的操作。这里有一个独立的job类型叫做IJobParallelFor来处理此类问题。 注意“并行化”job是Unity中所有实现了IJobParallelFor接口的结构的总称。 一个并行化job使用一个NativeArray存放数据来作为它的数据源。并行化job横跨多个核心执行。每个核心上有一个job每个job处理一部分工作量。IJobParallelFor的行为很类似于IJob但是不同于只执行一个Execute方法它会在数据源的每一项上执行Execute方法。Execute方法中有一个整数型的参数。这个索引是为了在job的具体操作实现中访问和操作数据源上的单个元素。 一个定义并行化Job的例子 struct IncrementByDeltaTimeJob: IJobParallelFor {public NativeArrayfloat values;public float deltaTime;public void Execute (int index){float temp values[index];temp deltaTime;values[index] temp;} } 调度并行化job 当调度并行化job时你必须指定你分割NativeArray数据源的长度。在结构中同时存在多个NativeArrayUnity时C# Job System不知道你要使用哪一个NativeArray作为数据源。这个长度同时会告知C# Job System有多少个Execute方法会被执行。 在这个场景中并行化job的调度会更复杂。当调度并行化任务时C# Job System会将工作分成多个批次分发给不同的核心来处理。每一个批次都包含一部分的Execute方法。随后C# Job System会在每个CPU核心的Unity原生Job System上调度最多一个job并传递给这个job一些批次的工作来完成。 一个并行化job划分批次到多个CPU核心 当一个原生job提前完成了分配给它的工作批次后它会从其他原生job那里获取其剩余的工作批次。它每次只获取那个原生job剩余批次的一半为了确保缓存局部性(cache locality)。 为了优化这个过程你需要指定一个每批次数量(batch count)。这个每批次数量控制了你会生成多少job和线程中进行任务分发的粒度。使用一个较低的每批次数量比如1会使你在线程之间的工作分配更平均。它会带来一些额外的开销所以有时增加每批次数量会是更好的选择。从每批次数量为1开始然后慢慢增加这个数量直到性能不再提升是一个合理的策略。 调度并行化job的例子 job代码 // Job adding two floating point values together public struct MyParallelJob : IJobParallelFor {[ReadOnly]public NativeArrayfloat a;[ReadOnly]public NativeArrayfloat b;public NativeArrayfloat result;public void Execute(int i){result[i] a[i] b[i];} } 主线程代码 NativeArrayfloat a new NativeArrayfloat(2, Allocator.TempJob);NativeArrayfloat b new NativeArrayfloat(2, Allocator.TempJob);NativeArrayfloat result new NativeArrayfloat(2, Allocator.TempJob);a[0] 1.1; b[0] 2.2; a[1] 3.3; b[1] 4.4;MyParallelJob jobData new MyParallelJob(); jobData.a a; jobData.b b; jobData.result result;// Schedule the job with one Execute per index in the results array and only 1 item per processing batch JobHandle handle jobData.Schedule(result.Length, 1);// Wait for the job to complete handle.Complete();// Free the memory allocated by the arrays a.Dispose(); b.Dispose(); result.Dispose(); ParallelForTransform jobs https://docs.unity3d.com/Manual/JobSystemParallelForTransformJobs.html一个ParallelForTransform job是另一个类型的ParallelFor job它是专门为了Transforms上的操作设计的。 注意ParallelForTransform job是Unity中所有实现了IJobParallelForTransform接口的结构的总称。 C# Job System建议和故障排除 C# Job System tips and troubleshooting​docs.unity3d.com 当你使用Unity C# Job System时确保你遵守以下几点C# Job System tips and troubleshooting当你使用Unity C# Job System时确保你遵守以下几点 不要从一个job中访问静态的数据 在所有的安全性系统中你都应当避免从一个job中访问静态数据。如果你访问了错误的数据你可能会使Unity崩溃通常是以意想不到的方式。举例来说访问一个MonoBehaviour可以导致域重新加载时崩溃。 注意因为这个风险未来版本的Unity会通过静态分析来阻止全局变量在job中的访问。如果你确实在job中访问了静态数据你应当预见到你的代码会在Unity未来的版本中报错。 刷新已调度的批次 当你希望你的job开始执行时你可以通过JobHandle.ScheduleBatchedJobs来刷新已调度的批次。注意调用这个接口时会对性能产生负面的影响。不刷新批次将会延迟调度job直到主线程开始等待job的结果。在任何其他情况中你应当调用JobHandle.Complete来开始执行过程。 注意在Entity Component System(ECS)中批次会暗中为你进行刷新所以调用JobHandle.ScheduleBatchedJobs是不必要的。 不要试图去更新NativeContainer的内容 由于缺乏引用返回值不可能去直接修改一个NativeContainer的内容。例如nativeArray[0] ;和 var temp nativeArray[0]; temp;一样都没有更新nativeArray中的值。 你必须从一个index将数据拷贝到一个局部临时副本修改这个副本并将它保存回去像这样 MyStruct temp myNativeArray[i]; temp.memberVariable 0; myNativeArray[i] temp; 调用JobHandle.Complete来重新获得归属权 在主线程重新使用数据前追踪数据的所有权需要依赖项都完成。只检查JobHandle.IsCompleted是不够的。你必须调用JobHandle.Complete来在主线程中重新获取NaitveContainer类型的所有权。调用Complete同时会清理安全性系统中的状态。不这样做的话会造成内存泄漏。这个过程也在你每一帧都调度依赖于上一帧job的新job时被采用。 在主线程中调用Schedule和Complete 你只能在主线程中调用Schedule和Complete方法。如果一个job需要依赖于另一个使用JobHandle来处理依赖关系而不是尝试在job中调度新的job。 在正确的时间调用Schedule和Complete 一旦你拥有了一个job所需的数据尽可能快地在job上调用Schedule在你需要它的执行结果之前不要调用Complete。一个良好的实践是调度一个你不需要等待的job同时它不会与当前正在运行的其他job产生竞争。举例来说如果你在一帧结束和下一帧开始之前拥有一段没有其他job在运行的时间并且可以接受一帧的延迟你可以在一帧结束的时候调度一个job在下一帧中使用它的结果。或者如果这个转换时间已经被其他job占满了但是在一帧中有一大段未充分利用的时段在这里调度你的job会更有效率。 将NativeContainer标记为只读的 记住job在默认情况下拥有NativeContainer的读写权限。在合适的NativeContainer上使用[ReadOnly]属性可以提升性能。 检查数据的依赖 在Unity的Profiler窗口中主线程中的WaitForJobGroup标签表明了Unity在等待一个工人线程上的job结束。这个标签可能意味着你以某种方式引入了一个资源依赖你需要去解决它。查找JobHandle.Complete来追踪你在什么地方有资源依赖导致主线程必须等待。 调试job job拥有一个Run方法你可以用它来替代Schedule从而让主线程立刻执行这个job。你可以使用它来达到调试目的。 不要在job中开辟托管内存 在job中开辟托管内存会难以置信得慢并且这个job不能利用Unity的Burst编译器来提升性能。Burst是一个新的基于LLVM的后端编译器技术它会使事情对于你更加简单。它获取C# job并利用你平台的特定功能产生高度优化的机器码。 更多信息 观看Unity GDC 2018: C# Job System的片段列表获取C# Job Syetem与ECS交互的更进一步信息查看ECS package documentation on GitHub
http://www.sadfv.cn/news/11179/

相关文章:

  • 手机网站制作服务机构网站与网页的区别.
  • 网站用的服务器是什么互联网软件外包
  • 制作网站能赚钱吗建设银行网网站打不开
  • 网站建设企业谁家好个人中心页面设计html
  • 昆山快速建设网站方案如何快速建网站
  • 做的网站.如何在局域网内访问网站大全软件
  • 国外做家纺的网站山西省网站建设备案表
  • 天猫店铺申请条件及费用seo查询什么意思
  • 门户网站的设计介绍好的免费网站模板下载地址
  • 汕头站扩建招标网站建设小结
  • 在対网站做可能的来自内部和外部的攻击网页页面怎么设计
  • 太原网站制作开发苏州网络推广公司服务平台
  • 企业网站怎么自适应个人公司网页如何设计
  • app开发去哪个网站网业协同具体指什么
  • 企业网站建设兴田德润怎么联系家政网站建设方案
  • 外贸推广建站房地产网站推广
  • 装修网站建设摘要做书网站
  • 做网站大概一个月多少工资在线制作非主流流光闪字 急切网
  • 网站建设费往什么科目算命手机网站开发
  • 佛山新网站制作怎么样百度搜索引擎入口官网
  • wordpress备份百度云优化设计官方电子版
  • 成品在线网站免费入口信息公开 强化网站建设
  • 常德市 网站建设濮阳招聘大濮网
  • 江门网站推广深圳公司网上投资网站建设
  • 找公司做网站有什么好处软件开发公司的成本有哪些
  • 文本网站代码空两格怎么做做网站如何大网页
  • 深圳附近做个商城网站哪家公司便宜点wordpress 免费中文企业主题下载
  • 电白网站开发公司wordpress垂直分页导航插件
  • 建网站的网站有哪些内部优化
  • 群晖做网站服务器我的世界做壁纸网站