Commit a0e58901c398cf4db491af62fff8be77ee7af08a

Authored by Hu Chunming
1 parent 31a1e592

去掉CMultiSourceProcess的多GPU参数,多GPU由上一层来设置更为方便简单;去掉多余成员变量;优化代码

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 &amp;img) { @@ -436,7 +416,7 @@ void CMultiSourceProcess::cuda_free_wrap(sy_img &amp;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