【问题标题】:Can I encode and decode a JSON on the GPU using MetalKit?我可以使用 MetalKit 在 GPU 上对 JSON 进行编码和解码吗?
【发布时间】:2018-11-10 20:49:06
【问题描述】:

我的数据库是一个巨大的 JSON,以至于解码和编码花费的时间太长,我的用户体验受到了损害。

我不断将我的数据库与通过 BLE 通信的设备同步,并且数据库随着时间的推移变得越来越大。

我过去使用 MetalKit 来加速图像过滤,但我不是专业的金属程序员,也没有工具来确定我是否可以使用金属来实现对 JSON 的解码/编码。

【问题讨论】:

  • “到了解码和编码时间太长,我的用户体验受到损害的地步。”听起来很适合作为后台线程,不是吗?
  • 它在后台线程上,但有时用户需要在进行一些更改后等待获取更新的数据库。使用缓存有帮助,但我宁愿拥有完整的数据库集成

标签: ios json swift macos metalkit


【解决方案1】:

可以通过 GPU 改进的任务是可以并行化的任务。由于 GPU 的内核比 CPU 多得多,因此可以划分为较小任务(如图像处理)的任务非常适合 GPU。 JSON的编码和解码需要大量的串行处理,在这种情况下你应该去CPU。

我看不出如何有效地并行化 JSON 的序列化和反序列化。也许如果您的 JSON 有一个包含许多小元素的数组(所有元素都具有相同的结构),那么在特定场景中使用 GPU 可能会提高性能。

【讨论】:

  • 谢谢先生,这有助于我更好地了解情况。
  • 除了需要并行化算法以便在 GPU 上运行它之外,大多数 GPU 都针对所有计算单元运行的 SIMD 计算(相同指令、多数据)进行了高度优化在同一时间执行相同的指令,但针对不同的数据。当每个计算单元运行不同的执行路径时,它们的缓存机制就不能很好地发挥作用,并且它们的速度会急剧下降。
  • 在利用 SIMD 进行 JSON 解码方面正在进行一些有趣的工作。 Mison(论文)、simdjson(C++ 实现)、simdjson-go(Golang 实现)。它主要关注 AVX2,但其想法是您使用 SIMD 指令来构建 JSON 文档中所有相关控制点的索引(磁带)以减少解析时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-14
  • 2015-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多