Я пытаюсь скопировать значения входного буфера в несколько выходных буферов. Для этого я использовал 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 в подробном порядке?
Спасибо