Commit a0e58901c398cf4db491af62fff8be77ee7af08a
1 parent
31a1e592
去掉CMultiSourceProcess的多GPU参数,多GPU由上一层来设置更为方便简单;去掉多余成员变量;优化代码
Showing
3 changed files
with
24 additions
and
75 deletions
FFNvDecoder/FFNvDecoderManager.cpp
@@ -177,6 +177,7 @@ int FFNvDecoderManager::count() | @@ -177,6 +177,7 @@ int FFNvDecoderManager::count() | ||
177 | { | 177 | { |
178 | closeAllFinishedDecoder(); | 178 | closeAllFinishedDecoder(); |
179 | 179 | ||
180 | + std::lock_guard<std::mutex> l(m_mutex); | ||
180 | return decoderMap.size(); | 181 | return decoderMap.size(); |
181 | } | 182 | } |
182 | 183 |
tsl_aiplatform/ai_platform/MultiSourceProcess.cpp
@@ -93,6 +93,7 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam) { | @@ -93,6 +93,7 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam) { | ||
93 | 93 | ||
94 | m_bfinish = false; | 94 | m_bfinish = false; |
95 | 95 | ||
96 | + // 设置gpuid | ||
96 | gpu_id_ = to_string(vptParam.gpuid); | 97 | gpu_id_ = to_string(vptParam.gpuid); |
97 | 98 | ||
98 | int ret = SUCCESS; | 99 | int ret = SUCCESS; |
@@ -113,12 +114,6 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam) { | @@ -113,12 +114,6 @@ int CMultiSourceProcess::InitAlgorthim(tsl_aiplatform_param vptParam) { | ||
113 | { | 114 | { |
114 | /*初始化全局参数*/ | 115 | /*初始化全局参数*/ |
115 | 116 | ||
116 | - mModeSnapshotVideo = "cpu"; | ||
117 | - mModeSnapshotLittle = "cpu"; | ||
118 | - | ||
119 | - taskFinishCallbackFunc = nullptr; | ||
120 | - taskObjInfoCallbackFunc = nullptr; | ||
121 | - | ||
122 | set_default_logger(LogLevel(vptParam.log_level), "multi_source_video_process", vptParam.log_path, vptParam.log_mem, | 117 | set_default_logger(LogLevel(vptParam.log_level), "multi_source_video_process", vptParam.log_path, vptParam.log_mem, |
123 | vptParam.log_mem); | 118 | vptParam.log_mem); |
124 | 119 | ||
@@ -327,35 +322,19 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){ | @@ -327,35 +322,19 @@ bool CMultiSourceProcess::AddTask(task_param _cur_task_param){ | ||
327 | #endif | 322 | #endif |
328 | 323 | ||
329 | // 启动算法处理线程 | 324 | // 启动算法处理线程 |
330 | - startProcessByGpuid(gpu_id_); | 325 | + startProcessByGpuid(); |
331 | } | 326 | } |
332 | 327 | ||
333 | // 启动算法处理线程 | 328 | // 启动算法处理线程 |
334 | -void CMultiSourceProcess::startProcessByGpuid(const string gpuid){ | ||
335 | - | ||
336 | - struct ThreadArg{ | ||
337 | - const string gpu_id; | ||
338 | - void* opaque; | ||
339 | - }; | ||
340 | - | ||
341 | - ThreadArg thread_arg = {gpuid, this}; | ||
342 | - | ||
343 | - pthread_t* processThread = gpuProcessthreadMap[gpuid]; | ||
344 | - if(processThread == nullptr){ | ||
345 | - pthread_t* pTread = new pthread_t; | ||
346 | - pthread_create(pTread,0, | ||
347 | - [](void* arg) | ||
348 | - { | ||
349 | - ThreadArg* ptr=(ThreadArg*)arg; | ||
350 | - if(ptr != nullptr){ | ||
351 | - CMultiSourceProcess* process = (CMultiSourceProcess*)ptr->opaque ; | ||
352 | - process->algorthim_process_thread(ptr->gpu_id); | ||
353 | - } | ||
354 | - return (void*)0; | ||
355 | - } | ||
356 | - ,&thread_arg); | ||
357 | - gpuProcessthreadMap[gpuid] = pTread; | ||
358 | - } | 329 | +void CMultiSourceProcess::startProcessByGpuid(){ |
330 | + pthread_create(&m_gpuProcessthread,0, | ||
331 | + [](void* arg) | ||
332 | + { | ||
333 | + CMultiSourceProcess* process = (CMultiSourceProcess*)arg ; | ||
334 | + process->algorthim_process_thread(); | ||
335 | + return (void*)0; | ||
336 | + } | ||
337 | + ,this); | ||
359 | } | 338 | } |
360 | 339 | ||
361 | void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame * gpuFrame){ | 340 | void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame * gpuFrame){ |
@@ -378,7 +357,7 @@ void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame | @@ -378,7 +357,7 @@ void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame | ||
378 | } | 357 | } |
379 | // TODO 本循环需要一个可以手动终止的开关 | 358 | // TODO 本循环需要一个可以手动终止的开关 |
380 | m_QueueMtx.lock(); | 359 | m_QueueMtx.lock(); |
381 | - if(m_RgbDataList.size() >= (20 * gpuProcessthreadMap.size() + 20)){ | 360 | + if(m_RgbDataList.size() >= 40){ |
382 | m_QueueMtx.unlock(); | 361 | m_QueueMtx.unlock(); |
383 | std::this_thread::sleep_for(std::chrono::milliseconds(1)); | 362 | std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
384 | continue; | 363 | continue; |
@@ -390,6 +369,7 @@ void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame | @@ -390,6 +369,7 @@ void CMultiSourceProcess::post_decode_thread(task_param _cur_task_param, AVFrame | ||
390 | } | 369 | } |
391 | } | 370 | } |
392 | 371 | ||
372 | +// 解码线程退出的最后回调的实际任务函数 | ||
393 | void CMultiSourceProcess::decode_finished_thread(task_param t_param){ | 373 | void CMultiSourceProcess::decode_finished_thread(task_param t_param){ |
394 | // 任务结束,关闭跟踪 | 374 | // 任务结束,关闭跟踪 |
395 | if (!FinishTaskTracker(VPT_Handle_, t_param.task_id)) | 375 | if (!FinishTaskTracker(VPT_Handle_, t_param.task_id)) |
@@ -436,7 +416,7 @@ void CMultiSourceProcess::cuda_free_wrap(sy_img &img) { | @@ -436,7 +416,7 @@ void CMultiSourceProcess::cuda_free_wrap(sy_img &img) { | ||
436 | } | 416 | } |
437 | 417 | ||
438 | // 算法处理函数,由算法线程调用 | 418 | // 算法处理函数,由算法线程调用 |
439 | -void CMultiSourceProcess::algorthim_process_thread(const string gpuid){ | 419 | +void CMultiSourceProcess::algorthim_process_thread(){ |
440 | 420 | ||
441 | map<string, int> task_id_to_n_frame; | 421 | map<string, int> task_id_to_n_frame; |
442 | while(true){ | 422 | while(true){ |
@@ -454,16 +434,12 @@ void CMultiSourceProcess::algorthim_process_thread(const string gpuid){ | @@ -454,16 +434,12 @@ void CMultiSourceProcess::algorthim_process_thread(const string gpuid){ | ||
454 | m_QueueMtx.lock(); | 434 | m_QueueMtx.lock(); |
455 | 435 | ||
456 | vector<GpuRgbMemory*> vec_gpuMem; | 436 | vector<GpuRgbMemory*> vec_gpuMem; |
457 | - for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ){ | 437 | + for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ++ iter){ |
458 | GpuRgbMemory* gpuMem = *iter; | 438 | GpuRgbMemory* gpuMem = *iter; |
459 | - if(gpuMem->getGpuId() == gpuid){ | ||
460 | - vec_gpuMem.push_back(gpuMem); | ||
461 | - iter = m_RgbDataList.erase(iter); | ||
462 | - if(vec_gpuMem.size() >= 20){ | ||
463 | - break; | ||
464 | - } | ||
465 | - } else { | ||
466 | - ++ iter; | 439 | + vec_gpuMem.push_back(gpuMem); |
440 | + iter = m_RgbDataList.erase(iter); | ||
441 | + if(vec_gpuMem.size() >= 20){ | ||
442 | + break; | ||
467 | } | 443 | } |
468 | } | 444 | } |
469 | 445 | ||
@@ -1171,7 +1147,6 @@ int CMultiSourceProcess::GetTaskStatus(const string taskID) { | @@ -1171,7 +1147,6 @@ int CMultiSourceProcess::GetTaskStatus(const string taskID) { | ||
1171 | 1147 | ||
1172 | if (!taskids.empty()) { | 1148 | if (!taskids.empty()) { |
1173 | auto json_str = helpers::gen_json::gen_task_status_json(taskids, statues); | 1149 | auto json_str = helpers::gen_json::gen_task_status_json(taskids, statues); |
1174 | - // mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str()); | ||
1175 | mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str(),true); | 1150 | mq_manager_->publish(mq_type_t::GET_TASK_MQ, json_str.c_str(),true); |
1176 | } | 1151 | } |
1177 | 1152 | ||
@@ -1226,13 +1201,7 @@ void CMultiSourceProcess::CloseAllTask(){ | @@ -1226,13 +1201,7 @@ void CMultiSourceProcess::CloseAllTask(){ | ||
1226 | FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); | 1201 | FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); |
1227 | pDecManager->closeAllDecoder(); | 1202 | pDecManager->closeAllDecoder(); |
1228 | 1203 | ||
1229 | - for (auto it = gpuProcessthreadMap.begin(); it != gpuProcessthreadMap.end(); it++){ | ||
1230 | - if(it->second != 0){ | ||
1231 | - pthread_join(*(it->second),0); | ||
1232 | - delete it->second; | ||
1233 | - } | ||
1234 | - } | ||
1235 | - gpuProcessthreadMap.clear(); | 1204 | + pthread_join(m_gpuProcessthread,0); |
1236 | 1205 | ||
1237 | m_QueueMtx.lock(); | 1206 | m_QueueMtx.lock(); |
1238 | for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ){ | 1207 | for (auto iter = m_RgbDataList.begin(); iter!=m_RgbDataList.end(); ){ |
tsl_aiplatform/ai_platform/MultiSourceProcess.h
@@ -155,7 +155,7 @@ public: | @@ -155,7 +155,7 @@ public: | ||
155 | 155 | ||
156 | public: | 156 | public: |
157 | // 生成线程的内部接口,外部勿调用 | 157 | // 生成线程的内部接口,外部勿调用 |
158 | - void algorthim_process_thread(const string gpuid); // 算法处理线程 | 158 | + void algorthim_process_thread(); // 算法处理线程 |
159 | void post_decode_thread(task_param _cur_task_param, AVFrame * gpuFrame); // 解码数据处理函数,在解码线程中执行 | 159 | void post_decode_thread(task_param _cur_task_param, AVFrame * gpuFrame); // 解码数据处理函数,在解码线程中执行 |
160 | void decode_finished_thread(task_param _cur_task_param); // 解码线程结束后处理函数,在解码线程中执行 | 160 | void decode_finished_thread(task_param _cur_task_param); // 解码线程结束后处理函数,在解码线程中执行 |
161 | 161 | ||
@@ -164,7 +164,7 @@ public: | @@ -164,7 +164,7 @@ public: | ||
164 | #endif | 164 | #endif |
165 | 165 | ||
166 | private: | 166 | private: |
167 | - void startProcessByGpuid(const string gpuid); | 167 | + void startProcessByGpuid(); |
168 | bool task_has_vpt_algor(const std::string &task_id); | 168 | bool task_has_vpt_algor(const std::string &task_id); |
169 | bool task_has_face_algor(const std::string &task_id); | 169 | bool task_has_face_algor(const std::string &task_id); |
170 | void cuda_free_wrap(sy_img &img); | 170 | void cuda_free_wrap(sy_img &img); |
@@ -202,7 +202,7 @@ private: | @@ -202,7 +202,7 @@ private: | ||
202 | int everyframe_process(vector<string> &task_in_play_id, sy_img *images, vector<onelevel_det_result> &ol_det_result); | 202 | int everyframe_process(vector<string> &task_in_play_id, sy_img *images, vector<onelevel_det_result> &ol_det_result); |
203 | 203 | ||
204 | private: | 204 | private: |
205 | - map<string, pthread_t*> gpuProcessthreadMap; // 本想做个多GPU的,但是原版的多GPU设置由上层来做,而且似乎可以更好 | 205 | + pthread_t m_gpuProcessthread; |
206 | list<GpuRgbMemory*> m_RgbDataList; | 206 | list<GpuRgbMemory*> m_RgbDataList; |
207 | std::mutex m_QueueMtx; | 207 | std::mutex m_QueueMtx; |
208 | bool m_bfinish; | 208 | bool m_bfinish; |
@@ -215,27 +215,6 @@ private: | @@ -215,27 +215,6 @@ private: | ||
215 | int licence_status_; | 215 | int licence_status_; |
216 | string gpu_id_; | 216 | string gpu_id_; |
217 | 217 | ||
218 | - | ||
219 | - // vector<onelevel_det_result> VPTResult; | ||
220 | - std::atomic<bool> ProcessFlag; | ||
221 | - bool SourceFlag; | ||
222 | - unsigned char *imgDataDevice; | ||
223 | - void *FrameTemp; | ||
224 | - char *mModeSnapshotVideo; | ||
225 | - char *mModeSnapshotLittle; | ||
226 | - string viewTaskID; | ||
227 | - | ||
228 | - map<int, set<int>> objDelete; | ||
229 | - | ||
230 | - FINISH_CALLBACK taskFinishCallbackFunc; | ||
231 | - OBJECT_INFO_CALLBACK taskObjInfoCallbackFunc; | ||
232 | - | ||
233 | - bool beginSaveSnapshot; | ||
234 | - boost::thread_group saveSnapshotsThreadGroup; | ||
235 | - std::mutex taskMutex; | ||
236 | - std::condition_variable taskCondVar; | ||
237 | - bool AttributionAnalysis; // 用于控制,每帧分析只进行一个二次属性分析 | ||
238 | - | ||
239 | snapshot_reprocessing *m_snapshot_reprocessing{nullptr}; | 218 | snapshot_reprocessing *m_snapshot_reprocessing{nullptr}; |
240 | task_param_manager *m_task_param_manager{nullptr}; | 219 | task_param_manager *m_task_param_manager{nullptr}; |
241 | 220 |