我正在尝试看看是否可以将 C 中的数学 vector (和/或矩阵)运算作为一个项目进行优化。例如,我注意到 memcpy
比循环快得多,因为它使用低级硬件辅助内存操作,但我不太熟悉它的工作原理。
除了将两个 float 组相加或相乘(相对于仅复制)等操作之外,是否可以执行类似的操作?
最佳答案
我从你的个人资料中看到你正在处理opengl,我写了以下答案,假设你想处理线性代数。对于你的情况,别无选择;
- 循环展开
- 防止间接索引
- 定位内存缓存
- 编译器/链接器优化
您正处于一个巨大研究领域的边缘。您可以在“计算线性代数”、“矩阵存储方案”、“矩阵 vector 运算”等文献中搜索数百万篇出版物。
可能有数千个库、工具和实用程序试图优化这些计算。
然而,一组低级库 BLAS 被接受为标准密集矩阵库。许多密集和稀疏的 vec-vec、mat-vec、mat-mat 功能都建立在它的基础上。可以使用单处理器或多处理器工具。(并发和分布式)甚至支持 GPU 的解决方案也已经存在。
Jack Dongarra 是该主题的主要研究人员之一。我相信您可以通过使用上面提供给您的关键字找到很多资源。
据我所知,没有像 memcpy 这样的优化,因为它是内置功能。如果文献中存在类似的内容,那么 BLAS 中也可以找到。
BLAS 通过编译器/链接器针对特定操作系统和硬件提供了多种优化。(如循环展开、缓存等)
关于c - 优化 C 中的 vector/矩阵运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25651298/