16 #ifndef __IPSDKIMAGEPROCESSING_CUDAALGORITHMSRCMACROS_H__ 17 #define __IPSDKIMAGEPROCESSING_CUDAALGORITHMSRCMACROS_H__ 31 #define IPSDKCUDA_CHECK_IMAGE_ON_GPU(image) \ 32 if (!image->getImagePtr()->isGpuImage())\ 33 return RetrievalResult(eRetrievalResultType::eRRT_Failed, image->getImagePtr()->getName() + " is not a GPU image"); 37 #define IPSDKCUDA_APPLY_CHECK_IMAGES_ON_GPU(r, data, IMAGE) IPSDKCUDA_CHECK_IMAGE_ON_GPU(IMAGE) 42 #define IPSDKGPU_CHECK_IMAGES_ON_GPU(IMAGES) BOOST_PP_SEQ_FOR_EACH(IPSDKCUDA_APPLY_CHECK_IMAGES_ON_GPU, _, IMAGES) 52 #define IPSDKCUDA_TRY_TO_LAUNCH_PROCESS_ON_GPU() \ 53 RetrievalResult res = tryToLaunchGpuProcess(priority, pProvider); \ 54 if (res.getResult() != eRetrievalResultType::eRRT_NoMore) \ 56 // IPSDKBASEPROCESSING_LOG_WARN([eIPSDKBaseProcessingMessage::eErrorCouldNotLaunchGpuProcess] % getClassName()) 60 #define IPSDKCUDA_CHECK_PROCESS_CAN_BE_LAUNCHED_ON_GPU() \ 61 ipBool bGpuCalculation = ipsdk::core::isGpuSupportActivated(); \ 62 if (bGpuCalculation) { \ 63 const std::vector<std::string>& vAttributeNames = getAttributeNameColl(); \ 64 for (const std::string& attributeName : vAttributeNames) { \ 65 const BaseAttribute& curAttribute = getAttribute(attributeName); \ 66 if (curAttribute.isInit() && curAttribute.getAttributeType() == eAttributeType::eAT_ImageProcessing) { \ 67 const BaseImageAttribute* pImageAttribute = static_cast<const ipsdk::imaproc::BaseImageAttribute*>(&curAttribute); \ 68 if (pImageAttribute->getImageProcessingAttributeType() == eImageProcessingAttributeType::eIPAT_Image) { \ 69 const ipsdk::image::BaseImage& gpuImage = static_cast<const ipsdk::image::BaseImage&>(pImageAttribute->getImage()); \ 70 bGpuCalculation = bGpuCalculation && gpuImage.isGpuImage(); \ 88 #define IPSDKCUDA_START_IMPLEMENT_LAUNCH_GPU_PROCESS(AlgoName) \ 89 IPSDKCUDA_CHECK_PROCESS_CAN_BE_LAUNCHED_ON_GPU() \ 90 if (bGpuCalculation) { \ 91 typedef StaticProcessorDispatcher<AlgoName> ProcessorDispatcher; \ 92 boost::shared_ptr<ProcessorDispatcher> pProcessorDispatcher(boost::make_shared<ProcessorDispatcher>()); 102 #define IPSDKCUDA_END_IMPLEMENT_LAUNCH_GPU_PROCESS() \ 103 if (bInitRes.getResult() == true) { \ 104 pProvider = pProcessorDispatcher; \ 105 return RetrievalResult(eRetrievalResultType::eRRT_Successful); \ 108 return RetrievalResult(eRetrievalResultType::eRRT_Failed, bInitRes.getMsg()); \ 110 return RetrievalResult(eRetrievalResultType::eRRT_NoMore); 116 #define IPSDKCUDA_APPLY_CHECK_IMAGES_ON_GPU(r, data, IMAGE) IPSDKCUDA_CHECK_IMAGE_ON_GPU(IMAGE) 121 #define IPSDKCUDA_CHECK_IMAGES_ON_GPU(IMAGES) BOOST_PP_SEQ_FOR_EACH(IPSDKCUDA_APPLY_CHECK_IMAGES_ON_GPU, _, IMAGES) 127 #endif // __IPSDKIMAGEPROCESSING_CUDAALGORITHMSRCMACROS_H__ Source part of macros set for image processing algorithm class implementation.