android opengl 矩阵 class 是否在其计算中使用了 GPU?
Does the android opengl Matrix class use the GPU in its calculations?
如果可以,最好的使用方法是什么?
如果我使用它,最好尽可能经常(在合理范围内)使用它以使 GPU 饱和,我的假设是否正确?
如果不是,有什么简单的方法可以真正快速地进行大量矩阵乘法运算?我在 Android 工作室与 Java 一起工作。
仅对一组 4×4 矩阵的操作并不能真正受益于 GPU 加速。这有四个原因:
- 将工作任务提交给 GPU 会产生一定的开销。
- 尽管 GPU 是通过高带宽互连连接的,但 GPU 的 I/O 带宽 from/to 通常仍比 CPU 内存带宽低一个数量级。
- 一组 4×4 矩阵很容易放入 L1 缓存。
- 现代 CPUs 有矢量指令,它基本上将整个 4×4 矩阵作为一个整体来处理。
If it doesn't what would be an easy way to do a lot of matrix multiplications really fast?
这实际上取决于数据的种类:您的矩阵的总体分布是什么?矩阵集之间发生了多少交换?您的矩阵访问是由聚集读取还是分散写入主导的?
在许多病态案例中,单线程 CPU 性能实际上优于 GPU。
如果可以,最好的使用方法是什么?
如果我使用它,最好尽可能经常(在合理范围内)使用它以使 GPU 饱和,我的假设是否正确?
如果不是,有什么简单的方法可以真正快速地进行大量矩阵乘法运算?我在 Android 工作室与 Java 一起工作。
仅对一组 4×4 矩阵的操作并不能真正受益于 GPU 加速。这有四个原因:
- 将工作任务提交给 GPU 会产生一定的开销。
- 尽管 GPU 是通过高带宽互连连接的,但 GPU 的 I/O 带宽 from/to 通常仍比 CPU 内存带宽低一个数量级。
- 一组 4×4 矩阵很容易放入 L1 缓存。
- 现代 CPUs 有矢量指令,它基本上将整个 4×4 矩阵作为一个整体来处理。
If it doesn't what would be an easy way to do a lot of matrix multiplications really fast?
这实际上取决于数据的种类:您的矩阵的总体分布是什么?矩阵集之间发生了多少交换?您的矩阵访问是由聚集读取还是分散写入主导的?
在许多病态案例中,单线程 CPU 性能实际上优于 GPU。