c++ - openmp 构造,memcpy 在 for 循环中导致错误的输出值
问题描述
我正在尝试将输入缓冲区值复制到多个输出缓冲区中。为此,我在 for 循环中使用了 memcpy(..)。为了获得更好的性能,我在 for 循环之外使用了 openmp 构造。我获得了一些性能改进,但它导致错误的输出缓冲区值。
在我的项目中,我尝试使用 memcpy 将输入图像的一些通道复制到输出缓冲区中。而且我在循环之外使用了openmp构造。我得到不正确的输出值。
// sudo code to copy required channels from ipBuffer.
/* ipBuffer - input buffer
* opBuffer[] - Array of output bufferc
* opChnls[] - How many channels does each ouput buffer needed from input.
*/
#pragma omp parallel for
for (int i = 0; i < bs; i++) {
for (int j = 0; j < numOutBufs; j++) {
long int opElemPerBatch = opChnls[j] * inputH * inputW;
std::memcpy(opBuffers[j] + opMemOffsets[j], ipBuffer + ipMemOffset, sizeof(float) * opElemPerBatch);
ipMemOffset += (opElemPerBatch);
opMemOffsets[j] += opElemPerBatch;
}
}
我主要关心的是性能需要以相同的精度进行改进。我是openmp的新手。任何人都可以帮助详细了解在 for 循环中使用 memcpy 的 openmp 构造吗?
谢谢
解决方案
推荐阅读
- firebase-security - 在 Firestore 规则中嵌套权限的正确方法
- python - scipy.interpolate.Rbf 的意外结果
- sql - CTE 获取根名称
- python-3.x - 使用 Python 3.x 和 SpaCy 从文本中编辑名称的问题
- python - 使用python将一组重复的列转换为一列
- flutter - 在 Flutter 中实现折叠工具栏
- javascript - Gatsby 错误 [HPM] 尝试将请求 / 从 localhost:8000 代理到 http://localhost:4000 时发生错误(ECONNREFUSED)
- css - 在 Squarespace 上更改一页的背景
- c# - C# Selenium javascript 删除元素不起作用
- react-native - 如何从嵌套的 toptabnavigator 导航到父 StackNavigator?