c - 优化 C 中的 vector/矩阵运算?

标签 c math memory optimization

我正在尝试看看是否可以将 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/

相关文章:

c - 定时器比较匹配的 ISR 未运行

c++ - 什么决定了堆内存的分配位置?

c++ - 如何删除一个空的对象数组?

c - C 中的外部语法?

c - #include C 中数组语法库?

c - 获取一个很长的数字的前两位

java - 将 AtomicLong 添加到 AtomicLong 中?

c# - 如何在 C# 中以人性化的方式舍入 double ?

javascript - 查找坐标以在直线的末端绘制箭头(等腰三 Angular 形)

c - Valgrind/内存错误