c++ - 什么属于 "Data Oriented Design"?

标签 c++ c performance optimization latency

面向数据的设计最正式地介绍了这个 Sony Research documentthis document .

然而,除了显而易见的之外,我想知道编程的哪些其他方面属于“面向数据的设计”? SIMD/SSE 指令?有什么可以减少 TLB 失误的吗?还是 CPU 亲和性?

到目前为止,我对 DOD 的唯一理解是“任何减少缓存未命中的东西”。有什么不明显属于面向数据设计的吗?

最佳答案

对我来说显而易见的是,国防部是以数据为中心的设计。 在上下文中更多地查看它。我对它的明显第一印象与 OOD 相对应。 面向对象正在将您的解决方案建模为现实世界模型。这很好,因为它更容易理解。但是您的硬件不喜欢那样。 面向数据是以数据为中心的。平台如何喜欢它。

SMID,缓存行 是一些平台的细节。 但是除了缓存行之外还有更多内容。

面向数据使并发编程比 OoD 方式更容易。 OOD对人类更友好。每个人都知道现实世界。 DOD 你需要更多地了解平台,对数据进行建模以获得最佳性能。以及您对这些数据执行的转换。

DOD 是关于了解平台和了解问题领域的。与国防部一起充分利用它。

关于c++ - 什么属于 "Data Oriented Design"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14865180/

相关文章:

c++ - 能否使用 Cereal 重新创建 Protobuf 的反序列化功能之一?

C++ - 清理后 Unresolved external symbol 错误

c - {USB Composite Device Kernel Module Driver Programming}多接口(interface)管理和 "no endpoint"处理

c++ - ISO C++ 禁止在 devc++ 中比较指针和整数 [-fpermissive] 错误

在 C 中使用嵌套循环将 for() 循环转换为 do{}while

c# - 简单 List<string> 到 IEnumerable<string> 性能问题

c++ - 直接使用 Lua,如何公开现有的 C++ 类对象以在 Lua 脚本中使用?

javascript - Math.floor VS Math.trunc JavaScript

python - 内存效率 : One large dictionary or a dictionary of smaller dictionaries?

c++ - 声明和初始化全局二维数组