首页 > 解决方案 > 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 构造吗?

谢谢

标签: c++copenmpmemcpy

解决方案


推荐阅读