50 #define swap(a,b) { double c=a; a=b; b=c; }
55 void initV( HitTile_double tileV ) ;
59 int comparisonOp(
const void *a,
const void *b ) {
60 const double *da = (
const double *)a;
61 const double *db = (
const double *)b;
62 if ( *da < *db )
return -1;
63 else if ( *da == *db )
return 0;
69 int main(
int argc,
char *argv[]){
76 fprintf(stderr,
"Usage: %s <numElems>\n", argv[0] );
80 numElems = atoi( argv[1] );
82 fprintf(stderr,
"Usage: %s <numElems>\n", argv[0] );
103 HitTile_double tileV;
136 void initV( HitTile_double tileV ) {
162 double save = hit_tileElemAt1( data, lo );
166 while ( hit_tileElemAt1( data, hi ) >= pivot && ( lo < hi )) { hi--; }
169 hit_tileElemAt1( data, lo ) = hit_tileElemAt1( data, hi );
174 while ( hit_tileElemAt1( data, lo ) <= pivot && lo < hi ) { lo++; }
177 hit_tileElemAt1( data, hi ) = hit_tileElemAt1( data, lo );
181 hit_tileElemAt1( data, lo ) = save;
184 if ( save <= pivot )
return lo + 1;
192 if ( begin >= end )
return 0;
197 double pivot = hit_tileElemAt1( data, begin );
201 while ( hit_tileElemAt1( data, hi ) >= pivot && ( lo < hi )) { hi--; }
204 hit_tileElemAt1( data, lo ) = hit_tileElemAt1( data, hi );
209 while ( hit_tileElemAt1( data, lo ) <= pivot && lo < hi ) { lo++; }
212 hit_tileElemAt1( data, hi ) = hit_tileElemAt1( data, lo );
216 hit_tileElemAt1( data, lo ) = pivot;
228 HitTile_double left, right;
229 int leftCard, totalLeftCard, totalRightCard;
240 if ( hit_tileGet( *data, 1, 0 ) > hit_tileGet( *data, 1, 1 ) )
251 qsort( data->data, (
size_t)
hit_tileCard(*data),
sizeof(
double), comparisonOp );
252 #else // DIRECT IMPLEMENTATION USING Hitmap TILES
261 double pivot = hit_tileGet( *data, 1, 0 );
264 HitTile_double pivotTile;
288 HitTile_double leftCardTile;
290 HitTile_double totalLeftCardTile;
297 double weights[2] = { totalLeftCard, totalRightCard };
315 HitTile_double newLeft, newRight;
#define hit_layFullShape(lay)
#define hit_shape(nd,...)
#define hit_layShape(lay)
#define hit_tileNewType(baseType)
#define hit_clockSynchronizeAll()
#define hit_shapeStd(nd,...)
HitShape hit_shapeIntersect(HitShape sh1, HitShape sh2)
#define hit_tileElemAt(var, ndims,...)
#define hit_tileSingle(tile, var, type)
#define hit_clockContinue(c)
HitTopology hit_layGroupTopo(HitLayout lay, int groupId)
#define hit_tileAlloc(var)
#define hit_topology(name,...)
#define hit_tileCard(var)
#define hit_tileSelect(newVar, oldVar, shape)
#define hit_clockPrintMax(c)
#define hit_tileDomainShapeAlloc(newVarP, baseType, shape)
void parallelQuickSort(HitTile_double *data, HitLayout whole)
#define hit_tileDimBegin(var, dim)
#define hit_clockReset(c)
#define hit_tileTextFileWrite(var, file, coord, datatype, s1, s2)
void hit_topFree(HitTopology topo)
#define hit_layHasElem(lay, element)
void hit_comInit(int *pargc, char **pargv[])
#define hit_comDoOnce(com)
HitPattern hit_patternRedistribute(HitLayout lay, void *tileP1, void *tileP2, HitType baseType, int flagCompact)
#define hit_layImActive(lay)
HitShape hit_shapeSubset(HitShape sh1, HitShape sh2)
#define hit_tileDomain(newVarP, baseType, numDims,...)
void hit_layFree(HitLayout lay)
int main(int argc, char *argv[])
int sequentialPivoting(double pivot, HitTile_double data)
#define hit_tileSelectArrayCoords(newVar, oldVar, shape)
#define hit_comReduce(lay, root, tilePSend, tilePRecv, baseType, operation)
#define hit_lgr_elementGroup(lay, element)
int sequentialQuickSort(HitTile_double data, int begin, int end)
int hit_layNumActives(HitLayout lay)
#define hit_tileForDimDomain(tile, dim, index)
#define hit_layout(name, topo,...)
HitTopology hit_layActivesTopology(HitLayout lay)
#define hit_tileFree(var)
void initV(HitTile_double tileV)
#define hit_tileShape(var)
#define hit_clockReduce(lay, c)
#define hit_clockStart(c)
#define hit_patternDoOnce(pat)