SIMD和面向对象的编程

问题描述

一段时间以来,我一直在阅读有关SIMD的内容,并且在Insomniac Games上经历了slides

我喜欢这个主意,我当然愿意使我的代码更高效地运行,但是我不清楚在更高级的代码设计方面如何开始使用SIMD。

例如,假设我使用的语言足够低级,可以让我知道数组或类的内存布局是什么,例如C ++。

如果现在我有一个类,例如具有属性user_id或user_name的 User ,作为对我所在域进行建模的人,我知道我可以将用户放入哈希图中,或者可能分成数组,向量或集合,具体取决于需要给定用户的特定用例。

也就是说,我有一个可重用的User对象,这些对象所在的数据结构独立于User类自己的内部结构。

现在,所有SIMD指南都说,我理解为什么,我应该使用数组结构代替结构数组。

就SIMD指令而言,这是很有意义的,但是我找不到一种方法来解决这个问题,因为我不是从结构数组开始的,我可以很容易地将其转换为数组结构。相反,我从User开始。有时,就引用User对象而言,用户会位于数组中,有时位于哈希图中,有时位于其他容器中。

但这不是在线指南提到的一种情况-所有这些指南都只是说要将AOS转变为SOA,我再次明白为什么,只是这不是我的开始。

我觉得我无法跨越一个空白,因为我找不到更复杂的例子。例如,也许我应该将与用户相关的数据保存在两个地方,一个地方是用于一般临时访问的User对象,另一个地方是用于SIMD指令的SOA对象?

  • 更笼统地说,如何将一个模型将更多的面向对象设计放入SIMD?

  • 还是人们在设计整个应用程序时就考虑了SIMD,而根本不遵循此类面向对象的问题,而是选择了更多面向数据的设计?

  • 或者SIMD仅限于代码库中的选定模块,并且OOP和SIMD之间的这种转换会在需要时在运行时进行(即,实际数据既保留在User对象中,又保留在SOA中,并且有手动代码使它们保持同步)。

如果具有SIMD经验的人可以从更高层次上进一步了解它,我将不胜感激。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...