-1
我對OpenMP和OpenCV非常陌生。我正在嘗試縮短使用OpenCV和OpenMP差異化兩張圖像的時間。但是,使用OpenMP並行循環所花費的時間比順序循環所耗費的時間多一些。謹慎地建議可以做些什麼。使用OpenMP和OpenCV減少處理時間
我的代碼是
int main()
{
omp_set_num_threads(4);
double omp_time1,omp_time2;
cv::Mat image_1= cv::imread("1.png");
cv::Mat image_2=cv::imread("2.png");
vector<cv::Mat> rgb_planes_1;
cv::split(image_1, rgb_planes_1);
vector<cv::Mat> rgb_planes_2;
cv::split(image_2, rgb_planes_2);
cv::Mat sub_rgb_0[3];
#ifdef _OPENMP
omp_time1 = omp_get_wtime();
#endif
#pragma omp parallel private(tid)
{
tid = omp_get_thread_num();
if (tid == 0)
{
nthreads = omp_get_num_threads();
printf("Number of threads = %d\n", nthreads);
}
printf("Thread %d starting...\n",tid);
#pragma omp for schedule(static)
for (i=0; i<3; i++)
{
absdiff(rgb_planes_1[i],rgb_planes_2[i],sub_rgb_0[i]);
}
}
#ifdef _OPENMP
omp_time2 = omp_get_wtime();
#endif
printf("Parallel::%f seconds.\n", omp_time2 - omptime1);
}
這需要 並行::0.006757秒。
當我在沒有OpenMP段的情況下嘗試相同時,CPU時鐘給出了 0.00200秒。
我不認爲你需要'schedule(static)'for 3 for for循環。看看避免這種情況是否會變得更快。 – 2014-09-11 12:40:59
你只運行一次你的基準測試,這是一個非常非常小的測試。時間可能由OpenMP初始化時間控制,這隻會影響第一次運行。我建議兩個實驗:嘗試10次運行測試,而不是一次,然後嘗試一個(更多)更大的圖像。 – pburka 2014-09-11 15:19:12