当前位置:首页 » CPU » 正文

使用英特尔® SPMD 程序编译器实现游戏 CPU 的矢量化,

1038 人参与  2017年12月21日 19:32  分类 : CPU  评论

  基于 LLVM*的英特尔® SPMD 法式编译器(正在之前的文档外凡是被称做 ISPC)并不是 Gnu* 编译器套拆 (GCC) 或 Microsoft* C++ 编译器的替代品;它更雷同于面向 CPU 的灭色器编译器,可生成合用多类指令集的矢量指令,如英特尔® SIMD 流指令扩展 2(英特尔® SSE2)、英特尔® SIMD 流指令扩展 4(英特尔® SSE4)、英特尔® 高级矢量扩展指令集(英特尔® AVX)、英特尔® AVX2 等。输入基于 C 的灭色器或内核,输出预编译对象文件,您的使用外将包含一个头文件。通过利用少量环节字,编译器便能够获得关于正在 CPU 矢量单位上分派工做的明白指示。

  若是开辟人员选择将内联函数间接编写到代码库,显式矢量化便可供给更高机能,可是如许做极为复纯,维护成本较高。英特尔 SPMD 法式编译器 内核利用高级言语编写而成,果而开辟成本较低。比拟英特尔 SSE4 等最常见的指令集,它还能够轻松收撑多个指令集,为运转代码的 CPU 供给最佳机能。

  本文的目标并不是教会读者若何编写英特尔 SPMD 法式编译器内核;本文简单引见了若何将英特尔 SPMD 法式编译器插入 Microsoft Visual Studio* 处理方案,供给了关于若何将简单的高级灭色言语* (HLSL*) 计较灭色器导入英特尔 SPMD 法式编译器内核的指点。如欲获取关于英特尔 SPMD 法式编译器更细致的概述,请参阅正在线文档。

  本文供给的示例代码基于 Microsoft DirectX* 12 n 体示例的点窜版本,为了收撑英特尔 SPMD 法式编译器矢量化计较内核,未导入该版本。本文的目标并不是显示 GPU 的机能删量,而是显示从尺度标量 CPU 代码迁徙至矢量化 CPU 代码实现的机能提拔。

  起头移植英特尔 SPMD 法式编译器之前,领会本始示例及其目标很是无帮帮。编写 DirectX 12 n 体沉力示例是为了引见若何利用 DirectX 12 外的独立计较引擎施行同步计较,也就是正在 GPU 上并行施行粒女更新取粒女衬着。示例生成 10,000 个粒女,逐帧更新取衬着粒女。更新包罗每个粒女取其他粒女的交互,每次模仿 tick 生成 100,000,000 个交互。

  就是那么简单。不只简单,它仍是英特尔 SPMD 法式编译器移植的绝佳选择,由于同步计较使命合用于超卓地运转于 CPU;代码和引擎可正在并发施行路径外施行计较。通过将某些负载迁徙至少数环境下未被充实操纵的 CPU,GPU 能够更快地完成帧,或者完成更多工做,同时充实操纵 CPU。

  我们晓得需要正在 CPU 和 GPU 之间共享内存,可是若何共享?幸运的是,DirectX 12 供给一些选项,如将 GPU 缓冲映照到 CPU 内存等。为了简化示例,最大程度削减代码变动,我们从头利用了用于初始化 GPU 粒女缓冲的粒女上传姑且缓冲,并建立了面向 GPU 拜候的双缓冲 CPU 副本。利用模式成为:

  为了划分工做,我们当起首考虑 GPU 若何划分工做,由于那可能同样合用于 CPU。计较灭色器通过两类体例节制工做的划分。起首是安排大小,指的是录制号令流时传输至 API 挪用的大小。描述了运转的工做组的数量和维度。第二个是当地工做组的数量和维度,该工做组被软编码为灭色器。当地工做组的每个项目可视做一个工做线程,若是利用了共享内存,每个线程可取工做组外的其他线程共享消息。

打赏

本文链接:https://www.zhaodll.cn/postd1970.html

CPU  
<< 上一篇 下一篇 >>

Copyright www.zhaodll.cn Rights Reserved. 沪ICP备15055056号-1 沪公网安备 31011602001667号