2017-01-13 2 views
1

J'essaie d'effectuer une évaluation de cv :: remap() sur mon ordinateur par rapport à cpu. Pour ce faire, j'essayais de faire la moyenne du temps sur les appels max_count.Appels de fonction de synchronisation OpenCV 3.X utilisant UMAT

for(int count = 0; count < max_count; count++) 
{ 
auto t0 = std::chrono::high_resolution_clock::now(); 
     cv::remap(cv_im_gpu, cv_im_gpu_remap, map1_gpu, map2_gpu, CV_INTER_LINEAR); 
auto t1 = std::chrono::high_resolution_clock::now(); 
time += t1 - t0; 
} 
average_time = time/max_count; 

Ce que j'observé est que la première itération a pris environ 100ms (1024x768 image d'entrée de pixel) et itérations supsequent a pris 0ms. Dois-je effectuer une synchronisation ou quelle est la raison de ce comportement? Appeler la même fonction avec cv :: Mat au lieu de cv :: UMat fonctionne comme prévu et chaque itération contribue à peu près au même laps de temps. J'utilise le code sur une plate-forme Windows 7 avec une carte graphique ATI 360m en utilisant OpenCV 3.1.0.

Merci.

+0

Je pense que la première fois, le code OpenCL doit être compilé c'est pourquoi vous l'observez. Les autres appels de 'cv :: remap' avec' UMat' n'ont pas besoin de compiler le code RemCl OpenCL comme il devrait l'être. – Catree

+0

Merci pour votre réponse Catree. Je sais que la compilation prend un certain temps lorsque la fonction est lancée pour la première fois. Ce que je ne comprends pas, c'est pourquoi les itérations suivantes n'apportent rien à la variable de temps? – Martin1988a

+0

Je suppose que le noyau binaire est sauvegardé quelque part afin d'éviter de compiler à chaque fois. Plus d'informations: [Compilation en ligne/hors ligne] (https://www.fixstars.com/fr/opencl/book/OpenCLProgrammingBook/online-offline-compilation/). – Catree

Répondre

0

J'ai corrigé ceci en ajoutant un clWaitForEvents (...) dans le code OpenCV. Je vous remercie.