Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
 Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
Откуда: https://doc.qt.io/qt-5/qtconcurrentmap.html#concurrent-map-reduce

Инструменты: MS VS 2017 + Qt Open Source.

Всем привет.
Пытаюсь собрать простейший пример распараллеливания обработки последовательности, при сборке получаю ошибку

1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall QtConcurrent::ThreadEngineBase::ThreadEngineBase(void)" (__imp_??0ThreadEngineBase@QtConcurrent@@QAE@XZ) referenced in function "public: __thiscall QtConcurrent::IterateKernel<struct t_procElem const *,class QVector<class QVector<int> > >::IterateKernel<struct t_procElem const *,class QVector<class QVector<int> > >(struct t_procElem const *,struct t_procElem const *)" (??0?$IterateKernel@PBUt_procElem@@V?$QVector@V?$QVector@H@@@@@QtConcurrent@@QAE@PBUt_procElem@@0@Z)
...

Гугление привело к необходимости добавить в .pro файл строчку

QT += concurrent

---
Вопрос: где эта опция в свойствах проекта солюшена MS VS?
Спасибо.
23 окт 20, 04:03    [22219218]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
ъъъъъ
добавить в .pro файл строчку

QT += concurrent

---
Вопрос: где эта опция в свойствах проекта солюшена MS VS?

Нашел:

Модератор: Тема перенесена из форума "Delphi".


К сообщению приложен файл. Размер - 32Kb


Сообщение было отредактировано: 23 окт 20, 10:16
23 окт 20, 04:31    [22219222]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
Ого, я эту тему у дельфинов повесил? ...поздняя ночь.
23 окт 20, 12:25    [22219409]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Дай нам твой исходник.
23 окт 20, 14:28    [22219525]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
mayton,

там такой "пример", без бутылки никак... если интересно, могу рассказать теорию (применительно к Qt) с упрощенным придуманным примером...
23 окт 20, 15:04    [22219561]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
mayton
Member

Откуда: loopback
Сообщений: 49763
Нет нет. Ничего эпистолярного не надо.

Только исходник. Или можно макет который просто создает эту-же ошибку.

Сообщение было отредактировано: 23 окт 20, 15:16
23 окт 20, 15:21    [22219577]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
mayton,

+ Исходник

#include <QtCore/QCoreApplication>
#include <QtConcurrent/QtConcurrent>

auto const c_arrDim = 3;

using t_my_array = QVector<QVector <int>>; 

struct t_proc_elem
{
	int x;
	int y;
	int val;
	int trnval;
};
using t_proc_array = QVector<t_proc_elem>;

void init_src_array(t_my_array& a_arr)
{
	QRandomGenerator rg(QRandomGenerator::securelySeeded().generate());
	a_arr.resize(c_arrDim);
	for (auto i = 0; i < c_arrDim; i++) {
		a_arr[i].resize(c_arrDim);
		for (auto j = 0; j < c_arrDim; j++)
			//a_arr[i][j] = rg.generate();
			a_arr[i][j] = i * c_arrDim + j;
	};
};


void init_trg_array(t_my_array& a_arr)
{
	a_arr.resize(c_arrDim);
	for (auto& line : a_arr)
		line.resize(c_arrDim);

};

void init_proc_array(t_proc_array& a_proc_arr, const t_my_array& a_src_arr)
{
	a_proc_arr.resize(c_arrDim * c_arrDim);
	for (auto i = 0; i < c_arrDim; i++)
		for (auto j = 0; j < c_arrDim; j++)
		{
			a_proc_arr[i*c_arrDim + j].x = i;
			a_proc_arr[i*c_arrDim + j].y = j;
			a_proc_arr[i*c_arrDim + j].val = a_src_arr[i][j];
			a_proc_arr[i*c_arrDim + j].trnval = a_src_arr[j][i];
		}
};
t_proc_elem my_map(const t_proc_elem & a_elem)
{
	t_proc_elem localVal = a_elem;
	localVal.val  += a_elem.trnval / 2;
	return  localVal;
}

void my_reduce(t_my_array& a_result_arr, const t_proc_elem & a_proc_elem		)
{
	if (a_result_arr.size() == 0)
		init_trg_array(a_result_arr);
	a_result_arr[a_proc_elem.x][a_proc_elem.y] = a_proc_elem.val;
}


int main(int argc, char *argv[])
{
	QCoreApplication a(argc, argv);

	t_my_array srcArr;
	init_src_array(srcArr);
	qDebug() << endl << "Src array:" << endl << srcArr;


	t_proc_array procArr;
	init_proc_array(procArr, srcArr);


	qDebug() << "Prcessed array:";
	for (auto & elem : procArr)
		qDebug() <<  elem.x << " " << elem.y << " " << elem.val << " " << elem.trnval;


	t_my_array trg_arr = QtConcurrent::blockingMappedReduced(procArr, my_map, my_reduce);

	qDebug() << endl << "Trg array:" << endl << trg_arr;


	return a.exec();
}



PS: "ошибка" исправлена, см. второе мое сообщение.

Сообщение было отредактировано: 23 окт 20, 15:33
23 окт 20, 15:36    [22219591]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
mayton
макет который просто создает эту-же ошибку.

Для повторения достаточно в .pro - файле проекта убрать значение concurrent из переменной QT

QT += core gui concurrent

Или, для проекта MS VS, в свойствах проекта, в разделе Qt project settings -> General -> Qt modules - также убрать concurrent. Не забыть вызвать qmake! (ребилд проекта).
23 окт 20, 16:03    [22219627]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
mayton,

>error LNK2019: unresolved external symbol
Значит h файл от либы есть. А самой либы so/dll нет.
23 окт 20, 16:19    [22219640]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
ъъъъъ
О
Гугление привело к необходимости добавить в .pro файл строчку

QT += concurrent

---
Вопрос: где эта опция в свойствах проекта солюшена MS VS?
Спасибо.


В .pro файле оно и должно быть.
Солюшны vc генерируются по нему.
8 ноя 20, 21:19    [22228451]     Ответить | Цитировать Сообщить модератору
 Re: Qt QtConcurrent: Map-Reduce  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1349
MasterZiv
Солюшны vc генерируются по нему.

С фига ли?
9 ноя 20, 09:39    [22228564]     Ответить | Цитировать Сообщить модератору
Все форумы / C++ Ответить