Здравствуйте! Подскажите пожалуйста почему при подключении openmp не удается уменьшить время работы программы.
Плата imx8 с Cortex A53
Содержимое файла main.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
#include <vector>
#include <math.h>
#include <time.h>
#include <omp.h>
#define CHANNELS 4
using namespace std;
using namespace cv;
int main()
{
cout << "Start programm" << endl;
vector<Mat> matrix_1(CHANNELS);
vector<Mat> matrix_2(CHANNELS);
vector<Mat> result(CHANNELS);
Mat rnd_image = Mat(2048, 2048, CV_32FC1, Scalar(0));
// matrix initialization
clock_t start, end;
double cpu_time_used;
for (int i = 0; i < CHANNELS; i++) {
randn(rnd_image, Scalar(0), Scalar(16000));
rnd_image.copyTo(matrix_1[i]);
randn(rnd_image, Scalar(0), Scalar(16000));
rnd_image.copyTo(matrix_2[i]);
}
start = clock();
for (int i = 0; i < CHANNELS; i++) {
multiply(matrix_1[i], matrix_2[i], result[i]);
}
end = clock();
cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
cout << "Time taken by for_loop: " << cpu_time_used << " seconds " << endl;
start = clock();
#pragma omp parallel num_threads(2)
for (int i = 0; i < CHANNELS; i++) {
multiply(matrix_1[i], matrix_2[i], result[i]);
}
end = clock();
cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
cout << "Time taken by for_loop with openmp: " << cpu_time_used << " seconds " << endl;
return 0;
}
Команда для компиляции (флаг -fopenmp добавлен)
g++ main.cpp -fopenmp -I /usr/include/opencv2 -L /usr/lib -lopencv_core
Прописал переменную
root@imx8m-var-dart:~/test# printenv OMP_NUM_THREADS
2
root@imx8m-var-dart:~/test#
Компилирую и запускаю программу
root@imx8m-var-dart:~/test# ./a.out
Start programm
Time taken by for_loop: 0.930273 seconds
Time taken by for_loop with openmp: 1.83559 seconds
root@imx8m-var-dart:~/test#
По идее время на выполнение должно быть в два раза меньше... Что делаю не так?