【发布时间】:2011-04-10 05:00:00
【问题描述】:
有没有一种快速的方法可以在 C++ 中将浮点数组的值相乘,以优化此函数(其中count 是 4 的倍数):
void multiply(float* values, float factor, int count)
{
for(int i=0; i < count; i++)
{
*value *= factor;
value++;
}
}
解决方案必须适用于 Mac OS X 和 Windows、英特尔和非英特尔。想想 SSE、矢量化、编译器(gcc 与 MSVC)。
【问题讨论】:
-
你似乎已经知道答案了。您是否陷入了某种困境,或者您只是希望其他人为您编写代码?
-
这不是 Rent-a-Coder!
-
预期数组有多大(>1、>10、>100、>1000、>10000)?您考虑在您的情况下使用多核(线程)优化吗?除了 count 是 4 的倍数之外,是否事先知道有关数组的任何约束?
-
或者可能是 OP 高估了开始使用 SSE 所需的工作!
-
问题:
float* values是否与 16 字节对齐?如果是,则可以使用对齐的加载/存储指令,它会产生很好的速度差异。 (通常一个函数应该提供两个选项,并在运行时通过测试指针的偏移量来选择)
标签: c++ arrays optimization multiplication