lundi 27 juillet 2020

c++ std::thread vs OpenMP perfoamnce

Hi I have below function :

PS: feat is vector or eigen matrix.

 #pragma omp parallel for
for (int x = 0; x < count_feature; x++) {                                                                                           
        
        auto distance = ( feat.row(x)- b_cmp ).squaredNorm();
        //        std::cout << id << "    "<< distance << std::endl ;
        if (distance < 0.5) {
                std::cout << std::endl << "Buldummm : " << x <<  "    " << distance <<std::endl;
                mutex1.lock();
                found_number.push_back(x);
                mutex1.unlock();

        }
}

also I am running the same function with :

std::vector<std::thread> threadList;
    for(int i = 0; i < n_thread_num; i++)
{
    std::cout << "chunks : " << i*chunk_number << " to " <<  (i+1)*chunk_number << std::endl;    
    threadList.push_back(std::thread (FindDistance,   std::ref(feat),   std::ref(b_cmp),       i*chunk_number, (i+1)*chunk_number));
}
std::cout<<"wait for all the worker thread to finish"<<std::endl;
std::for_each(threadList.begin(),threadList.end(), std::mem_fn(&std::thread::join));

Same thread number.

but OpenMP version is : 1.14889 second ThreadPoll version: 2.61334

why there is more than X2 difference ? Is this the best way ?

Aucun commentaire:

Enregistrer un commentaire