Конструкция openmp с, memcpy внутри цикла for приводит к неправильным выходным значениям - PullRequest
2 голосов
/ 02 апреля 2019

Я пытаюсь скопировать значения входного буфера в несколько выходных буферов. Для этого я использовал memcpy (..) внутри цикла for. Чтобы получить лучшую производительность, я использовал конструкцию openmp вне цикла for. Я получаю некоторое улучшение производительности, но это приводит к неправильным значениям выходного буфера.

В моем проекте я попытался использовать 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. Может ли кто-нибудь помочь в понимании конструкции openmp с memcpy в цикле for в подробном порядке?

Спасибо

...