Smorodov 579 Жалоба Опубликовано December 29, 2016 Нашел интересный способ параллелить попиксельную операцию (здесь тип элемента CV64FC1, при желании легко меняется на другой): // -------------------------------------------------------- // this class is for OpenCV ParallelLoopBody // -------------------------------------------------------- class Parallel_pixel_opencv : public ParallelLoopBody { private: double *p; public: Parallel_pixel_opencv(double* ptr) : p(ptr) {} virtual void operator()(const Range &r) const { for (register int i = r.start; i != r.end; ++i) { p[i] = -(double)tanh(p[i]*0.5); // Собственно сама операция } } }; // -------------------------------------------------------- // Поэлементно берем гиперболический тангенс // -------------------------------------------------------- Mat TanH(const Mat& src) { Mat tmp = src.clone(); int nElements = src.cols*src.rows; double* p3 = (double*)tmp.data; parallel_for_(Range(0, nElements), Parallel_pixel_opencv(p3)); return tmp; } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано December 31, 2016 Я может не уловил фишки, но в чем крутость этого сампла?:-) Вроде бы стандартный способ распараллелить алгоритм на OpenCV, не? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 31, 2016 Обычно я чистый openMP юзал напрямую, да и доках вроде не встречал (сейчас нашел в utilites.h здесь), вот и решил запостить может кто еще проглядел . Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано January 2, 2017 On 12/31/2016 at 6:47 PM, Smorodov said: Обычно я чистый openMP юзал напрямую, да и доках вроде не встречал (сейчас нашел в utilites.h здесь), вот и решил запостить может кто еще проглядел . OpenCV'шный parallel_for, кстати, умеет прям поверх тредов работать, без всяких openmp/tbb 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах