isAlreadyMatched is now atomic

omp-walther
StefanoPetrilli 2 years ago
parent cdf92ea2b2
commit abf258e2e8

@ -1,8 +1,6 @@
#include "MatchBoxPC.h" #include "MatchBoxPC.h"
// TODO comment // TODO comment
// TODO use task
// TODO destroy the locks
void clean(MilanLongInt NLVer, void clean(MilanLongInt NLVer,
MilanInt myRank, MilanInt myRank,

@ -1,6 +1,5 @@
#include "MatchBoxPC.h" #include "MatchBoxPC.h"
//TODO can be optimized!!
/** /**
* //TODO documentation * //TODO documentation
* @param k * @param k
@ -13,14 +12,14 @@
* @return * @return
*/ */
bool isAlreadyMatched(MilanLongInt node, bool isAlreadyMatched(MilanLongInt node,
MilanLongInt StartIndex, MilanLongInt StartIndex,
MilanLongInt EndIndex, MilanLongInt EndIndex,
vector <MilanLongInt> &GMate, vector<MilanLongInt> &GMate,
MilanLongInt* Mate, MilanLongInt *Mate,
map <MilanLongInt, MilanLongInt> &Ghost2LocalMap map<MilanLongInt, MilanLongInt> &Ghost2LocalMap)
) { {
bool result = false; /*
#pragma omp critical(Mate) #pragma omp critical(Mate)
{ {
if ((node < StartIndex) || (node > EndIndex)) { //Is it a ghost vertex? if ((node < StartIndex) || (node > EndIndex)) { //Is it a ghost vertex?
@ -30,6 +29,18 @@ bool isAlreadyMatched(MilanLongInt node,
} }
} }
*/
MilanLongInt val;
if ((node < StartIndex) || (node > EndIndex)) // if ghost vertex
{
#pragma omp atomic read
val = GMate[Ghost2LocalMap[node]];
return val >= 0; // Already matched
}
// If not ghost vertex
#pragma omp atomic read
val = Mate[node - StartIndex];
return result; return val >= 0; // Already matched
} }
Loading…
Cancel
Save