c++ - 复制“向量”数组:通过 memcpy 还是迭代每个?
问题描述
这是我的一段代码:
for (int oscIndex = 0; oscIndex < kNumOscs; oscIndex++) {
for (int voiceIndex = 0; voiceIndex < numVoices; voiceIndex += 4) {
const int v = voiceIndex / 4;
// vol
osc[oscIndex][v] = _mm_mul_ps(osc[oscIndex][v], vol[oscIndex][v]);
// prev output
mPrevOutput[oscIndex][v] = osc[oscIndex][v];
// out
osc[oscIndex][v] = _mm_mul_ps(osc[oscIndex][v], out[oscIndex][v]);
}
}
以这种方式复制值是否正确mPrevOutput
?还是一个(独特的)memcpy
会更快?
mPrevOutput
并且osc
具有相同的长度(在这种情况下,kNumOscs=4 x numVoices=16 x m128)。
我在 Windows/64 位机器上,使用FLAGS += -O3 -march=nocona -funsafe-math-optimizations
这就是它们的定义方式:
alignas(16) std::array<std::array<m128, 4>, kNumOscs> mPrevOutput; // member of a class
m128 osc[4][4]; // declared every time the function's class is executed
解决方案
没关系。m128 类型应该使用 SSE 操作,因此分配速度很快。memcpy
应该作为内在实现,所以也应该这样做。
但这一切都取决于编译器和编译选项。轮廓,检查拆卸。
推荐阅读
- python - 与 python 的活动目录集成
- reactjs - 与 React 中的共享变量混淆
- python-3.x - 一种提取、比较和匹配指纹细节的有效方法
- c# - 从错误 HTTP 调用中获取 API 响应
- r - scale(mydata) 和 scale(mydata[-1]) 有什么区别
- java - 如何在“片段”中以编程方式更改屏幕亮度
- c++ - 如何在 C++ 中初始化静态引用类成员?
- javascript - 如何将数据保存到 mongodb 中的子文档中?我正在将农场子文档转换为 null
- php - 从 html 页面将所有 mysql 数据下载到 csv 中
- javascript - 我无法访问状态数组的值