【发布时间】:2015-11-02 10:53:24
【问题描述】:
我正在编写一个对象识别程序。我正在使用 Metal Api。问题是我需要数组列表或动态数组,但 Metal 中没有动态数组。有没有办法声明或实现你自己的?
【问题讨论】:
-
不,Metal 对内存非常严格。它无法处理具有未定义内存量的东西。缓冲区可以用作半动态数组。如果您可以计算出 cpu 端数组的最大大小,只需创建一个该大小的缓冲区。更多关于为什么here
我正在编写一个对象识别程序。我正在使用 Metal Api。问题是我需要数组列表或动态数组,但 Metal 中没有动态数组。有没有办法声明或实现你自己的?
【问题讨论】:
没有办法在金属内核(着色器)内进行动态内存分配。我只是在 CPU 端定义更多缓冲区并将其传递给着色器(而不是在着色器内创建动态数组)。只需确保将要在着色器中用于中间计算的缓冲区的“存储模式”更改为“私有”即可。 “私有”模式意味着缓冲区仅在 GPU 上,CPU 无法访问它(并且可以减少开销)。
【讨论】: