C ++ многопоточное управление данными

Я ищу концептуальный совет относительно управления большим количеством данных в моем проекте компьютерного зрения. У меня возникли проблемы: а) концептуализация и б) реализация концепции координации этого большого потока данных, поступающих как в виде входных данных в программу с камер, так и генерируемых кодом.

Таким образом, данные, которые я должен получить, разделены на пять отдельных «потоков», как я их назову:

Необработанные кадры (прямой ввод с камеры)
Целевые изображения (подкадры, взятые из предыдущего потока изображений)
Отметки времени (для необработанных кадров)
Данные об ориентации транспортного средства (GPS, углы корпуса и т. Д. Из беспроводного последовательного порта, подключенного к транспортному средству)
Метки времени

Общий поток, если бы мы делали это полностью последовательно, был бы:

Frame = grabInputFrame();
TargetsVector = searchForTargets(Frame);
VehicleData = getDataFromVehicle();

for each Target in TargetVector (
targetData = processData(Target, VehicleData);
updateTargetLog(targetData);
}

Итак, вот в чем дело: я пытаюсь сделать это с помощью потоков, поскольку алгоритмы сильно нагружают процессор и не связаны последовательно (я имею в виду, что мне не нужны данные о цвете для получения GPS-координат цели). НО, мне нужно согласовать изображения с целями и временными метками с этими изображениями, чтобы я мог использовать правильные данные транспортного средства для правильного изображения и т. Д.

Мой друг предложил подход с использованием реляционных БД, но я использую C ++. Что мне интересно, так это то, есть ли способ имитировать реляционные БД в C ++ (с ключами, связанными с данными, такими как отметка времени или идентификатор цели, связанный с данными или целевым изображением)? Разве подключение к базе данных SQL упростит управление? Есть ли значительное снижение производительности, связанное с этим? Наиболее важным моментом здесь является то, что, что бы я ни делал, я должен иметь возможность блокировать общие данные, чтобы я мог безопасно выполнять многопоточность.

Я надеюсь, что кто-то с некоторым опытом в таких иерархических структурах данных сможет пролить свет на мою ситуацию. Я заранее благодарю вас за ваши идеи и критику.

0

Решение

OpenMP может быть полезен для такой проблемы, есть встроенные функции для блокировок и атомарных операций. Поскольку у вас есть 5 параллельных операций, вы можете создать 5 потоков и на основе threadId выполнять различные операции.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]